|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- import asyncio
- import logging
- from dataclasses import dataclass
-
- from agnext.application import WorkerAgentRuntime
- from agnext.components import TypeRoutedAgent, message_handler
- from agnext.core import MESSAGE_TYPE_REGISTRY, AgentId, MessageContext
-
-
- @dataclass
- class AskToGreet:
- content: str
-
-
- @dataclass
- class Greeting:
- content: str
-
-
- @dataclass
- class Feedback:
- content: str
-
-
- class ReceiveAgent(TypeRoutedAgent):
- def __init__(self) -> None:
- super().__init__("Receive Agent")
-
- @message_handler
- async def on_greet(self, message: Greeting, ctx: MessageContext) -> Greeting:
- return Greeting(content=f"Received: {message.content}")
-
- @message_handler
- async def on_feedback(self, message: Feedback, ctx: MessageContext) -> None:
- print(f"Feedback received: {message.content}")
-
-
- class GreeterAgent(TypeRoutedAgent):
- def __init__(self, receive_agent_id: AgentId) -> None:
- super().__init__("Greeter Agent")
- self._receive_agent_id = receive_agent_id
-
- @message_handler
- async def on_ask(self, message: AskToGreet, ctx: MessageContext) -> None:
- response = await self.send_message(Greeting(f"Hello, {message.content}!"), recipient=self._receive_agent_id)
- await self.publish_message(Feedback(f"Feedback: {response.content}"))
-
-
- async def main() -> None:
- runtime = WorkerAgentRuntime()
- MESSAGE_TYPE_REGISTRY.add_type(Greeting)
- MESSAGE_TYPE_REGISTRY.add_type(AskToGreet)
- MESSAGE_TYPE_REGISTRY.add_type(Feedback)
- await runtime.start(host_connection_string="localhost:50051")
-
- await runtime.register("reciever", lambda: ReceiveAgent())
- reciever = await runtime.get("reciever")
- await runtime.register("greeter", lambda: GreeterAgent(reciever))
-
- await runtime.publish_message(AskToGreet("Hello World!"), namespace="default")
-
- # Just to keep the runtime running
- try:
- await asyncio.sleep(1000000)
- except KeyboardInterrupt:
- pass
- await runtime.stop()
-
-
- if __name__ == "__main__":
- logging.basicConfig(level=logging.DEBUG)
- logger = logging.getLogger("agnext")
- logger.setLevel(logging.DEBUG)
- asyncio.run(main())
|