autogen/examples/inner_outter.py

61 lines
2.2 KiB
Python
Raw Normal View History

import argparse
2024-05-15 12:31:13 -04:00
import asyncio
import logging
2024-05-15 12:31:13 -04:00
from dataclasses import dataclass
2024-06-04 10:00:05 -04:00
from agnext.application import SingleThreadedAgentRuntime
from agnext.components import TypeRoutedAgent, message_handler
2024-06-17 15:37:46 -04:00
from agnext.core import AgentProxy, AgentRuntime, CancellationToken
2024-05-15 12:31:13 -04:00
@dataclass
class MessageType:
body: str
2024-05-15 12:31:13 -04:00
sender: str
2024-06-09 12:11:36 -07:00
class Inner(TypeRoutedAgent): # type: ignore
2024-06-17 15:37:46 -04:00
def __init__(self, name: str, runtime: AgentRuntime) -> None: # type: ignore
super().__init__(name, "The inner agent", runtime)
2024-05-15 12:31:13 -04:00
2024-06-09 12:11:36 -07:00
@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"])
2024-05-15 12:31:13 -04:00
2024-06-09 12:11:36 -07:00
class Outer(TypeRoutedAgent): # type: ignore
2024-06-17 15:37:46 -04:00
def __init__(self, name: str, runtime: AgentRuntime, inner: AgentProxy) -> None: # type: ignore
super().__init__(name, "The outter agent", runtime)
2024-05-15 12:31:13 -04:00
self._inner = inner
2024-06-09 12:11:36 -07:00
@message_handler() # type: ignore
async def on_new_message(self, message: MessageType, cancellation_token: CancellationToken) -> MessageType: # type: ignore
2024-06-17 15:37:46 -04:00
inner_response = self._send_message(message, self._inner.id)
2024-05-15 12:31:13 -04:00
inner_message = await inner_response
assert isinstance(inner_message, MessageType)
return MessageType(body=f"Outer: {inner_message.body}", sender=self.metadata["name"])
2024-05-15 12:31:13 -04:00
async def main() -> None:
2024-06-17 15:37:46 -04:00
runtime = SingleThreadedAgentRuntime()
inner = Inner("inner", runtime)
outer = Outer("outer", runtime, AgentProxy(inner, runtime))
response = runtime.send_message(MessageType(body="Hello", sender="external"), outer)
2024-05-15 12:31:13 -04:00
while not response.done():
2024-06-17 15:37:46 -04:00
await runtime.process_next()
2024-05-15 12:31:13 -04:00
print(await response)
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Inner-Outter agent example.")
parser.add_argument("--verbose", action="store_true", help="Enable verbose logging.")
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.WARNING)
logging.getLogger("agnext").setLevel(logging.DEBUG)
handler = logging.FileHandler("inner_outter.log")
logging.getLogger("agnext").addHandler(handler)
2024-05-15 12:31:13 -04:00
asyncio.run(main())