session_manager.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. from dataclasses import dataclass, field
  2. import threading
  3. from typing import Dict, Any, Optional, List
  4. @dataclass
  5. class VentMemoryState:
  6. """In-memory state for a single ventilation-agent conversation session."""
  7. messages: List[Dict[str, Any]] = field(default_factory=list)
  8. recent_queries: List[str] = field(default_factory=list)
  9. last_summary: str = ""
  10. class SessionManager:
  11. """Thread-safe registry of per-session VentMemoryState instances."""
  12. def __init__(self) -> None:
  13. self._sessions: Dict[str, VentMemoryState] = {}
  14. self._lock = threading.Lock()
  15. def get_or_create(self, session_id: str) -> VentMemoryState:
  16. """Return existing state for *session_id*, creating a fresh one if missing."""
  17. with self._lock:
  18. if session_id not in self._sessions:
  19. self._sessions[session_id] = VentMemoryState()
  20. return self._sessions[session_id]
  21. def update(self, session_id: str, state: VentMemoryState) -> None:
  22. """Overwrite the state for a given session."""
  23. with self._lock:
  24. self._sessions[session_id] = state
  25. def remove(self, session_id: str) -> None:
  26. """Drop a session from the registry."""
  27. with self._lock:
  28. self._sessions.pop(session_id, None)
  29. session_manager = SessionManager()