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