feat(backend): add office router and agent runtime services
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
37
backend/app/services/agent_runtime/hermes_session_manager.py
Normal file
37
backend/app/services/agent_runtime/hermes_session_manager.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import UTC, datetime
|
||||
from typing import Any
|
||||
|
||||
|
||||
@dataclass(slots=True)
|
||||
class HermesSessionHandle:
|
||||
conversation_id: str
|
||||
user_id: str
|
||||
hermes_session_id: str
|
||||
last_used_at: datetime = field(default_factory=lambda: datetime.now(UTC))
|
||||
restart_count: int = 0
|
||||
lock: asyncio.Lock = field(default_factory=asyncio.Lock)
|
||||
metadata: dict[str, Any] = field(default_factory=dict)
|
||||
|
||||
|
||||
class HermesSessionManager:
|
||||
def __init__(self) -> None:
|
||||
self._sessions: dict[str, HermesSessionHandle] = {}
|
||||
|
||||
def get_or_create(self, *, conversation_id: str, user_id: str) -> HermesSessionHandle:
|
||||
handle = self._sessions.get(conversation_id)
|
||||
if handle is None:
|
||||
handle = HermesSessionHandle(
|
||||
conversation_id=conversation_id,
|
||||
user_id=user_id,
|
||||
hermes_session_id=f"jarvis-{conversation_id}",
|
||||
)
|
||||
self._sessions[conversation_id] = handle
|
||||
handle.last_used_at = datetime.now(UTC)
|
||||
return handle
|
||||
|
||||
|
||||
hermes_session_manager = HermesSessionManager()
|
||||
Reference in New Issue
Block a user