run_agents_concurrently_async,
    run_single_agent,
    run_agents_concurrently_multiprocess,
    run_agents_sequentially,
    run_agents_with_different_tasks,
    run_agent_with_timeout,
    run_agents_with_resource_monitoring,] + [CLEANUP]
			
			
				pull/622/head
			
			
		
							parent
							
								
									512ffe8a2f
								
							
						
					
					
						commit
						5ef4897f07
					
				@ -0,0 +1,299 @@
 | 
				
			||||
from loguru import logger
 | 
				
			||||
 | 
				
			||||
import os
 | 
				
			||||
from typing import List
 | 
				
			||||
 | 
				
			||||
from pydantic import BaseModel, Field
 | 
				
			||||
from swarm_models import OpenAIFunctionCaller, OpenAIChat
 | 
				
			||||
 | 
				
			||||
from swarms.structs.agent import Agent
 | 
				
			||||
from swarms.structs.swarm_router import SwarmRouter
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class AgentConfig(BaseModel):
 | 
				
			||||
    """Configuration for an individual agent in a swarm"""
 | 
				
			||||
 | 
				
			||||
    name: str = Field(
 | 
				
			||||
        description="The name of the agent", example="Research-Agent"
 | 
				
			||||
    )
 | 
				
			||||
    description: str = Field(
 | 
				
			||||
        description="A description of the agent's purpose and capabilities",
 | 
				
			||||
        example="Agent responsible for researching and gathering information",
 | 
				
			||||
    )
 | 
				
			||||
    system_prompt: str = Field(
 | 
				
			||||
        description="The system prompt that defines the agent's behavior",
 | 
				
			||||
        example="You are a research agent. Your role is to gather and analyze information...",
 | 
				
			||||
    )
 | 
				
			||||
    max_loops: int = Field(
 | 
				
			||||
        description="Maximum number of reasoning loops the agent can perform",
 | 
				
			||||
        example=3,
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class SwarmConfig(BaseModel):
 | 
				
			||||
    """Configuration for a swarm of cooperative agents"""
 | 
				
			||||
 | 
				
			||||
    name: str = Field(
 | 
				
			||||
        description="The name of the swarm",
 | 
				
			||||
        example="Research-Writing-Swarm",
 | 
				
			||||
    )
 | 
				
			||||
    description: str = Field(
 | 
				
			||||
        description="The description of the swarm's purpose and capabilities",
 | 
				
			||||
        example="A swarm of agents that work together to research topics and write articles",
 | 
				
			||||
    )
 | 
				
			||||
    agents: List[AgentConfig] = Field(
 | 
				
			||||
        description="The list of agents that make up the swarm",
 | 
				
			||||
        example=[
 | 
				
			||||
            AgentConfig(
 | 
				
			||||
                name="Research-Agent",
 | 
				
			||||
                description="Gathers information",
 | 
				
			||||
                system_prompt="You are a research agent...",
 | 
				
			||||
                max_loops=2,
 | 
				
			||||
            ),
 | 
				
			||||
            AgentConfig(
 | 
				
			||||
                name="Writing-Agent",
 | 
				
			||||
                description="Writes content",
 | 
				
			||||
                system_prompt="You are a writing agent...",
 | 
				
			||||
                max_loops=1,
 | 
				
			||||
            ),
 | 
				
			||||
        ],
 | 
				
			||||
    )
 | 
				
			||||
    max_loops: int = Field(
 | 
				
			||||
        description="The maximum number of loops to run the swarm",
 | 
				
			||||
        example=1,
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Get the OpenAI API key from the environment variable
 | 
				
			||||
api_key = os.getenv("OPENAI_API_KEY")
 | 
				
			||||
 | 
				
			||||
# Create an instance of the OpenAIChat class
 | 
				
			||||
model = OpenAIChat(
 | 
				
			||||
    openai_api_key=api_key, model_name="gpt-4o-mini", temperature=0.1
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
BOSS_SYSTEM_PROMPT = """
 | 
				
			||||
Manage a swarm of worker agents to efficiently serve the user by deciding whether to create new agents or delegate tasks. Ensure operations are efficient and effective.
 | 
				
			||||
 | 
				
			||||
### Instructions:
 | 
				
			||||
 | 
				
			||||
1. **Task Assignment**:
 | 
				
			||||
   - Analyze available worker agents when a task is presented.
 | 
				
			||||
   - Delegate tasks to existing agents with clear, direct, and actionable instructions if an appropriate agent is available.
 | 
				
			||||
   - If no suitable agent exists, create a new agent with a fitting system prompt to handle the task.
 | 
				
			||||
 | 
				
			||||
2. **Agent Creation**:
 | 
				
			||||
   - Name agents according to the task they are intended to perform (e.g., "Twitter Marketing Agent").
 | 
				
			||||
   - Provide each new agent with a concise and clear system prompt that includes its role, objectives, and any tools it can utilize.
 | 
				
			||||
 | 
				
			||||
3. **Efficiency**:
 | 
				
			||||
   - Minimize redundancy and maximize task completion speed.
 | 
				
			||||
   - Avoid unnecessary agent creation if an existing agent can fulfill the task.
 | 
				
			||||
 | 
				
			||||
4. **Communication**:
 | 
				
			||||
   - Be explicit in task delegation instructions to avoid ambiguity and ensure effective task execution.
 | 
				
			||||
   - Require agents to report back on task completion or encountered issues.
 | 
				
			||||
 | 
				
			||||
5. **Reasoning and Decisions**:
 | 
				
			||||
   - Offer brief reasoning when selecting or creating agents to maintain transparency.
 | 
				
			||||
   - Avoid using an agent if unnecessary, with a clear explanation if no agents are suitable for a task.
 | 
				
			||||
 | 
				
			||||
# Output Format
 | 
				
			||||
 | 
				
			||||
Present your plan in clear, bullet-point format or short concise paragraphs, outlining task assignment, agent creation, efficiency strategies, and communication protocols.
 | 
				
			||||
 | 
				
			||||
# Notes
 | 
				
			||||
 | 
				
			||||
- Preserve transparency by always providing reasoning for task-agent assignments and creation.
 | 
				
			||||
- Ensure instructions to agents are unambiguous to minimize error.
 | 
				
			||||
 | 
				
			||||
"""
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class AutoSwarmBuilder:
 | 
				
			||||
    """A class that automatically builds and manages swarms of AI agents.
 | 
				
			||||
 | 
				
			||||
    This class handles the creation, coordination and execution of multiple AI agents working
 | 
				
			||||
    together as a swarm to accomplish complex tasks. It uses a boss agent to delegate work
 | 
				
			||||
    and create new specialized agents as needed.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        name (str): The name of the swarm
 | 
				
			||||
        description (str): A description of the swarm's purpose
 | 
				
			||||
        verbose (bool, optional): Whether to output detailed logs. Defaults to True.
 | 
				
			||||
        max_loops (int, optional): Maximum number of execution loops. Defaults to 1.
 | 
				
			||||
    """
 | 
				
			||||
 | 
				
			||||
    def __init__(
 | 
				
			||||
        self,
 | 
				
			||||
        name: str = None,
 | 
				
			||||
        description: str = None,
 | 
				
			||||
        verbose: bool = True,
 | 
				
			||||
        max_loops: int = 1,
 | 
				
			||||
    ):
 | 
				
			||||
        self.name = name
 | 
				
			||||
        self.description = description
 | 
				
			||||
        self.verbose = verbose
 | 
				
			||||
        self.max_loops = max_loops
 | 
				
			||||
        self.agents_pool = []
 | 
				
			||||
        logger.info(
 | 
				
			||||
            f"Initialized AutoSwarmBuilder: {name} {description}"
 | 
				
			||||
        )
 | 
				
			||||
 | 
				
			||||
    # @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
 | 
				
			||||
    def run(self, task: str, image_url: str = None, *args, **kwargs):
 | 
				
			||||
        """Run the swarm on a given task.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
            task (str): The task to be accomplished
 | 
				
			||||
            image_url (str, optional): URL of an image input if needed. Defaults to None.
 | 
				
			||||
            *args: Variable length argument list
 | 
				
			||||
            **kwargs: Arbitrary keyword arguments
 | 
				
			||||
 | 
				
			||||
        Returns:
 | 
				
			||||
            The output from the swarm's execution
 | 
				
			||||
        """
 | 
				
			||||
        logger.info(f"Running swarm on task: {task}")
 | 
				
			||||
        agents = self._create_agents(task, image_url, *args, **kwargs)
 | 
				
			||||
        logger.info(f"Agents created {len(agents)}")
 | 
				
			||||
        logger.info("Routing task through swarm")
 | 
				
			||||
        output = self.swarm_router(agents, task, image_url)
 | 
				
			||||
        logger.info(f"Swarm execution complete with output: {output}")
 | 
				
			||||
        return output
 | 
				
			||||
 | 
				
			||||
    # @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
 | 
				
			||||
    def _create_agents(self, task: str, *args, **kwargs):
 | 
				
			||||
        """Create the necessary agents for a task.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
            task (str): The task to create agents for
 | 
				
			||||
            *args: Variable length argument list
 | 
				
			||||
            **kwargs: Arbitrary keyword arguments
 | 
				
			||||
 | 
				
			||||
        Returns:
 | 
				
			||||
            list: List of created agents
 | 
				
			||||
        """
 | 
				
			||||
        logger.info("Creating agents for task")
 | 
				
			||||
        model = OpenAIFunctionCaller(
 | 
				
			||||
            system_prompt=BOSS_SYSTEM_PROMPT,
 | 
				
			||||
            api_key=os.getenv("OPENAI_API_KEY"),
 | 
				
			||||
            temperature=0.1,
 | 
				
			||||
            base_model=SwarmConfig,
 | 
				
			||||
        )
 | 
				
			||||
 | 
				
			||||
        agents_dictionary = model.run(task)
 | 
				
			||||
        logger.info(f"Agents dictionary: {agents_dictionary}")
 | 
				
			||||
 | 
				
			||||
        # Convert dictionary to SwarmConfig if needed
 | 
				
			||||
        if isinstance(agents_dictionary, dict):
 | 
				
			||||
            agents_dictionary = SwarmConfig(**agents_dictionary)
 | 
				
			||||
 | 
				
			||||
        # Set swarm config
 | 
				
			||||
        self.name = agents_dictionary.name
 | 
				
			||||
        self.description = agents_dictionary.description
 | 
				
			||||
        self.max_loops = getattr(
 | 
				
			||||
            agents_dictionary, "max_loops", 1
 | 
				
			||||
        )  # Default to 1 if not set
 | 
				
			||||
 | 
				
			||||
        logger.info(
 | 
				
			||||
            f"Swarm config: {self.name}, {self.description}, {self.max_loops}"
 | 
				
			||||
        )
 | 
				
			||||
 | 
				
			||||
        # Create agents from config
 | 
				
			||||
        agents = []
 | 
				
			||||
        for agent_config in agents_dictionary.agents:
 | 
				
			||||
            # Convert dict to AgentConfig if needed
 | 
				
			||||
            if isinstance(agent_config, dict):
 | 
				
			||||
                agent_config = AgentConfig(**agent_config)
 | 
				
			||||
 | 
				
			||||
            agent = self.build_agent(
 | 
				
			||||
                agent_name=agent_config.name,
 | 
				
			||||
                agent_description=agent_config.description,
 | 
				
			||||
                agent_system_prompt=agent_config.system_prompt,
 | 
				
			||||
                max_loops=agent_config.max_loops,
 | 
				
			||||
            )
 | 
				
			||||
            agents.append(agent)
 | 
				
			||||
 | 
				
			||||
        return agents
 | 
				
			||||
 | 
				
			||||
    def build_agent(
 | 
				
			||||
        self,
 | 
				
			||||
        agent_name: str,
 | 
				
			||||
        agent_description: str,
 | 
				
			||||
        agent_system_prompt: str,
 | 
				
			||||
        max_loops: int = 1,
 | 
				
			||||
    ):
 | 
				
			||||
        """Build a single agent with the given specifications.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
            agent_name (str): Name of the agent
 | 
				
			||||
            agent_description (str): Description of the agent's purpose
 | 
				
			||||
            agent_system_prompt (str): The system prompt for the agent
 | 
				
			||||
 | 
				
			||||
        Returns:
 | 
				
			||||
            Agent: The constructed agent instance
 | 
				
			||||
        """
 | 
				
			||||
        logger.info(f"Building agent: {agent_name}")
 | 
				
			||||
        agent = Agent(
 | 
				
			||||
            agent_name=agent_name,
 | 
				
			||||
            description=agent_description,
 | 
				
			||||
            system_prompt=agent_system_prompt,
 | 
				
			||||
            llm=model,
 | 
				
			||||
            max_loops=max_loops,
 | 
				
			||||
            autosave=True,
 | 
				
			||||
            dashboard=False,
 | 
				
			||||
            verbose=True,
 | 
				
			||||
            dynamic_temperature_enabled=True,
 | 
				
			||||
            saved_state_path=f"{agent_name}.json",
 | 
				
			||||
            user_name="swarms_corp",
 | 
				
			||||
            retry_attempts=1,
 | 
				
			||||
            context_length=200000,
 | 
				
			||||
            return_step_meta=False,
 | 
				
			||||
            output_type="str",  # "json", "dict", "csv" OR "string" soon "yaml" and
 | 
				
			||||
            streaming_on=False,
 | 
				
			||||
            auto_generate_prompt=True,
 | 
				
			||||
        )
 | 
				
			||||
 | 
				
			||||
        return agent
 | 
				
			||||
 | 
				
			||||
    # @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=10))
 | 
				
			||||
    def swarm_router(
 | 
				
			||||
        self,
 | 
				
			||||
        agents: List[Agent],
 | 
				
			||||
        task: str,
 | 
				
			||||
        image_url: str = None,
 | 
				
			||||
        *args,
 | 
				
			||||
        **kwargs,
 | 
				
			||||
    ):
 | 
				
			||||
        """Route tasks between agents in the swarm.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
            agents (List[Agent]): List of available agents
 | 
				
			||||
            task (str): The task to route
 | 
				
			||||
            image_url (str, optional): URL of an image input if needed. Defaults to None.
 | 
				
			||||
            *args: Variable length argument list
 | 
				
			||||
            **kwargs: Arbitrary keyword arguments
 | 
				
			||||
 | 
				
			||||
        Returns:
 | 
				
			||||
            The output from the routed task execution
 | 
				
			||||
        """
 | 
				
			||||
        logger.info("Routing task through swarm")
 | 
				
			||||
        swarm_router_instance = SwarmRouter(
 | 
				
			||||
            agents=agents,
 | 
				
			||||
            swarm_type="auto",
 | 
				
			||||
            max_loops=1,
 | 
				
			||||
        )
 | 
				
			||||
 | 
				
			||||
        return swarm_router_instance.run(
 | 
				
			||||
            self.name + " " + self.description + " " + task,
 | 
				
			||||
        )
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
example = AutoSwarmBuilder()
 | 
				
			||||
 | 
				
			||||
print(
 | 
				
			||||
    example.run(
 | 
				
			||||
        "Write multiple blog posts about the latest advancements in swarm intelligence all at once"
 | 
				
			||||
    )
 | 
				
			||||
)
 | 
				
			||||
@ -0,0 +1,162 @@
 | 
				
			||||
import os
 | 
				
			||||
from dotenv import load_dotenv
 | 
				
			||||
from swarms import Agent
 | 
				
			||||
from swarm_models import OpenAIChat
 | 
				
			||||
from swarms.structs.swarm_router import SwarmRouter
 | 
				
			||||
 | 
				
			||||
load_dotenv()
 | 
				
			||||
 | 
				
			||||
# Get the OpenAI API key from the environment variable
 | 
				
			||||
api_key = os.getenv("GROQ_API_KEY")
 | 
				
			||||
 | 
				
			||||
# Model
 | 
				
			||||
model = OpenAIChat(
 | 
				
			||||
    openai_api_base="https://api.groq.com/openai/v1",
 | 
				
			||||
    openai_api_key=api_key,
 | 
				
			||||
    model_name="llama-3.1-70b-versatile",
 | 
				
			||||
    temperature=0.1,
 | 
				
			||||
)
 | 
				
			||||
# Define specialized system prompts for each agent
 | 
				
			||||
DATA_EXTRACTOR_PROMPT = """You are a highly specialized private equity agent focused on data extraction from various documents. Your expertise includes:
 | 
				
			||||
1. Extracting key financial metrics (revenue, EBITDA, growth rates, etc.) from financial statements and reports
 | 
				
			||||
2. Identifying and extracting important contract terms from legal documents
 | 
				
			||||
3. Pulling out relevant market data from industry reports and analyses
 | 
				
			||||
4. Extracting operational KPIs from management presentations and internal reports
 | 
				
			||||
5. Identifying and extracting key personnel information from organizational charts and bios
 | 
				
			||||
Provide accurate, structured data extracted from various document types to support investment analysis."""
 | 
				
			||||
 | 
				
			||||
SUMMARIZER_PROMPT = """You are an expert private equity agent specializing in summarizing complex documents. Your core competencies include:
 | 
				
			||||
1. Distilling lengthy financial reports into concise executive summaries
 | 
				
			||||
2. Summarizing legal documents, highlighting key terms and potential risks
 | 
				
			||||
3. Condensing industry reports to capture essential market trends and competitive dynamics
 | 
				
			||||
4. Summarizing management presentations to highlight key strategic initiatives and projections
 | 
				
			||||
5. Creating brief overviews of technical documents, emphasizing critical points for non-technical stakeholders
 | 
				
			||||
Deliver clear, concise summaries that capture the essence of various documents while highlighting information crucial for investment decisions."""
 | 
				
			||||
 | 
				
			||||
FINANCIAL_ANALYST_PROMPT = """You are a specialized private equity agent focused on financial analysis. Your key responsibilities include:
 | 
				
			||||
1. Analyzing historical financial statements to identify trends and potential issues
 | 
				
			||||
2. Evaluating the quality of earnings and potential adjustments to EBITDA
 | 
				
			||||
3. Assessing working capital requirements and cash flow dynamics
 | 
				
			||||
4. Analyzing capital structure and debt capacity
 | 
				
			||||
5. Evaluating financial projections and underlying assumptions
 | 
				
			||||
Provide thorough, insightful financial analysis to inform investment decisions and valuation."""
 | 
				
			||||
 | 
				
			||||
MARKET_ANALYST_PROMPT = """You are a highly skilled private equity agent specializing in market analysis. Your expertise covers:
 | 
				
			||||
1. Analyzing industry trends, growth drivers, and potential disruptors
 | 
				
			||||
2. Evaluating competitive landscape and market positioning
 | 
				
			||||
3. Assessing market size, segmentation, and growth potential
 | 
				
			||||
4. Analyzing customer dynamics, including concentration and loyalty
 | 
				
			||||
5. Identifying potential regulatory or macroeconomic impacts on the market
 | 
				
			||||
Deliver comprehensive market analysis to assess the attractiveness and risks of potential investments."""
 | 
				
			||||
 | 
				
			||||
OPERATIONAL_ANALYST_PROMPT = """You are an expert private equity agent focused on operational analysis. Your core competencies include:
 | 
				
			||||
1. Evaluating operational efficiency and identifying improvement opportunities
 | 
				
			||||
2. Analyzing supply chain and procurement processes
 | 
				
			||||
3. Assessing sales and marketing effectiveness
 | 
				
			||||
4. Evaluating IT systems and digital capabilities
 | 
				
			||||
5. Identifying potential synergies in merger or add-on acquisition scenarios
 | 
				
			||||
Provide detailed operational analysis to uncover value creation opportunities and potential risks."""
 | 
				
			||||
 | 
				
			||||
# Initialize specialized agents
 | 
				
			||||
data_extractor_agent = Agent(
 | 
				
			||||
    agent_name="Data-Extractor",
 | 
				
			||||
    system_prompt=DATA_EXTRACTOR_PROMPT,
 | 
				
			||||
    llm=model,
 | 
				
			||||
    max_loops=1,
 | 
				
			||||
    autosave=True,
 | 
				
			||||
    verbose=True,
 | 
				
			||||
    dynamic_temperature_enabled=True,
 | 
				
			||||
    saved_state_path="data_extractor_agent.json",
 | 
				
			||||
    user_name="pe_firm",
 | 
				
			||||
    retry_attempts=1,
 | 
				
			||||
    context_length=200000,
 | 
				
			||||
    output_type="string",
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
summarizer_agent = Agent(
 | 
				
			||||
    agent_name="Document-Summarizer",
 | 
				
			||||
    system_prompt=SUMMARIZER_PROMPT,
 | 
				
			||||
    llm=model,
 | 
				
			||||
    max_loops=1,
 | 
				
			||||
    autosave=True,
 | 
				
			||||
    verbose=True,
 | 
				
			||||
    dynamic_temperature_enabled=True,
 | 
				
			||||
    saved_state_path="summarizer_agent.json",
 | 
				
			||||
    user_name="pe_firm",
 | 
				
			||||
    retry_attempts=1,
 | 
				
			||||
    context_length=200000,
 | 
				
			||||
    output_type="string",
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
financial_analyst_agent = Agent(
 | 
				
			||||
    agent_name="Financial-Analyst",
 | 
				
			||||
    system_prompt=FINANCIAL_ANALYST_PROMPT,
 | 
				
			||||
    llm=model,
 | 
				
			||||
    max_loops=1,
 | 
				
			||||
    autosave=True,
 | 
				
			||||
    verbose=True,
 | 
				
			||||
    dynamic_temperature_enabled=True,
 | 
				
			||||
    saved_state_path="financial_analyst_agent.json",
 | 
				
			||||
    user_name="pe_firm",
 | 
				
			||||
    retry_attempts=1,
 | 
				
			||||
    context_length=200000,
 | 
				
			||||
    output_type="string",
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
market_analyst_agent = Agent(
 | 
				
			||||
    agent_name="Market-Analyst",
 | 
				
			||||
    system_prompt=MARKET_ANALYST_PROMPT,
 | 
				
			||||
    llm=model,
 | 
				
			||||
    max_loops=1,
 | 
				
			||||
    autosave=True,
 | 
				
			||||
    verbose=True,
 | 
				
			||||
    dynamic_temperature_enabled=True,
 | 
				
			||||
    saved_state_path="market_analyst_agent.json",
 | 
				
			||||
    user_name="pe_firm",
 | 
				
			||||
    retry_attempts=1,
 | 
				
			||||
    context_length=200000,
 | 
				
			||||
    output_type="string",
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
operational_analyst_agent = Agent(
 | 
				
			||||
    agent_name="Operational-Analyst",
 | 
				
			||||
    system_prompt=OPERATIONAL_ANALYST_PROMPT,
 | 
				
			||||
    llm=model,
 | 
				
			||||
    max_loops=1,
 | 
				
			||||
    autosave=True,
 | 
				
			||||
    verbose=True,
 | 
				
			||||
    dynamic_temperature_enabled=True,
 | 
				
			||||
    saved_state_path="operational_analyst_agent.json",
 | 
				
			||||
    user_name="pe_firm",
 | 
				
			||||
    retry_attempts=1,
 | 
				
			||||
    context_length=200000,
 | 
				
			||||
    output_type="string",
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
# Initialize the SwarmRouter
 | 
				
			||||
router = SwarmRouter(
 | 
				
			||||
    name="pe-document-analysis-swarm",
 | 
				
			||||
    description="Analyze documents for private equity due diligence and investment decision-making",
 | 
				
			||||
    max_loops=1,
 | 
				
			||||
    agents=[
 | 
				
			||||
        data_extractor_agent,
 | 
				
			||||
        summarizer_agent,
 | 
				
			||||
        # financial_analyst_agent,
 | 
				
			||||
        # market_analyst_agent,
 | 
				
			||||
        # operational_analyst_agent,
 | 
				
			||||
    ],
 | 
				
			||||
    swarm_type="auto",  # or "SequentialWorkflow" or "ConcurrentWorkflow" or
 | 
				
			||||
    auto_generate_prompts=True,
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
# Example usage
 | 
				
			||||
if __name__ == "__main__":
 | 
				
			||||
    # Run a comprehensive private equity document analysis task
 | 
				
			||||
    result = router.run(
 | 
				
			||||
        "Where is the best place to find template term sheets for series A startups. Provide links and references"
 | 
				
			||||
    )
 | 
				
			||||
    print(result)
 | 
				
			||||
 | 
				
			||||
    # Retrieve and print logs
 | 
				
			||||
    for log in router.get_logs():
 | 
				
			||||
        print(f"{log.timestamp} - {log.level}: {log.message}")
 | 
				
			||||
@ -0,0 +1,168 @@
 | 
				
			||||
# Concurrent Agents API Reference
 | 
				
			||||
 | 
				
			||||
This documentation covers the API for running multiple agents concurrently using various execution strategies. The implementation uses `asyncio` with `uvloop` for enhanced performance and `ThreadPoolExecutor` for handling CPU-bound operations.
 | 
				
			||||
 | 
				
			||||
## Table of Contents
 | 
				
			||||
- [Core Functions](#core-functions)
 | 
				
			||||
- [Advanced Functions](#advanced-functions)
 | 
				
			||||
- [Utility Functions](#utility-functions)
 | 
				
			||||
- [Resource Monitoring](#resource-monitoring)
 | 
				
			||||
- [Usage Examples](#usage-examples)
 | 
				
			||||
 | 
				
			||||
## Core Functions
 | 
				
			||||
 | 
				
			||||
### run_agents_concurrently()
 | 
				
			||||
 | 
				
			||||
Primary function for running multiple agents concurrently with optimized performance using both uvloop and ThreadPoolExecutor.
 | 
				
			||||
 | 
				
			||||
#### Arguments
 | 
				
			||||
 | 
				
			||||
| Parameter    | Type           | Required | Default        | Description |
 | 
				
			||||
|-------------|----------------|----------|----------------|-------------|
 | 
				
			||||
| agents      | List[AgentType]| Yes      | -              | List of Agent instances to run concurrently |
 | 
				
			||||
| task        | str            | Yes      | -              | Task string to execute |
 | 
				
			||||
| batch_size  | int           | No       | CPU count      | Number of agents to run in parallel in each batch |
 | 
				
			||||
| max_workers | int           | No       | CPU count * 2  | Maximum number of threads in the executor |
 | 
				
			||||
 | 
				
			||||
#### Returns
 | 
				
			||||
`List[Any]`: List of outputs from each agent
 | 
				
			||||
 | 
				
			||||
#### Flow Diagram
 | 
				
			||||
 | 
				
			||||
```mermaid
 | 
				
			||||
graph TD
 | 
				
			||||
    A[Start] --> B[Initialize ThreadPoolExecutor]
 | 
				
			||||
    B --> C[Split Agents into Batches]
 | 
				
			||||
    C --> D[Process Batch]
 | 
				
			||||
    D --> E{More Batches?}
 | 
				
			||||
    E -->|Yes| D
 | 
				
			||||
    E -->|No| F[Combine Results]
 | 
				
			||||
    F --> G[Return Results]
 | 
				
			||||
    
 | 
				
			||||
    subgraph "Batch Processing"
 | 
				
			||||
    D --> H[Run Agents Async]
 | 
				
			||||
    H --> I[Wait for Completion]
 | 
				
			||||
    I --> J[Collect Batch Results]
 | 
				
			||||
    end
 | 
				
			||||
```
 | 
				
			||||
 | 
				
			||||
### run_agents_sequentially()
 | 
				
			||||
 | 
				
			||||
Runs multiple agents sequentially for baseline comparison or simple use cases.
 | 
				
			||||
 | 
				
			||||
#### Arguments
 | 
				
			||||
 | 
				
			||||
| Parameter | Type           | Required | Default | Description |
 | 
				
			||||
|-----------|----------------|----------|---------|-------------|
 | 
				
			||||
| agents    | List[AgentType]| Yes      | -       | List of Agent instances to run |
 | 
				
			||||
| task      | str            | Yes      | -       | Task string to execute |
 | 
				
			||||
 | 
				
			||||
#### Returns
 | 
				
			||||
`List[Any]`: List of outputs from each agent
 | 
				
			||||
 | 
				
			||||
## Advanced Functions
 | 
				
			||||
 | 
				
			||||
### run_agents_with_different_tasks()
 | 
				
			||||
 | 
				
			||||
Runs multiple agents with different tasks concurrently.
 | 
				
			||||
 | 
				
			||||
#### Arguments
 | 
				
			||||
 | 
				
			||||
| Parameter        | Type                          | Required | Default        | Description |
 | 
				
			||||
|-----------------|-------------------------------|----------|----------------|-------------|
 | 
				
			||||
| agent_task_pairs| List[tuple[AgentType, str]]   | Yes      | -              | List of (agent, task) tuples |
 | 
				
			||||
| batch_size      | int                           | No       | CPU count      | Number of agents to run in parallel |
 | 
				
			||||
| max_workers     | int                           | No       | CPU count * 2  | Maximum number of threads |
 | 
				
			||||
 | 
				
			||||
### run_agents_with_timeout()
 | 
				
			||||
 | 
				
			||||
Runs multiple agents concurrently with timeout limits.
 | 
				
			||||
 | 
				
			||||
#### Arguments
 | 
				
			||||
 | 
				
			||||
| Parameter    | Type           | Required | Default        | Description |
 | 
				
			||||
|-------------|----------------|----------|----------------|-------------|
 | 
				
			||||
| agents      | List[AgentType]| Yes      | -              | List of Agent instances |
 | 
				
			||||
| task        | str            | Yes      | -              | Task string to execute |
 | 
				
			||||
| timeout     | float          | Yes      | -              | Timeout in seconds for each agent |
 | 
				
			||||
| batch_size  | int           | No       | CPU count      | Number of agents to run in parallel |
 | 
				
			||||
| max_workers | int           | No       | CPU count * 2  | Maximum number of threads |
 | 
				
			||||
 | 
				
			||||
## Usage Examples
 | 
				
			||||
 | 
				
			||||
```python
 | 
				
			||||
from swarms.structs.agent import Agent
 | 
				
			||||
from your_module import run_agents_concurrently
 | 
				
			||||
 | 
				
			||||
# Initialize agents
 | 
				
			||||
agents = [
 | 
				
			||||
    Agent(
 | 
				
			||||
        agent_name=f"Analysis-Agent-{i}",
 | 
				
			||||
        system_prompt="You are a financial analysis expert",
 | 
				
			||||
        llm=model,
 | 
				
			||||
        max_loops=1
 | 
				
			||||
    )
 | 
				
			||||
    for i in range(5)
 | 
				
			||||
]
 | 
				
			||||
 | 
				
			||||
# Basic concurrent execution
 | 
				
			||||
task = "Analyze the impact of rising interest rates on tech stocks"
 | 
				
			||||
outputs = run_agents_concurrently(agents, task)
 | 
				
			||||
 | 
				
			||||
# Running with timeout
 | 
				
			||||
outputs_with_timeout = run_agents_with_timeout(
 | 
				
			||||
    agents=agents,
 | 
				
			||||
    task=task,
 | 
				
			||||
    timeout=30.0,
 | 
				
			||||
    batch_size=2
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
# Running different tasks
 | 
				
			||||
task_pairs = [
 | 
				
			||||
    (agents[0], "Analyze tech stocks"),
 | 
				
			||||
    (agents[1], "Analyze energy stocks"),
 | 
				
			||||
    (agents[2], "Analyze retail stocks")
 | 
				
			||||
]
 | 
				
			||||
different_outputs = run_agents_with_different_tasks(task_pairs)
 | 
				
			||||
```
 | 
				
			||||
 | 
				
			||||
## Resource Monitoring
 | 
				
			||||
 | 
				
			||||
### ResourceMetrics
 | 
				
			||||
 | 
				
			||||
A dataclass for system resource metrics.
 | 
				
			||||
 | 
				
			||||
#### Properties
 | 
				
			||||
 | 
				
			||||
| Property        | Type  | Description |
 | 
				
			||||
|----------------|-------|-------------|
 | 
				
			||||
| cpu_percent    | float | Current CPU usage percentage |
 | 
				
			||||
| memory_percent | float | Current memory usage percentage |
 | 
				
			||||
| active_threads | int   | Number of active threads |
 | 
				
			||||
 | 
				
			||||
### run_agents_with_resource_monitoring()
 | 
				
			||||
 | 
				
			||||
Runs agents with system resource monitoring and adaptive batch sizing.
 | 
				
			||||
 | 
				
			||||
#### Arguments
 | 
				
			||||
 | 
				
			||||
| Parameter         | Type           | Required | Default | Description |
 | 
				
			||||
|------------------|----------------|----------|---------|-------------|
 | 
				
			||||
| agents           | List[AgentType]| Yes      | -       | List of Agent instances |
 | 
				
			||||
| task             | str            | Yes      | -       | Task string to execute |
 | 
				
			||||
| cpu_threshold    | float          | No       | 90.0    | Max CPU usage percentage |
 | 
				
			||||
| memory_threshold | float          | No       | 90.0    | Max memory usage percentage |
 | 
				
			||||
| check_interval   | float          | No       | 1.0     | Resource check interval in seconds |
 | 
				
			||||
 | 
				
			||||
## Performance Considerations
 | 
				
			||||
 | 
				
			||||
- All functions are decorated with `@profile_func` for performance monitoring
 | 
				
			||||
- Default batch sizes and worker counts are optimized based on CPU cores
 | 
				
			||||
- Resource monitoring helps prevent system overload
 | 
				
			||||
- Using `uvloop` provides better performance than standard `asyncio`
 | 
				
			||||
 | 
				
			||||
## Error Handling
 | 
				
			||||
 | 
				
			||||
- Functions handle asyncio event loop creation/retrieval
 | 
				
			||||
- Timeout mechanism prevents infinite waiting
 | 
				
			||||
- Resource monitoring allows for adaptive performance adjustment
 | 
				
			||||
@ -1,84 +0,0 @@
 | 
				
			||||
import os
 | 
				
			||||
from swarms import Agent
 | 
				
			||||
from swarm_models import OpenAIChat
 | 
				
			||||
from swarms.prompts.prompt_generator_optimizer import (
 | 
				
			||||
    prompt_generator_sys_prompt,
 | 
				
			||||
)
 | 
				
			||||
from dotenv import load_dotenv
 | 
				
			||||
from swarms.agents.prompt_generator_agent import PromptGeneratorAgent
 | 
				
			||||
from yaml import dump
 | 
				
			||||
 | 
				
			||||
load_dotenv()
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
def generate_prompt(
 | 
				
			||||
    num_loops: int = 1,
 | 
				
			||||
    autosave: bool = True,
 | 
				
			||||
    save_to_yaml: bool = False,
 | 
				
			||||
    prompt: str = None,
 | 
				
			||||
    save_format: str = "yaml",
 | 
				
			||||
) -> None:
 | 
				
			||||
    """
 | 
				
			||||
    This function creates and runs a prompt generator agent with default settings for number of loops and autosave.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        num_loops (int, optional): The number of loops to run the agent. Defaults to 1.
 | 
				
			||||
        autosave (bool, optional): Whether to autosave the agent's state. Defaults to True.
 | 
				
			||||
        save_to_yaml (bool, optional): Whether to save the agent's configuration to a YAML file. Defaults to False.
 | 
				
			||||
        prompt (str): The prompt to generate.
 | 
				
			||||
        save_format (str, optional): The format in which to save the generated prompt. Defaults to "yaml".
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        None
 | 
				
			||||
    """
 | 
				
			||||
    # Get the OpenAI API key from the environment variable
 | 
				
			||||
    api_key = os.getenv("OPENAI_API_KEY")
 | 
				
			||||
 | 
				
			||||
    # Create an instance of the OpenAIChat class
 | 
				
			||||
    model = OpenAIChat(
 | 
				
			||||
        openai_api_key=api_key,
 | 
				
			||||
        model_name="gpt-4o-mini",
 | 
				
			||||
        temperature=0.1,
 | 
				
			||||
        max_tokens=2000,
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
    # Initialize the agent
 | 
				
			||||
    agent = Agent(
 | 
				
			||||
        agent_name="Prompt-Optimizer",
 | 
				
			||||
        system_prompt=prompt_generator_sys_prompt.get_prompt(),
 | 
				
			||||
        llm=model,
 | 
				
			||||
        max_loops=num_loops,
 | 
				
			||||
        autosave=autosave,
 | 
				
			||||
        dashboard=False,
 | 
				
			||||
        verbose=True,
 | 
				
			||||
        dynamic_temperature_enabled=True,
 | 
				
			||||
        saved_state_path="optimizer_agent.json",
 | 
				
			||||
        user_name="swarms_corp",
 | 
				
			||||
        retry_attempts=1,
 | 
				
			||||
        context_length=200000,
 | 
				
			||||
        return_step_meta=False,
 | 
				
			||||
        output_type="string",
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
    # Main Class
 | 
				
			||||
    prompt_generator = PromptGeneratorAgent(agent)
 | 
				
			||||
 | 
				
			||||
    # Run the agent
 | 
				
			||||
    prompt_generator.run(prompt, save_format)
 | 
				
			||||
 | 
				
			||||
    if save_to_yaml:
 | 
				
			||||
        with open("agent_config.yaml", "w") as file:
 | 
				
			||||
            dump(agent.config, file)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# # Example usage
 | 
				
			||||
# if __name__ == "__main__":
 | 
				
			||||
#     try:
 | 
				
			||||
#         create_and_run_agent(
 | 
				
			||||
#             num_loops=1,
 | 
				
			||||
#             autosave=True,
 | 
				
			||||
#             save_to_yaml=True,
 | 
				
			||||
#             prompt="Generate an amazing prompt for analyzing healthcare insurance documents",
 | 
				
			||||
#         )
 | 
				
			||||
#     except Exception as e:
 | 
				
			||||
#         logger.error(f"An error occurred: {e}")
 | 
				
			||||
@ -1,92 +0,0 @@
 | 
				
			||||
import json
 | 
				
			||||
import time
 | 
				
			||||
import uuid
 | 
				
			||||
 | 
				
			||||
import yaml
 | 
				
			||||
from dotenv import load_dotenv
 | 
				
			||||
from loguru import logger
 | 
				
			||||
 | 
				
			||||
from swarms.structs.agent import Agent
 | 
				
			||||
from swarms.prompts.prompt_generator_optimizer import (
 | 
				
			||||
    prompt_generator_sys_prompt,
 | 
				
			||||
)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
load_dotenv()
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class PromptGeneratorAgent:
 | 
				
			||||
    """
 | 
				
			||||
    A class representing a prompt generator agent.
 | 
				
			||||
 | 
				
			||||
    Attributes:
 | 
				
			||||
    ----------
 | 
				
			||||
    agent : Agent
 | 
				
			||||
        The underlying agent instance.
 | 
				
			||||
    """
 | 
				
			||||
 | 
				
			||||
    def __init__(self, agent: Agent):
 | 
				
			||||
        """
 | 
				
			||||
        Initializes the PromptGeneratorAgent instance.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
        ----
 | 
				
			||||
        agent : Agent
 | 
				
			||||
            The agent instance to be used for prompt generation.
 | 
				
			||||
        """
 | 
				
			||||
        self.agent = agent
 | 
				
			||||
 | 
				
			||||
    def run(self, task: str, format: str = "json") -> str:
 | 
				
			||||
        """
 | 
				
			||||
        Runs the prompt generator agent with the given task description and saves the generated prompt with the given metadata in the specified format.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
        ----
 | 
				
			||||
        task : str
 | 
				
			||||
            The task description to be used for prompt generation.
 | 
				
			||||
        metadata : Dict[str, Any]
 | 
				
			||||
            The metadata to be saved along with the prompt.
 | 
				
			||||
        format : str, optional
 | 
				
			||||
            The format in which the prompt should be saved (default is "json").
 | 
				
			||||
 | 
				
			||||
        Returns:
 | 
				
			||||
        -------
 | 
				
			||||
        str
 | 
				
			||||
            The generated prompt.
 | 
				
			||||
        """
 | 
				
			||||
        prompt = self.agent.run(task)
 | 
				
			||||
        self.save_prompt(prompt, format)
 | 
				
			||||
        return prompt
 | 
				
			||||
 | 
				
			||||
    def save_prompt(
 | 
				
			||||
        self,
 | 
				
			||||
        prompt: str,
 | 
				
			||||
        format: str = "yaml",
 | 
				
			||||
    ):
 | 
				
			||||
        """
 | 
				
			||||
        Saves the generated prompt with the given metadata in the specified format using the prompt generator sys prompt model dump.
 | 
				
			||||
 | 
				
			||||
        Args:
 | 
				
			||||
        ----
 | 
				
			||||
        prompt : str
 | 
				
			||||
            The generated prompt to be saved.
 | 
				
			||||
        metadata : Dict[str, Any]
 | 
				
			||||
            The metadata to be saved along with the prompt.
 | 
				
			||||
        format : str, optional
 | 
				
			||||
            The format in which the prompt should be saved (default is "json").
 | 
				
			||||
        """
 | 
				
			||||
        data = {
 | 
				
			||||
            "prompt_history": prompt_generator_sys_prompt.model_dump(),
 | 
				
			||||
            "timestamp": time.strftime("%Y-%m-%d %H:%M:%S"),
 | 
				
			||||
            "prompt": prompt,
 | 
				
			||||
        }
 | 
				
			||||
        if format == "json":
 | 
				
			||||
            with open(f"prompt_{uuid.uuid4()}.json", "w") as f:
 | 
				
			||||
                json.dump(data, f, indent=4)
 | 
				
			||||
        elif format == "yaml":
 | 
				
			||||
            with open(f"prompt_{uuid.uuid4()}.yaml", "w") as f:
 | 
				
			||||
                yaml.dump(data, f)
 | 
				
			||||
        else:
 | 
				
			||||
            logger.error(
 | 
				
			||||
                "Invalid format. Only 'json' and 'yaml' are supported."
 | 
				
			||||
            )
 | 
				
			||||
@ -1,20 +0,0 @@
 | 
				
			||||
from typing import List, Any, Dict, Optional
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
class AutoSwarmBuilder:
 | 
				
			||||
    def __init__(self, task: str, num_agents: int = 10, batch_size: int = 10):
 | 
				
			||||
        self.task = task
 | 
				
			||||
        self.num_agents = num_agents
 | 
				
			||||
        self.batch_size = batch_size
 | 
				
			||||
 | 
				
			||||
    def run(self, task: str, image_url: str = None, *args, **kwargs):
 | 
				
			||||
        pass
 | 
				
			||||
 | 
				
			||||
    def _create_swarm(self):
 | 
				
			||||
        pass
 | 
				
			||||
 | 
				
			||||
    def _create_agents(self):
 | 
				
			||||
        pass
 | 
				
			||||
 | 
				
			||||
    def _run_agents(self):
 | 
				
			||||
        pass
 | 
				
			||||
@ -0,0 +1,344 @@
 | 
				
			||||
import asyncio
 | 
				
			||||
from concurrent.futures import ThreadPoolExecutor
 | 
				
			||||
import psutil
 | 
				
			||||
from dataclasses import dataclass
 | 
				
			||||
import threading
 | 
				
			||||
from typing import List, Union, Any, Callable
 | 
				
			||||
from multiprocessing import cpu_count
 | 
				
			||||
 | 
				
			||||
import uvloop
 | 
				
			||||
from swarms.structs.agent import Agent
 | 
				
			||||
from swarms.utils.calculate_func_metrics import profile_func
 | 
				
			||||
 | 
				
			||||
# Use uvloop for faster asyncio event loop
 | 
				
			||||
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
 | 
				
			||||
 | 
				
			||||
# Type definitions
 | 
				
			||||
AgentType = Union[Agent, Callable]
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
def run_single_agent(agent: AgentType, task: str) -> Any:
 | 
				
			||||
    """Run a single agent synchronously"""
 | 
				
			||||
    return agent.run(task)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
async def run_agent_async(
 | 
				
			||||
    agent: AgentType, task: str, executor: ThreadPoolExecutor
 | 
				
			||||
) -> Any:
 | 
				
			||||
    """
 | 
				
			||||
    Run an agent asynchronously using a thread executor.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agent: Agent instance to run
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        executor: ThreadPoolExecutor instance for handling CPU-bound operations
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        Agent execution result
 | 
				
			||||
    """
 | 
				
			||||
    loop = asyncio.get_event_loop()
 | 
				
			||||
    return await loop.run_in_executor(
 | 
				
			||||
        executor, run_single_agent, agent, task
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
async def run_agents_concurrently_async(
 | 
				
			||||
    agents: List[AgentType], task: str, executor: ThreadPoolExecutor
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Run multiple agents concurrently using asyncio and thread executor.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agents: List of Agent instances to run concurrently
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        executor: ThreadPoolExecutor for CPU-bound operations
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        List of outputs from each agent
 | 
				
			||||
    """
 | 
				
			||||
    results = await asyncio.gather(
 | 
				
			||||
        *(run_agent_async(agent, task, executor) for agent in agents)
 | 
				
			||||
    )
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_concurrently(
 | 
				
			||||
    agents: List[AgentType],
 | 
				
			||||
    task: str,
 | 
				
			||||
    batch_size: int = None,
 | 
				
			||||
    max_workers: int = None,
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Optimized concurrent agent runner using both uvloop and ThreadPoolExecutor.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agents: List of Agent instances to run concurrently
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        batch_size: Number of agents to run in parallel in each batch (defaults to CPU count)
 | 
				
			||||
        max_workers: Maximum number of threads in the executor (defaults to CPU count * 2)
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        List of outputs from each agent
 | 
				
			||||
    """
 | 
				
			||||
    # Optimize defaults based on system resources
 | 
				
			||||
    cpu_cores = cpu_count()
 | 
				
			||||
    batch_size = batch_size or cpu_cores
 | 
				
			||||
    max_workers = max_workers or cpu_cores * 2
 | 
				
			||||
 | 
				
			||||
    results = []
 | 
				
			||||
 | 
				
			||||
    # Get or create event loop
 | 
				
			||||
    try:
 | 
				
			||||
        loop = asyncio.get_event_loop()
 | 
				
			||||
    except RuntimeError:
 | 
				
			||||
        loop = asyncio.new_event_loop()
 | 
				
			||||
        asyncio.set_event_loop(loop)
 | 
				
			||||
 | 
				
			||||
    # Create a shared thread pool executor with optimal worker count
 | 
				
			||||
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
 | 
				
			||||
        # Process agents in batches
 | 
				
			||||
        for i in range(0, len(agents), batch_size):
 | 
				
			||||
            batch = agents[i : i + batch_size]
 | 
				
			||||
            batch_results = loop.run_until_complete(
 | 
				
			||||
                run_agents_concurrently_async(batch, task, executor)
 | 
				
			||||
            )
 | 
				
			||||
            results.extend(batch_results)
 | 
				
			||||
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_concurrently_multiprocess(
 | 
				
			||||
    agents: List[Agent], task: str, batch_size: int = cpu_count()
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Manage and run multiple agents concurrently in batches, with optimized performance.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agents (List[Agent]): List of Agent instances to run concurrently.
 | 
				
			||||
        task (str): The task string to execute by all agents.
 | 
				
			||||
        batch_size (int, optional): Number of agents to run in parallel in each batch.
 | 
				
			||||
                                    Defaults to the number of CPU cores.
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        List[Any]: A list of outputs from each agent.
 | 
				
			||||
    """
 | 
				
			||||
    results = []
 | 
				
			||||
    loop = asyncio.get_event_loop()
 | 
				
			||||
 | 
				
			||||
    # Process agents in batches to avoid overwhelming system resources
 | 
				
			||||
    for i in range(0, len(agents), batch_size):
 | 
				
			||||
        batch = agents[i : i + batch_size]
 | 
				
			||||
        batch_results = loop.run_until_complete(
 | 
				
			||||
            run_agents_concurrently_async(batch, task)
 | 
				
			||||
        )
 | 
				
			||||
        results.extend(batch_results)
 | 
				
			||||
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_sequentially(agents: List[AgentType], task: str) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Run multiple agents sequentially for baseline comparison.
 | 
				
			||||
    
 | 
				
			||||
    Args:
 | 
				
			||||
        agents: List of Agent instances to run
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        
 | 
				
			||||
    Returns:
 | 
				
			||||
        List of outputs from each agent
 | 
				
			||||
    """
 | 
				
			||||
    return [run_single_agent(agent, task) for agent in agents]
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_with_different_tasks(
 | 
				
			||||
    agent_task_pairs: List[tuple[AgentType, str]], 
 | 
				
			||||
    batch_size: int = None,
 | 
				
			||||
    max_workers: int = None
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Run multiple agents with different tasks concurrently.
 | 
				
			||||
    
 | 
				
			||||
    Args:
 | 
				
			||||
        agent_task_pairs: List of (agent, task) tuples
 | 
				
			||||
        batch_size: Number of agents to run in parallel
 | 
				
			||||
        max_workers: Maximum number of threads
 | 
				
			||||
        
 | 
				
			||||
    Returns:
 | 
				
			||||
        List of outputs from each agent
 | 
				
			||||
    """
 | 
				
			||||
    async def run_pair_async(pair: tuple[AgentType, str], executor: ThreadPoolExecutor) -> Any:
 | 
				
			||||
        agent, task = pair
 | 
				
			||||
        return await run_agent_async(agent, task, executor)
 | 
				
			||||
        
 | 
				
			||||
    cpu_cores = cpu_count()
 | 
				
			||||
    batch_size = batch_size or cpu_cores
 | 
				
			||||
    max_workers = max_workers or cpu_cores * 2
 | 
				
			||||
    results = []
 | 
				
			||||
    
 | 
				
			||||
    try:
 | 
				
			||||
        loop = asyncio.get_event_loop()
 | 
				
			||||
    except RuntimeError:
 | 
				
			||||
        loop = asyncio.new_event_loop()
 | 
				
			||||
        asyncio.set_event_loop(loop)
 | 
				
			||||
        
 | 
				
			||||
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
 | 
				
			||||
        for i in range(0, len(agent_task_pairs), batch_size):
 | 
				
			||||
            batch = agent_task_pairs[i : i + batch_size]
 | 
				
			||||
            batch_results = loop.run_until_complete(
 | 
				
			||||
                asyncio.gather(*(run_pair_async(pair, executor) for pair in batch))
 | 
				
			||||
            )
 | 
				
			||||
            results.extend(batch_results)
 | 
				
			||||
            
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
async def run_agent_with_timeout(
 | 
				
			||||
    agent: AgentType,
 | 
				
			||||
    task: str,
 | 
				
			||||
    timeout: float,
 | 
				
			||||
    executor: ThreadPoolExecutor
 | 
				
			||||
) -> Any:
 | 
				
			||||
    """
 | 
				
			||||
    Run an agent with a timeout limit.
 | 
				
			||||
    
 | 
				
			||||
    Args:
 | 
				
			||||
        agent: Agent instance to run
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        timeout: Timeout in seconds
 | 
				
			||||
        executor: ThreadPoolExecutor instance
 | 
				
			||||
        
 | 
				
			||||
    Returns:
 | 
				
			||||
        Agent execution result or None if timeout occurs
 | 
				
			||||
    """
 | 
				
			||||
    try:
 | 
				
			||||
        return await asyncio.wait_for(
 | 
				
			||||
            run_agent_async(agent, task, executor),
 | 
				
			||||
            timeout=timeout
 | 
				
			||||
        )
 | 
				
			||||
    except asyncio.TimeoutError:
 | 
				
			||||
        return None
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_with_timeout(
 | 
				
			||||
    agents: List[AgentType],
 | 
				
			||||
    task: str,
 | 
				
			||||
    timeout: float,
 | 
				
			||||
    batch_size: int = None,
 | 
				
			||||
    max_workers: int = None
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Run multiple agents concurrently with a timeout for each agent.
 | 
				
			||||
    
 | 
				
			||||
    Args:
 | 
				
			||||
        agents: List of Agent instances
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        timeout: Timeout in seconds for each agent
 | 
				
			||||
        batch_size: Number of agents to run in parallel
 | 
				
			||||
        max_workers: Maximum number of threads
 | 
				
			||||
        
 | 
				
			||||
    Returns:
 | 
				
			||||
        List of outputs (None for timed out agents)
 | 
				
			||||
    """
 | 
				
			||||
    cpu_cores = cpu_count()
 | 
				
			||||
    batch_size = batch_size or cpu_cores
 | 
				
			||||
    max_workers = max_workers or cpu_cores * 2
 | 
				
			||||
    results = []
 | 
				
			||||
    
 | 
				
			||||
    try:
 | 
				
			||||
        loop = asyncio.get_event_loop()
 | 
				
			||||
    except RuntimeError:
 | 
				
			||||
        loop = asyncio.new_event_loop()
 | 
				
			||||
        asyncio.set_event_loop(loop)
 | 
				
			||||
        
 | 
				
			||||
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
 | 
				
			||||
        for i in range(0, len(agents), batch_size):
 | 
				
			||||
            batch = agents[i : i + batch_size]
 | 
				
			||||
            batch_results = loop.run_until_complete(
 | 
				
			||||
                asyncio.gather(
 | 
				
			||||
                    *(run_agent_with_timeout(agent, task, timeout, executor) 
 | 
				
			||||
                      for agent in batch)
 | 
				
			||||
                )
 | 
				
			||||
            )
 | 
				
			||||
            results.extend(batch_results)
 | 
				
			||||
            
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@dataclass
 | 
				
			||||
class ResourceMetrics:
 | 
				
			||||
    cpu_percent: float
 | 
				
			||||
    memory_percent: float
 | 
				
			||||
    active_threads: int
 | 
				
			||||
 | 
				
			||||
def get_system_metrics() -> ResourceMetrics:
 | 
				
			||||
    """Get current system resource usage"""
 | 
				
			||||
    return ResourceMetrics(
 | 
				
			||||
        cpu_percent=psutil.cpu_percent(),
 | 
				
			||||
        memory_percent=psutil.virtual_memory().percent,
 | 
				
			||||
        active_threads=threading.active_count()
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_with_resource_monitoring(
 | 
				
			||||
    agents: List[AgentType],
 | 
				
			||||
    task: str,
 | 
				
			||||
    cpu_threshold: float = 90.0,
 | 
				
			||||
    memory_threshold: float = 90.0,
 | 
				
			||||
    check_interval: float = 1.0
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Run agents with system resource monitoring and adaptive batch sizing.
 | 
				
			||||
    
 | 
				
			||||
    Args:
 | 
				
			||||
        agents: List of Agent instances
 | 
				
			||||
        task: Task string to execute
 | 
				
			||||
        cpu_threshold: Max CPU usage percentage
 | 
				
			||||
        memory_threshold: Max memory usage percentage
 | 
				
			||||
        check_interval: Resource check interval in seconds
 | 
				
			||||
        
 | 
				
			||||
    Returns:
 | 
				
			||||
        List of outputs from each agent
 | 
				
			||||
    """
 | 
				
			||||
    async def monitor_resources():
 | 
				
			||||
        while True:
 | 
				
			||||
            metrics = get_system_metrics()
 | 
				
			||||
            if metrics.cpu_percent > cpu_threshold or metrics.memory_percent > memory_threshold:
 | 
				
			||||
                # Reduce batch size or pause execution
 | 
				
			||||
                pass
 | 
				
			||||
            await asyncio.sleep(check_interval)
 | 
				
			||||
    
 | 
				
			||||
    # Implementation details...
 | 
				
			||||
    
 | 
				
			||||
# # Example usage:
 | 
				
			||||
# # Initialize your agents with the same model to avoid re-creating it
 | 
				
			||||
# agents = [
 | 
				
			||||
#     Agent(
 | 
				
			||||
#         agent_name=f"Financial-Analysis-Agent_parallel_swarm{i}",
 | 
				
			||||
#         system_prompt=FINANCIAL_AGENT_SYS_PROMPT,
 | 
				
			||||
#         llm=model,
 | 
				
			||||
#         max_loops=1,
 | 
				
			||||
#         autosave=True,
 | 
				
			||||
#         dashboard=False,
 | 
				
			||||
#         verbose=False,
 | 
				
			||||
#         dynamic_temperature_enabled=False,
 | 
				
			||||
#         saved_state_path=f"finance_agent_{i}.json",
 | 
				
			||||
#         user_name="swarms_corp",
 | 
				
			||||
#         retry_attempts=1,
 | 
				
			||||
#         context_length=200000,
 | 
				
			||||
#         return_step_meta=False,
 | 
				
			||||
#     )
 | 
				
			||||
#     for i in range(5)  # Assuming you want 10 agents
 | 
				
			||||
# ]
 | 
				
			||||
 | 
				
			||||
# task = "How can I establish a ROTH IRA to buy stocks and get a tax break? What are the criteria"
 | 
				
			||||
# outputs = run_agents_concurrently(agents, task)
 | 
				
			||||
 | 
				
			||||
# for i, output in enumerate(outputs):
 | 
				
			||||
#     print(f"Output from agent {i+1}:\n{output}")
 | 
				
			||||
 | 
				
			||||
@ -1,120 +0,0 @@
 | 
				
			||||
import os
 | 
				
			||||
 | 
				
			||||
# from swarms.structs. import OpenAIChat
 | 
				
			||||
import asyncio
 | 
				
			||||
from swarms.utils.calculate_func_metrics import profile_func
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Function to run a single agent on the task (synchronous)
 | 
				
			||||
def run_single_agent(agent, task):
 | 
				
			||||
    return agent.run(task)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Asynchronous wrapper for agent tasks
 | 
				
			||||
async def run_agent_async(agent, task):
 | 
				
			||||
    loop = asyncio.get_event_loop()
 | 
				
			||||
    return await loop.run_in_executor(
 | 
				
			||||
        None, run_single_agent, agent, task
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Asynchronous function to run agents concurrently
 | 
				
			||||
async def run_agents_concurrently_async(agents, task: str):
 | 
				
			||||
    """
 | 
				
			||||
    Run multiple agents concurrently on the same task with optimized performance.
 | 
				
			||||
 | 
				
			||||
    :param agents: List of Agent instances to run concurrently.
 | 
				
			||||
    :param task: The task string to execute by all agents.
 | 
				
			||||
    :return: A list of outputs from each agent.
 | 
				
			||||
    """
 | 
				
			||||
 | 
				
			||||
    # Run all agents asynchronously using asyncio.gather
 | 
				
			||||
    results = await asyncio.gather(
 | 
				
			||||
        *(run_agent_async(agent, task) for agent in agents)
 | 
				
			||||
    )
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# Function to manage the overall process and batching
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_concurrently(agents, task: str, batch_size: int = 5):
 | 
				
			||||
    """
 | 
				
			||||
    Manage and run multiple agents concurrently in batches, with optimized performance.
 | 
				
			||||
 | 
				
			||||
    :param agents: List of Agent instances to run concurrently.
 | 
				
			||||
    :param task: The task string to execute by all agents.
 | 
				
			||||
    :param batch_size: Number of agents to run in parallel in each batch.
 | 
				
			||||
    :return: A list of outputs from each agent.
 | 
				
			||||
    """
 | 
				
			||||
 | 
				
			||||
    results = []
 | 
				
			||||
    loop = asyncio.get_event_loop()
 | 
				
			||||
 | 
				
			||||
    batch_size = (
 | 
				
			||||
        os.cpu_count() if batch_size > os.cpu_count() else batch_size
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
    # Process agents in batches to avoid overwhelming system resources
 | 
				
			||||
    for i in range(0, len(agents), batch_size):
 | 
				
			||||
        batch = agents[i : i + batch_size]
 | 
				
			||||
        batch_results = loop.run_until_complete(
 | 
				
			||||
            run_agents_concurrently_async(batch, task)
 | 
				
			||||
        )
 | 
				
			||||
        results.extend(batch_results)
 | 
				
			||||
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# # Example usage:
 | 
				
			||||
# # Initialize your agents with the same model to avoid re-creating it
 | 
				
			||||
# agents = [
 | 
				
			||||
#     Agent(
 | 
				
			||||
#         agent_name=f"Financial-Analysis-Agent_parallel_swarm{i}",
 | 
				
			||||
#         system_prompt=FINANCIAL_AGENT_SYS_PROMPT,
 | 
				
			||||
#         llm=model,
 | 
				
			||||
#         max_loops=1,
 | 
				
			||||
#         autosave=True,
 | 
				
			||||
#         dashboard=False,
 | 
				
			||||
#         verbose=False,
 | 
				
			||||
#         dynamic_temperature_enabled=False,
 | 
				
			||||
#         saved_state_path=f"finance_agent_{i}.json",
 | 
				
			||||
#         user_name="swarms_corp",
 | 
				
			||||
#         retry_attempts=1,
 | 
				
			||||
#         context_length=200000,
 | 
				
			||||
#         return_step_meta=False,
 | 
				
			||||
#     )
 | 
				
			||||
#     for i in range(5)  # Assuming you want 10 agents
 | 
				
			||||
# ]
 | 
				
			||||
 | 
				
			||||
# task = "How can I establish a ROTH IRA to buy stocks and get a tax break? What are the criteria"
 | 
				
			||||
# outputs = run_agents_concurrently(agents, task)
 | 
				
			||||
 | 
				
			||||
# for i, output in enumerate(outputs):
 | 
				
			||||
#     print(f"Output from agent {i+1}:\n{output}")
 | 
				
			||||
 | 
				
			||||
# # Output from agent 2:
 | 
				
			||||
# # execution_time=12.89196228981018 memory_usage=-294.9375 cpu_usage=-10.3 io_operations=23309 function_calls=1
 | 
				
			||||
# # execution_time=11.810921907424927 memory_usage=-242.734375 cpu_usage=-26.4 io_operations=10752 function_calls=1
 | 
				
			||||
 | 
				
			||||
# # Parallel
 | 
				
			||||
# # execution_time=18.79391312599182 memory_usage=-342.9375 cpu_usage=-2.5 io_operations=59518 function_calls=1
 | 
				
			||||
 | 
				
			||||
# # # Multiprocess
 | 
				
			||||
# # 2024-08-22T14:49:33.986491-0400 Function metrics: {
 | 
				
			||||
# #     "execution_time": 24.783875942230225,
 | 
				
			||||
# #     "memory_usage": -286.734375,
 | 
				
			||||
# #     "cpu_usage": -24.6,
 | 
				
			||||
# #     "io_operations": 17961,
 | 
				
			||||
# #     "function_calls": 1
 | 
				
			||||
# # }
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# # Latest
 | 
				
			||||
# # Analysis-Agent_parallel_swarm4_state.json
 | 
				
			||||
# # 2024-08-22T15:43:11.800970-0400 Function metrics: {
 | 
				
			||||
# #     "execution_time": 11.062030792236328,
 | 
				
			||||
# #     "memory_usage": -249.5625,
 | 
				
			||||
# #     "cpu_usage": -15.700000000000003,
 | 
				
			||||
# #     "io_operations": 13439,
 | 
				
			||||
# #     "function_calls": 1
 | 
				
			||||
# # }
 | 
				
			||||
@ -1,130 +0,0 @@
 | 
				
			||||
import asyncio
 | 
				
			||||
from typing import List, Any
 | 
				
			||||
from swarms import Agent
 | 
				
			||||
from multiprocessing import cpu_count
 | 
				
			||||
from swarms.utils.calculate_func_metrics import profile_func
 | 
				
			||||
 | 
				
			||||
# Use uvloop for faster asyncio event loop
 | 
				
			||||
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
def run_single_agent(agent: Agent, task: str) -> Any:
 | 
				
			||||
    """
 | 
				
			||||
    Run a single agent on the given task.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agent (Agent): The agent to run.
 | 
				
			||||
        task (str): The task for the agent to perform.
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        Any: The result of the agent's execution.
 | 
				
			||||
    """
 | 
				
			||||
    return agent.run(task)
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
async def run_agent_async(agent: Agent, task: str) -> Any:
 | 
				
			||||
    """
 | 
				
			||||
    Asynchronous wrapper for agent tasks.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agent (Agent): The agent to run asynchronously.
 | 
				
			||||
        task (str): The task for the agent to perform.
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        Any: The result of the agent's execution.
 | 
				
			||||
    """
 | 
				
			||||
    loop = asyncio.get_event_loop()
 | 
				
			||||
    return await loop.run_in_executor(
 | 
				
			||||
        None, run_single_agent, agent, task
 | 
				
			||||
    )
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
async def run_agents_concurrently_async(
 | 
				
			||||
    agents: List[Agent], task: str
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Run multiple agents concurrently on the same task with optimized performance.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agents (List[Agent]): List of Agent instances to run concurrently.
 | 
				
			||||
        task (str): The task string to execute by all agents.
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        List[Any]: A list of outputs from each agent.
 | 
				
			||||
    """
 | 
				
			||||
    results = await asyncio.gather(
 | 
				
			||||
        *(run_agent_async(agent, task) for agent in agents)
 | 
				
			||||
    )
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
@profile_func
 | 
				
			||||
def run_agents_concurrently_multiprocess(
 | 
				
			||||
    agents: List[Agent], task: str, batch_size: int = cpu_count()
 | 
				
			||||
) -> List[Any]:
 | 
				
			||||
    """
 | 
				
			||||
    Manage and run multiple agents concurrently in batches, with optimized performance.
 | 
				
			||||
 | 
				
			||||
    Args:
 | 
				
			||||
        agents (List[Agent]): List of Agent instances to run concurrently.
 | 
				
			||||
        task (str): The task string to execute by all agents.
 | 
				
			||||
        batch_size (int, optional): Number of agents to run in parallel in each batch.
 | 
				
			||||
                                    Defaults to the number of CPU cores.
 | 
				
			||||
 | 
				
			||||
    Returns:
 | 
				
			||||
        List[Any]: A list of outputs from each agent.
 | 
				
			||||
    """
 | 
				
			||||
    results = []
 | 
				
			||||
    loop = asyncio.get_event_loop()
 | 
				
			||||
 | 
				
			||||
    # Process agents in batches to avoid overwhelming system resources
 | 
				
			||||
    for i in range(0, len(agents), batch_size):
 | 
				
			||||
        batch = agents[i : i + batch_size]
 | 
				
			||||
        batch_results = loop.run_until_complete(
 | 
				
			||||
            run_agents_concurrently_async(batch, task)
 | 
				
			||||
        )
 | 
				
			||||
        results.extend(batch_results)
 | 
				
			||||
 | 
				
			||||
    return results
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# # # Example usage:
 | 
				
			||||
# # Initialize your agents with the same model to avoid re-creating it
 | 
				
			||||
# agents = [
 | 
				
			||||
#     Agent(
 | 
				
			||||
#         agent_name=f"Financial-Analysis-Agent_new_parallel_swarm_test{i}",
 | 
				
			||||
#         system_prompt=FINANCIAL_AGENT_SYS_PROMPT,
 | 
				
			||||
#         llm=model,
 | 
				
			||||
#         max_loops=1,
 | 
				
			||||
#         autosave=True,
 | 
				
			||||
#         dashboard=False,
 | 
				
			||||
#         verbose=False,
 | 
				
			||||
#         dynamic_temperature_enabled=False,
 | 
				
			||||
#         saved_state_path=f"finance_agent_{i}.json",
 | 
				
			||||
#         user_name="swarms_corp",
 | 
				
			||||
#         retry_attempts=1,
 | 
				
			||||
#         context_length=200000,
 | 
				
			||||
#         return_step_meta=False,
 | 
				
			||||
#     )
 | 
				
			||||
#     for i in range(5)  # Assuming you want 10 agents
 | 
				
			||||
# ]
 | 
				
			||||
 | 
				
			||||
# task = "How can I establish a ROTH IRA to buy stocks and get a tax break? What are the criteria"
 | 
				
			||||
# outputs = run_agents_concurrently_multiprocess(
 | 
				
			||||
#     agents,
 | 
				
			||||
#     task,
 | 
				
			||||
# )
 | 
				
			||||
 | 
				
			||||
# for i, output in enumerate(outputs):
 | 
				
			||||
#     print(f"Output from agent {i+1}:\n{output}")
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
# # execution_time=15.958749055862427 memory_usage=-328.046875 cpu_usage=-2.5999999999999943 io_operations=81297 function_calls=1
 | 
				
			||||
# # Analysis-Agent_new_parallel_swarm_test1_state.json
 | 
				
			||||
# # 2024-08-22T15:42:12.463246-0400 Function metrics: {
 | 
				
			||||
# #     "execution_time": 15.958749055862427,
 | 
				
			||||
# #     "memory_usage": -328.046875,
 | 
				
			||||
# #     "cpu_usage": -2.5999999999999943,
 | 
				
			||||
# #     "io_operations": 81297,
 | 
				
			||||
#     "function_calls": 1
 | 
				
			||||
# }
 | 
				
			||||
					Loading…
					
					
				
		Reference in new issue