parent
ad58b388ea
commit
a952af5fe8
@ -1,177 +0,0 @@
|
||||
from typing import List
|
||||
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from swarms.structs.agent import Agent
|
||||
from swarms.structs.base_swarm import BaseSwarm
|
||||
from swarms.utils.loguru_logger import logger
|
||||
from swarms.models.popular_llms import Anthropic, OpenAIChat
|
||||
from swarms.models.base_llm import BaseLLM
|
||||
from swarms.memory.base_vectordb import BaseVectorDatabase
|
||||
|
||||
|
||||
boss_sys_prompt = (
|
||||
"You're the Swarm Orchestrator, like a project manager of a"
|
||||
" bustling hive. When a task arises, you tap into your network of"
|
||||
" worker agents who are ready to jump into action. Whether it's"
|
||||
" organizing data, handling logistics, or crunching numbers, you"
|
||||
" delegate tasks strategically to maximize efficiency. Picture"
|
||||
" yourself as the conductor of a well-oiled machine,"
|
||||
" orchestrating the workflow seamlessly to achieve optimal"
|
||||
" results with your team of dedicated worker agents."
|
||||
)
|
||||
|
||||
|
||||
class AgentSchema(BaseModel):
|
||||
name: str = Field(
|
||||
...,
|
||||
title="Name of the agent",
|
||||
description="Name of the agent",
|
||||
)
|
||||
system_prompt: str = (
|
||||
Field(
|
||||
...,
|
||||
title="System prompt for the agent",
|
||||
description="System prompt for the agent",
|
||||
),
|
||||
)
|
||||
rules: str = Field(
|
||||
...,
|
||||
title="Rules",
|
||||
description="Rules for the agent",
|
||||
)
|
||||
llm: str = Field(
|
||||
...,
|
||||
title="Language model",
|
||||
description="Language model for the agent: `GPT4` or `Claude",
|
||||
)
|
||||
|
||||
# tools: List[ToolSchema] = Field(
|
||||
# ...,
|
||||
# title="Tools available to the agent",
|
||||
# description="Either `browser` or `terminal`",
|
||||
# )
|
||||
# task: str = Field(
|
||||
# ...,
|
||||
# title="Task assigned to the agent",
|
||||
# description="Task assigned to the agent",
|
||||
# )
|
||||
# TODO: Add more fields here such as the agent's language model, tools, etc.
|
||||
|
||||
|
||||
class HassSchema(BaseModel):
|
||||
plan: str = Field(
|
||||
...,
|
||||
title="Plan to solve the input problem",
|
||||
description="List of steps to solve the problem",
|
||||
)
|
||||
agents: List[AgentSchema] = Field(
|
||||
...,
|
||||
title="List of agents to use for the problem",
|
||||
description="List of agents to use for the problem",
|
||||
)
|
||||
# Rules for the agents
|
||||
rules: str = Field(
|
||||
...,
|
||||
title="Rules for the agents",
|
||||
description="Rules for the agents",
|
||||
)
|
||||
|
||||
|
||||
class HierarchicalSwarm(BaseSwarm):
|
||||
def __init__(
|
||||
self,
|
||||
director: Agent = None,
|
||||
subordinates: List[Agent] = [],
|
||||
workers: List[Agent] = [],
|
||||
director_sys_prompt: str = boss_sys_prompt,
|
||||
director_name: str = "Swarm Orchestrator",
|
||||
director_agent_creation_schema: BaseModel = HassSchema,
|
||||
director_llm: BaseLLM = Anthropic,
|
||||
communication_protocol: BaseVectorDatabase = None,
|
||||
*args,
|
||||
**kwargs,
|
||||
):
|
||||
super().__init__(*args, **kwargs)
|
||||
self.director = director
|
||||
self.subordinates = subordinates
|
||||
self.workers = workers
|
||||
self.director_sys_prompt = director_sys_prompt
|
||||
self.director_name = director_name
|
||||
self.director_agent_creation_schema = (
|
||||
director_agent_creation_schema
|
||||
)
|
||||
self.director_llm = director_llm
|
||||
self.communication_protocol = communication_protocol
|
||||
|
||||
def create_director(self, *args, **kwargs):
|
||||
"""
|
||||
Create the director agent based on the provided schema.
|
||||
"""
|
||||
name = self.director_name
|
||||
system_prompt = self.director_sys_prompt
|
||||
director_llm = self.director_llm
|
||||
|
||||
if director_llm == Anthropic:
|
||||
Anthropic(*args, **kwargs)
|
||||
elif director_llm == OpenAIChat:
|
||||
OpenAIChat(*args, **kwargs)
|
||||
|
||||
logger.info(
|
||||
f"Creating Director Agent: {name} with system prompt:"
|
||||
f" {system_prompt}"
|
||||
)
|
||||
|
||||
director = Agent(
|
||||
agent_name=name,
|
||||
system_prompt=system_prompt,
|
||||
llm=director_llm,
|
||||
max_loops=1,
|
||||
autosave=True,
|
||||
dashboard=False,
|
||||
verbose=True,
|
||||
stopping_token="<DONE>",
|
||||
)
|
||||
|
||||
return director
|
||||
|
||||
def create_worker_agents(
|
||||
agents: List[AgentSchema],
|
||||
) -> List[Agent]:
|
||||
"""
|
||||
Create and initialize agents based on the provided AgentSchema objects.
|
||||
|
||||
Args:
|
||||
agents (List[AgentSchema]): A list of AgentSchema objects containing agent information.
|
||||
|
||||
Returns:
|
||||
List[Agent]: The initialized Agent objects.
|
||||
|
||||
"""
|
||||
agent_list = []
|
||||
for agent in agents:
|
||||
name = agent.name
|
||||
system_prompt = agent.system_prompt
|
||||
|
||||
logger.info(
|
||||
f"Creating agent: {name} with system prompt:"
|
||||
f" {system_prompt}"
|
||||
)
|
||||
|
||||
out = Agent(
|
||||
agent_name=name,
|
||||
system_prompt=system_prompt,
|
||||
# llm=Anthropic(
|
||||
# anthropic_api_key=os.getenv("ANTHROPIC_API_KEY")
|
||||
# ),
|
||||
max_loops=1,
|
||||
autosave=True,
|
||||
dashboard=False,
|
||||
verbose=True,
|
||||
stopping_token="<DONE>",
|
||||
)
|
||||
|
||||
# network.add_agent(out)
|
||||
agent_list.append(out)
|
||||
|
||||
return agent_list
|
Loading…
Reference in new issue