test_conversation_starters_streaming.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import pytest
  2. from agents.stream_events import RawResponsesStreamEvent, RunItemStreamEvent
  3. from agency_swarm import Agent
  4. from agency_swarm.agent.conversation_starters_streaming import stream_cached_items_events
  5. @pytest.mark.asyncio
  6. async def test_stream_cached_items_preserves_handoff_output_type() -> None:
  7. agent = Agent(
  8. name="StreamAgent",
  9. instructions="You are helpful.",
  10. model="gpt-5.4-mini",
  11. )
  12. items = [
  13. {
  14. "type": "handoff_output_item",
  15. "call_id": "call_handoff_1",
  16. "output": '{"assistant": "Worker"}',
  17. }
  18. ]
  19. events = [event async for event in stream_cached_items_events(items=items, agent=agent)]
  20. run_item_events = [event for event in events if isinstance(event, RunItemStreamEvent)]
  21. assert run_item_events
  22. assert run_item_events[0].item.type == "handoff_output_item"
  23. @pytest.mark.asyncio
  24. async def test_stream_cached_items_emits_response_envelope_for_tool_calls() -> None:
  25. agent = Agent(
  26. name="StreamAgent",
  27. instructions="You are helpful.",
  28. model="gpt-5.4-mini",
  29. )
  30. items = [
  31. {
  32. "type": "function_call",
  33. "call_id": "call_weather_1",
  34. "name": "get_weather",
  35. "arguments": '{"location":"London"}',
  36. "role": "assistant",
  37. }
  38. ]
  39. events = [event async for event in stream_cached_items_events(items=items, agent=agent)]
  40. raw_events = [event for event in events if isinstance(event, RawResponsesStreamEvent)]
  41. raw_types = [event.data.type for event in raw_events if hasattr(event.data, "type")]
  42. assert raw_types
  43. assert raw_types[0] == "response.created"
  44. assert raw_types[-1] == "response.completed"
  45. @pytest.mark.asyncio
  46. async def test_stream_cached_items_emits_reasoning_summary_only_once() -> None:
  47. agent = Agent(
  48. name="StreamAgent",
  49. instructions="You are helpful.",
  50. model="gpt-5.4-mini",
  51. )
  52. items = [
  53. {
  54. "type": "reasoning",
  55. "id": "rs_test",
  56. "summary": [{"text": "Thinking", "type": "summary_text"}],
  57. }
  58. ]
  59. events = [event async for event in stream_cached_items_events(items=items, agent=agent)]
  60. raw_events = [event for event in events if isinstance(event, RawResponsesStreamEvent)]
  61. raw_types = [event.data.type for event in raw_events if hasattr(event.data, "type")]
  62. assert any(event_type.startswith("response.reasoning_summary_") for event_type in raw_types)
  63. assert "response.output_item.added" not in raw_types
  64. assert "response.output_item.done" not in raw_types