Spaces:
Sleeping
Sleeping
| import uuid | |
| import logging | |
| from typing import Optional | |
| from fastapi import APIRouter, Depends, HTTPException | |
| from pydantic import BaseModel | |
| from sqlalchemy.orm import Session | |
| from backend.database.db import get_db | |
| from backend.services.eval_service import run_full_pipeline, generate_response, evaluate_response | |
| router = APIRouter(prefix="/chat", tags=["chat"]) | |
| logger = logging.getLogger(__name__) | |
| class ChatRequest(BaseModel): | |
| query: str | |
| session_id: Optional[str] = None | |
| prompt_version: Optional[str] = "standard" | |
| auto_evaluate: Optional[bool] = True | |
| auto_retry: Optional[bool] = True | |
| class QuickChatRequest(BaseModel): | |
| query: str | |
| session_id: Optional[str] = None | |
| async def send_message( | |
| request: ChatRequest, | |
| db: Session = Depends(get_db) | |
| ): | |
| if not request.query.strip(): | |
| raise HTTPException( | |
| status_code=400, | |
| detail="Query cannot be empty" | |
| ) | |
| session_id = request.session_id or str(uuid.uuid4()) | |
| try: | |
| if request.auto_evaluate: | |
| result = run_full_pipeline( | |
| query=request.query, | |
| session_id=session_id, | |
| db=db | |
| ) | |
| return result | |
| else: | |
| gen = generate_response( | |
| query=request.query, | |
| prompt_version=request.prompt_version or "standard", | |
| db=db, | |
| session_id=session_id | |
| ) | |
| return gen | |
| except Exception as e: | |
| logger.error( | |
| f"Chat API error: {e}", | |
| exc_info=True | |
| ) | |
| return { | |
| "session_id": session_id, | |
| "query": request.query, | |
| "response": ( | |
| "System is temporarily busy. " | |
| "Please try again in a few seconds." | |
| ), | |
| "evaluation": None, | |
| "error": str(e) | |
| } |