autogen/examples/futures.py

53 lines
1.7 KiB
Python
Raw Normal View History

2024-05-15 12:31:13 -04:00
import asyncio
from dataclasses import dataclass
2024-05-17 11:09:59 -04:00
from agnext.agent_components.type_routed_agent import TypeRoutedAgent, event_handler
from agnext.application_components.single_threaded_agent_runtime import SingleThreadedAgentRuntime
2024-05-15 12:31:13 -04:00
from agnext.core.agent import Agent
from agnext.core.agent_runtime import AgentRuntime
2024-05-15 12:31:13 -04:00
from agnext.core.message import Message
@dataclass
class MessageType(Message):
message: str
sender: str
class Inner(TypeRoutedAgent[MessageType]):
def __init__(self, name: str, router: AgentRuntime[MessageType]) -> None:
2024-05-15 12:31:13 -04:00
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: AgentRuntime[MessageType], inner: Agent[MessageType]) -> None:
2024-05-15 12:31:13 -04:00
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 = SingleThreadedAgentRuntime[MessageType]()
2024-05-15 12:31:13 -04:00
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())