debug_delegation_events.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. #!/usr/bin/env python3
  2. """Show ALL events and saved messages - no filtering."""
  3. import asyncio
  4. import json
  5. from agents import ModelSettings, function_tool
  6. from agency_swarm import Agency, Agent
  7. @function_tool
  8. def analyze_data(data: str) -> str:
  9. return f"Analysis complete: {data}"
  10. manager = Agent(
  11. name="Manager",
  12. instructions="When asked to delegate, use send_message to ask Worker: 'Please analyze this data: XYZ123'",
  13. model_settings=ModelSettings(temperature=0),
  14. )
  15. worker = Agent(
  16. name="Worker",
  17. instructions="When asked to analyze, use analyze_data tool, then respond 'Analysis completed.'",
  18. model_settings=ModelSettings(temperature=0),
  19. tools=[analyze_data],
  20. )
  21. agency = Agency(manager, communication_flows=[manager > worker])
  22. async def main() -> None:
  23. # Track messages before
  24. before_count = len(agency.thread_manager.get_all_messages())
  25. print("=" * 80)
  26. print("STREAMING EVENTS")
  27. print("=" * 80)
  28. i = 0
  29. async for event in agency.get_response_stream("Please delegate", agent_name="Manager"):
  30. i += 1
  31. evt_type = getattr(event, "type", "?")
  32. agent = getattr(event, "agent", "")
  33. agent_run_id = getattr(event, "agent_run_id", "")
  34. parent_run_id = getattr(event, "parent_run_id", "")
  35. # Extract item info
  36. item_type = ""
  37. tool_name = ""
  38. call_id = ""
  39. content = ""
  40. if hasattr(event, "item") and event.item:
  41. item = event.item
  42. item_type = getattr(item, "type", "")
  43. if hasattr(item, "raw_item") and item.raw_item:
  44. raw = item.raw_item
  45. tool_name = getattr(raw, "name", "")
  46. call_id = getattr(raw, "call_id", "")
  47. if hasattr(raw, "content") and raw.content:
  48. content = str(raw.content[0].text if raw.content[0].text else "")[:30]
  49. # Extract data info
  50. data_type = ""
  51. delta = ""
  52. if hasattr(event, "data"):
  53. data = event.data
  54. data_type = str(getattr(data, "type", ""))
  55. delta = str(getattr(data, "delta", ""))[:50]
  56. # Build output line
  57. parts = [f"{i:3}"]
  58. if evt_type:
  59. parts.append(f"type={evt_type}")
  60. if item_type:
  61. parts.append(f"item={item_type}")
  62. if data_type:
  63. parts.append(f"data={data_type}")
  64. if agent:
  65. parts.append(f"agent={agent}")
  66. if tool_name:
  67. parts.append(f"tool={tool_name}")
  68. if delta:
  69. parts.append(f"delta={delta}")
  70. if content:
  71. parts.append(f"content={content}")
  72. if call_id:
  73. parts.append(f"call_id={call_id}")
  74. if agent_run_id:
  75. parts.append(f"agent_run_id={agent_run_id}")
  76. if parent_run_id:
  77. parts.append(f"parent_run_id={parent_run_id}")
  78. print(" | ".join(parts))
  79. print(f"\nTotal streaming events: {i}")
  80. # Show saved messages
  81. print("\n" + "=" * 80)
  82. print("SAVED MESSAGES (new_messages)")
  83. print("=" * 80)
  84. all_messages = agency.thread_manager.get_all_messages()
  85. new_messages = all_messages[before_count:]
  86. for j, msg in enumerate(new_messages, 1):
  87. msg_type = msg.get("type", "")
  88. role = msg.get("role", "")
  89. agent = msg.get("agent", "")
  90. name = msg.get("name", "")
  91. call_id = msg.get("call_id", "")
  92. agent_run_id = msg.get("agent_run_id", "")
  93. parent_run_id = msg.get("parent_run_id", "")
  94. # Extract content/arguments
  95. content_preview = ""
  96. if msg_type == "function_call":
  97. args = msg.get("arguments", "{}")
  98. try:
  99. args_dict = json.loads(args)
  100. if "recipient_agent" in args_dict:
  101. content_preview = f"to={args_dict['recipient_agent']}"
  102. except Exception:
  103. content_preview = args[:50]
  104. elif role == "assistant":
  105. content = msg.get("content", "")
  106. if isinstance(content, str):
  107. content_preview = content[:50]
  108. elif isinstance(content, list) and content:
  109. content_preview = str(content[0])[:50]
  110. # Build message line
  111. parts = [f"{j:3}"]
  112. if msg_type:
  113. parts.append(f"type={msg_type}")
  114. if role:
  115. parts.append(f"role={role}")
  116. if agent:
  117. parts.append(f"agent={agent}")
  118. if name:
  119. parts.append(f"name={name}")
  120. if content_preview:
  121. parts.append(f"preview={content_preview}")
  122. if call_id:
  123. parts.append(f"call_id={call_id}")
  124. if agent_run_id:
  125. parts.append(f"agent_run_id={agent_run_id}")
  126. if parent_run_id:
  127. parts.append(f"parent_run_id={parent_run_id}")
  128. print(" | ".join(parts))
  129. print(f"\nTotal saved messages: {len(new_messages)}")
  130. if __name__ == "__main__":
  131. asyncio.run(main())