feat(task-5): scope matrix context state per room
This commit is contained in:
parent
03160a3b37
commit
c11c8ecfbf
7 changed files with 189 additions and 72 deletions
|
|
@ -32,8 +32,8 @@ class PrototypeStateStore:
|
|||
self._users: dict[str, User] = {}
|
||||
self._settings: dict[str, dict[str, Any]] = {}
|
||||
self._saved_sessions: dict[str, list[dict[str, str]]] = {}
|
||||
self._last_tokens_used: dict[str, int] = {}
|
||||
self._current_session: dict[str, str] = {}
|
||||
self._context_last_tokens_used: dict[str, int] = {}
|
||||
self._context_current_session: dict[str, str] = {}
|
||||
|
||||
async def get_or_create_user(
|
||||
self,
|
||||
|
|
@ -82,24 +82,48 @@ class PrototypeStateStore:
|
|||
safety = settings.setdefault("safety", DEFAULT_SAFETY.copy())
|
||||
safety[action.payload["trigger"]] = action.payload.get("enabled", True)
|
||||
|
||||
async def add_saved_session(self, user_id: str, name: str) -> None:
|
||||
async def add_saved_session(
|
||||
self,
|
||||
user_id: str,
|
||||
name: str,
|
||||
*,
|
||||
source_context_id: str | None = None,
|
||||
) -> None:
|
||||
sessions = self._saved_sessions.setdefault(user_id, [])
|
||||
sessions.append({"name": name, "created_at": datetime.now(UTC).isoformat()})
|
||||
session = {"name": name, "created_at": datetime.now(UTC).isoformat()}
|
||||
if source_context_id is not None:
|
||||
session["source_context_id"] = source_context_id
|
||||
sessions.append(session)
|
||||
|
||||
async def list_saved_sessions(self, user_id: str) -> list[dict[str, str]]:
|
||||
return list(self._saved_sessions.get(user_id, []))
|
||||
return [dict(session) for session in self._saved_sessions.get(user_id, [])]
|
||||
|
||||
async def get_last_tokens_used(self, user_id: str) -> int:
|
||||
return self._last_tokens_used.get(user_id, 0)
|
||||
async def get_last_tokens_used_for_context(self, context_id: str) -> int:
|
||||
return self._context_last_tokens_used.get(context_id, 0)
|
||||
|
||||
async def set_last_tokens_used(self, user_id: str, tokens: int) -> None:
|
||||
self._last_tokens_used[user_id] = tokens
|
||||
async def set_last_tokens_used_for_context(self, context_id: str, tokens: int) -> None:
|
||||
self._context_last_tokens_used[context_id] = tokens
|
||||
|
||||
async def get_current_session(self, user_id: str) -> str | None:
|
||||
return self._current_session.get(user_id)
|
||||
async def get_current_session_for_context(self, context_id: str) -> str | None:
|
||||
return self._context_current_session.get(context_id)
|
||||
|
||||
async def set_current_session(self, user_id: str, name: str) -> None:
|
||||
self._current_session[user_id] = name
|
||||
async def set_current_session_for_context(self, context_id: str, name: str) -> None:
|
||||
self._context_current_session[context_id] = name
|
||||
|
||||
async def clear_current_session(self, user_id: str) -> None:
|
||||
self._current_session.pop(user_id, None)
|
||||
async def clear_current_session_for_context(self, context_id: str) -> None:
|
||||
self._context_current_session.pop(context_id, None)
|
||||
|
||||
async def get_last_tokens_used(self, context_id: str) -> int:
|
||||
return await self.get_last_tokens_used_for_context(context_id)
|
||||
|
||||
async def set_last_tokens_used(self, context_id: str, tokens: int) -> None:
|
||||
await self.set_last_tokens_used_for_context(context_id, tokens)
|
||||
|
||||
async def get_current_session(self, context_id: str) -> str | None:
|
||||
return await self.get_current_session_for_context(context_id)
|
||||
|
||||
async def set_current_session(self, context_id: str, name: str) -> None:
|
||||
await self.set_current_session_for_context(context_id, name)
|
||||
|
||||
async def clear_current_session(self, context_id: str) -> None:
|
||||
await self.clear_current_session_for_context(context_id)
|
||||
|
|
|
|||
|
|
@ -105,11 +105,13 @@ class RealPlatformClient(PlatformClient):
|
|||
delta=event.text,
|
||||
finished=False,
|
||||
)
|
||||
tokens_used = getattr(chat_api, "last_tokens_used", 0)
|
||||
await self._prototype_state.set_last_tokens_used(str(chat_id), tokens_used)
|
||||
yield MessageChunk(
|
||||
message_id=user_id,
|
||||
delta="",
|
||||
finished=True,
|
||||
tokens_used=getattr(chat_api, "last_tokens_used", 0),
|
||||
tokens_used=tokens_used,
|
||||
)
|
||||
|
||||
async def get_settings(self, user_id: str) -> UserSettings:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue