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.
191 lines
6.4 KiB
191 lines
6.4 KiB
# AutoSwarm
|
|
|
|
The `AutoSwarm` class represents a swarm of agents that can be created and managed automatically. This class leverages the `AutoSwarmRouter` to route tasks to appropriate swarms and supports custom preprocessing, routing, and postprocessing of tasks. It is designed to handle complex workflows efficiently.
|
|
|
|
### Key Concepts
|
|
|
|
- **Swarm**: A group of agents working together to complete tasks.
|
|
- **Routing**: Directing tasks to the appropriate swarm based on specific criteria.
|
|
- **Preprocessing and Postprocessing**: Customizable functions to handle tasks before and after routing.
|
|
- **Event Loop**: Managing the execution of tasks in a loop.
|
|
|
|
## Attributes
|
|
|
|
### Arguments
|
|
|
|
| Argument | Type | Default | Description |
|
|
|---------------------|-------------------------------|-----------|-------------|
|
|
| `name` | `Optional[str]` | `None` | The name of the swarm. |
|
|
| `description` | `Optional[str]` | `None` | The description of the swarm. |
|
|
| `verbose` | `bool` | `False` | Whether to enable verbose mode. |
|
|
| `custom_params` | `Optional[Dict[str, Any]]` | `None` | Custom parameters for the swarm. |
|
|
| `custom_preprocess` | `Optional[Callable]` | `None` | Custom preprocessing function for tasks. |
|
|
| `custom_postprocess`| `Optional[Callable]` | `None` | Custom postprocessing function for task results. |
|
|
| `custom_router` | `Optional[Callable]` | `None` | Custom routing function for tasks. |
|
|
| `max_loops` | `int` | `1` | The maximum number of loops to run the workflow. |
|
|
|
|
### Attributes
|
|
|
|
| Attribute | Type | Description |
|
|
|----------------------|-------------------------------|-------------|
|
|
| `name` | `Optional[str]` | The name of the swarm. |
|
|
| `description` | `Optional[str]` | The description of the swarm. |
|
|
| `verbose` | `bool` | Whether to enable verbose mode. |
|
|
| `custom_params` | `Optional[Dict[str, Any]]` | Custom parameters for the swarm. |
|
|
| `custom_preprocess` | `Optional[Callable]` | Custom preprocessing function for tasks. |
|
|
| `custom_postprocess` | `Optional[Callable]` | Custom postprocessing function for task results. |
|
|
| `custom_router` | `Optional[Callable]` | Custom routing function for tasks. |
|
|
| `max_loops` | `int` | The maximum number of loops to run the workflow. |
|
|
| `router` | `AutoSwarmRouter` | The router for managing task routing. |
|
|
|
|
## Methods
|
|
|
|
### init_logging
|
|
|
|
Initializes logging for the `AutoSwarm`.
|
|
|
|
**Examples:**
|
|
|
|
```python
|
|
swarm = AutoSwarm(name="example_swarm", verbose=True)
|
|
swarm.init_logging()
|
|
```
|
|
|
|
### run
|
|
|
|
Runs the swarm simulation.
|
|
|
|
**Arguments:**
|
|
|
|
| Parameter | Type | Default | Description |
|
|
|-----------|---------|---------|-------------|
|
|
| `task` | `str` | `None` | The task to be executed. |
|
|
| `*args` | | | Additional arguments. |
|
|
| `**kwargs`| | | Additional keyword arguments. |
|
|
|
|
**Returns:**
|
|
|
|
| Return Type | Description |
|
|
|-------------|-------------|
|
|
| `Any` | The result of the executed task. |
|
|
|
|
**Raises:**
|
|
|
|
- `Exception`: If any error occurs during task execution.
|
|
|
|
**Examples:**
|
|
|
|
```python
|
|
swarm = AutoSwarm(name="example_swarm", max_loops=3)
|
|
result = swarm.run(task="example_task")
|
|
print(result)
|
|
```
|
|
|
|
### list_all_swarms
|
|
|
|
Lists all available swarms and their descriptions.
|
|
|
|
**Examples:**
|
|
|
|
```python
|
|
swarm = AutoSwarm(name="example_swarm", max_loops=3)
|
|
swarm.list_all_swarms()
|
|
# Output:
|
|
# INFO: Swarm Name: swarm1 || Swarm Description: Description of swarm1
|
|
# INFO: Swarm Name: swarm2 || Swarm Description: Description of swarm2
|
|
```
|
|
|
|
### Additional Examples
|
|
|
|
#### Example 1: Custom Preprocessing and Postprocessing
|
|
|
|
```python
|
|
def custom_preprocess(task, *args, **kwargs):
|
|
# Custom preprocessing logic
|
|
task = task.upper()
|
|
return task, args, kwargs
|
|
|
|
def custom_postprocess(result):
|
|
# Custom postprocessing logic
|
|
return result.lower()
|
|
|
|
swarm = AutoSwarm(
|
|
name="example_swarm",
|
|
custom_preprocess=custom_preprocess,
|
|
custom_postprocess=custom_postprocess,
|
|
max_loops=3
|
|
)
|
|
|
|
# Running a task with custom preprocessing and postprocessing
|
|
result = swarm.run(task="example_task")
|
|
print(result) # Output will be the processed result
|
|
```
|
|
|
|
#### Example 2: Custom Router Function
|
|
|
|
```python
|
|
def custom_router(swarm, task, *args, **kwargs):
|
|
# Custom routing logic
|
|
if "specific" in task:
|
|
return swarm.router.swarm_dict["specific_swarm"].run(task, *args, **kwargs)
|
|
return swarm.router.swarm_dict["default_swarm"].run(task, *args, **kwargs)
|
|
|
|
swarm = AutoSwarm(
|
|
name="example_swarm",
|
|
custom_router=custom_router,
|
|
max_loops=3
|
|
)
|
|
|
|
# Running a task with custom routing
|
|
result = swarm.run(task="specific_task")
|
|
print(result) # Output will be the result of the routed task
|
|
```
|
|
|
|
#### Example 3: Verbose Mode
|
|
|
|
```python
|
|
swarm = AutoSwarm(
|
|
name="example_swarm",
|
|
verbose=True,
|
|
max_loops=3
|
|
)
|
|
|
|
# Running a task with verbose mode enabled
|
|
result = swarm.run(task="example_task")
|
|
# Output will include detailed logs of the task execution process
|
|
```
|
|
|
|
|
|
#### Full Example 4:
|
|
First create a class with BaseSwarm -> Then wrap it in the router -> then pass that to the `AutoSwarm`
|
|
|
|
```python
|
|
from swarms import BaseSwarm, AutoSwarmRouter, AutoSwarm
|
|
|
|
|
|
class FinancialReportSummarization(BaseSwarm):
|
|
def __init__(self, name: str = None, *args, **kwargs):
|
|
super().__init__()
|
|
|
|
def run(self, task, *args, **kwargs):
|
|
return task
|
|
|
|
|
|
# Add swarm to router
|
|
router = AutoSwarmRouter(swarms=[FinancialReportSummarization])
|
|
|
|
# Create AutoSwarm Instance
|
|
autoswarm = AutoSwarm(
|
|
name="kyegomez/FinancialReportSummarization",
|
|
description="A swarm for financial document summarizing and generation",
|
|
verbose=True,
|
|
router=router,
|
|
)
|
|
|
|
# Run the AutoSwarm
|
|
autoswarm.run("Analyze these documents and give me a summary:")
|
|
```
|
|
|
|
## Summary
|
|
|
|
The `AutoSwarm` class provides a robust framework for managing and executing tasks using a swarm of agents. With customizable preprocessing, routing, and postprocessing functions, it is highly adaptable to various workflows and can handle complex task execution scenarios efficiently. The integration with `AutoSwarmRouter` enhances its flexibility, making it a powerful tool for dynamic task management. |