memory_trace.py 831 B

1234567891011121314151617181920212223242526272829303132
  1. from __future__ import annotations
  2. import asyncio
  3. import uuid
  4. from typing import Any
  5. class MemoryTraceBackend:
  6. """进程内 (channel, user_id) → trace_id;接入 Lifecycle 后可替换为 TraceManager。"""
  7. def __init__(self) -> None:
  8. self._map: dict[tuple[str, str], str] = {}
  9. self._lock = asyncio.Lock()
  10. async def get_or_create_trace(
  11. self,
  12. *,
  13. channel: str,
  14. user_id: str,
  15. workspace_id: str,
  16. agent_type: str,
  17. metadata: dict[str, Any],
  18. ) -> str:
  19. _ = workspace_id, agent_type, metadata
  20. key = (channel, user_id)
  21. async with self._lock:
  22. if key not in self._map:
  23. self._map[key] = str(uuid.uuid4())
  24. return self._map[key]
  25. def clear(self) -> None:
  26. self._map.clear()