Spaces:
Sleeping
Sleeping
| from fastapi import APIRouter, HTTPException | |
| from fastapi.responses import StreamingResponse | |
| from api.models import ChatRequest, ChatResponse | |
| from api.services import ChatService, StreamService | |
| from api.config import settings | |
| from uuid import uuid4 | |
| router = APIRouter(prefix="/chat", tags=["Chat"]) | |
| async def chat_simple(request: ChatRequest): | |
| """ | |
| Simple non-streaming chat endpoint. | |
| Best for handling interrupts - returns complete response. | |
| """ | |
| if not settings.system_initialized or not settings.chat_manager: | |
| raise HTTPException(status_code=503, detail="System initializing...") | |
| try: | |
| return await ChatService.process_message( | |
| message=request.message, | |
| session_id=request.session_id | |
| ) | |
| except Exception as e: | |
| raise HTTPException(status_code=500, detail=str(e)) | |
| async def chat_stream(request: ChatRequest): | |
| """ | |
| Streaming chat endpoint using Server-Sent Events (SSE). | |
| Streams tokens in real-time and handles interrupts. | |
| """ | |
| if not settings.system_initialized or not settings.chat_manager: | |
| raise HTTPException(status_code=503, detail="System initializing...") | |
| session_id = request.session_id or f"api_{uuid4()}" | |
| return StreamingResponse( | |
| StreamService.stream_chat_response(request.message, session_id), | |
| media_type="text/event-stream", | |
| headers={ | |
| "Cache-Control": "no-cache", | |
| "Connection": "keep-alive", | |
| "X-Accel-Buffering": "no" | |
| } | |
| ) |