refactor: update chat session management to use singleton pattern and enhance validation in chat agent

This commit is contained in:
grillazz
2026-07-14 11:41:15 +02:00
parent 16a2e4e325
commit 251aef0ec4
4 changed files with 121 additions and 14 deletions
+12 -6
View File
@@ -8,16 +8,18 @@ the small public API below.
"""
import asyncio
from dataclasses import dataclass, field
from uuid import UUID, uuid4
import attrs
from app.schemas.chat import ChatMessage
from app.utils.singleton import SingletonMetaNoArgs
@dataclass(slots=True)
@attrs.define(slots=True)
class ChatSession:
id: UUID = field(default_factory=uuid4)
messages: list[ChatMessage] = field(default_factory=list)
id: UUID = attrs.field(factory=uuid4)
messages: list[ChatMessage] = attrs.field(factory=list)
def add(self, message: ChatMessage) -> None:
self.messages.append(message)
@@ -26,8 +28,12 @@ class ChatSession:
return list(self.messages)
class ChatSessionManager:
"""Tracks active chat sessions keyed by their opaque session id."""
class ChatSessionManager(metaclass=SingletonMetaNoArgs):
"""Tracks active chat sessions keyed by their opaque session id.
Implemented as a singleton to ensure exactly one instance per application,
maintaining a consistent registry of all active websocket chat sessions.
"""
def __init__(self) -> None:
self._sessions: dict[UUID, ChatSession] = {}