Spaces:
Sleeping
Sleeping
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) | |
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)) | |
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)) |