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:
@@ -4,13 +4,12 @@ import pytest
|
||||
|
||||
from fusionagi.core import (
|
||||
EventBus,
|
||||
StateManager,
|
||||
Orchestrator,
|
||||
InvalidStateTransitionError,
|
||||
VALID_STATE_TRANSITIONS,
|
||||
JsonFileBackend,
|
||||
Orchestrator,
|
||||
StateManager,
|
||||
)
|
||||
from fusionagi.schemas.task import Task, TaskState, TaskPriority
|
||||
from fusionagi.schemas.task import Task, TaskState
|
||||
|
||||
|
||||
class TestStateManagerWithBackend:
|
||||
@@ -20,10 +19,10 @@ class TestStateManagerWithBackend:
|
||||
"""Test basic get/set operations."""
|
||||
sm = StateManager()
|
||||
task = Task(task_id="test-1", goal="Test goal")
|
||||
|
||||
|
||||
sm.set_task(task)
|
||||
retrieved = sm.get_task("test-1")
|
||||
|
||||
|
||||
assert retrieved is not None
|
||||
assert retrieved.task_id == "test-1"
|
||||
assert retrieved.goal == "Test goal"
|
||||
@@ -33,9 +32,9 @@ class TestStateManagerWithBackend:
|
||||
sm = StateManager()
|
||||
task = Task(task_id="test-2", goal="Test")
|
||||
sm.set_task(task)
|
||||
|
||||
|
||||
assert sm.get_task_state("test-2") == TaskState.PENDING
|
||||
|
||||
|
||||
sm.set_task_state("test-2", TaskState.ACTIVE)
|
||||
assert sm.get_task_state("test-2") == TaskState.ACTIVE
|
||||
|
||||
@@ -44,10 +43,10 @@ class TestStateManagerWithBackend:
|
||||
sm = StateManager()
|
||||
task = Task(task_id="test-3", goal="Test")
|
||||
sm.set_task(task)
|
||||
|
||||
|
||||
sm.append_trace("test-3", {"step": "step1", "result": "ok"})
|
||||
sm.append_trace("test-3", {"step": "step2", "result": "ok"})
|
||||
|
||||
|
||||
trace = sm.get_trace("test-3")
|
||||
assert len(trace) == 2
|
||||
assert trace[0]["step"] == "step1"
|
||||
@@ -56,14 +55,14 @@ class TestStateManagerWithBackend:
|
||||
def test_state_manager_list_tasks(self):
|
||||
"""Test listing tasks with filter."""
|
||||
sm = StateManager()
|
||||
|
||||
|
||||
sm.set_task(Task(task_id="t1", goal="Goal 1", state=TaskState.PENDING))
|
||||
sm.set_task(Task(task_id="t2", goal="Goal 2", state=TaskState.ACTIVE))
|
||||
sm.set_task(Task(task_id="t3", goal="Goal 3", state=TaskState.ACTIVE))
|
||||
|
||||
|
||||
all_tasks = sm.list_tasks()
|
||||
assert len(all_tasks) == 3
|
||||
|
||||
|
||||
active_tasks = sm.list_tasks(state=TaskState.ACTIVE)
|
||||
assert len(active_tasks) == 2
|
||||
|
||||
@@ -71,10 +70,10 @@ class TestStateManagerWithBackend:
|
||||
"""Test task counting."""
|
||||
sm = StateManager()
|
||||
assert sm.task_count() == 0
|
||||
|
||||
|
||||
sm.set_task(Task(task_id="t1", goal="Goal 1"))
|
||||
sm.set_task(Task(task_id="t2", goal="Goal 2"))
|
||||
|
||||
|
||||
assert sm.task_count() == 2
|
||||
|
||||
|
||||
@@ -117,13 +116,13 @@ class TestOrchestratorStateTransitions:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
task_id = orch.submit_task(goal="Test task")
|
||||
|
||||
|
||||
# PENDING -> ACTIVE is valid
|
||||
orch.set_task_state(task_id, TaskState.ACTIVE)
|
||||
assert orch.get_task_state(task_id) == TaskState.ACTIVE
|
||||
|
||||
|
||||
# ACTIVE -> COMPLETED is valid
|
||||
orch.set_task_state(task_id, TaskState.COMPLETED)
|
||||
assert orch.get_task_state(task_id) == TaskState.COMPLETED
|
||||
@@ -133,15 +132,15 @@ class TestOrchestratorStateTransitions:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
task_id = orch.submit_task(goal="Test task")
|
||||
orch.set_task_state(task_id, TaskState.ACTIVE)
|
||||
orch.set_task_state(task_id, TaskState.COMPLETED)
|
||||
|
||||
|
||||
# COMPLETED -> ACTIVE is invalid (terminal state)
|
||||
with pytest.raises(InvalidStateTransitionError) as exc_info:
|
||||
orch.set_task_state(task_id, TaskState.ACTIVE)
|
||||
|
||||
|
||||
assert exc_info.value.task_id == task_id
|
||||
assert exc_info.value.from_state == TaskState.COMPLETED
|
||||
assert exc_info.value.to_state == TaskState.ACTIVE
|
||||
@@ -151,9 +150,9 @@ class TestOrchestratorStateTransitions:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
task_id = orch.submit_task(goal="Test task")
|
||||
|
||||
|
||||
assert orch.can_transition(task_id, TaskState.ACTIVE) is True
|
||||
assert orch.can_transition(task_id, TaskState.CANCELLED) is True
|
||||
assert orch.can_transition(task_id, TaskState.COMPLETED) is False # Can't skip ACTIVE
|
||||
@@ -163,11 +162,11 @@ class TestOrchestratorStateTransitions:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
task_id = orch.submit_task(goal="Test task")
|
||||
orch.set_task_state(task_id, TaskState.ACTIVE)
|
||||
orch.set_task_state(task_id, TaskState.COMPLETED)
|
||||
|
||||
|
||||
# Force allows invalid transition
|
||||
orch.set_task_state(task_id, TaskState.PENDING, force=True)
|
||||
assert orch.get_task_state(task_id) == TaskState.PENDING
|
||||
@@ -177,11 +176,11 @@ class TestOrchestratorStateTransitions:
|
||||
bus = EventBus()
|
||||
state = StateManager()
|
||||
orch = Orchestrator(event_bus=bus, state_manager=state)
|
||||
|
||||
|
||||
task_id = orch.submit_task(goal="Test task")
|
||||
orch.set_task_state(task_id, TaskState.ACTIVE)
|
||||
orch.set_task_state(task_id, TaskState.FAILED)
|
||||
|
||||
|
||||
# FAILED -> PENDING is valid (retry)
|
||||
orch.set_task_state(task_id, TaskState.PENDING)
|
||||
assert orch.get_task_state(task_id) == TaskState.PENDING
|
||||
@@ -194,13 +193,13 @@ class TestEventBus:
|
||||
"""Test basic pub/sub."""
|
||||
bus = EventBus()
|
||||
received = []
|
||||
|
||||
|
||||
def handler(event_type, payload):
|
||||
received.append({"type": event_type, "payload": payload})
|
||||
|
||||
|
||||
bus.subscribe("test_event", handler)
|
||||
bus.publish("test_event", {"data": "value"})
|
||||
|
||||
|
||||
assert len(received) == 1
|
||||
assert received[0]["payload"]["data"] == "value"
|
||||
|
||||
@@ -209,12 +208,12 @@ class TestEventBus:
|
||||
bus = EventBus()
|
||||
received1 = []
|
||||
received2 = []
|
||||
|
||||
|
||||
bus.subscribe("test", lambda t, p: received1.append(p))
|
||||
bus.subscribe("test", lambda t, p: received2.append(p))
|
||||
|
||||
|
||||
bus.publish("test", {"n": 1})
|
||||
|
||||
|
||||
assert len(received1) == 1
|
||||
assert len(received2) == 1
|
||||
|
||||
@@ -222,14 +221,14 @@ class TestEventBus:
|
||||
"""Test unsubscribe stops delivery."""
|
||||
bus = EventBus()
|
||||
received = []
|
||||
|
||||
|
||||
def handler(t, p):
|
||||
received.append(p)
|
||||
|
||||
|
||||
bus.subscribe("test", handler)
|
||||
bus.publish("test", {})
|
||||
assert len(received) == 1
|
||||
|
||||
|
||||
bus.unsubscribe("test", handler)
|
||||
bus.publish("test", {})
|
||||
assert len(received) == 1 # No new messages
|
||||
@@ -238,9 +237,9 @@ class TestEventBus:
|
||||
"""Test clear removes all subscribers."""
|
||||
bus = EventBus()
|
||||
received = []
|
||||
|
||||
|
||||
bus.subscribe("test", lambda t, p: received.append(p))
|
||||
bus.clear()
|
||||
bus.publish("test", {})
|
||||
|
||||
|
||||
assert len(received) == 0
|
||||
|
||||
Reference in New Issue
Block a user