Spaces:
Sleeping
Sleeping
| import json | |
| from fastapi import APIRouter, WebSocket, WebSocketDisconnect, HTTPException | |
| from src.services import ConnectionService, ChatService | |
| from src.utils import logger | |
| class ChatController: | |
| def __init__(self): | |
| self.connection_service = ConnectionService | |
| self.chat_service = ChatService | |
| self.router = APIRouter(prefix="/chat", tags=["chat"]) | |
| self.router.websocket("/ws")(self.websocket_endpoint) | |
| async def websocket_endpoint(self, websocket: WebSocket): | |
| logger.info("WebSocket connection attempt.") | |
| try: | |
| async with self.connection_service() as connection_service: | |
| await connection_service.connect(websocket) | |
| while True: | |
| data = await websocket.receive_text() | |
| messages = [] | |
| parsed_data = json.loads(data) | |
| messages = parsed_data.get("messages", []) | |
| async with self.chat_service() as chat_service: | |
| async for response_message in chat_service.create_response_message(messages): | |
| await connection_service.send_personal_message(response_message, websocket) | |
| except WebSocketDisconnect: | |
| connection_service.disconnect(websocket) | |
| except Exception as e: | |
| logger.error(e) | |
| raise HTTPException(status_code=500, detail=str(e)) | |