test_agent_flow.py 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from __future__ import annotations
  2. import operator
  3. import pytest
  4. from agency_swarm import Agent
  5. from agency_swarm.agent.agent_flow import AgentFlow
  6. def _agent(name: str) -> Agent:
  7. return Agent(name=name, instructions=f"Instructions for {name}", model="gpt-5.4-mini")
  8. def test_agent_flow_gt_rejects_non_agent() -> None:
  9. flow = AgentFlow([_agent("A"), _agent("B")])
  10. with pytest.raises(TypeError, match="Can only chain to Agent instances"):
  11. operator.gt(flow, object())
  12. def test_agent_flow_lt_rejects_non_agent() -> None:
  13. flow = AgentFlow([_agent("A"), _agent("B")])
  14. with pytest.raises(TypeError, match="Can only chain to Agent instances"):
  15. operator.lt(flow, object())
  16. def test_agent_flow_chain_and_repr() -> None:
  17. agent_a = _agent("A")
  18. agent_b = _agent("B")
  19. agent_c = _agent("C")
  20. agent_d = _agent("D")
  21. flow = AgentFlow([agent_a, agent_b])
  22. expanded = flow > agent_c
  23. prepended = expanded < agent_d
  24. assert expanded.get_all_flows() == [(agent_a, agent_b), (agent_b, agent_c)]
  25. assert prepended.get_all_flows() == [(agent_d, agent_a), (agent_a, agent_b), (agent_b, agent_c)]
  26. assert repr(expanded) == "AgentFlow(A > B > C)"
  27. def test_agent_flow_bool_tracks_and_clears_chain_flows() -> None:
  28. AgentFlow.get_and_clear_chain_flows()
  29. agent_a = _agent("A")
  30. agent_b = _agent("B")
  31. agent_c = _agent("C")
  32. flow = AgentFlow([agent_a, agent_b, agent_c])
  33. assert bool(flow) is True
  34. assert bool(flow) is True # duplicate truthiness should not duplicate tracked flows
  35. tracked = AgentFlow.get_and_clear_chain_flows()
  36. assert tracked == [(agent_a, agent_b), (agent_b, agent_c)]
  37. assert AgentFlow.get_and_clear_chain_flows() == []