Merge pull request #1204 from aparekh02/swarmsapi1

[BUG-FIX] Swarm Router Bug Fix
master
Kye Gomez 17 hours ago committed by GitHub
commit 8c7670121c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -290,14 +290,14 @@ task = "Write a short story about a robot who discovers music."
# --- Example 1: SequentialWorkflow ---
# Agents run one after another in a chain: Writer -> Editor -> Reviewer.
print("Running a Sequential Workflow...")
sequential_router = SwarmRouter(swarm_type=SwarmType.SequentialWorkflow, agents=agents)
sequential_router = SwarmRouter(swarm_type="SequentialWorkflow", agents=agents)
sequential_output = sequential_router.run(task)
print(f"Final Sequential Output:\n{sequential_output}\n")
# --- Example 2: ConcurrentWorkflow ---
# All agents receive the same initial task and run at the same time.
print("Running a Concurrent Workflow...")
concurrent_router = SwarmRouter(swarm_type=SwarmType.ConcurrentWorkflow, agents=agents)
concurrent_router = SwarmRouter(swarm_type="ConcurrentWorkflow", agents=agents)
concurrent_outputs = concurrent_router.run(task)
# This returns a dictionary of each agent's output
for agent_name, output in concurrent_outputs.items():
@ -312,9 +312,9 @@ aggregator = Agent(
model_name="gpt-4o-mini"
)
moa_router = SwarmRouter(
swarm_type=SwarmType.MixtureOfAgents,
swarm_type="MixtureOfAgents",
agents=agents,
aggregator_agent=aggregator, # MoA requires an aggregator
aggregator_agent=aggregator,
)
aggregated_output = moa_router.run(task)
print(f"Final Aggregated Output:\n{aggregated_output}\n")

