2nzi's picture
update routes
b3490f5 verified
from fastapi import APIRouter, HTTPException
from fastapi.responses import FileResponse
from app.services.video_service import VideoService
from fastapi import APIRouter, HTTPException
from app.services.quiz_generator import QuizGenerator
from app.models.quiz import QuizRequest
from app.core.config import settings
import logging
import uuid
# Configurer le logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
# Importons le quiz de test
TEST_QUIZ = {
"id": "test-quiz",
"theme": "Intelligence Artificielle",
"questions": [
{
"question": "Qu'est-ce que le Machine Learning ?",
"options": [
"Un type de robot",
"Une branche de l'IA permettant aux machines d'apprendre",
"Un langage de programmation",
"Un système d'exploitation"
],
"correct_answer": "Une branche de l'IA permettant aux machines d'apprendre"
},
{
"question": "Qu'est-ce qu'un réseau de neurones ?",
"options": [
"Un système inspiré du cerveau humain",
"Un réseau social",
"Un câble ethernet",
"Un type de processeur"
],
"correct_answer": "Un système inspiré du cerveau humain"
},
{
"question": "Quel est le langage le plus utilisé en IA ?",
"options": [
"Java",
"C++",
"Python",
"JavaScript"
],
"correct_answer": "Python"
}
]
}
router = APIRouter()
router = APIRouter()
quiz_generator = QuizGenerator(provider=settings.AI_PROVIDER)
@router.post("/quiz")
async def create_quiz(request: QuizRequest):
try:
questions = await quiz_generator.generate_quiz(
theme=request.theme,
num_questions=request.num_questions
)
# Créer un ID unique pour le quiz
quiz_id = f"quiz_{uuid.uuid4().hex[:8]}"
quiz_data = {
"id": quiz_id,
"theme": request.theme,
"questions": [
{
"question": q.question,
"options": q.options,
"correct_answer": q.correct_answer
} for q in questions
]
}
return quiz_data
except Exception as e:
logger.error(f"Erreur dans create_quiz: {str(e)}")
raise HTTPException(status_code=500, detail=str(e))
@router.post("/quiz/{quiz_id}/video")
async def generate_video(quiz_id: str, quiz_data: dict):
try:
logger.info(f"Début de la génération de vidéo pour le quiz {quiz_id}")
logger.debug(f"Données du quiz reçues: {quiz_data}")
# Vérifier que les données nécessaires sont présentes
if not quiz_data.get("questions") or quiz_data.get("styleConfig") is None:
raise HTTPException(status_code=400, detail="Données du quiz ou style manquants")
# Générer et streamer la vidéo
return await VideoService.generate_quiz_video(quiz_data)
except Exception as e:
logger.error(f"Erreur lors de la génération de la vidéo: {str(e)}", exc_info=True)
raise HTTPException(status_code=500, detail=str(e))