| from __future__ import annotations | |
| from typing import Any | |
| from pydantic import BaseModel, Field | |
| class CoursePlanRequest(BaseModel): | |
| raw_request: str | |
| source_ids: list[str] | None = None | |
| source_context: str | None = None | |
| playlist_metadata: dict[str, Any] | None = None | |
| current_level: str | None = None | |
| weak_topics: list[str] | None = None | |
| class_level: str | None = None | |
| syllabus: str | None = None | |
| board: str | None = None | |
| semester: str | None = None | |
| degree: str | None = None | |
| goal: str | None = None | |
| time_available: str | None = None | |
| daily_study_time: str | None = None | |
| subject: str | None = None | |
| chapter: str | None = None | |
| topic: str | None = None | |
| exam_date: str | None = None | |
| class LessonOutput(BaseModel): | |
| title: str | |
| duration_minutes: int | |
| task: str | |
| reason_type: str | |
| source_basis: str | |
| expected_output: str = "" | |
| prerequisite_check: str = "" | |
| class ModuleOutput(BaseModel): | |
| title: str | |
| lessons: list[LessonOutput] = Field(default_factory=list) | |
| estimated_minutes: int = 0 | |
| source_basis: str = "catalog_seed" | |
| class QuizOutput(BaseModel): | |
| title: str | |
| question_count: int | |
| focus_areas: list[str] = Field(default_factory=list) | |
| class PracticeTaskOutput(BaseModel): | |
| title: str | |
| task_type: str | |
| description: str = "" | |
| source_basis: str = "generic" | |
| class RevisionCheckpointOutput(BaseModel): | |
| title: str | |
| focus_areas: list[str] = Field(default_factory=list) | |
| estimated_minutes: int = 15 | |
| class StudentContextOutput(BaseModel): | |
| class_level: str = "" | |
| syllabus: str = "" | |
| subject: str = "" | |
| chapter: str = "" | |
| exam_date: str = "" | |
| daily_study_time: str = "" | |
| goal: str = "" | |
| class ConceptExplanationOutput(BaseModel): | |
| title: str | |
| explanation: str | |
| board_exam_focus: str = "" | |
| class DerivationProblemStepOutput(BaseModel): | |
| title: str | |
| steps: list[str] = Field(default_factory=list) | |
| common_mistake: str = "" | |
| source_basis: str = "catalog_seed" | |
| class PracticeQuestionOutput(BaseModel): | |
| question: str | |
| marks: int = 2 | |
| answer_hint: str = "" | |
| question_type: str = "short_answer" | |
| class WeakTopicRepairOutput(BaseModel): | |
| topic: str | |
| symptom: str = "" | |
| repair_task: str = "" | |
| class RevisionPlanItemOutput(BaseModel): | |
| timing: str | |
| task: str | |
| purpose: str = "" | |
| estimated_minutes: int = 10 | |
| class CoursePlanResult(BaseModel): | |
| title: str | |
| learner_level: str | |
| subject_area: str | |
| source_basis: str | |
| modules: list[ModuleOutput] = Field(default_factory=list) | |
| lessons_total: int = 0 | |
| estimated_total_minutes: int = 0 | |
| prerequisites: list[str] = Field(default_factory=list) | |
| key_concepts: list[str] = Field(default_factory=list) | |
| practice_tasks: list[PracticeTaskOutput] = Field(default_factory=list) | |
| quizzes: list[QuizOutput] = Field(default_factory=list) | |
| revision_checkpoints: list[RevisionCheckpointOutput] = Field(default_factory=list) | |
| final_outcome: str = "" | |
| next_action: str = "" | |
| data_source_label: str = "Starter seed" | |
| confidence: float = 0.0 | |
| trust_notes: list[str] = Field(default_factory=list) | |
| student_context: StudentContextOutput = Field(default_factory=StudentContextOutput) | |
| lesson_outline: list[str] = Field(default_factory=list) | |
| prerequisite_check: list[str] = Field(default_factory=list) | |
| concept_explanation: ConceptExplanationOutput | None = None | |
| derivation_or_problem_steps: list[DerivationProblemStepOutput] = Field(default_factory=list) | |
| practice_questions: list[PracticeQuestionOutput] = Field(default_factory=list) | |
| pyq_style_questions: list[PracticeQuestionOutput] = Field(default_factory=list) | |
| weak_topic_repairs: list[WeakTopicRepairOutput] = Field(default_factory=list) | |
| revision_plan: list[RevisionPlanItemOutput] = Field(default_factory=list) | |
| estimated_study_time: str = "" | |
| class ExamCoachSessionRequest(BaseModel): | |
| class_level: str | None = None | |
| board: str | None = None | |
| university: str | None = None | |
| subject: str | None = None | |
| chapter: str | None = None | |
| topic: str | None = None | |
| exam_date: str | None = None | |
| daily_time: str = "1 hour" | |
| goal: str | None = None | |
| weak_topics: list[str] | None = None | |
| pyq_data: list[dict[str, Any]] | None = None | |
| source_ids: list[str] | None = None | |
| source_context: str | None = None | |
| class StudyBlockOutput(BaseModel): | |
| duration_label: str | |
| duration_minutes: int | |
| title: str | |
| tasks: list[str] = Field(default_factory=list) | |
| reason: str = "" | |
| class ExamCoachSessionResult(BaseModel): | |
| session_title: str | |
| exam_countdown: str | |
| time_budget: str | |
| today_mission: str | |
| study_blocks: list[StudyBlockOutput] = Field(default_factory=list) | |
| concept_teaching_task: dict[str, Any] = Field(default_factory=dict) | |
| visual_lesson_task: dict[str, Any] = Field(default_factory=dict) | |
| derivation_or_numerical_task: dict[str, Any] = Field(default_factory=dict) | |
| pyq_task: dict[str, Any] = Field(default_factory=dict) | |
| answer_writing_task: dict[str, Any] = Field(default_factory=dict) | |
| revision_task: dict[str, Any] = Field(default_factory=dict) | |
| quick_test: dict[str, Any] = Field(default_factory=dict) | |
| next_day_plan: dict[str, Any] = Field(default_factory=dict) | |
| data_source_label: str = "Starter seed" | |
| trust_notes: list[str] = Field(default_factory=list) | |