You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/swarms/structs/dfs_search_swarm.py

238 lines
6.5 KiB

# import os
# from swarms import Agent, OpenAIChat
# from typing import List
# class DepthFirstSearchSwarm:
# def __init__(self, agents: List[Agent]):
# self.agents = agents
# self.visited = set()
# def dfs(self, agent, task, results):
# if agent.agent_name in self.visited:
# return
# self.visited.add(agent.agent_name)
# # Execute the agent's task
# result = agent.run(task)
# results.append(result)
# # If agent produces more tasks, continue the DFS
# if isinstance(result, dict) and "next_tasks" in result:
# for next_task in result["next_tasks"]:
# next_agent = self.get_next_agent()
# if next_agent:
# self.dfs(next_agent, next_task, results)
# else:
# print("No more agents available for further tasks.")
# def get_next_agent(self):
# for agent in self.agents:
# if agent.agent_name not in self.visited:
# return agent
# return None
# def run(self, task):
# results = []
# if self.agents:
# initial_agent = self.agents[0]
# self.dfs(initial_agent, task, results)
# return results
# # Usage example
# # Define agents with their specific roles or capabilities
# agents = [
# Agent(
# agent_name="Financial-Analysis-Agent",
# system_prompt="Perform financial analysis",
# llm=OpenAIChat(
# api_key=os.getenv("OPENAI_API_KEY"),
# model_name="gpt-4o-mini",
# temperature=0.1,
# ),
# max_loops=1,
# autosave=True,
# verbose=True,
# streaming_on=True,
# dynamic_temperature_enabled=True,
# # saved_state_path="finance_agent.json",
# user_name="swarms_corp",
# retry_attempts=3,
# context_length=200000,
# ),
# # Add more agents with specific tasks if needed
# ]
# # Initialize the DFS swarm
# dfs_swarm = DepthFirstSearchSwarm(agents)
# # Run the DFS swarm with a task
# task = (
# "Analyze the financial components of a startup's stock incentive plan."
# )
# results = dfs_swarm.run(task)
# # Print the results
# for idx, result in enumerate(results):
# print(f"Result from Agent {idx + 1}: {result}")
# ####################
# import os
# from swarms import Agent, OpenAIChat
# class DFSSwarm:
# def __init__(self, agents):
# self.agents = agents
# self.visited = set()
# def dfs(self, agent_index, task, previous_output=None):
# if agent_index >= len(self.agents):
# return previous_output
# agent = self.agents[agent_index]
# # Use the previous agent's output as input to the current agent
# if previous_output:
# task = f"{task}\nPrevious result: {previous_output}"
# # Run the current agent's task
# output = agent.run(task)
# # Add output to visited to avoid redundant work
# self.visited.add(output)
# # Recursively call DFS on the next agent
# return self.dfs(agent_index + 1, task, output)
# def run(self, task):
# # Start DFS from the first agent
# return self.dfs(0, task)
# # Get the OpenAI API key from the environment variable
# api_key = os.getenv("OPENAI_API_KEY")
# # Create an instance of the OpenAIChat class for each agent
# model = OpenAIChat(api_key=api_key, model_name="gpt-4o-mini", temperature=0.1)
# # Initialize multiple agents
# agent1 = Agent(
# agent_name="Agent-1",
# system_prompt="Agent 1 prompt description here",
# llm=model,
# max_loops=1,
# autosave=True,
# dynamic_temperature_enabled=True,
# verbose=True,
# streaming_on=True,
# user_name="swarms_corp",
# )
# agent2 = Agent(
# agent_name="Agent-2",
# system_prompt="Agent 2 prompt description here",
# llm=model,
# max_loops=1,
# autosave=True,
# dynamic_temperature_enabled=True,
# verbose=True,
# streaming_on=True,
# user_name="swarms_corp",
# )
# # Add more agents as needed
# # agent3 = ...
# # agent4 = ...
# # Create the swarm with the agents
# dfs_swarm = DFSSwarm(agents=[agent1, agent2])
# # Run the DFS swarm on a task
# result = dfs_swarm.run("Analyze the financial components of a startup's stock incentives.")
# print("Final Result:", result)
import os
from swarms import Agent, OpenAIChat
class DFSSwarm:
def __init__(self, agents):
self.agents = agents
self.visited = set()
def dfs(self, agent_index, task, previous_output=None):
if agent_index >= len(self.agents):
return previous_output
agent = self.agents[agent_index]
# If there is a previous output, include it in the task for the next agent
if previous_output:
task = f"{task}\nPrevious result: {previous_output}"
# Run the current agent's task and get the output
output = agent.run(task)
# Log the output (optional)
print(f"Agent {agent_index + 1} Output: {output}")
# Add output to visited to avoid redundant work
self.visited.add(output)
# Recursively call DFS on the next agent
return self.dfs(agent_index + 1, task, output)
def run(self, task):
# Start DFS from the first agent and return the final result
final_result = self.dfs(0, task)
return final_result
# Get the OpenAI API key from the environment variable
api_key = os.getenv("OPENAI_API_KEY")
# Create an instance of the OpenAIChat class for each agent
model = OpenAIChat(
api_key=api_key, model_name="gpt-4o-mini", temperature=0.1
)
# Initialize multiple agents
agent1 = Agent(
agent_name="Agent-1",
system_prompt="Analyze the financial components of a startup's stock incentives.",
llm=model,
# max_loops=2,
# autosave=True,
dynamic_temperature_enabled=True,
verbose=True,
streaming_on=True,
user_name="swarms_corp",
)
agent2 = Agent(
agent_name="Agent-2",
system_prompt="Refine the analysis and identify any potential risks or benefits.",
llm=model,
# max_loops=2,
# autosave=True,
dynamic_temperature_enabled=True,
verbose=True,
streaming_on=True,
user_name="swarms_corp",
)
# Add more agents as needed
# agent3 = ...
# agent4 = ...
# Create the swarm with the agents
dfs_swarm = DFSSwarm(agents=[agent1, agent2])
# Run the DFS swarm on a task
result = dfs_swarm.run(
"Start with analyzing the financial components of a startup's stock incentives."
)
print("Final Result:", result)