autogen/examples/futures.py
Jack Gerrits 89f1133831 migrate name, desc, subs to metadata (#83)
* migrate name, desc, subs to metadata

* fix quote in f string

* remove file

* add metadata func to runtime

* format
2024-06-17 10:44:46 -04:00

51 lines
1.7 KiB
Python

import asyncio
from dataclasses import dataclass
from agnext.application import SingleThreadedAgentRuntime
from agnext.components import TypeRoutedAgent, message_handler
from agnext.core import Agent, AgentRuntime, CancellationToken
@dataclass
class MessageType:
body: str
sender: str
class Inner(TypeRoutedAgent): # type: ignore
def __init__(self, name: str, router: AgentRuntime) -> None: # type: ignore
super().__init__(name, "The inner agent", router)
@message_handler() # type: ignore
async def on_new_message(self, message: MessageType, cancellation_token: CancellationToken) -> MessageType: # type: ignore
return MessageType(body=f"Inner: {message.body}", sender=self.metadata["name"])
class Outer(TypeRoutedAgent): # type: ignore
def __init__(self, name: str, router: AgentRuntime, inner: Agent) -> None: # type: ignore
super().__init__(name, "The outter agent", router)
self._inner = inner
@message_handler() # type: ignore
async def on_new_message(self, message: MessageType, cancellation_token: CancellationToken) -> MessageType: # type: ignore
inner_response = self._send_message(message, self._inner)
inner_message = await inner_response
assert isinstance(inner_message, MessageType)
return MessageType(body=f"Outer: {inner_message.body}", sender=self.metadata["name"])
async def main() -> None:
router = SingleThreadedAgentRuntime()
inner = Inner("inner", router)
outer = Outer("outer", router, inner)
response = router.send_message(MessageType(body="Hello", sender="external"), outer)
while not response.done():
await router.process_next()
print(await response)
if __name__ == "__main__":
asyncio.run(main())