|
from pydantic import BaseModel |
|
from typing import List, Dict, Optional, Any |
|
|
|
|
|
class VisualAid(BaseModel): |
|
type: str |
|
path: str |
|
caption: Optional[str] = None |
|
|
|
class CodeExample(BaseModel): |
|
language: str |
|
code: str |
|
description: Optional[str] = None |
|
|
|
class ExplanationResponse(BaseModel): |
|
markdown: str |
|
visual_aids: List[VisualAid] = [] |
|
code_examples: List[CodeExample] = [] |
|
|
|
|
|
class MCQOption(BaseModel): |
|
key: str |
|
value: str |
|
|
|
class MCQQuestion(BaseModel): |
|
id: str |
|
question: str |
|
options: Dict[str, str] |
|
correct_answer: str |
|
explanation: str |
|
user_answer: Optional[str] = None |
|
is_correct: Optional[bool] = None |
|
|
|
class OpenEndedQuestion(BaseModel): |
|
id: str |
|
question: str |
|
model_answer: str |
|
keywords: Optional[List[str]] = None |
|
user_answer: Optional[str] = None |
|
score: Optional[float] = None |
|
feedback: Optional[str] = None |
|
|
|
class TrueFalseQuestion(BaseModel): |
|
id: str |
|
question: str |
|
correct_answer: bool |
|
explanation: str |
|
user_answer: Optional[bool] = None |
|
is_correct: Optional[bool] = None |
|
|
|
class FillInTheBlankQuestion(BaseModel): |
|
id: str |
|
question: str |
|
correct_answer: str |
|
explanation: str |
|
user_answer: Optional[str] = None |
|
is_correct: Optional[bool] = None |
|
|
|
class QuizResponse(BaseModel): |
|
mcqs: List[MCQQuestion] = [] |
|
open_ended: List[OpenEndedQuestion] = [] |
|
true_false: List[TrueFalseQuestion] = [] |
|
fill_in_the_blank: List[FillInTheBlankQuestion] = [] |
|
unit_title: str |
|
|
|
|
|
class LearningUnit(BaseModel): |
|
title: str |
|
content_raw: str |
|
summary: str |
|
status: str = "not_started" |
|
explanation: Optional[str] = None |
|
explanation_data: Optional['ExplanationResponse'] = None |
|
quiz_results: Optional[Dict] = None |
|
quiz_data: Optional[QuizResponse] = None |
|
metadata: Dict[str, Any] = {} |
|
|
|
class PlannerResponse(BaseModel): |
|
units: List[LearningUnit] |
|
|