from fastapi import APIRouter, status, HTTPException from pydantic import BaseModel from src.agents.evaluation.agent import evaluate_conversation from src.utils.logger import logger from typing import Optional router = APIRouter(prefix="/evaluation", tags=["Evaluation"]) class EvaluationRequest(BaseModel): session_id: str learner_level: str = "beginner" scenario_title: Optional[str] = "" scenario_description: Optional[str] = "" key_vocabulary: Optional[str] = "" class EvaluationResponse(BaseModel): score: int feedback: str strengths: list improvements: list suggestions: list next_steps: list words_used: list perfect_response: str impressive_words: list @router.post("/conversation", response_model=EvaluationResponse, status_code=status.HTTP_200_OK) async def evaluate_conversation_endpoint(request: EvaluationRequest): """Evaluate a conversation and provide feedback""" logger.info( f"Received evaluation request for session: {request.session_id}") try: result = await evaluate_conversation( session_id=request.session_id, learner_level=request.learner_level, scenario_title=request.scenario_title or "", scenario_description=request.scenario_description or "", key_vocabulary=request.key_vocabulary or "" ) return result except Exception as e: logger.error(f"Error in conversation evaluation: {str(e)}") raise HTTPException( status_code=500, detail=f"Failed to evaluate conversation: {str(e)}" )