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, MessageContext @dataclass class AskToGreet: content: str @dataclass class Greeting: content: str @dataclass class ReturnedGreeting: content: str @dataclass class Feedback: content: str @dataclass class ReturnedFeedback: content: str class ReceiveAgent(TypeRoutedAgent): def __init__(self) -> None: super().__init__("Receive Agent") @message_handler async def on_greet(self, message: Greeting, ctx: MessageContext) -> None: await self.publish_message(ReturnedGreeting(f"Returned greeting: {message.content}")) @message_handler async def on_feedback(self, message: Feedback, ctx: MessageContext) -> None: await self.publish_message(ReturnedFeedback(f"Returned feedback: {message.content}")) class GreeterAgent(TypeRoutedAgent): def __init__(self) -> None: super().__init__("Greeter Agent") @message_handler async def on_ask(self, message: AskToGreet, ctx: MessageContext) -> None: await self.publish_message(Greeting(f"Hello, {message.content}!")) @message_handler async def on_returned_greet(self, message: ReturnedGreeting, ctx: MessageContext) -> None: await self.publish_message(Feedback(f"Feedback: {message.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) MESSAGE_TYPE_REGISTRY.add_type(ReturnedGreeting) MESSAGE_TYPE_REGISTRY.add_type(ReturnedFeedback) await runtime.start(host_connection_string="localhost:50051") await runtime.register("reciever", lambda: ReceiveAgent()) await runtime.register("greeter", lambda: GreeterAgent()) 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())