Akshata-89's picture
Handle Groq failures gracefully
6a4627f
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
@router.post("/message")
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)
}