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.5 kB

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