Spaces:
Sleeping
Sleeping
from pydantic import BaseModel | |
from typing import List, Dict, Optional, Any | |
# Explainer Agent Models | |
class VisualAid(BaseModel): | |
type: str # e.g., "image", "chart", "diagram" | |
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] = [] | |
# Examiner Agent Models | |
class MCQOption(BaseModel): | |
key: str # A, B, C, D | |
value: str | |
class MCQQuestion(BaseModel): | |
id: str | |
question: str | |
options: Dict[str, str] # Use Dict[str, str] for options mapping | |
correct_answer: str | |
explanation: str | |
user_answer: Optional[str] = None # To store user's selected option key | |
is_correct: Optional[bool] = None # To store if the user's answer was correct | |
class OpenEndedQuestion(BaseModel): | |
id: str | |
question: str | |
model_answer: str | |
keywords: Optional[List[str]] = None | |
user_answer: Optional[str] = None # To store user's text answer | |
score: Optional[float] = None # To store the score for open-ended questions | |
feedback: Optional[str] = None # To store feedback for open-ended questions | |
class TrueFalseQuestion(BaseModel): | |
id: str | |
question: str | |
correct_answer: bool # True or False | |
explanation: str | |
user_answer: Optional[bool] = None | |
is_correct: Optional[bool] = None | |
class FillInTheBlankQuestion(BaseModel): | |
id: str | |
question: str # e.g., "The capital of France is ______." | |
correct_answer: str # The word(s) that fill the blank | |
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 | |
# Planner Agent Models | |
class LearningUnit(BaseModel): | |
title: str | |
content_raw: str | |
summary: str | |
status: str = "not_started" # Add status for consistency with SessionState | |
explanation: Optional[str] = None # Add explanation field | |
explanation_data: Optional['ExplanationResponse'] = None # ADDED | |
quiz_results: Optional[Dict] = None # Add quiz_results field | |
quiz_data: Optional[QuizResponse] = None | |
metadata: Dict[str, Any] = {} # New field to store LlamaIndex node metadata, explicitly typed | |
class PlannerResponse(BaseModel): | |
units: List[LearningUnit] | |