Files
oai-web/server/smoke_test_live.py

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())