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)