mirror of
https://github.com/All-Hands-AI/OpenHands.git
synced 2026-04-29 03:00:45 -04:00
38 lines
1.2 KiB
Python
38 lines
1.2 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.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()
|