from fastapi import APIRouter, status, Depends, BackgroundTasks, HTTPException from fastapi.responses import JSONResponse from src.utils.logger import logger from pydantic import BaseModel, Field from typing import List, Dict, Any, Optional from src.agents.lesson_practice.flow import lesson_practice_agent import json import os import uuid from datetime import datetime router = APIRouter(prefix="/lesson", tags=["AI"]) class LessonPracticeRequest(BaseModel): unit: str = Field(..., description="Unit of the lesson") vocabulary: list = Field(..., description="Vocabulary for the lesson") key_structures: list = Field(..., description="Key structures for the lesson") practice_questions: list = Field( ..., description="Practice questions for the lesson" ) student_level: str = Field("beginner", description="Student's level of English") query: str = Field(..., description="User query for the lesson") session_id: str = Field(..., description="Session ID for the lesson") @router.post("/chat") async def chat(request: LessonPracticeRequest): response = await lesson_practice_agent().ainvoke( { "unit": request.unit, "vocabulary": request.vocabulary, "key_structures": request.key_structures, "practice_questions": request.practice_questions, "student_level": request.student_level, "messages": [request.query], }, {"configurable": {"thread_id": request.session_id}}, ) return JSONResponse( content=response["messages"][-1].content, status_code=status.HTTP_200_OK )