mirror of
https://github.com/microsoft/autogen.git
synced 2025-07-14 04:20:52 +00:00
53 lines
1.6 KiB
Python
53 lines
1.6 KiB
Python
![]() |
import asyncio
|
||
|
from dataclasses import dataclass
|
||
|
|
||
|
from agnext.core.agent import Agent
|
||
|
from agnext.core.message import Message
|
||
|
from agnext.core.message_router import MessageRouter
|
||
|
from agnext.queue_message_router import QueueMessageRouter
|
||
|
from agnext.type_routed_agent import TypeRoutedAgent, event_handler
|
||
|
|
||
|
|
||
|
@dataclass
|
||
|
class MessageType(Message):
|
||
|
message: str
|
||
|
sender: str
|
||
|
|
||
|
|
||
|
class Inner(TypeRoutedAgent[MessageType]):
|
||
|
def __init__(self, name: str, router: MessageRouter[MessageType]) -> None:
|
||
|
super().__init__(name, router)
|
||
|
|
||
|
@event_handler(MessageType)
|
||
|
async def on_new_event(self, event: MessageType) -> MessageType:
|
||
|
return MessageType(message=f"Inner: {event.message}", sender=self.name)
|
||
|
|
||
|
|
||
|
class Outer(TypeRoutedAgent[MessageType]):
|
||
|
def __init__(self, name: str, router: MessageRouter[MessageType], inner: Agent[MessageType]) -> None:
|
||
|
super().__init__(name, router)
|
||
|
self._inner = inner
|
||
|
|
||
|
@event_handler(MessageType)
|
||
|
async def on_new_event(self, event: MessageType) -> MessageType:
|
||
|
inner_response = self._send_message(event, self._inner)
|
||
|
inner_message = await inner_response
|
||
|
return MessageType(message=f"Outer: {inner_message.message}", sender=self.name)
|
||
|
|
||
|
|
||
|
async def main() -> None:
|
||
|
router = QueueMessageRouter[MessageType]()
|
||
|
|
||
|
inner = Inner("inner", router)
|
||
|
outer = Outer("outer", router, inner)
|
||
|
response = router.send_message(MessageType(message="Hello", sender="external"), outer)
|
||
|
|
||
|
while not response.done():
|
||
|
await router.process_next()
|
||
|
|
||
|
print(await response)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
asyncio.run(main())
|