148 lines
4.5 KiB
Python
148 lines
4.5 KiB
Python
"""Example: Using the Multi-Modal User Interface."""
|
||
|
||
import asyncio
|
||
|
||
from fusionagi import Orchestrator, EventBus, StateManager
|
||
from fusionagi.interfaces.multimodal_ui import MultiModalUI
|
||
from fusionagi.interfaces.voice import VoiceInterface, VoiceLibrary, VoiceProfile
|
||
from fusionagi.interfaces.conversation import ConversationManager, ConversationTuner, ConversationStyle
|
||
from fusionagi.interfaces.base import ModalityType
|
||
|
||
|
||
async def main() -> None:
|
||
"""Demonstrate multi-modal UI usage."""
|
||
|
||
# Initialize core FusionAGI components
|
||
bus = EventBus()
|
||
state = StateManager()
|
||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||
|
||
# Set up voice interface
|
||
voice_library = VoiceLibrary()
|
||
voice_library.add_voice(VoiceProfile(
|
||
name="Assistant Voice",
|
||
language="en-US",
|
||
style="friendly",
|
||
))
|
||
|
||
voice_interface = VoiceInterface(
|
||
voice_library=voice_library,
|
||
stt_provider="whisper",
|
||
tts_provider="system",
|
||
)
|
||
|
||
# Set up conversation manager
|
||
tuner = ConversationTuner()
|
||
tuner.register_style("default", ConversationStyle(
|
||
formality="neutral",
|
||
verbosity="balanced",
|
||
empathy_level=0.7,
|
||
))
|
||
|
||
conv_manager = ConversationManager(tuner=tuner)
|
||
|
||
# Create multi-modal UI
|
||
ui = MultiModalUI(
|
||
orchestrator=orch,
|
||
conversation_manager=conv_manager,
|
||
voice_interface=voice_interface,
|
||
)
|
||
|
||
print("=== FusionAGI Multi-Modal User Interface ===\n")
|
||
|
||
# ========== Session Creation ==========
|
||
print("1. Creating User Session...")
|
||
|
||
session_id = ui.create_session(
|
||
user_id="demo_user",
|
||
preferred_modalities=[ModalityType.TEXT, ModalityType.VOICE],
|
||
accessibility_settings={
|
||
"high_contrast": False,
|
||
"screen_reader": False,
|
||
"large_text": False,
|
||
},
|
||
)
|
||
|
||
print(f" ✓ Session created: {session_id[:16]}...")
|
||
print(f" ✓ Active modalities: TEXT, VOICE\n")
|
||
|
||
# ========== Multi-Modal Output ==========
|
||
print("2. Sending Multi-Modal Messages...")
|
||
|
||
await ui.send_to_user(
|
||
session_id,
|
||
"Welcome to FusionAGI! I can interact with you through text and voice.",
|
||
modalities=[ModalityType.TEXT],
|
||
)
|
||
print(" ✓ Sent welcome message (TEXT)")
|
||
|
||
await ui.send_to_user(
|
||
session_id,
|
||
"How can I assist you today?",
|
||
modalities=[ModalityType.TEXT, ModalityType.VOICE],
|
||
)
|
||
print(" ✓ Sent greeting (TEXT + VOICE)\n")
|
||
|
||
# ========== Conversation ==========
|
||
print("3. Conversational Interaction...")
|
||
|
||
user_inputs = [
|
||
"What can you do?",
|
||
"Tell me about your capabilities",
|
||
"Can you help me with a task?",
|
||
]
|
||
|
||
for user_input in user_inputs:
|
||
print(f" User: {user_input}")
|
||
response = await ui.converse(session_id, user_input)
|
||
print(f" Agent: {response}\n")
|
||
|
||
# ========== Task Submission ==========
|
||
print("4. Interactive Task Submission...")
|
||
|
||
task_id = await ui.submit_task_interactive(
|
||
session_id,
|
||
goal="Analyze system performance and generate report",
|
||
constraints={"format": "markdown", "max_length": 1000},
|
||
)
|
||
|
||
print(f" ✓ Task submitted: {task_id[:8]}...")
|
||
print(" ✓ User will receive real-time updates\n")
|
||
|
||
# ========== Modality Management ==========
|
||
print("5. Managing Modalities...")
|
||
|
||
# Enable haptic feedback (if available)
|
||
success = ui.enable_modality(session_id, ModalityType.HAPTIC)
|
||
if success:
|
||
print(" ✓ Haptic modality enabled")
|
||
else:
|
||
print(" ℹ Haptic modality not available")
|
||
|
||
# Check available modalities
|
||
available = ui.get_available_modalities()
|
||
print(f" Available modalities: {[m.value for m in available]}\n")
|
||
|
||
# ========== Session Statistics ==========
|
||
print("6. Session Statistics...")
|
||
|
||
stats = ui.get_session_statistics(session_id)
|
||
print(f" Session ID: {stats['session_id'][:16]}...")
|
||
print(f" User ID: {stats['user_id']}")
|
||
print(f" Active modalities: {stats['active_modalities']}")
|
||
print(f" Conversation turns: {stats['conversation_turns']}")
|
||
print(f" Started at: {stats['started_at']}")
|
||
print()
|
||
|
||
# ========== Session Cleanup ==========
|
||
print("7. Ending Session...")
|
||
|
||
ui.end_session(session_id)
|
||
print(" ✓ Session ended\n")
|
||
|
||
print("=== Multi-Modal UI Demo Complete ===")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
asyncio.run(main())
|