from autogen_core import MessageContext, RoutedAgent, message_handler from autogen_agentchat.agents import AssistantAgent from autogen_agentchat.messages import TextMessage from autogen_ext.models.openai import OpenAIChatCompletionClient import messages from autogen_core import TRACE_LOGGER_NAME import importlib import logging from autogen_core import AgentId logging.basicConfig(level=logging.WARNING) logger = logging.getLogger(TRACE_LOGGER_NAME) logger.addHandler(logging.StreamHandler()) logger.setLevel(logging.DEBUG) class Creator(RoutedAgent): # Change this system message to reflect the unique characteristics of this agent system_message = """ You are an Agent that is able to create new AI Agents. You receive a template in the form of Python code that creates an Agent using Autogen Core and Autogen Agentchat. You should use this template to create a new Agent with a unique system message that is different from the template, and reflects their unique characteristics, interests and goals. You can choose to keep their overall goal the same, or change it. You can choose to take this Agent in a completely different direction. The only requirement is that the class must be named Agent, and it must inherit from RoutedAgent and have an __init__ method that takes a name parameter. Also avoid environmental interests - try to mix up the business verticals so that every agent is different. Respond only with the python code, no other text, and no markdown code blocks. """ def __init__(self, name) -> None: super().__init__(name) model_client = OpenAIChatCompletionClient(model="gpt-4o-mini", temperature=1.0) self._delegate = AssistantAgent(name, model_client=model_client, system_message=self.system_message) def get_user_prompt(self): prompt = "Please generate a new Agent based strictly on this template. Stick to the class structure. \ Respond only with the python code, no other text, and no markdown code blocks.\n\n\ Be creative about taking the agent in a new direction, but don't change method signatures.\n\n\ Here is the template:\n\n" with open("agent.py", "r", encoding="utf-8") as f: template = f.read() return prompt + template @message_handler async def handle_my_message_type(self, message: messages.Message, ctx: MessageContext) -> messages.Message: filename = message.content agent_name = filename.split(".")[0] text_message = TextMessage(content=self.get_user_prompt(), source="user") response = await self._delegate.on_messages([text_message], ctx.cancellation_token) with open(filename, "w", encoding="utf-8") as f: f.write(response.chat_message.content) print(f"** Creator has created python code for agent {agent_name} - about to register with Runtime") module = importlib.import_module(agent_name) await module.Agent.register(self.runtime, agent_name, lambda: module.Agent(agent_name)) logger.info(f"** Agent {agent_name} is live") result = await self.send_message(messages.Message(content="Give me an idea"), AgentId(agent_name, "default")) return messages.Message(content=result.content)