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.

__init__.py 1.4 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from dataclasses import dataclass
  2. from typing import Any
  3. from agnext.components import RoutedAgent, message_handler
  4. from agnext.components import DefaultTopicId
  5. from agnext.core import BaseAgent
  6. from agnext.core import MessageContext
  7. @dataclass
  8. class MessageType:
  9. ...
  10. @dataclass
  11. class CascadingMessageType:
  12. round: int
  13. class LoopbackAgent(RoutedAgent):
  14. def __init__(self) -> None:
  15. super().__init__("A loop back agent.")
  16. self.num_calls = 0
  17. @message_handler
  18. async def on_new_message(self, message: MessageType, ctx: MessageContext) -> MessageType:
  19. self.num_calls += 1
  20. return message
  21. class CascadingAgent(RoutedAgent):
  22. def __init__(self, max_rounds: int) -> None:
  23. super().__init__("A cascading agent.")
  24. self.num_calls = 0
  25. self.max_rounds = max_rounds
  26. @message_handler
  27. async def on_new_message(self, message: CascadingMessageType, ctx: MessageContext) -> None:
  28. self.num_calls += 1
  29. if message.round == self.max_rounds:
  30. return
  31. await self.publish_message(CascadingMessageType(round=message.round + 1), topic_id=DefaultTopicId())
  32. class NoopAgent(BaseAgent):
  33. def __init__(self) -> None:
  34. super().__init__("A no op agent")
  35. async def on_message(self, message: Any, ctx: MessageContext) -> Any:
  36. raise NotImplementedError