File size: 5,429 Bytes
7c6ffa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
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)