# TaskQueueSwarm Documentation The `TaskQueueSwarm` class is designed to manage and execute tasks using multiple agents concurrently. This class allows for the orchestration of multiple agents processing tasks from a shared queue, facilitating complex workflows where tasks can be distributed and processed in parallel by different agents. ## Attributes | Attribute | Type | Description | |-----------|------|-------------| | `agents` | `List[Agent]` | The list of agents in the swarm. | | `task_queue` | `queue.Queue` | A queue to store tasks for processing. | | `lock` | `threading.Lock` | A lock for thread synchronization. | | `autosave_on` | `bool` | Whether to automatically save the swarm metadata. | | `save_file_path` | `str` | The file path for saving swarm metadata. | | `workspace_dir` | `str` | The directory path of the workspace. | | `return_metadata_on` | `bool` | Whether to return the swarm metadata after running. | | `max_loops` | `int` | The maximum number of loops to run the swarm. | | `metadata` | `SwarmRunMetadata` | Metadata about the swarm run. | ## Methods ### `__init__(self, agents: List[Agent], name: str = "Task-Queue-Swarm", description: str = "A swarm that processes tasks from a queue using multiple agents on different threads.", autosave_on: bool = True, save_file_path: str = "swarm_run_metadata.json", workspace_dir: str = os.getenv("WORKSPACE_DIR"), return_metadata_on: bool = False, max_loops: int = 1, *args, **kwargs)` The constructor initializes the `TaskQueueSwarm` object. - **Parameters:** - `agents` (`List[Agent]`): The list of agents in the swarm. - `name` (`str`, optional): The name of the swarm. Defaults to "Task-Queue-Swarm". - `description` (`str`, optional): The description of the swarm. Defaults to "A swarm that processes tasks from a queue using multiple agents on different threads.". - `autosave_on` (`bool`, optional): Whether to automatically save the swarm metadata. Defaults to True. - `save_file_path` (`str`, optional): The file path to save the swarm metadata. Defaults to "swarm_run_metadata.json". - `workspace_dir` (`str`, optional): The directory path of the workspace. Defaults to os.getenv("WORKSPACE_DIR"). - `return_metadata_on` (`bool`, optional): Whether to return the swarm metadata after running. Defaults to False. - `max_loops` (`int`, optional): The maximum number of loops to run the swarm. Defaults to 1. - `*args`: Variable length argument list. - `**kwargs`: Arbitrary keyword arguments. ### `add_task(self, task: str)` Adds a task to the queue. - **Parameters:** - `task` (`str`): The task to be added to the queue. ### `run(self)` Runs the swarm by having agents pick up tasks from the queue. - **Returns:** - `str`: JSON string of the swarm run metadata if `return_metadata_on` is True. - **Usage Example:** ```python from swarms import Agent, TaskQueueSwarm from swarms_models import OpenAIChat # Initialize the language model llm = OpenAIChat() # Initialize agents agent1 = Agent(agent_name="Agent1", llm=llm) agent2 = Agent(agent_name="Agent2", llm=llm) # Create the TaskQueueSwarm swarm = TaskQueueSwarm(agents=[agent1, agent2], max_loops=5) # Add tasks to the swarm swarm.add_task("Analyze the latest market trends") swarm.add_task("Generate a summary report") # Run the swarm result = swarm.run() print(result) # Prints the swarm run metadata ``` This example initializes a `TaskQueueSwarm` with two agents, adds tasks to the queue, and runs the swarm. ### `save_json_to_file(self)` Saves the swarm run metadata to a JSON file. ### `export_metadata(self)` Exports the swarm run metadata as a JSON string. - **Returns:** - `str`: JSON string of the swarm run metadata. ## Additional Notes - The `TaskQueueSwarm` uses threading to process tasks concurrently, which can significantly improve performance for I/O-bound tasks. - The `reliability_checks` method ensures that the swarm is properly configured before running. - The swarm automatically handles task distribution among agents and provides detailed metadata about the run. - Error handling and logging are implemented to track the execution flow and capture any issues during task processing.