manager.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import time
  2. from dataclasses import dataclass
  3. from fastapi import WebSocket
  4. from openhands.core.config import AppConfig
  5. from openhands.core.logger import openhands_logger as logger
  6. from openhands.events.stream import session_exists
  7. from openhands.server.session.conversation import Conversation
  8. from openhands.server.session.session import Session
  9. from openhands.storage.files import FileStore
  10. @dataclass
  11. class SessionManager:
  12. config: AppConfig
  13. file_store: FileStore
  14. def add_or_restart_session(self, sid: str, ws_conn: WebSocket) -> Session:
  15. return Session(
  16. sid=sid, file_store=self.file_store, ws=ws_conn, config=self.config
  17. )
  18. async def attach_to_conversation(self, sid: str) -> Conversation | None:
  19. start_time = time.time()
  20. if not await session_exists(sid, self.file_store):
  21. return None
  22. c = Conversation(sid, file_store=self.file_store, config=self.config)
  23. await c.connect()
  24. end_time = time.time()
  25. logger.info(
  26. f'Conversation {c.sid} connected in {end_time - start_time} seconds'
  27. )
  28. return c
  29. async def detach_from_conversation(self, conversation: Conversation):
  30. await conversation.disconnect()