@ -29,7 +29,7 @@ GROQ_API_KEY=""
```python
from swarms import Agent
from swarms.structs.swarm_router import SwarmRouter, SwarmType
from swarms.structs.swarm_router import SwarmRouter
# Initialize specialized agents
data_extractor_agent = Agent(
@ -61,7 +61,7 @@ sequential_router = SwarmRouter(
name="SequentialRouter",
description="Process tasks in sequence",
agents=[data_extractor_agent, summarizer_agent, financial_analyst_agent],
swarm_type=SwarmType.SequentialWorkflow,
swarm_type="SequentialWorkflow",
max_loops=1
)
@ -76,7 +76,7 @@ concurrent_router = SwarmRouter(
name="ConcurrentRouter",
description="Process tasks concurrently",
agents=[data_extractor_agent, summarizer_agent, financial_analyst_agent],
swarm_type=SwarmType.ConcurrentWorkflow,
swarm_type="ConcurrentWorkflow",
max_loops=1
)
@ -91,8 +91,8 @@ rearrange_router = SwarmRouter(
name="RearrangeRouter",
description="Dynamically rearrange agents for optimal task processing",
agents=[data_extractor_agent, summarizer_agent, financial_analyst_agent],
swarm_type=SwarmType.AgentRearrange,
flow=f"{data_extractor_agent.agent_name} -> {summarizer_agent.agent_name} -> {financial_analyst_agent.agent_name}",
swarm_type="AgentRearrange",
rearrange_flow=f"{data_extractor_agent.agent_name} -> {summarizer_agent.agent_name} -> {financial_analyst_agent.agent_name}",
max_loops=1
)
@ -107,7 +107,7 @@ mixture_router = SwarmRouter(
name="MixtureRouter",
description="Combine multiple expert agents",
agents=[data_extractor_agent, summarizer_agent, financial_analyst_agent],
swarm_type=SwarmType.MixtureOfAgents,
swarm_type="MixtureOfAgents",
max_loops=1
)
@ -137,7 +137,7 @@ router = SwarmRouter(
name="CustomRouter",
description="Custom router configuration",
agents=[data_extractor_agent, summarizer_agent, financial_analyst_agent],
swarm_type=SwarmType.SequentialWorkflow,
swarm_type="SequentialWorkflow",
max_loops=3,
autosave=True,
verbose=True,
@ -145,6 +145,27 @@ router = SwarmRouter(
)
```
# SwarmType Reference
## Valid SwarmType Values
| Value | Description |
|-------|-------------|
| `"SequentialWorkflow"` | Execute agents in sequence |
| `"ConcurrentWorkflow"` | Execute agents concurrently |
| `"AgentRearrange"` | Dynamically rearrange agent execution order |
| `"MixtureOfAgents"` | Combine outputs from multiple agents |
| `"GroupChat"` | Enable group chat between agents |
| `"MultiAgentRouter"` | Route tasks to appropriate agents |
| `"AutoSwarmBuilder"` | Automatically build swarm configuration |
| `"HiearchicalSwarm"` | Hierarchical agent organization |
| `"MajorityVoting"` | Use majority voting for decisions |
| `"MALT"` | Multi-Agent Learning and Training |
| `"CouncilAsAJudge"` | Council-based evaluation system |
| `"InteractiveGroupChat"` | Interactive group chat with agents |
| `"HeavySwarm"` | Heavy swarm for complex tasks |
| `"auto"` | Automatically select swarm type |
# Best Practices
## Choose the appropriate swarm type based on your task requirements:
@ -187,7 +208,7 @@ Here's a complete example showing how to use SwarmRouter in a real-world scenari
```python
import os
from swarms import Agent
from swarms.structs.swarm_router import SwarmRouter, SwarmType
from swarms.structs.swarm_router import SwarmRouter
# Initialize specialized agents
research_agent = Agent(
@ -216,7 +237,7 @@ router = SwarmRouter(
name="ResearchAnalysisRouter",
description="Process research and analysis tasks",
agents=[research_agent, analysis_agent, summary_agent],
swarm_type=SwarmType.SequentialWorkflow,
swarm_type="SequentialWorkflow",
max_loops=1,
verbose=True
)

@ -186,14 +186,14 @@ task = "Write a short story about a robot who discovers music."
# --- Example 1: SequentialWorkflow ---
# Agents run one after another in a chain: Writer -> Editor -> Reviewer.
print("Running a Sequential Workflow...")
sequential_router = SwarmRouter(swarm_type=SwarmType.SequentialWorkflow, agents=agents)
sequential_router = SwarmRouter(swarm_type="SequentialWorkflow", agents=agents)
sequential_output = sequential_router.run(task)
print(f"Final Sequential Output:\n{sequential_output}\n")
# --- Example 2: ConcurrentWorkflow ---
# All agents receive the same initial task and run at the same time.
print("Running a Concurrent Workflow...")
concurrent_router = SwarmRouter(swarm_type=SwarmType.ConcurrentWorkflow, agents=agents)
concurrent_router = SwarmRouter(swarm_type="ConcurrentWorkflow", agents=agents)
concurrent_outputs = concurrent_router.run(task)
# This returns a dictionary of each agent's output
for agent_name, output in concurrent_outputs.items():
@ -208,9 +208,9 @@ aggregator = Agent(
model_name="gpt-4o-mini"
)
moa_router = SwarmRouter(
swarm_type=SwarmType.MixtureOfAgents,
swarm_type="MixtureOfAgents",
agents=agents,
aggregator_agent=aggregator, # MoA requires an aggregator
aggregator_agent=aggregator,
)
aggregated_output = moa_router.run(task)
print(f"Final Aggregated Output:\n{aggregated_output}\n")

@ -2,7 +2,7 @@ import concurrent.futures
import json
import os
import traceback
from typing import Any, Callable, Dict, List, Literal, Optional, Union
from typing import Any, Callable, Dict, List, Literal, Optional, Union, get_args
from pydantic import BaseModel, Field
@ -46,6 +46,7 @@ SwarmType = Literal[
"CouncilAsAJudge",
"InteractiveGroupChat",
"HeavySwarm",
"BatchedGridWorkflow",
]
@ -272,6 +273,24 @@ class SwarmRouter:
"SwarmRouter: Swarm type cannot be 'none'. Check the docs for all the swarm types available. https://docs.swarms.world/en/latest/swarms/structs/swarm_router/"
)
# Validate swarm type is a valid string
valid_swarm_types = get_args(SwarmType)
if not isinstance(self.swarm_type, str):
raise SwarmRouterConfigError(
f"SwarmRouter: swarm_type must be a string, not {type(self.swarm_type).__name__}. "
f"Valid types are: {', '.join(valid_swarm_types)}. "
"Use swarm_type='SequentialWorkflow' (string), NOT SwarmType.SequentialWorkflow. "
"See https://docs.swarms.world/en/latest/swarms/structs/swarm_router/"
)
if self.swarm_type not in valid_swarm_types:
raise SwarmRouterConfigError(
f"SwarmRouter: Invalid swarm_type '{self.swarm_type}'. "
f"Valid types are: {', '.join(valid_swarm_types)}. "
"See https://docs.swarms.world/en/latest/swarms/structs/swarm_router/"
)
if (
self.swarm_type != "HeavySwarm"
and self.agents is None

Loading…
Cancel
Save