DocDoeAI / app /schemas /learning_engine.py
asnannp's picture
Deploy backend cd4237ff: support routes + rate limit + exam_date nullable + upload 413 fix
7c6ffa6
Raw
History Blame Contribute Delete
5.43 kB
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)