Avatar System
System Overview
The Avatar System manages agent visual representation, voice configuration, and personality characteristics through a modular architecture built around three core components: Models, Manager, and Events.
Core Components
Models (core/avatar/models.py
)
core/avatar/models.py
)Avatar Class
Main configuration container for avatar properties:
@dataclass
class Avatar:
id: str # Unique identifier
name: str # Display name
image_path: Path # Static image asset path
video_path: Optional[Path] # Optional video asset path
voice_id: str # ElevenLabs voice identifier
accent_color: str # UI theme color
prompts: AvatarPrompts # Personality configuration
AvatarPrompts Class
Container for different prompt types:
@dataclass
class AvatarPrompts:
personality: str # Base personality traits
analysis: str # Analysis approach
narrative: str # Communication style
Manager (core/avatar/manager.py
)
core/avatar/manager.py
)The AvatarManager class handles avatar state and transitions:
Key Methods:
_load_avatars()
: Initializes avatars from configurationset_current_avatar(avatar_id)
: Changes active avatarget_current_avatar()
: Returns active avatar instanceget_next_avatar_id()
: Handles avatar rotationget_prompt(prompt_type)
: Retrieves specific prompts
Properties:
current_voice_id
: Active avatar's voice configurationcurrent_accent_color
: Active avatar's UI theme color
Events (core/avatar/events.py
)
core/avatar/events.py
)Observer pattern implementation for avatar state changes:
class AvatarObserver(Protocol):
def on_avatar_changed(self, avatar: Avatar) -> None:
"""Handle avatar change event"""
pass
class AvatarEventDispatcher:
def add_observer(self, observer: AvatarObserver) -> None
def remove_observer(self, observer: AvatarObserver) -> None
def notify_all(self, avatar: Avatar) -> None
Configuration (config/avatar_config.py
)
config/avatar_config.py
)Avatar definitions are stored in AVATAR_CONFIGS dictionary:
pythonCopyAVATAR_CONFIGS = {
"avatar_id": {
"name": str,
"image_path": str,
"video_path": Optional[str],
"voice_id": str,
"accent_color": str,
"prompts": {
"personality": str,
"analysis": str,
"narrative": str
}
}
}
Integration Points
Voice System
Links to voice_id for audio generation
Manages voice characteristic changes during avatar switches
UI Integration
Provides accent_color for theming
Manages avatar visual assets
Handles transitions between avatars
Event Handling
Notifies system components of avatar changes
Manages state synchronization across the application
Usage Example
# Initialize avatar system
avatar_manager = AvatarManager()
# Register for avatar changes
class UIComponent(AvatarObserver):
def on_avatar_changed(self, avatar):
self.update_theme(avatar.accent_color)
self.load_avatar_image(avatar.image_path)
ui = UIComponent()
avatar_manager.add_observer(ui)
# Change avatars
avatar_manager.set_current_avatar("gennifer")
Error Handling
The system includes comprehensive error handling:
Configuration loading failures
Missing avatar assets
Observer notification errors
Invalid avatar ID handling
Last updated