import asyncio
import logging
from dataclasses import dataclass
from agentopera.engine import (
ROOT_LOGGER_NAME,
DefaultSubscription,
DefaultMessageChannel,
MessageContext,
RoutedAgent,
message_handler,
try_get_known_serializers_for_type,
)
from agentopera.engine.runtime.distributed import DistAgentEngine
@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(RoutedAgent):
def __init__(self) -> None:
super().__init__("Receive Agent")
@message_handler
async def on_greet(self, message: Greeting, ctx: MessageContext) -> None:
print(f"ReceiveAgent on_greet: {message}, ctx.sender = {ctx.sender}")
await self.publish_message(
ReturnedGreeting(f"Returned greeting: {message.content}"),
DefaultMessageChannel(topic="topic_greeter", source=ctx.message_channel.source),
message_id=ctx.message_id,
)
@message_handler
async def on_feedback(self, message: Feedback, ctx: MessageContext) -> None:
print(f"ReceiveAgent on_feedback: {message}, ctx.sender = {ctx.sender}")
await self.publish_message(
ReturnedFeedback(f"Returned feedback: {message.content}"),
DefaultMessageChannel(topic="topic_greeter", source=ctx.message_channel.source),
message_id=ctx.message_id,
)
class GreeterAgent(RoutedAgent):
def __init__(self) -> None:
super().__init__("Greeter Agent")
@message_handler
async def on_ask(self, message: AskToGreet, ctx: MessageContext) -> None:
print(f"GreeterAgent on_ask: {message}, ctx.sender = {ctx.sender}")
await self.publish_message(
Greeting(f"Hello, {message.content}!"),
DefaultMessageChannel(topic="topic_receiver", source=ctx.message_channel.source),
message_id=ctx.message_id,
)
@message_handler
async def on_returned_greet(self, message: ReturnedGreeting, ctx: MessageContext) -> None:
print(f"GreeterAgent on_returned_greet: {message}, ctx.sender = {ctx.sender}")
await self.publish_message(
Feedback(f"Feedback: {message.content}"),
DefaultMessageChannel(topic="topic_receiver", source=ctx.message_channel.source),
message_id=ctx.message_id,
)