|
|
"""Simple test to manually check tool execution during workflow streaming.""" |
|
|
|
|
|
import asyncio |
|
|
import os |
|
|
from dotenv import load_dotenv |
|
|
from agent import TeacherStudentAgentWorkflow |
|
|
from tools.simple_tools import get_workflow_state, reset_workflow_state |
|
|
|
|
|
load_dotenv(os.path.join(os.path.dirname(__file__), 'env.local')) |
|
|
|
|
|
async def test_workflow_tool_execution(): |
|
|
"""Monitor tool execution during workflow execution.""" |
|
|
print("Testing workflow tool execution...") |
|
|
|
|
|
|
|
|
reset_workflow_state() |
|
|
print(f"Initial state: {get_workflow_state()}") |
|
|
|
|
|
workflow = TeacherStudentAgentWorkflow() |
|
|
|
|
|
|
|
|
print("\nStarting workflow...") |
|
|
handler = workflow.agent_workflow.run(user_msg="Write a short report about renewable energy") |
|
|
|
|
|
tool_calls_seen = [] |
|
|
tool_results_seen = [] |
|
|
|
|
|
print("\nMonitoring events...") |
|
|
async for event in handler.stream_events(): |
|
|
event_type = type(event).__name__ |
|
|
print(f"π
Event: {event_type}") |
|
|
|
|
|
|
|
|
if hasattr(event, 'response') and hasattr(event.response, 'content'): |
|
|
if event.response.content: |
|
|
print(f" π¬ Agent Response: {event.response.content}") |
|
|
|
|
|
|
|
|
content = event.response.content.lower() |
|
|
if 'handoff' in content or 'handing off' in content: |
|
|
print(f" π HANDOFF DETECTED: {event.response.content}") |
|
|
|
|
|
|
|
|
if hasattr(event, 'tool_name') and hasattr(event, 'tool_kwargs'): |
|
|
tool_call_info = { |
|
|
'tool_name': event.tool_name, |
|
|
'tool_kwargs': event.tool_kwargs, |
|
|
'event_type': event_type |
|
|
} |
|
|
tool_calls_seen.append(tool_call_info) |
|
|
print(f" π¨ Tool Call: {event.tool_name}") |
|
|
print(f" Args: {event.tool_kwargs}") |
|
|
|
|
|
|
|
|
current_state = get_workflow_state() |
|
|
if event.tool_name == 'write_report': |
|
|
print(f" State after write_report call:") |
|
|
print(f" - report_content: {current_state.get('report_content', 'Not written')[:50]}...") |
|
|
print(f" - structured_report: {current_state.get('structured_report') is not None}") |
|
|
|
|
|
|
|
|
if hasattr(event, 'current_agent_name'): |
|
|
print(f" π€ Current Agent: {event.current_agent_name}") |
|
|
|
|
|
if hasattr(event, 'tool_output'): |
|
|
tool_result_info = { |
|
|
'tool_name': getattr(event, 'tool_name', 'unknown'), |
|
|
'tool_output': event.tool_output, |
|
|
'event_type': event_type |
|
|
} |
|
|
tool_results_seen.append(tool_result_info) |
|
|
print(f" π§ Tool Result: {getattr(event, 'tool_name', 'unknown')}") |
|
|
print(f" Output: {str(event.tool_output)[:100]}...") |
|
|
|
|
|
print(f"\nπ Summary:") |
|
|
print(f"Tool calls seen: {len(tool_calls_seen)}") |
|
|
print(f"Tool results seen: {len(tool_results_seen)}") |
|
|
|
|
|
for i, call in enumerate(tool_calls_seen): |
|
|
print(f" Call {i+1}: {call['tool_name']} ({call['event_type']})") |
|
|
|
|
|
for i, result in enumerate(tool_results_seen): |
|
|
print(f" Result {i+1}: {result['tool_name']} ({result['event_type']})") |
|
|
|
|
|
|
|
|
final_state = get_workflow_state() |
|
|
print(f"\nFinal state:") |
|
|
print(f"- Research notes: {len(final_state.get('research_notes', {}))}") |
|
|
print(f"- Report content: {final_state.get('report_content', 'Not written')[:100]}...") |
|
|
print(f"- Has structured report: {final_state.get('structured_report') is not None}") |
|
|
|
|
|
|
|
|
write_report_calls = [c for c in tool_calls_seen if c['tool_name'] == 'write_report'] |
|
|
write_report_results = [r for r in tool_results_seen if r['tool_name'] == 'write_report'] |
|
|
|
|
|
print(f"\nDiagnosis:") |
|
|
print(f"- write_report calls: {len(write_report_calls)}") |
|
|
print(f"- write_report results: {len(write_report_results)}") |
|
|
|
|
|
if write_report_calls and not write_report_results: |
|
|
print("β ISSUE: write_report tool was called but no results were seen!") |
|
|
print("This suggests the tool function is never actually executed.") |
|
|
elif len(write_report_calls) != len(write_report_results): |
|
|
print(f"β ISSUE: Mismatch between calls ({len(write_report_calls)}) and results ({len(write_report_results)})") |
|
|
else: |
|
|
print("β
Tool call/result count matches") |
|
|
|
|
|
if __name__ == "__main__": |
|
|
asyncio.run(test_workflow_tool_execution()) |