|
"""
|
|
π 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"
|
|
|
|
|
|
@dataclass
|
|
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"
|
|
|
|
|
|
@dataclass
|
|
class LearningObjective:
|
|
"""A specific learning objective"""
|
|
description: str
|
|
level: DifficultyLevel
|
|
estimated_time: int
|
|
skills: List[str] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class Exercise:
|
|
"""A practice exercise"""
|
|
title: str
|
|
description: str
|
|
instructions: str
|
|
solution: Optional[str] = None
|
|
difficulty: DifficultyLevel = DifficultyLevel.BEGINNER
|
|
estimated_time: int = 10
|
|
|
|
|
|
@dataclass
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
class Flashcard:
|
|
"""A flashcard for spaced repetition learning"""
|
|
front: str
|
|
back: str
|
|
category: str
|
|
difficulty: int = 1
|
|
tags: List[str] = field(default_factory=list)
|
|
image_url: Optional[str] = None
|
|
|
|
|
|
@dataclass
|
|
class QuizQuestion:
|
|
"""A single quiz question"""
|
|
id: str
|
|
question: str
|
|
question_type: str
|
|
options: List[str] = field(default_factory=list)
|
|
correct_answer: str = ""
|
|
explanation: str = ""
|
|
points: int = 1
|
|
difficulty: str = "medium"
|
|
tags: List[str] = field(default_factory=list)
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
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
|
|
difficulty: DifficultyLevel = DifficultyLevel.BEGINNER
|
|
|
|
|
|
@dataclass
|
|
class Image:
|
|
"""Generated or sourced image"""
|
|
url: str
|
|
caption: str
|
|
alt_text: str
|
|
width: Optional[int] = None
|
|
height: Optional[int] = None
|
|
format: str = "png"
|
|
|
|
|
|
@dataclass
|
|
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"
|
|
lesson_id: Optional[int] = None
|
|
tags: List[str] = field(default_factory=list)
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class ContentSource:
|
|
"""Represents a content source for research"""
|
|
title: str
|
|
url: str
|
|
content: str
|
|
source_type: str
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
class CourseStructure:
|
|
"""High-level course structure and planning"""
|
|
title: str
|
|
description: str
|
|
difficulty_level: str = "intermediate"
|
|
estimated_duration: float = 2.0
|
|
prerequisites: List[str] = field(default_factory=list)
|
|
learning_objectives: List[str] = field(default_factory=list)
|
|
lessons: List['Lesson'] = field(default_factory=list)
|
|
tags: List[str] = field(default_factory=list)
|
|
target_audience: str = "general"
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class Lesson:
|
|
"""A single lesson in the course"""
|
|
title: str
|
|
content: str
|
|
objectives: List[LearningObjective]
|
|
duration: int
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
class CourseMetadata:
|
|
"""Metadata about the course"""
|
|
created_at: datetime
|
|
topic: str
|
|
difficulty: DifficultyLevel
|
|
estimated_duration: int
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
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
|
|
export_formats: List[ExportFormat] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
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)
|
|
|
|
|
|
@dataclass
|
|
class ProgressUpdate:
|
|
"""Progress update during course generation"""
|
|
stage: str
|
|
progress: float
|
|
message: str
|
|
details: Optional[Dict[str, Any]] = None
|
|
timestamp: datetime = field(default_factory=datetime.now)
|
|
|
|
|
|
|
|
LLMProvider = Literal["openai", "anthropic", "google", "openai_compatible"]
|
|
|
|
|
|
@dataclass
|
|
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
|
|
|
|
|
|
@dataclass
|
|
class APIResponse:
|
|
"""Standard API response structure"""
|
|
success: bool
|
|
data: Optional[Any] = None
|
|
error: Optional[str] = None
|
|
metadata: Dict[str, Any] = field(default_factory=dict)
|
|
|
|
|
|
|
|
@dataclass
|
|
class ValidationResult:
|
|
"""Result of content validation"""
|
|
is_valid: bool
|
|
score: float
|
|
issues: List[str] = field(default_factory=list)
|
|
suggestions: List[str] = field(default_factory=list)
|
|
|
|
|
|
|
|
@dataclass
|
|
class StreamChunk:
|
|
"""Chunk of streaming data"""
|
|
type: Literal["text", "tool_call", "progress", "error"]
|
|
content: str
|
|
metadata: Dict[str, Any] = field(default_factory=dict) |