CoolFace
Apppublic

Aasher/Flexx_Your_Homework_Assistant

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
0likes
chat.py59 linesDownload Raw Back to api
1from fastapi import APIRouter, HTTPException, Depends2from fastapi.responses import StreamingResponse3import json4from typing import AsyncGenerator5 6from models.chat import ChatRequest, ChatResponse, StreamResponse7from services.chat_service import ChatService8 9chat_router = APIRouter(prefix="/chat", tags=["chat"])10 11def get_chat_service():12    return ChatService()13 14@chat_router.post("/", response_model=ChatResponse)15async def chat_completion(16    request: ChatRequest,17    chat_service: ChatService = Depends(get_chat_service)18):19    """20    Process chat completion request21    """22    try:23        response = await chat_service.process_chat(request)24        return response25    except Exception as e:26        raise HTTPException(status_code=500, detail=str(e))27 28@chat_router.post("/stream")29async def chat_stream(30    request: ChatRequest,31    chat_service: ChatService = Depends(get_chat_service)32):33    """34    Stream chat completion response35    """36    try:37        async def generate_stream() -> AsyncGenerator[str, None]:38            async for chunk in chat_service.stream_chat(request):39                yield f"data: {json.dumps(chunk.model_dump())}\n\n"40            41            # Send final message42            final_chunk = StreamResponse(finished=True)43            yield f"data: {json.dumps(final_chunk.model_dump())}\n\n"44 45        return StreamingResponse(46            generate_stream(),47            media_type="text/plain",48            headers={"Cache-Control": "no-cache", "Connection": "keep-alive"}49        )50    except Exception as e:51        error_chunk = StreamResponse(error=str(e), finished=True)52        async def error_stream():53            yield f"data: {json.dumps(error_chunk.model_dump())}\n\n"54        55        return StreamingResponse(56            error_stream(),57            media_type="text/plain",58            status_code=50059        )