You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

test_closure_agent.py 1.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. from dataclasses import dataclass
  2. import pytest
  3. from agnext.application import SingleThreadedAgentRuntime
  4. from agnext.core import AgentRuntime, AgentId
  5. from agnext.components import ClosureAgent
  6. import asyncio
  7. from agnext.core import MessageContext
  8. @dataclass
  9. class Message:
  10. content: str
  11. @pytest.mark.asyncio
  12. async def test_register_receives_publish() -> None:
  13. runtime = SingleThreadedAgentRuntime()
  14. queue = asyncio.Queue[tuple[str, str]]()
  15. async def log_message(_runtime: AgentRuntime, id: AgentId, message: Message, ctx: MessageContext) -> None:
  16. key = id.key
  17. await queue.put((key, message.content))
  18. await runtime.register("name", lambda: ClosureAgent("My agent", log_message))
  19. run_context = runtime.start()
  20. await runtime.publish_message(Message("first message"), namespace="default")
  21. await runtime.publish_message(Message("second message"), namespace="default")
  22. await runtime.publish_message(Message("third message"), namespace="default")
  23. await run_context.stop_when_idle()
  24. assert queue.qsize() == 3
  25. assert queue.get_nowait() == ("default", "first message")
  26. assert queue.get_nowait() == ("default", "second message")
  27. assert queue.get_nowait() == ("default", "third message")
  28. assert queue.empty()