from typing import Dict, List, Literal from pydantic import BaseModel, Field, HttpUrl LangCode = Literal["en", "hn", "mr", "kn"] class CourseInput(BaseModel): course_code: str = Field(..., min_length=1) name: str = Field(..., min_length=1) course_type: str = Field(..., min_length=1) syllabus_url: HttpUrl semester: int = Field(..., ge=1, le=12) class CourseSummary(BaseModel): course_code: str ai_summary: Dict[LangCode, str] class CourseProcessError(BaseModel): course_code: str error: str class SyllabusProcessResponse(BaseModel): results: List[CourseSummary] failed: List[CourseProcessError] = Field(default_factory=list) total_received: int total_processed: int total_failed: int class ChatMessage(BaseModel): role: Literal["user", "assistant", "system"] content: str class ChatRequest(BaseModel): query: str history: List[ChatMessage] = Field(default_factory=list, max_length=5) student_id: int = Field(..., ge=1) lang_code: LangCode semester: int = Field(..., ge=1, le=12) class ChatResponse(BaseModel): reply_markdown: str