# 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 import Agent, run_agents_concurrently, run_agents_with_timeout, run_agents_with_different_tasks from swarm_models import OpenAIChat model = OpenAIChat( model_name="gpt-4o-mini", temperature=0.0 ) # 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