| 12345678910111213141516171819202122232425262728293031323334353637 |
- import time
- from dataclasses import dataclass
- from fastapi import WebSocket
- from openhands.core.config import AppConfig
- from openhands.core.logger import openhands_logger as logger
- from openhands.events.stream import session_exists
- from openhands.server.session.conversation import Conversation
- from openhands.server.session.session import Session
- from openhands.storage.files import FileStore
- @dataclass
- class SessionManager:
- config: AppConfig
- file_store: FileStore
- def add_or_restart_session(self, sid: str, ws_conn: WebSocket) -> Session:
- return Session(
- sid=sid, file_store=self.file_store, ws=ws_conn, config=self.config
- )
- async def attach_to_conversation(self, sid: str) -> Conversation | None:
- start_time = time.time()
- if not await session_exists(sid, self.file_store):
- return None
- c = Conversation(sid, file_store=self.file_store, config=self.config)
- await c.connect()
- end_time = time.time()
- logger.info(
- f'Conversation {c.sid} connected in {end_time - start_time} seconds'
- )
- return c
- async def detach_from_conversation(self, conversation: Conversation):
- await conversation.disconnect()
|