Humanlearning's picture
working agent
741c3da
"""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 state
reset_workflow_state()
print(f"Initial state: {get_workflow_state()}")
workflow = TeacherStudentAgentWorkflow()
# Start workflow
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}")
# Check for agent outputs and their content
if hasattr(event, 'response') and hasattr(event.response, 'content'):
if event.response.content:
print(f" πŸ’¬ Agent Response: {event.response.content}")
# Check if this looks like a handoff message
content = event.response.content.lower()
if 'handoff' in content or 'handing off' in content:
print(f" πŸ”„ HANDOFF DETECTED: {event.response.content}")
# Monitor for tool-related events
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}")
# Check state after this tool call event
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}")
# Check for agent name changes (handoffs)
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 check
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}")
# Try to identify the issue
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())