Spaces:
Build error
Build error
File size: 1,453 Bytes
ad8ba8a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from typing import AsyncGenerator, Dict, Any
from src.domain.models import Session, Message, MessageRole
from src.domain.interfaces import AgentRepository, SessionRepository
from src.application.session_manager import SessionManager
class ChatService:
def __init__(self, session_manager: SessionManager, agent: AgentRepository):
self.session_manager = session_manager
self.agent = agent
async def chat(self, session_id: str, message_content: str) -> AsyncGenerator[Dict[str, Any], None]:
session = await self.session_manager.get_session_details(session_id)
if not session:
yield {"event": "error", "data": "Session not found"}
return
# Create user message
user_message = Message(role=MessageRole.USER, content=message_content)
session.messages.append(user_message)
await self.session_manager.repository.update_session(session)
# Stream response from agent
full_response = ""
async for event in self.agent.chat(session, user_message):
if event["event"] == "message":
full_response += event["data"]
yield event
# Save assistant message
if full_response:
assistant_message = Message(role=MessageRole.ASSISTANT, content=full_response)
session.messages.append(assistant_message)
await self.session_manager.repository.update_session(session)
|