| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import json
- import pytest
- from agent_lab.application.event_agent import EventAgent
- from agent_lab.application.tools import ToolDefinition, ToolRegistry
- from agent_lab.domain.events import ToolCallEvent
- @pytest.mark.asyncio
- async def test_event_agent_executes_enabled_tool_as_tool_reply_message():
- agent = EventAgent(enabled_tools=["handoff_note"])
- event = ToolCallEvent(
- id="call_1",
- name="handoff_note",
- arguments={"message": "inspect this event"},
- raw_arguments='{"message":"inspect this event"}',
- )
- reply = await agent.handle(event)
- assert reply.role == "tool"
- assert reply.tool_call_id == "call_1"
- assert reply.name == "handoff_note"
- assert json.loads(reply.content) == {
- "tool": "handoff_note",
- "message": "inspect this event",
- }
- @pytest.mark.asyncio
- async def test_event_agent_returns_registry_errors_for_disabled_and_unknown_tools():
- registry = ToolRegistry(
- [
- ToolDefinition(
- name="handoff_note",
- description="Send a note to the event agent.",
- parameters={"type": "object"},
- handler=lambda event: {"tool": event.name, "message": "handled"},
- )
- ]
- )
- disabled_reply = await EventAgent(
- enabled_tools=[],
- registry=registry,
- ).handle(
- ToolCallEvent(
- id="call_1",
- name="handoff_note",
- arguments={"message": "inspect this event"},
- raw_arguments='{"message":"inspect this event"}',
- )
- )
- unknown_reply = await EventAgent(
- enabled_tools=["missing_tool"],
- registry=registry,
- ).handle(
- ToolCallEvent(
- id="call_2",
- name="missing_tool",
- arguments={},
- raw_arguments="{}",
- )
- )
- assert json.loads(disabled_reply.content) == {
- "tool": "handoff_note",
- "error": "tool disabled",
- }
- assert json.loads(unknown_reply.content) == {
- "tool": "missing_tool",
- "error": "unknown tool",
- }
- @pytest.mark.asyncio
- async def test_event_agent_returns_structured_error_when_tool_handler_raises():
- def fail_tool(event: ToolCallEvent) -> dict:
- raise RuntimeError("boom")
- registry = ToolRegistry(
- [
- ToolDefinition(
- name="handoff_note",
- description="Send a note to the event agent.",
- parameters={"type": "object"},
- handler=fail_tool,
- )
- ]
- )
- event = ToolCallEvent(
- id="call_1",
- name="handoff_note",
- arguments={"message": "inspect this event"},
- raw_arguments='{"message":"inspect this event"}',
- )
- reply = await EventAgent(
- enabled_tools=["handoff_note"],
- registry=registry,
- ).handle(event)
- assert reply.role == "tool"
- assert reply.tool_call_id == "call_1"
- assert json.loads(reply.content) == {
- "tool": "handoff_note",
- "error": "tool handler failed: boom",
- }
|