Spaces:
Running
Running
| """ | |
| 📊 Type Definitions for Course Creator AI | |
| Comprehensive data structures and type hints for the course generation system. | |
| """ | |
| from dataclasses import dataclass, field | |
| from typing import List, Dict, Optional, Any, Union, Literal | |
| from datetime import datetime | |
| from enum import Enum | |
| class DifficultyLevel(str, Enum): | |
| """Course difficulty levels""" | |
| BEGINNER = "beginner" | |
| INTERMEDIATE = "intermediate" | |
| ADVANCED = "advanced" | |
| class LearningStyle(str, Enum): | |
| """Learning style preferences""" | |
| VISUAL = "visual" | |
| AUDITORY = "auditory" | |
| KINESTHETIC = "kinesthetic" | |
| READING = "reading" | |
| class ExportFormat(str, Enum): | |
| """Export format options""" | |
| PDF = "pdf" | |
| JSON = "json" | |
| MARKDOWN = "markdown" | |
| HTML = "html" | |
| ANKI = "anki" | |
| class Source: | |
| """Information about a content source""" | |
| url: str | |
| title: str | |
| author: Optional[str] = None | |
| date: Optional[datetime] = None | |
| credibility_score: float = 0.0 | |
| content_type: str = "web" | |
| class LearningObjective: | |
| """A specific learning objective""" | |
| description: str | |
| level: DifficultyLevel | |
| estimated_time: int # minutes | |
| skills: List[str] = field(default_factory=list) | |
| class Exercise: | |
| """A practice exercise""" | |
| title: str | |
| description: str | |
| instructions: str | |
| solution: Optional[str] = None | |
| difficulty: DifficultyLevel = DifficultyLevel.BEGINNER | |
| estimated_time: int = 10 # minutes | |
| class CodeExample: | |
| """A code example with explanation""" | |
| title: str | |
| code: str | |
| language: str = "python" | |
| explanation: str = "" | |
| tags: List[str] = field(default_factory=list) | |
| difficulty: str = "intermediate" | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class Flashcard: | |
| """A flashcard for spaced repetition learning""" | |
| front: str | |
| back: str | |
| category: str | |
| difficulty: int = 1 # 1-5 scale | |
| tags: List[str] = field(default_factory=list) | |
| image_url: Optional[str] = None | |
| class QuizQuestion: | |
| """A single quiz question""" | |
| id: str | |
| question: str | |
| question_type: str # multiple_choice, true_false, fill_blank, short_answer | |
| options: List[str] = field(default_factory=list) | |
| correct_answer: str = "" | |
| explanation: str = "" | |
| points: int = 1 | |
| difficulty: str = "medium" # easy, medium, hard | |
| tags: List[str] = field(default_factory=list) | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class Quiz: | |
| """A quiz with multiple questions""" | |
| title: str | |
| questions: List[QuizQuestion] = field(default_factory=list) | |
| passing_score: int = 70 | |
| time_limit: Optional[int] = None # minutes | |
| difficulty: DifficultyLevel = DifficultyLevel.BEGINNER | |
| class Image: | |
| """Generated or sourced image""" | |
| url: str | |
| caption: str | |
| alt_text: str | |
| width: Optional[int] = None | |
| height: Optional[int] = None | |
| format: str = "png" | |
| class ImageAsset: | |
| """Represents an image asset for a course""" | |
| id: str | |
| title: str | |
| description: str | |
| image_url: str | |
| local_path: Optional[str] = None | |
| image_type: str = "illustration" # cover, illustration, concept, diagram, infographic | |
| lesson_id: Optional[int] = None | |
| tags: List[str] = field(default_factory=list) | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class ContentSource: | |
| """Represents a content source for research""" | |
| title: str | |
| url: str | |
| content: str | |
| source_type: str # web, research, documentation, model, dataset, concept | |
| relevance_score: float = 0.5 | |
| credibility_score: float = 0.5 | |
| tags: List[str] = field(default_factory=list) | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class ResearchResult: | |
| """Results from research conducted for a topic""" | |
| topic: str | |
| sources: List[ContentSource] = field(default_factory=list) | |
| key_concepts: List[str] = field(default_factory=list) | |
| learning_objectives: List[str] = field(default_factory=list) | |
| difficulty_level: str = "intermediate" | |
| target_audience: str = "general" | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class CourseStructure: | |
| """High-level course structure and planning""" | |
| title: str | |
| description: str | |
| difficulty_level: str = "intermediate" | |
| estimated_duration: float = 2.0 # hours | |
| prerequisites: List[str] = field(default_factory=list) | |
| learning_objectives: List[str] = field(default_factory=list) | |
| lessons: List['Lesson'] = field(default_factory=list) # Forward reference | |
| tags: List[str] = field(default_factory=list) | |
| target_audience: str = "general" | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class Lesson: | |
| """A single lesson in the course""" | |
| title: str | |
| content: str | |
| objectives: List[LearningObjective] | |
| duration: int # minutes | |
| exercises: List[Exercise] = field(default_factory=list) | |
| images: List[Image] = field(default_factory=list) | |
| flashcards: List[Flashcard] = field(default_factory=list) | |
| quiz: Optional[Quiz] = None | |
| prerequisites: List[str] = field(default_factory=list) | |
| key_concepts: List[str] = field(default_factory=list) | |
| class CourseMetadata: | |
| """Metadata about the course""" | |
| created_at: datetime | |
| topic: str | |
| difficulty: DifficultyLevel | |
| estimated_duration: int # total minutes | |
| sources: List[Source] | |
| word_count: int | |
| lesson_count: int | |
| flashcard_count: int | |
| image_count: int | |
| target_audience: str = "general" | |
| prerequisites: List[str] = field(default_factory=list) | |
| learning_outcomes: List[str] = field(default_factory=list) | |
| class Course: | |
| """Complete course structure""" | |
| title: str | |
| description: str | |
| lessons: List[Lesson] | |
| metadata: CourseMetadata | |
| flashcards: List[Flashcard] = field(default_factory=list) | |
| images: List[Image] = field(default_factory=list) | |
| summary: str = "" | |
| glossary: Dict[str, str] = field(default_factory=dict) | |
| resources: List[Source] = field(default_factory=list) | |
| class ResearchData: | |
| """Research data collected for course generation""" | |
| topic: str | |
| sources: List[Source] | |
| key_concepts: List[str] | |
| content_outline: Dict[str, Any] | |
| related_topics: List[str] = field(default_factory=list) | |
| expert_quotes: List[str] = field(default_factory=list) | |
| statistics: List[str] = field(default_factory=list) | |
| class CourseOutline: | |
| """High-level course structure""" | |
| title: str | |
| description: str | |
| difficulty: DifficultyLevel | |
| lesson_titles: List[str] | |
| learning_objectives: List[LearningObjective] | |
| estimated_duration: int | |
| prerequisites: List[str] = field(default_factory=list) | |
| class GenerationOptions: | |
| """Options for course generation""" | |
| difficulty: DifficultyLevel = DifficultyLevel.BEGINNER | |
| lesson_count: int = 5 | |
| include_audio: bool = False | |
| include_images: bool = True | |
| include_flashcards: bool = True | |
| include_quizzes: bool = True | |
| learning_style: LearningStyle = LearningStyle.VISUAL | |
| max_lesson_duration: int = 30 # minutes | |
| export_formats: List[ExportFormat] = field(default_factory=list) | |
| class ExportResult: | |
| """Result of an export operation""" | |
| format: ExportFormat | |
| success: bool | |
| file_path: Optional[str] = None | |
| download_url: Optional[str] = None | |
| error_message: Optional[str] = None | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| class ProgressUpdate: | |
| """Progress update during course generation""" | |
| stage: str | |
| progress: float # 0.0 to 1.0 | |
| message: str | |
| details: Optional[Dict[str, Any]] = None | |
| timestamp: datetime = field(default_factory=datetime.now) | |
| # LLM Provider Types | |
| LLMProvider = Literal["openai", "anthropic", "google", "openai_compatible"] | |
| class LLMConfig: | |
| """Configuration for LLM providers""" | |
| provider: LLMProvider | |
| model: str | |
| api_key: str | |
| temperature: float = 0.7 | |
| max_tokens: Optional[int] = None | |
| timeout: int = 60 | |
| # API Response Types | |
| class APIResponse: | |
| """Standard API response structure""" | |
| success: bool | |
| data: Optional[Any] = None | |
| error: Optional[str] = None | |
| metadata: Dict[str, Any] = field(default_factory=dict) | |
| # Validation Types | |
| class ValidationResult: | |
| """Result of content validation""" | |
| is_valid: bool | |
| score: float # 0.0 to 1.0 | |
| issues: List[str] = field(default_factory=list) | |
| suggestions: List[str] = field(default_factory=list) | |
| # Stream Types for real-time updates | |
| class StreamChunk: | |
| """Chunk of streaming data""" | |
| type: Literal["text", "tool_call", "progress", "error"] | |
| content: str | |
| metadata: Dict[str, Any] = field(default_factory=dict) |