Files
OpenHands/openhands/server/session/manager.py
2024-11-19 13:46:03 -05:00

43 lines
1.4 KiB
Python

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.runtime.base import RuntimeUnavailableError
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)
try:
await c.connect()
except RuntimeUnavailableError as e:
logger.error(f'Error connecting to conversation {c.sid}: {e}')
return None
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()