bhaveshgoel07's picture
Complete NeuroAnim HF Spaces deployment - all source files
0805c5b
"""
LangGraph State Definition for NeuroAnim Pipeline
This module defines the state structure that flows through the animation
generation workflow. The state is updated by each node in the graph.
"""
from typing import Any, Dict, List, Optional, TypedDict
class AnimationState(TypedDict, total=False):
"""
State for the animation generation pipeline.
This state is passed through all nodes in the LangGraph workflow.
Each node reads from and writes to this state to coordinate the
animation generation process.
"""
# Input Parameters
topic: str
target_audience: str
animation_length_minutes: float
output_filename: str
# Concept Planning
concept_plan: Optional[str]
learning_objectives: Optional[List[str]]
visual_metaphors: Optional[List[str]]
scene_flow: Optional[List[Dict[str, str]]]
# Narration
narration_text: Optional[str]
narration_duration: Optional[float]
# Code Generation
manim_code: Optional[str]
scene_name: Optional[str]
code_generation_attempts: int
previous_code_errors: Optional[List[str]]
# File Paths
work_dir: Optional[str]
output_dir: Optional[str]
manim_file_path: Optional[str]
video_file_path: Optional[str]
audio_file_path: Optional[str]
final_output_path: Optional[str]
# Rendering
rendering_quality: str
rendering_format: str
frame_rate: int
# Analysis & Feedback
frame_analysis: Optional[str]
visual_quality_score: Optional[float]
needs_refinement: bool
refinement_feedback: Optional[str]
# Quiz
quiz_content: Optional[str]
quiz_questions: Optional[List[Dict[str, Any]]]
# Error Handling
errors: List[str]
warnings: List[str]
current_step: str
retry_count: Dict[str, int]
max_retries: int
# Status
success: bool
completed_steps: List[str]
# Metadata
start_time: Optional[float]
end_time: Optional[float]
total_duration: Optional[float]
def create_initial_state(
topic: str,
target_audience: str = "general",
animation_length_minutes: float = 2.0,
output_filename: str = "animation.mp4",
rendering_quality: str = "medium",
rendering_format: str = "mp4",
frame_rate: int = 30,
max_retries: int = 3,
) -> AnimationState:
"""
Create the initial state for the animation pipeline.
Args:
topic: The STEM topic to animate
target_audience: Target audience level
animation_length_minutes: Desired animation length
output_filename: Name for the final output file
rendering_quality: Manim rendering quality
rendering_format: Output video format
frame_rate: Video frame rate
max_retries: Maximum retry attempts per step
Returns:
Initial AnimationState with default values
"""
return AnimationState(
# Input parameters
topic=topic,
target_audience=target_audience,
animation_length_minutes=animation_length_minutes,
output_filename=output_filename,
# Initialize optional fields
concept_plan=None,
learning_objectives=None,
visual_metaphors=None,
scene_flow=None,
narration_text=None,
narration_duration=None,
manim_code=None,
scene_name=None,
code_generation_attempts=0,
previous_code_errors=None,
# File paths
work_dir=None,
output_dir=None,
manim_file_path=None,
video_file_path=None,
audio_file_path=None,
final_output_path=None,
# Rendering config
rendering_quality=rendering_quality,
rendering_format=rendering_format,
frame_rate=frame_rate,
# Analysis
frame_analysis=None,
visual_quality_score=None,
needs_refinement=False,
refinement_feedback=None,
# Quiz
quiz_content=None,
quiz_questions=None,
# Error handling
errors=[],
warnings=[],
current_step="initialization",
retry_count={},
max_retries=max_retries,
# Status
success=False,
completed_steps=[],
# Metadata
start_time=None,
end_time=None,
total_duration=None,
)