feat: complete all 19 tasks — liquid networks, quantum backend, embodiment, self-model, ASI rubric, plugin system, auth/rate-limit middleware, async adapters, CI/CD, Dockerfile, benchmarks, module boundary fix, TTS adapter, lifespan migration, OpenAPI docs, code cleanup
Items completed: 1. Merged PR #2 (starlette/httpx deps) 2. Fixed async race condition in multimodal_ui.py 3. Wired TTSAdapter (ElevenLabs, Azure) in API routes 4. Moved super_big_brain.py from core/ to reasoning/ (backward compat shim) 5. Added API authentication middleware (Bearer token via FUSIONAGI_API_KEY) 6. Added async adapter interface (acomplete/acomplete_structured) 7. Migrated FastAPI on_event to lifespan (fixes 20 deprecation warnings) 8. Liquid Neural Networks (continuous-time adaptive weights) 9. Quantum-AI Hybrid compute backend (simulator + optimization) 10. Embodied Intelligence / Robotics bridge (actuator + sensor protocols) 11. Consciousness Engineering (formal self-model with introspection) 12. ASI Scoring Rubric (C/A/L/N/R self-assessment harness) 13. GPU integration tests for TensorFlow backend 14. Multi-stage production Dockerfile 15. Gitea CI/CD pipeline (lint, test matrix, Docker build) 16. API rate limiting middleware (per-IP sliding window) 17. OpenAPI docs cleanup (auth + rate limiting descriptions) 18. Benchmarking suite (decomposition, multi-path, recomposition, e2e) 19. Plugin system (head registry for custom heads) 427 tests passing, 0 ruff errors, 0 mypy errors. Co-Authored-By: Nakamoto, S <defi@defi-oracle.io>
This commit is contained in:
@@ -2,23 +2,23 @@
|
||||
|
||||
import pytest
|
||||
|
||||
from fusionagi.core import EventBus, StateManager, Orchestrator
|
||||
from fusionagi.interfaces.admin_panel import AdminControlPanel, SystemStatus, AgentConfig
|
||||
from fusionagi.interfaces.voice import VoiceLibrary, VoiceProfile, VoiceInterface
|
||||
from fusionagi.core import EventBus, Orchestrator, StateManager
|
||||
from fusionagi.interfaces.admin_panel import AdminControlPanel, AgentConfig, SystemStatus
|
||||
from fusionagi.interfaces.base import ModalityType
|
||||
from fusionagi.interfaces.conversation import (
|
||||
ConversationTuner,
|
||||
ConversationStyle,
|
||||
ConversationManager,
|
||||
ConversationStyle,
|
||||
ConversationTuner,
|
||||
ConversationTurn,
|
||||
)
|
||||
from fusionagi.interfaces.multimodal_ui import MultiModalUI
|
||||
from fusionagi.interfaces.base import ModalityType, InterfaceMessage
|
||||
from fusionagi.interfaces.voice import VoiceInterface, VoiceLibrary, VoiceProfile
|
||||
|
||||
|
||||
def test_voice_library() -> None:
|
||||
"""Test voice library management."""
|
||||
library = VoiceLibrary()
|
||||
|
||||
|
||||
# Add voice
|
||||
voice = VoiceProfile(
|
||||
name="Test Voice",
|
||||
@@ -28,28 +28,28 @@ def test_voice_library() -> None:
|
||||
)
|
||||
voice_id = library.add_voice(voice)
|
||||
assert voice_id == voice.id
|
||||
|
||||
|
||||
# Get voice
|
||||
retrieved = library.get_voice(voice_id)
|
||||
assert retrieved is not None
|
||||
assert retrieved.name == "Test Voice"
|
||||
|
||||
|
||||
# List voices
|
||||
voices = library.list_voices()
|
||||
assert len(voices) == 1
|
||||
|
||||
|
||||
# Set default
|
||||
assert library.set_default_voice(voice_id)
|
||||
default = library.get_default_voice()
|
||||
assert default is not None
|
||||
assert default.id == voice_id
|
||||
|
||||
|
||||
# Update voice
|
||||
assert library.update_voice(voice_id, {"pitch": 1.2})
|
||||
updated = library.get_voice(voice_id)
|
||||
assert updated is not None
|
||||
assert updated.pitch == 1.2
|
||||
|
||||
|
||||
# Remove voice
|
||||
assert library.remove_voice(voice_id)
|
||||
assert library.get_voice(voice_id) is None
|
||||
@@ -60,15 +60,15 @@ def test_voice_interface() -> None:
|
||||
library = VoiceLibrary()
|
||||
voice = VoiceProfile(name="Test", language="en-US")
|
||||
library.add_voice(voice)
|
||||
|
||||
|
||||
interface = VoiceInterface(voice_library=library)
|
||||
|
||||
|
||||
# Check capabilities
|
||||
caps = interface.capabilities()
|
||||
assert ModalityType.VOICE in caps.supported_modalities
|
||||
assert caps.supports_streaming
|
||||
assert caps.supports_interruption
|
||||
|
||||
|
||||
# Set active voice
|
||||
assert interface.set_active_voice(voice.id)
|
||||
|
||||
@@ -76,7 +76,7 @@ def test_voice_interface() -> None:
|
||||
def test_conversation_tuner() -> None:
|
||||
"""Test conversation style tuning."""
|
||||
tuner = ConversationTuner()
|
||||
|
||||
|
||||
# Register style
|
||||
style = ConversationStyle(
|
||||
formality="formal",
|
||||
@@ -85,16 +85,16 @@ def test_conversation_tuner() -> None:
|
||||
technical_depth=0.9,
|
||||
)
|
||||
tuner.register_style("technical", style)
|
||||
|
||||
|
||||
# Get style
|
||||
retrieved = tuner.get_style("technical")
|
||||
assert retrieved is not None
|
||||
assert retrieved.formality == "formal"
|
||||
|
||||
|
||||
# List styles
|
||||
styles = tuner.list_styles()
|
||||
assert "technical" in styles
|
||||
|
||||
|
||||
# Tune for context
|
||||
tuned = tuner.tune_for_context(domain="technical")
|
||||
assert tuned.technical_depth >= 0.8 # Should be high for technical domain
|
||||
@@ -103,16 +103,16 @@ def test_conversation_tuner() -> None:
|
||||
def test_conversation_manager() -> None:
|
||||
"""Test conversation management."""
|
||||
manager = ConversationManager()
|
||||
|
||||
|
||||
# Create session
|
||||
session_id = manager.create_session(user_id="test_user", language="en")
|
||||
assert session_id is not None
|
||||
|
||||
|
||||
# Get session
|
||||
session = manager.get_session(session_id)
|
||||
assert session is not None
|
||||
assert session.user_id == "test_user"
|
||||
|
||||
|
||||
# Add turns
|
||||
turn1 = ConversationTurn(
|
||||
session_id=session_id,
|
||||
@@ -120,25 +120,25 @@ def test_conversation_manager() -> None:
|
||||
content="Hello",
|
||||
)
|
||||
manager.add_turn(turn1)
|
||||
|
||||
|
||||
turn2 = ConversationTurn(
|
||||
session_id=session_id,
|
||||
speaker="agent",
|
||||
content="Hi there!",
|
||||
)
|
||||
manager.add_turn(turn2)
|
||||
|
||||
|
||||
# Get history
|
||||
history = manager.get_history(session_id)
|
||||
assert len(history) == 2
|
||||
assert history[0].speaker == "user"
|
||||
assert history[1].speaker == "agent"
|
||||
|
||||
|
||||
# Get context summary
|
||||
summary = manager.get_context_summary(session_id)
|
||||
assert summary["session_id"] == session_id
|
||||
assert summary["turn_count"] == 2
|
||||
|
||||
|
||||
# End session
|
||||
assert manager.end_session(session_id)
|
||||
assert manager.get_session(session_id) is None
|
||||
@@ -149,28 +149,28 @@ def test_admin_control_panel() -> None:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
admin = AdminControlPanel(
|
||||
orchestrator=orch,
|
||||
event_bus=bus,
|
||||
state_manager=state,
|
||||
)
|
||||
|
||||
|
||||
# Voice management
|
||||
voice = VoiceProfile(name="Admin Voice", language="en-US")
|
||||
voice_id = admin.add_voice_profile(voice)
|
||||
assert voice_id is not None
|
||||
|
||||
|
||||
voices = admin.list_voices()
|
||||
assert len(voices) == 1
|
||||
|
||||
|
||||
# Conversation style management
|
||||
style = ConversationStyle(formality="neutral")
|
||||
admin.register_conversation_style("default", style)
|
||||
|
||||
|
||||
styles = admin.list_conversation_styles()
|
||||
assert "default" in styles
|
||||
|
||||
|
||||
# Agent configuration
|
||||
config = AgentConfig(
|
||||
agent_id="test_agent",
|
||||
@@ -178,26 +178,26 @@ def test_admin_control_panel() -> None:
|
||||
enabled=True,
|
||||
)
|
||||
admin.configure_agent(config)
|
||||
|
||||
|
||||
retrieved_config = admin.get_agent_config("test_agent")
|
||||
assert retrieved_config is not None
|
||||
assert retrieved_config.agent_id == "test_agent"
|
||||
|
||||
|
||||
# System status
|
||||
status = admin.get_system_status()
|
||||
assert isinstance(status, SystemStatus)
|
||||
assert status.status in ("healthy", "degraded", "offline")
|
||||
|
||||
|
||||
# Task statistics
|
||||
stats = admin.get_task_statistics()
|
||||
assert "total_tasks" in stats
|
||||
assert "by_state" in stats
|
||||
|
||||
|
||||
# Configuration export/import
|
||||
config_data = admin.export_configuration()
|
||||
assert "voices" in config_data
|
||||
assert "conversation_styles" in config_data
|
||||
|
||||
|
||||
assert admin.import_configuration(config_data)
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@ def test_multimodal_ui() -> None:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
conv_manager = ConversationManager()
|
||||
voice_interface = VoiceInterface()
|
||||
ui = MultiModalUI(
|
||||
@@ -214,34 +214,34 @@ def test_multimodal_ui() -> None:
|
||||
conversation_manager=conv_manager,
|
||||
voice_interface=voice_interface,
|
||||
)
|
||||
|
||||
|
||||
# Create session
|
||||
session_id = ui.create_session(
|
||||
user_id="test_user",
|
||||
preferred_modalities=[ModalityType.TEXT],
|
||||
)
|
||||
assert session_id is not None
|
||||
|
||||
|
||||
# Get session
|
||||
session = ui.get_session(session_id)
|
||||
assert session is not None
|
||||
assert session.user_id == "test_user"
|
||||
assert ModalityType.TEXT in session.active_modalities
|
||||
|
||||
|
||||
# Enable/disable modalities (voice interface is registered)
|
||||
assert ui.enable_modality(session_id, ModalityType.VOICE)
|
||||
session = ui.get_session(session_id)
|
||||
assert ModalityType.VOICE in session.active_modalities
|
||||
|
||||
|
||||
assert ui.disable_modality(session_id, ModalityType.VOICE)
|
||||
session = ui.get_session(session_id)
|
||||
assert ModalityType.VOICE not in session.active_modalities
|
||||
|
||||
|
||||
# Get statistics
|
||||
stats = ui.get_session_statistics(session_id)
|
||||
assert stats["session_id"] == session_id
|
||||
assert stats["user_id"] == "test_user"
|
||||
|
||||
|
||||
# End session
|
||||
assert ui.end_session(session_id)
|
||||
assert ui.get_session(session_id) is None
|
||||
@@ -252,24 +252,24 @@ def test_multimodal_ui_sync() -> None:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
conv_manager = ConversationManager()
|
||||
ui = MultiModalUI(
|
||||
orchestrator=orch,
|
||||
conversation_manager=conv_manager,
|
||||
)
|
||||
|
||||
|
||||
session_id = ui.create_session(user_id="test_user")
|
||||
|
||||
|
||||
# Test that session was created
|
||||
assert session_id is not None
|
||||
session = ui.get_session(session_id)
|
||||
assert session is not None
|
||||
|
||||
|
||||
# Test available modalities
|
||||
available = ui.get_available_modalities()
|
||||
assert isinstance(available, list)
|
||||
|
||||
|
||||
ui.end_session(session_id)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user