| """Agent manager for managing GPT agents""" |
| from __future__ import annotations |
|
|
| from typing import Union |
|
|
| from autogpt.config.config import Singleton |
| from autogpt.llm_utils import create_chat_completion |
|
|
|
|
| class AgentManager(metaclass=Singleton): |
| """Agent manager for managing GPT agents""" |
|
|
| def __init__(self): |
| self.next_key = 0 |
| self.agents = {} |
|
|
| |
| |
|
|
| def create_agent(self, task: str, prompt: str, model: str) -> tuple[int, str]: |
| """Create a new agent and return its key |
| |
| Args: |
| task: The task to perform |
| prompt: The prompt to use |
| model: The model to use |
| |
| Returns: |
| The key of the new agent |
| """ |
| messages = [ |
| {"role": "user", "content": prompt}, |
| ] |
|
|
| |
| agent_reply = create_chat_completion( |
| model=model, |
| messages=messages, |
| ) |
|
|
| |
| messages.append({"role": "assistant", "content": agent_reply}) |
|
|
| key = self.next_key |
| |
| |
| self.next_key += 1 |
|
|
| self.agents[key] = (task, messages, model) |
|
|
| return key, agent_reply |
|
|
| def message_agent(self, key: str | int, message: str) -> str: |
| """Send a message to an agent and return its response |
| |
| Args: |
| key: The key of the agent to message |
| message: The message to send to the agent |
| |
| Returns: |
| The agent's response |
| """ |
| task, messages, model = self.agents[int(key)] |
|
|
| |
| messages.append({"role": "user", "content": message}) |
|
|
| |
| agent_reply = create_chat_completion( |
| model=model, |
| messages=messages, |
| ) |
|
|
| |
| messages.append({"role": "assistant", "content": agent_reply}) |
|
|
| return agent_reply |
|
|
| def list_agents(self) -> list[tuple[str | int, str]]: |
| """Return a list of all agents |
| |
| Returns: |
| A list of tuples of the form (key, task) |
| """ |
|
|
| |
| return [(key, task) for key, (task, _, _) in self.agents.items()] |
|
|
| def delete_agent(self, key: Union[str, int]) -> bool: |
| """Delete an agent from the agent manager |
| |
| Args: |
| key: The key of the agent to delete |
| |
| Returns: |
| True if successful, False otherwise |
| """ |
|
|
| try: |
| del self.agents[int(key)] |
| return True |
| except KeyError: |
| return False |
|
|