|
import os |
|
from dotenv import load_dotenv |
|
load_dotenv() |
|
|
|
import openai |
|
from typing import List |
|
from pydantic import BaseModel |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AgentSelector: |
|
def __init__( |
|
self, |
|
task: str, |
|
available_agents: List, |
|
n_agents: int = 3, |
|
chat_history: str = '', |
|
prev_output: str = '', |
|
): |
|
self.task = task |
|
self.available_agents = available_agents |
|
self.n_agents = n_agents |
|
self.chat_history = chat_history |
|
self.prev_output = prev_output |
|
self.api_key = os.getenv("OPENAI_API_KEY") |
|
self.agents_to_use = [] |
|
self.inputs = { |
|
"task": task, |
|
"available_agents": available_agents, |
|
"n_agents": n_agents, |
|
"chat_history": chat_history, |
|
"prev_output": prev_output, |
|
} |
|
|
|
def select_agents(self): |
|
|
|
openai.api_key = self.api_key |
|
client = openai.OpenAI() |
|
system_prompt=f"You are an Agent Selector. Select {self.n_agents} agents from the available list of agents to best solve the task based on their descriptions. ONLY RESPOND WITH A PYTHON LIST OF AGENTS." |
|
|
|
user_prompt=f""" |
|
Task: {self.task}\n |
|
Available Agents: {self.available_agents}\n |
|
Number of Agents to Select: {self.n_agents}\n\n |
|
List: |
|
""" |
|
|
|
|
|
|
|
|
|
response = client.chat.completions.create( |
|
model="gpt-4-1106-preview", |
|
messages=[ |
|
{"role": "system", "content": system_prompt}, |
|
{"role": "user", "content": f"Task: Please help me with my Digital Marketing.\nAvailable Agents: {self.available_agents}\nNumber of Agents to Select: {self.n_agents}\n\nList: "}, |
|
{"role": "assistant", "content": "marketing_digital"}, |
|
{"role": "user", "content": user_prompt} |
|
], |
|
|
|
|
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
self.agents_to_use = response.choices[0].message.content |
|
return self.agents_to_use |
|
|
|
def run_selection(self): |
|
selected_agents = self.select_agents() |
|
selected_agents = selected_agents.replace("[", "").replace("]", "").replace("'", "").replace(" ", "").split(",") |
|
print(f"Agents Selected: {selected_agents}") |
|
print(f"return type: {type(selected_agents)}") |
|
return selected_agents |
|
|
|
if __name__ == "__main__": |
|
example = "exampleJuan" |
|
if example == "example1": |
|
task = "Please help me with my sales." |
|
available_agents = ["marketing_seo", "marketing_digital", "marketing_miami", "sales_chad", "sales_brad", "sales_senior"] |
|
n_agents=1 |
|
elif example == "exampleJuan": |
|
task = "revenue in the east coast is falling and the competitor is doing great with their product." |
|
available_agents = ["marketing", "sales", "finance", "engineering", "customer_service", "hr", "legal", "operations", "product"] |
|
n_agents=3 |
|
|
|
|
|
print(f"Task: {task}") |
|
|
|
agent_selector = AgentSelector(task, available_agents, n_agents=n_agents) |
|
agent_selector.run_selection() |
|
|
|
|