85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
"""
|
|
smoke_test_live.py — Phase 1 live test. Requires a real API key in .env.
|
|
|
|
Tests the full agent loop end-to-end with EchoTool:
|
|
1. Agent calls EchoTool in response to a user message
|
|
2. Receives tool result and produces a final text response
|
|
3. All events are logged
|
|
|
|
Run: python smoke_test_live.py
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import asyncio
|
|
import sys
|
|
import os
|
|
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
|
|
|
|
async def run():
|
|
print("=" * 60)
|
|
print("aide — Phase 1 Live Agent Test")
|
|
print("=" * 60)
|
|
|
|
from server.database import init_db
|
|
init_db()
|
|
|
|
from server.agent.tool_registry import ToolRegistry
|
|
from server.tools.mock import EchoTool, ConfirmTool
|
|
from server.agent.agent import Agent, run_and_collect, DoneEvent, ErrorEvent, ToolStartEvent, ToolDoneEvent
|
|
|
|
registry = ToolRegistry()
|
|
registry.register(EchoTool())
|
|
registry.register(ConfirmTool())
|
|
|
|
agent = Agent(registry=registry)
|
|
|
|
print("\n[Test 1] Echo tool call")
|
|
print("-" * 40)
|
|
message = 'Please use the echo tool to echo back the phrase "Phase 1 works!"'
|
|
|
|
text, calls, usage, events = await run_and_collect(
|
|
agent=agent,
|
|
message=message,
|
|
session_id="live-test-1",
|
|
)
|
|
|
|
print(f"Events received: {len(events)}")
|
|
for event in events:
|
|
if isinstance(event, ToolStartEvent):
|
|
print(f" → Tool call: {event.tool_name}({event.arguments})")
|
|
elif isinstance(event, ToolDoneEvent):
|
|
print(f" ← Tool done: success={event.success}, result={event.result_summary!r}")
|
|
elif isinstance(event, ErrorEvent):
|
|
print(f" ✗ Error: {event.message}")
|
|
|
|
print(f"\nFinal text:\n{text}")
|
|
print(f"Tool calls made: {calls}")
|
|
print(f"Tokens: {usage.input_tokens} in / {usage.output_tokens} out")
|
|
|
|
if calls == 0:
|
|
print("\nWARNING: No tool calls were made. The model may not have used the tool.")
|
|
elif not isinstance(events[-1], ErrorEvent):
|
|
print("\n✓ Live agent test passed")
|
|
else:
|
|
print("\n✗ Live agent test failed — see error above")
|
|
sys.exit(1)
|
|
|
|
print("\n[Test 2] Kill switch")
|
|
print("-" * 40)
|
|
from server.database import credential_store
|
|
credential_store.set("system:paused", "1")
|
|
_, _, _, events = await run_and_collect(agent=agent, message="hello")
|
|
assert any(isinstance(e, ErrorEvent) for e in events), "Kill switch did not block agent"
|
|
credential_store.delete("system:paused")
|
|
print("✓ Kill switch blocks agent when paused")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Live tests complete ✓")
|
|
print("=" * 60)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(run())
|