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.

run_worker_rpc.py 2.2 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import asyncio
  2. import logging
  3. from dataclasses import dataclass
  4. from agnext.application import WorkerAgentRuntime
  5. from agnext.components import TypeRoutedAgent, message_handler
  6. from agnext.core import MESSAGE_TYPE_REGISTRY, AgentId, MessageContext
  7. @dataclass
  8. class AskToGreet:
  9. content: str
  10. @dataclass
  11. class Greeting:
  12. content: str
  13. @dataclass
  14. class Feedback:
  15. content: str
  16. class ReceiveAgent(TypeRoutedAgent):
  17. def __init__(self) -> None:
  18. super().__init__("Receive Agent")
  19. @message_handler
  20. async def on_greet(self, message: Greeting, ctx: MessageContext) -> Greeting:
  21. return Greeting(content=f"Received: {message.content}")
  22. @message_handler
  23. async def on_feedback(self, message: Feedback, ctx: MessageContext) -> None:
  24. print(f"Feedback received: {message.content}")
  25. class GreeterAgent(TypeRoutedAgent):
  26. def __init__(self, receive_agent_id: AgentId) -> None:
  27. super().__init__("Greeter Agent")
  28. self._receive_agent_id = receive_agent_id
  29. @message_handler
  30. async def on_ask(self, message: AskToGreet, ctx: MessageContext) -> None:
  31. response = await self.send_message(Greeting(f"Hello, {message.content}!"), recipient=self._receive_agent_id)
  32. await self.publish_message(Feedback(f"Feedback: {response.content}"))
  33. async def main() -> None:
  34. runtime = WorkerAgentRuntime()
  35. MESSAGE_TYPE_REGISTRY.add_type(Greeting)
  36. MESSAGE_TYPE_REGISTRY.add_type(AskToGreet)
  37. MESSAGE_TYPE_REGISTRY.add_type(Feedback)
  38. await runtime.start(host_connection_string="localhost:50051")
  39. await runtime.register("reciever", lambda: ReceiveAgent())
  40. reciever = await runtime.get("reciever")
  41. await runtime.register("greeter", lambda: GreeterAgent(reciever))
  42. await runtime.publish_message(AskToGreet("Hello World!"), namespace="default")
  43. # Just to keep the runtime running
  44. try:
  45. await asyncio.sleep(1000000)
  46. except KeyboardInterrupt:
  47. pass
  48. await runtime.stop()
  49. if __name__ == "__main__":
  50. logging.basicConfig(level=logging.DEBUG)
  51. logger = logging.getLogger("agnext")
  52. logger.setLevel(logging.DEBUG)
  53. asyncio.run(main())