[FEAT][LLMCouncil][Docs][Examples]

pull/1201/merge
Kye Gomez 4 days ago
parent e5c2960912
commit 688772e99b

@ -0,0 +1,106 @@
# LLM Council Examples
This page provides examples demonstrating the LLM Council pattern, inspired by Andrej Karpathy's llm-council implementation. The LLM Council uses multiple specialized AI agents that:
1. Each respond independently to queries
2. Review and rank each other's anonymized responses
3. Have a Chairman synthesize all responses into a final comprehensive answer
## Example Files
All LLM Council examples are located in the [`examples/multi_agent/llm_council_examples/`](https://github.com/kyegomez/swarms/tree/master/examples/multi_agent/llm_council_examples) directory.
### Marketing & Business
- **[marketing_strategy_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/marketing_strategy_council.py)** - Marketing strategy analysis and recommendations
- **[business_strategy_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/business_strategy_council.py)** - Comprehensive business strategy development
### Finance & Investment
- **[finance_analysis_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/finance_analysis_council.py)** - Financial analysis and investment recommendations
- **[etf_stock_analysis_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/etf_stock_analysis_council.py)** - ETF and stock analysis with portfolio recommendations
### Medical & Healthcare
- **[medical_treatment_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/medical_treatment_council.py)** - Medical treatment recommendations and care plans
- **[medical_diagnosis_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/medical_diagnosis_council.py)** - Diagnostic analysis based on symptoms
### Technology & Research
- **[technology_assessment_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/technology_assessment_council.py)** - Technology evaluation and implementation strategy
- **[research_analysis_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/research_analysis_council.py)** - Comprehensive research analysis on complex topics
### Legal
- **[legal_analysis_council.py](https://github.com/kyegomez/swarms/blob/master/examples/multi_agent/llm_council_examples/legal_analysis_council.py)** - Legal implications and compliance analysis
## Basic Usage Pattern
All examples follow the same pattern:
```python
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Run a query
result = council.run("Your query here")
# Access results
print(result["final_response"]) # Chairman's synthesized answer
print(result["original_responses"]) # Individual member responses
print(result["evaluations"]) # How members ranked each other
```
## Running Examples
Run any example directly:
```bash
python examples/multi_agent/llm_council_examples/marketing_strategy_council.py
python examples/multi_agent/llm_council_examples/finance_analysis_council.py
python examples/multi_agent/llm_council_examples/medical_diagnosis_council.py
```
## Key Features
- **Multiple Perspectives**: Each council member (GPT-5.1, Gemini, Claude, Grok) provides unique insights
- **Peer Review**: Members evaluate and rank each other's responses anonymously
- **Synthesis**: Chairman combines the best elements from all responses
- **Transparency**: See both individual responses and evaluation rankings
## Council Members
The default council consists of:
- **GPT-5.1-Councilor**: Analytical and comprehensive
- **Gemini-3-Pro-Councilor**: Concise and well-processed
- **Claude-Sonnet-4.5-Councilor**: Thoughtful and balanced
- **Grok-4-Councilor**: Creative and innovative
## Customization
You can create custom council members:
```python
from swarms import Agent
from swarms.structs.llm_council import LLMCouncil, get_gpt_councilor_prompt
custom_agent = Agent(
agent_name="Custom-Councilor",
system_prompt=get_gpt_councilor_prompt(),
model_name="gpt-4.1",
max_loops=1,
)
council = LLMCouncil(
council_members=[custom_agent, ...],
chairman_model="gpt-5.1",
verbose=True
)
```
## Documentation
For complete API reference and detailed documentation, see the [LLM Council Reference Documentation](../swarms/structs/llm_council.md).

@ -281,6 +281,7 @@ nav:
- MALT: "swarms/structs/malt.md"
- Multi-Agent Execution Utilities: "swarms/structs/various_execution_methods.md"
- Council of Judges: "swarms/structs/council_of_judges.md"
- LLM Council: "swarms/structs/llm_council.md"
- Heavy Swarm: "swarms/structs/heavy_swarm.md"
- Social Algorithms: "swarms/structs/social_algorithms.md"
@ -401,6 +402,7 @@ nav:
- ConcurrentWorkflow Example: "swarms/examples/concurrent_workflow.md"
- Multi-Agentic Patterns with GraphWorkflow: "swarms/examples/graphworkflow_rustworkx_patterns.md"
- Mixture of Agents Example: "swarms/examples/moa_example.md"
- LLM Council Examples: "examples/llm_council_examples.md"
- Unique Swarms: "swarms/examples/unique_swarms.md"
- Agents as Tools: "swarms/examples/agents_as_tools.md"
- Aggregate Multi-Agent Responses: "swarms/examples/aggregate.md"

@ -0,0 +1,453 @@
# LLM Council Class Documentation
```mermaid
flowchart TD
A[User Query] --> B[LLM Council Initialization]
B --> C{Council Members Provided?}
C -->|No| D[Create Default Council]
C -->|Yes| E[Use Provided Members]
D --> F[Step 1: Parallel Response Generation]
E --> F
subgraph "Default Council Members"
G1[GPT-5.1-Councilor<br/>Analytical & Comprehensive]
G2[Gemini-3-Pro-Councilor<br/>Concise & Structured]
G3[Claude-Sonnet-4.5-Councilor<br/>Thoughtful & Balanced]
G4[Grok-4-Councilor<br/>Creative & Innovative]
end
F --> G1
F --> G2
F --> G3
F --> G4
G1 --> H[Collect All Responses]
G2 --> H
G3 --> H
G4 --> H
H --> I[Step 2: Anonymize Responses]
I --> J[Assign Anonymous IDs: A, B, C, D...]
J --> K[Step 3: Parallel Evaluation]
subgraph "Evaluation Phase"
K --> L1[Member 1 Evaluates All]
K --> L2[Member 2 Evaluates All]
K --> L3[Member 3 Evaluates All]
K --> L4[Member 4 Evaluates All]
end
L1 --> M[Collect Evaluations & Rankings]
L2 --> M
L3 --> M
L4 --> M
M --> N[Step 4: Chairman Synthesis]
N --> O[Chairman Agent]
O --> P[Final Synthesized Response]
P --> Q[Return Results Dictionary]
style A fill:#e1f5ff
style P fill:#c8e6c9
style Q fill:#c8e6c9
style O fill:#fff9c4
```
The `LLMCouncil` class orchestrates multiple specialized LLM agents to collaboratively answer queries through a structured peer review and synthesis process. Inspired by Andrej Karpathy's llm-council implementation, this architecture demonstrates how different models evaluate and rank each other's work, often selecting responses from other models as superior to their own.
## Workflow Overview
The LLM Council follows a four-step process:
1. **Parallel Response Generation**: All council members independently respond to the user query
2. **Anonymization**: Responses are anonymized with random IDs (A, B, C, D, etc.) to ensure objective evaluation
3. **Peer Review**: Each member evaluates and ranks all responses (including potentially their own)
4. **Synthesis**: The Chairman agent synthesizes all responses and evaluations into a final comprehensive answer
## Class Definition
### LLMCouncil
```python
class LLMCouncil:
```
### Attributes
| Attribute | Type | Description | Default |
|-----------|------|-------------|---------|
| `council_members` | `List[Agent]` | List of Agent instances representing council members | `None` (creates default council) |
| `chairman` | `Agent` | The Chairman agent responsible for synthesizing responses | Created during initialization |
| `verbose` | `bool` | Whether to print progress and intermediate results | `True` |
## Methods
### `__init__`
Initializes the LLM Council with council members and a Chairman agent.
#### Parameters
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `council_members` | `Optional[List[Agent]]` | `None` | List of Agent instances representing council members. If `None`, creates default council with GPT-5.1, Gemini 3 Pro, Claude Sonnet 4.5, and Grok-4. |
| `chairman_model` | `str` | `"gpt-5.1"` | Model name for the Chairman agent that synthesizes responses. |
| `verbose` | `bool` | `True` | Whether to print progress and intermediate results. |
#### Returns
| Type | Description |
|------|-------------|
| `LLMCouncil` | Initialized LLM Council instance. |
#### Description
Creates an LLM Council instance with specialized council members. If no members are provided, it creates a default council consisting of:
- **GPT-5.1-Councilor**: Analytical and comprehensive responses
- **Gemini-3-Pro-Councilor**: Concise and well-processed responses
- **Claude-Sonnet-4.5-Councilor**: Thoughtful and balanced responses
- **Grok-4-Councilor**: Creative and innovative responses
The Chairman agent is automatically created with a specialized prompt for synthesizing responses.
#### Example Usage
```python
from swarms.structs.llm_council import LLMCouncil
# Create council with default members
council = LLMCouncil(verbose=True)
# Create council with custom members
from swarms import Agent
custom_members = [
Agent(agent_name="Expert-1", model_name="gpt-4", max_loops=1),
Agent(agent_name="Expert-2", model_name="claude-3-opus", max_loops=1),
]
council = LLMCouncil(
council_members=custom_members,
chairman_model="gpt-4",
verbose=True
)
```
---
### `run`
Executes the full LLM Council workflow: parallel responses, anonymization, peer review, and synthesis.
#### Parameters
| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | `str` | Required | The user's query to process through the council. |
#### Returns
| Type | Description |
|------|-------------|
| `Dict` | Dictionary containing the following keys: |
#### Return Dictionary Structure
| Key | Type | Description |
|-----|------|-------------|
| `query` | `str` | The original user query. |
| `original_responses` | `Dict[str, str]` | Dictionary mapping council member names to their original responses. |
| `evaluations` | `Dict[str, str]` | Dictionary mapping evaluator names to their evaluation texts (rankings and reasoning). |
| `final_response` | `str` | The Chairman's synthesized final answer combining all perspectives. |
| `anonymous_mapping` | `Dict[str, str]` | Mapping from anonymous IDs (A, B, C, D) to member names for reference. |
#### Description
Executes the complete LLM Council workflow:
1. **Dispatch Phase**: Sends the query to all council members in parallel using `run_agents_concurrently`
2. **Collection Phase**: Collects all responses and maps them to member names
3. **Anonymization Phase**: Creates anonymous IDs (A, B, C, D, etc.) and shuffles them to ensure anonymity
4. **Evaluation Phase**: Each member evaluates and ranks all anonymized responses using `batched_grid_agent_execution`
5. **Synthesis Phase**: The Chairman agent synthesizes all responses and evaluations into a final comprehensive answer
The method provides verbose output by default, showing progress at each stage.
#### Example Usage
```python
from swarms.structs.llm_council import LLMCouncil
council = LLMCouncil(verbose=True)
query = "What are the top five best energy stocks across nuclear, solar, gas, and other energy sources?"
result = council.run(query)
# Access the final synthesized response
print(result["final_response"])
# Access individual member responses
for name, response in result["original_responses"].items():
print(f"{name}: {response[:200]}...")
# Access evaluation rankings
for evaluator, evaluation in result["evaluations"].items():
print(f"{evaluator} evaluation:\n{evaluation[:300]}...")
# Check anonymous mapping
print("Anonymous IDs:", result["anonymous_mapping"])
```
---
### `_create_default_council`
Creates default council members with specialized prompts and models.
#### Parameters
None (internal method).
#### Returns
| Type | Description |
|------|-------------|
| `List[Agent]` | List of Agent instances configured as council members. |
#### Description
Internal method that creates the default council configuration with four specialized agents:
- **GPT-5.1-Councilor** (`model_name="gpt-5.1"`): Analytical and comprehensive, temperature=0.7
- **Gemini-3-Pro-Councilor** (`model_name="gemini-2.5-flash"`): Concise and structured, temperature=0.7
- **Claude-Sonnet-4.5-Councilor** (`model_name="anthropic/claude-sonnet-4-5"`): Thoughtful and balanced, temperature=0.0
- **Grok-4-Councilor** (`model_name="x-ai/grok-4"`): Creative and innovative, temperature=0.8
Each agent is configured with:
- Specialized system prompts matching their role
- `max_loops=1` for single-response generation
- `verbose=False` to reduce noise during parallel execution
- Appropriate temperature settings for their style
---
## Helper Functions
### `get_gpt_councilor_prompt()`
Returns the system prompt for GPT-5.1 councilor agent.
#### Returns
| Type | Description |
|------|-------------|
| `str` | System prompt string emphasizing analytical thinking and comprehensive coverage. |
---
### `get_gemini_councilor_prompt()`
Returns the system prompt for Gemini 3 Pro councilor agent.
#### Returns
| Type | Description |
|------|-------------|
| `str` | System prompt string emphasizing concise, well-processed, and structured responses. |
---
### `get_claude_councilor_prompt()`
Returns the system prompt for Claude Sonnet 4.5 councilor agent.
#### Returns
| Type | Description |
|------|-------------|
| `str` | System prompt string emphasizing thoughtful, balanced, and nuanced responses. |
---
### `get_grok_councilor_prompt()`
Returns the system prompt for Grok-4 councilor agent.
#### Returns
| Type | Description |
|------|-------------|
| `str` | System prompt string emphasizing creative, innovative, and unique perspectives. |
---
### `get_chairman_prompt()`
Returns the system prompt for the Chairman agent.
#### Returns
| Type | Description |
|------|-------------|
| `str` | System prompt string for synthesizing responses and evaluations into a final answer. |
---
### `get_evaluation_prompt(query, responses, evaluator_name)`
Creates evaluation prompt for council members to review and rank responses.
#### Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| `query` | `str` | The original user query. |
| `responses` | `Dict[str, str]` | Dictionary mapping anonymous IDs to response texts. |
| `evaluator_name` | `str` | Name of the agent doing the evaluation. |
#### Returns
| Type | Description |
|------|-------------|
| `str` | Formatted evaluation prompt string with instructions for ranking responses. |
---
### `get_synthesis_prompt(query, original_responses, evaluations, id_to_member)`
Creates synthesis prompt for the Chairman.
#### Parameters
| Parameter | Type | Description |
|-----------|------|-------------|
| `query` | `str` | Original user query. |
| `original_responses` | `Dict[str, str]` | Dictionary mapping member names to their responses. |
| `evaluations` | `Dict[str, str]` | Dictionary mapping evaluator names to their evaluation texts. |
| `id_to_member` | `Dict[str, str]` | Mapping from anonymous IDs to member names. |
#### Returns
| Type | Description |
|------|-------------|
| `str` | Formatted synthesis prompt for the Chairman agent. |
---
## Use Cases
The LLM Council is ideal for scenarios requiring:
- **Multi-perspective Analysis**: When you need diverse viewpoints on complex topics
- **Quality Assurance**: When peer review and ranking can improve response quality
- **Transparent Decision Making**: When you want to see how different models evaluate each other
- **Synthesis of Expertise**: When combining multiple specialized perspectives is valuable
### Common Applications
- **Medical Diagnosis**: Multiple medical AI agents provide diagnoses, evaluate each other, and synthesize recommendations
- **Financial Analysis**: Different financial experts analyze investments and rank each other's assessments
- **Legal Analysis**: Multiple legal perspectives evaluate compliance and risk
- **Business Strategy**: Diverse strategic viewpoints are synthesized into comprehensive plans
- **Research Analysis**: Multiple research perspectives are combined for thorough analysis
## Examples
For comprehensive examples demonstrating various use cases, see the [LLM Council Examples](../../../examples/multi_agent/llm_council_examples/) directory:
- **Medical**: `medical_diagnosis_council.py`, `medical_treatment_council.py`
- **Finance**: `finance_analysis_council.py`, `etf_stock_analysis_council.py`
- **Business**: `business_strategy_council.py`, `marketing_strategy_council.py`
- **Technology**: `technology_assessment_council.py`, `research_analysis_council.py`
- **Legal**: `legal_analysis_council.py`
### Quick Start Example
```python
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Example query
query = "What are the top five best energy stocks across nuclear, solar, gas, and other energy sources?"
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])
# Optionally print evaluations
print("\n\n" + "="*80)
print("EVALUATIONS")
print("="*80)
for name, evaluation in result["evaluations"].items():
print(f"\n{name}:")
print(evaluation[:500] + "..." if len(evaluation) > 500 else evaluation)
```
## Customization
### Creating Custom Council Members
You can create custom council members with specialized roles:
```python
from swarms import Agent
from swarms.structs.llm_council import LLMCouncil, get_gpt_councilor_prompt
# Create custom councilor
custom_agent = Agent(
agent_name="Domain-Expert-Councilor",
agent_description="Specialized domain expert for specific analysis",
system_prompt=get_gpt_councilor_prompt(), # Or create custom prompt
model_name="gpt-4",
max_loops=1,
verbose=False,
temperature=0.7,
)
# Create council with custom members
council = LLMCouncil(
council_members=[custom_agent, ...], # Add your custom agents
chairman_model="gpt-4",
verbose=True
)
```
### Custom Chairman Model
You can specify a different model for the Chairman:
```python
council = LLMCouncil(
chairman_model="claude-3-opus", # Use Claude as Chairman
verbose=True
)
```
## Architecture Benefits
1. **Diversity**: Multiple models provide varied perspectives and approaches
2. **Quality Control**: Peer review ensures responses are evaluated objectively
3. **Synthesis**: Chairman combines the best elements from all responses
4. **Transparency**: Full visibility into individual responses and evaluation rankings
5. **Scalability**: Easy to add or remove council members
6. **Flexibility**: Supports custom agents and models
## Performance Considerations
- **Parallel Execution**: Both response generation and evaluation phases run in parallel for efficiency
- **Anonymization**: Responses are anonymized to prevent bias in evaluation
- **Model Selection**: Different models can be used for different roles based on their strengths
- **Verbose Mode**: Can be disabled for production use to reduce output
## Related Documentation
- [Multi-Agent Architectures Overview](overview.md)
- [Council of Judges](council_of_judges.md) - Similar peer review pattern
- [Agent Class Reference](agent.md) - Understanding individual agents
- [Multi-Agent Execution Utilities](various_execution_methods.md) - Underlying execution methods

@ -0,0 +1,95 @@
# LLM Council Examples
This directory contains examples demonstrating the LLM Council pattern, inspired by Andrej Karpathy's llm-council implementation. The LLM Council uses multiple specialized AI agents that:
1. Each respond independently to queries
2. Review and rank each other's anonymized responses
3. Have a Chairman synthesize all responses into a final comprehensive answer
## Examples
### Marketing & Business
- **marketing_strategy_council.py** - Marketing strategy analysis and recommendations
- **business_strategy_council.py** - Comprehensive business strategy development
### Finance & Investment
- **finance_analysis_council.py** - Financial analysis and investment recommendations
- **etf_stock_analysis_council.py** - ETF and stock analysis with portfolio recommendations
### Medical & Healthcare
- **medical_treatment_council.py** - Medical treatment recommendations and care plans
- **medical_diagnosis_council.py** - Diagnostic analysis based on symptoms
### Technology & Research
- **technology_assessment_council.py** - Technology evaluation and implementation strategy
- **research_analysis_council.py** - Comprehensive research analysis on complex topics
### Legal
- **legal_analysis_council.py** - Legal implications and compliance analysis
## Usage
Each example follows the same pattern:
```python
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Run a query
result = council.run("Your query here")
# Access results
print(result["final_response"]) # Chairman's synthesized answer
print(result["original_responses"]) # Individual member responses
print(result["evaluations"]) # How members ranked each other
```
## Running Examples
Run any example directly:
```bash
python examples/multi_agent/llm_council_examples/marketing_strategy_council.py
python examples/multi_agent/llm_council_examples/finance_analysis_council.py
python examples/multi_agent/llm_council_examples/medical_diagnosis_council.py
```
## Key Features
- **Multiple Perspectives**: Each council member (GPT-5.1, Gemini, Claude, Grok) provides unique insights
- **Peer Review**: Members evaluate and rank each other's responses anonymously
- **Synthesis**: Chairman combines the best elements from all responses
- **Transparency**: See both individual responses and evaluation rankings
## Council Members
The default council consists of:
- **GPT-5.1-Councilor**: Analytical and comprehensive
- **Gemini-3-Pro-Councilor**: Concise and well-processed
- **Claude-Sonnet-4.5-Councilor**: Thoughtful and balanced
- **Grok-4-Councilor**: Creative and innovative
## Customization
You can create custom council members:
```python
from swarms import Agent
from swarms.structs.llm_council import LLMCouncil, get_gpt_councilor_prompt
custom_agent = Agent(
agent_name="Custom-Councilor",
system_prompt=get_gpt_councilor_prompt(),
model_name="gpt-4.1",
max_loops=1,
)
council = LLMCouncil(
council_members=[custom_agent, ...],
chairman_model="gpt-5.1",
verbose=True
)
```

@ -0,0 +1,32 @@
"""
LLM Council Example: Business Strategy Development
This example demonstrates using the LLM Council to develop comprehensive
business strategies for new ventures.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Business strategy query
query = """
A tech startup wants to launch an AI-powered personal finance app targeting
millennials and Gen Z. Develop a comprehensive business strategy including:
1. Market opportunity and competitive landscape analysis
2. Product positioning and unique value proposition
3. Go-to-market strategy and customer acquisition plan
4. Revenue model and pricing strategy
5. Key partnerships and distribution channels
6. Resource requirements and funding needs
7. Risk assessment and mitigation strategies
8. Success metrics and KPIs for first 12 months
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,30 @@
"""
LLM Council Example: ETF Stock Analysis
This example demonstrates using the LLM Council to analyze ETF holdings
and provide stock investment recommendations.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# ETF and stock analysis query
query = """
Analyze the top energy ETFs (including nuclear, solar, gas, and renewable energy)
and provide:
1. Top 5 best-performing energy stocks across all energy sectors
2. ETF recommendations for diversified energy exposure
3. Risk-return profiles for each recommendation
4. Current market conditions affecting energy investments
5. Allocation strategy for a $100,000 portfolio
6. Key metrics to track for each investment
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,30 @@
"""
LLM Council Example: Financial Analysis
This example demonstrates using the LLM Council to provide comprehensive
financial analysis and investment recommendations.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Financial analysis query
query = """
Provide a comprehensive financial analysis for investing in emerging markets
technology ETFs. Include:
1. Risk assessment and volatility analysis
2. Historical performance trends
3. Sector composition and diversification benefits
4. Comparison with developed market tech ETFs
5. Recommended allocation percentage for a moderate risk portfolio
6. Key factors to monitor going forward
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,32 @@
"""
LLM Council Example: Legal Analysis
This example demonstrates using the LLM Council to analyze legal scenarios
and provide comprehensive legal insights.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Legal analysis query
query = """
A startup is considering using AI-generated content for their marketing materials.
Analyze the legal implications including:
1. Intellectual property rights and ownership of AI-generated content
2. Copyright and trademark considerations
3. Liability for AI-generated content that may be inaccurate or misleading
4. Compliance with advertising regulations (FTC, FDA, etc.)
5. Data privacy implications if using customer data to train models
6. Contractual considerations with AI service providers
7. Risk mitigation strategies
8. Best practices for legal compliance
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,29 @@
"""
LLM Council Example: Marketing Strategy Analysis
This example demonstrates using the LLM Council to analyze and develop
comprehensive marketing strategies by leveraging multiple AI perspectives.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Marketing strategy query
query = """
Analyze the marketing strategy for a new sustainable energy startup launching
a solar panel subscription service. Provide recommendations on:
1. Target audience segmentation
2. Key messaging and value propositions
3. Marketing channels and budget allocation
4. Competitive positioning
5. Launch timeline and milestones
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,37 @@
"""
LLM Council Example: Medical Diagnosis Analysis
This example demonstrates using the LLM Council to analyze symptoms
and provide diagnostic insights.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Medical diagnosis query
query = """
A 35-year-old patient presents with:
- Persistent fatigue for 3 months
- Unexplained weight loss (15 lbs)
- Night sweats
- Intermittent low-grade fever
- Swollen lymph nodes in neck and armpits
- Recent blood work shows elevated ESR and CRP
Provide:
1. Differential diagnosis with most likely conditions ranked
2. Additional diagnostic tests needed to confirm
3. Red flag symptoms requiring immediate attention
4. Possible causes and risk factors
5. Recommended next steps for the patient
6. When to seek emergency care
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,31 @@
"""
LLM Council Example: Medical Treatment Analysis
This example demonstrates using the LLM Council to analyze medical treatments
and provide comprehensive treatment recommendations.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Medical treatment query
query = """
A 45-year-old patient with Type 2 diabetes, hypertension, and early-stage
kidney disease needs treatment recommendations. Provide:
1. Comprehensive treatment plan addressing all conditions
2. Medication options with pros/cons for each condition
3. Lifestyle modifications and their expected impact
4. Monitoring schedule and key metrics to track
5. Potential drug interactions and contraindications
6. Expected outcomes and timeline for improvement
7. When to consider specialist referrals
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,32 @@
"""
LLM Council Example: Research Analysis
This example demonstrates using the LLM Council to conduct comprehensive
research analysis on complex topics.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Research analysis query
query = """
Conduct a comprehensive analysis of the potential impact of climate change
on global food security over the next 20 years. Include:
1. Key climate factors affecting agriculture (temperature, precipitation, extreme weather)
2. Regional vulnerabilities and impacts on major food-producing regions
3. Crop yield projections and food availability scenarios
4. Economic implications and food price volatility
5. Adaptation strategies and technological solutions
6. Policy recommendations for governments and international organizations
7. Role of innovation in agriculture (precision farming, GMOs, vertical farming)
8. Social and geopolitical implications of food insecurity
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -0,0 +1,32 @@
"""
LLM Council Example: Technology Assessment
This example demonstrates using the LLM Council to assess emerging technologies
and their business implications.
"""
from swarms.structs.llm_council import LLMCouncil
# Create the council
council = LLMCouncil(verbose=True)
# Technology assessment query
query = """
Evaluate the business potential and implementation strategy for integrating
quantum computing capabilities into a financial services company. Consider:
1. Current state of quantum computing technology
2. Specific use cases in financial services (risk modeling, portfolio optimization, fraud detection)
3. Competitive advantages and potential ROI
4. Implementation timeline and resource requirements
5. Technical challenges and limitations
6. Risk factors and mitigation strategies
7. Partnership opportunities with quantum computing providers
8. Expected timeline for practical business value
"""
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])

@ -1,5 +1,4 @@
from swarms.structs.hiearchical_swarm import HierarchicalSwarm
from swarms.structs.agent import Agent
from swarms import Agent, HierarchicalSwarm
# Create specialized agents
research_agent = Agent(

@ -0,0 +1,23 @@
from swarms.structs.llm_council import LLMCouncil
# Example usage of the LLM Council without a function:
# Create the council
council = LLMCouncil(verbose=True)
# Example query
query = "What are the top five best energy stocks across nuclear, solar, gas, and other energy sources?"
# Run the council
result = council.run(query)
# Print final response
print(result["final_response"])
# Optionally print evaluations
print("\n\n" + "="*80)
print("EVALUATIONS")
print("="*80)
for name, evaluation in result["evaluations"].items():
print(f"\n{name}:")
print(evaluation[:500] + "..." if len(evaluation) > 500 else evaluation)

@ -5,7 +5,7 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry]
name = "swarms"
version = "8.6.3"
version = "8.6.4"
description = "Swarms - TGSC"
license = "MIT"
authors = ["Kye Gomez <kye@swarms.world>"]

@ -11,6 +11,7 @@ from swarms.structs.concurrent_workflow import ConcurrentWorkflow
from swarms.structs.conversation import Conversation
from swarms.structs.council_as_judge import CouncilAsAJudge
from swarms.structs.cron_job import CronJob
from swarms.structs.llm_council import LLMCouncil
from swarms.structs.debate_with_judge import DebateWithJudge
from swarms.structs.graph_workflow import (
Edge,
@ -161,6 +162,7 @@ __all__ = [
"get_swarms_info",
"AutoSwarmBuilder",
"CouncilAsAJudge",
"LLMCouncil",
"batch_agent_execution",
"aggregate",
"find_agent_by_name",

@ -679,6 +679,7 @@ class AOP:
self.tool_configs: Dict[str, AgentToolConfig] = {}
self.task_queues: Dict[str, TaskQueue] = {}
self.transport = transport
self.mcp_server = FastMCP(
name=server_name,
port=port,

@ -0,0 +1,459 @@
"""
LLM Council - A Swarms implementation inspired by Andrej Karpathy's llm-council.
This implementation creates a council of specialized LLM agents that:
1. Each agent responds to the user query independently
2. All agents review and rank each other's (anonymized) responses
3. A Chairman LLM synthesizes all responses and rankings into a final answer
The council demonstrates how different models evaluate and rank each other's work,
often selecting responses from other models as superior to their own.
"""
from typing import Dict, List, Optional
import random
from swarms import Agent
from swarms.structs.multi_agent_exec import (
run_agents_concurrently,
batched_grid_agent_execution,
)
def get_gpt_councilor_prompt() -> str:
"""
Get system prompt for GPT-5.1 councilor.
Returns:
System prompt string for GPT-5.1 councilor agent.
"""
return """You are a member of the LLM Council, representing GPT-5.1. Your role is to provide comprehensive, analytical, and thorough responses to user queries.
Your strengths:
- Deep analytical thinking and comprehensive coverage
- Ability to break down complex topics into detailed components
- Thorough exploration of multiple perspectives
- Rich contextual understanding
Your approach:
- Provide detailed, well-structured responses
- Include relevant context and background information
- Consider multiple angles and perspectives
- Be thorough but clear in your explanations
Remember: You are part of a council where multiple AI models will respond to the same query, and then evaluate each other's responses. Focus on quality, depth, and clarity."""
def get_gemini_councilor_prompt() -> str:
"""
Get system prompt for Gemini 3 Pro councilor.
Returns:
System prompt string for Gemini 3 Pro councilor agent.
"""
return """You are a member of the LLM Council, representing Gemini 3 Pro. Your role is to provide concise, well-processed, and structured responses to user queries.
Your strengths:
- Clear and structured communication
- Efficient information processing
- Condensed yet comprehensive responses
- Well-organized presentation
Your approach:
- Provide concise but complete answers
- Structure information clearly and logically
- Focus on key points without unnecessary verbosity
- Present information in an easily digestible format
Remember: You are part of a council where multiple AI models will respond to the same query, and then evaluate each other's responses. Focus on clarity, structure, and efficiency."""
def get_claude_councilor_prompt() -> str:
"""
Get system prompt for Claude Sonnet 4.5 councilor.
Returns:
System prompt string for Claude Sonnet 4.5 councilor agent.
"""
return """You are a member of the LLM Council, representing Claude Sonnet 4.5. Your role is to provide thoughtful, balanced, and nuanced responses to user queries.
Your strengths:
- Nuanced understanding and balanced perspectives
- Thoughtful consideration of trade-offs
- Clear reasoning and logical structure
- Ethical and responsible analysis
Your approach:
- Provide balanced, well-reasoned responses
- Consider multiple viewpoints and implications
- Be thoughtful about potential limitations or edge cases
- Maintain clarity while showing depth of thought
Remember: You are part of a council where multiple AI models will respond to the same query, and then evaluate each other's responses. Focus on thoughtfulness, balance, and nuanced reasoning."""
def get_grok_councilor_prompt() -> str:
"""
Get system prompt for Grok-4 councilor.
Returns:
System prompt string for Grok-4 councilor agent.
"""
return """You are a member of the LLM Council, representing Grok-4. Your role is to provide creative, innovative, and unique perspectives on user queries.
Your strengths:
- Creative problem-solving and innovative thinking
- Unique perspectives and out-of-the-box approaches
- Engaging and dynamic communication style
- Ability to connect seemingly unrelated concepts
Your approach:
- Provide creative and innovative responses
- Offer unique perspectives and fresh insights
- Be engaging and dynamic in your communication
- Think creatively while maintaining accuracy
Remember: You are part of a council where multiple AI models will respond to the same query, and then evaluate each other's responses. Focus on creativity, innovation, and unique insights."""
def get_chairman_prompt() -> str:
"""
Get system prompt for the Chairman agent.
Returns:
System prompt string for the Chairman agent.
"""
return """You are the Chairman of the LLM Council. Your role is to synthesize responses from all council members along with their evaluations and rankings into a final, comprehensive answer.
Your responsibilities:
1. Review all council member responses to the user's query
2. Consider the rankings and evaluations provided by each council member
3. Synthesize the best elements from all responses
4. Create a final, comprehensive answer that incorporates the strengths of different approaches
5. Provide transparency about which perspectives influenced the final answer
Your approach:
- Synthesize rather than simply aggregate
- Identify the strongest elements from each response
- Create a cohesive final answer that benefits from multiple perspectives
- Acknowledge the diversity of approaches taken by council members
- Provide a balanced, comprehensive response that serves the user's needs
Remember: You have access to all original responses and all evaluations. Use this rich context to create the best possible final answer."""
def get_evaluation_prompt(query: str, responses: Dict[str, str], evaluator_name: str) -> str:
"""
Create evaluation prompt for council members to review and rank responses.
Args:
query: The original user query
responses: Dictionary mapping anonymous IDs to response texts
evaluator_name: Name of the agent doing the evaluation
Returns:
Formatted evaluation prompt string
"""
responses_text = "\n\n".join([
f"Response {response_id}:\n{response_text}"
for response_id, response_text in responses.items()
])
return f"""You are evaluating responses from your fellow LLM Council members to the following query:
QUERY: {query}
Below are the anonymized responses from all council members (including potentially your own):
{responses_text}
Your task:
1. Carefully read and analyze each response
2. Evaluate the quality, accuracy, completeness, and usefulness of each response
3. Rank the responses from best to worst (1 = best, {len(responses)} = worst)
4. Provide brief reasoning for your rankings
5. Be honest and objective - you may find another model's response superior to your own
Format your evaluation as follows:
RANKINGS:
1. Response [ID]: [Brief reason why this is the best]
2. Response [ID]: [Brief reason]
...
{len(responses)}. Response [ID]: [Brief reason why this ranks lowest]
ADDITIONAL OBSERVATIONS:
[Any additional insights about the responses, common themes, strengths/weaknesses, etc.]
Remember: The goal is honest, objective evaluation. If another model's response is genuinely better, acknowledge it."""
def get_synthesis_prompt(
query: str,
original_responses: Dict[str, str],
evaluations: Dict[str, str],
id_to_member: Dict[str, str]
) -> str:
"""
Create synthesis prompt for the Chairman.
Args:
query: Original user query
original_responses: Dict mapping member names to their responses
evaluations: Dict mapping evaluator names to their evaluation texts
id_to_member: Mapping from anonymous IDs to member names
Returns:
Formatted synthesis prompt
"""
responses_section = "\n\n".join([
f"=== {name} ===\n{response}"
for name, response in original_responses.items()
])
evaluations_section = "\n\n".join([
f"=== Evaluation by {name} ===\n{evaluation}"
for name, evaluation in evaluations.items()
])
return f"""As the Chairman of the LLM Council, synthesize the following information into a final, comprehensive answer.
ORIGINAL QUERY:
{query}
COUNCIL MEMBER RESPONSES:
{responses_section}
COUNCIL MEMBER EVALUATIONS AND RANKINGS:
{evaluations_section}
ANONYMOUS ID MAPPING (for reference):
{chr(10).join([f" {aid} = {name}" for aid, name in id_to_member.items()])}
Your task:
1. Review all council member responses
2. Consider the evaluations and rankings provided by each member
3. Identify the strongest elements from each response
4. Synthesize a final, comprehensive answer that:
- Incorporates the best insights from multiple perspectives
- Addresses the query thoroughly and accurately
- Benefits from the diversity of approaches taken
- Is clear, well-structured, and useful
Provide your final synthesized response below. You may reference which perspectives or approaches influenced different parts of your answer."""
class LLMCouncil:
"""
An LLM Council that orchestrates multiple specialized agents to collaboratively
answer queries through independent responses, peer review, and synthesis.
The council follows this workflow:
1. Dispatch query to all council members in parallel
2. Collect all responses (anonymized)
3. Have each member review and rank all responses
4. Chairman synthesizes everything into final response
"""
def __init__(
self,
council_members: Optional[List[Agent]] = None,
chairman_model: str = "gpt-5.1",
verbose: bool = True,
):
"""
Initialize the LLM Council.
Args:
council_members: List of Agent instances representing council members.
If None, creates default council with GPT-5.1, Gemini 3 Pro,
Claude Sonnet 4.5, and Grok-4.
chairman_model: Model name for the Chairman agent that synthesizes responses.
verbose: Whether to print progress and intermediate results.
"""
self.verbose = verbose
# Create default council members if none provided
if council_members is None:
self.council_members = self._create_default_council()
else:
self.council_members = council_members
# Create Chairman agent
self.chairman = Agent(
agent_name="Chairman",
agent_description="Chairman of the LLM Council, responsible for synthesizing all responses and rankings into a final answer",
system_prompt=get_chairman_prompt(),
model_name=chairman_model,
max_loops=1,
verbose=verbose,
temperature=0.7,
)
if self.verbose:
print(f"🏛️ LLM Council initialized with {len(self.council_members)} members")
for i, member in enumerate(self.council_members, 1):
print(f" {i}. {member.agent_name} ({member.model_name})")
def _create_default_council(self) -> List[Agent]:
"""
Create default council members with specialized prompts and models.
Returns:
List of Agent instances configured as council members.
"""
# GPT-5.1 Agent - Analytical and comprehensive
gpt_agent = Agent(
agent_name="GPT-5.1-Councilor",
agent_description="Analytical and comprehensive AI councilor specializing in deep analysis and thorough responses",
system_prompt=get_gpt_councilor_prompt(),
model_name="gpt-5.1",
max_loops=1,
verbose=False,
temperature=0.7,
)
# Gemini 3 Pro Agent - Concise and processed
gemini_agent = Agent(
agent_name="Gemini-3-Pro-Councilor",
agent_description="Concise and well-processed AI councilor specializing in clear, structured responses",
system_prompt=get_gemini_councilor_prompt(),
model_name="gemini-2.5-flash", # Using available Gemini model
max_loops=1,
verbose=False,
temperature=0.7,
)
# Claude Sonnet 4.5 Agent - Balanced and thoughtful
claude_agent = Agent(
agent_name="Claude-Sonnet-4.5-Councilor",
agent_description="Thoughtful and balanced AI councilor specializing in nuanced and well-reasoned responses",
system_prompt=get_claude_councilor_prompt(),
model_name="anthropic/claude-sonnet-4-5", # Using available Claude model
max_loops=1,
verbose=False,
temperature=0.0,
top_p=None,
)
# Grok-4 Agent - Creative and innovative
grok_agent = Agent(
agent_name="Grok-4-Councilor",
agent_description="Creative and innovative AI councilor specializing in unique perspectives and creative solutions",
system_prompt=get_grok_councilor_prompt(),
model_name="x-ai/grok-4", # Using available model as proxy for Grok-4
max_loops=1,
verbose=False,
temperature=0.8,
)
members = [gpt_agent, gemini_agent, claude_agent, grok_agent]
return members
def run(self, query: str) -> Dict:
"""
Execute the full LLM Council workflow.
Args:
query: The user's query to process
Returns:
Dictionary containing:
- original_responses: Dict mapping member names to their responses
- evaluations: Dict mapping evaluator names to their rankings
- final_response: The Chairman's synthesized final answer
"""
if self.verbose:
print(f"\n{'='*80}")
print("🏛️ LLM COUNCIL SESSION")
print("="*80)
print(f"\n📝 Query: {query}\n")
# Step 1: Get responses from all council members in parallel
if self.verbose:
print("📤 Dispatching query to all council members...")
results_dict = run_agents_concurrently(
self.council_members,
task=query,
return_agent_output_dict=True
)
# Map results to member names
original_responses = {
member.agent_name: response
for member, response in zip(self.council_members,
[results_dict.get(member.agent_name, "")
for member in self.council_members])
}
if self.verbose:
print(f"✅ Received {len(original_responses)} responses\n")
for name, response in original_responses.items():
print(f" {name}: {response[:100]}...")
# Step 2: Anonymize responses for evaluation
# Create anonymous IDs (A, B, C, D, etc.)
anonymous_ids = [chr(65 + i) for i in range(len(self.council_members))]
random.shuffle(anonymous_ids) # Shuffle to ensure anonymity
anonymous_responses = {
anonymous_ids[i]: original_responses[member.agent_name]
for i, member in enumerate(self.council_members)
}
# Create mapping from anonymous ID to member name (for later reference)
id_to_member = {
anonymous_ids[i]: member.agent_name
for i, member in enumerate(self.council_members)
}
if self.verbose:
print("\n🔍 Council members evaluating each other's responses...")
# Step 3: Have each member evaluate and rank all responses concurrently
# Create evaluation tasks for each member
evaluation_tasks = [
get_evaluation_prompt(query, anonymous_responses, member.agent_name)
for member in self.council_members
]
# Run evaluations concurrently using batched_grid_agent_execution
evaluation_results = batched_grid_agent_execution(
self.council_members,
evaluation_tasks
)
# Map results to member names
evaluations = {
member.agent_name: evaluation_results[i]
for i, member in enumerate(self.council_members)
}
if self.verbose:
print(f"✅ Received {len(evaluations)} evaluations\n")
# Step 4: Chairman synthesizes everything
if self.verbose:
print("👔 Chairman synthesizing final response...\n")
synthesis_prompt = get_synthesis_prompt(
query, original_responses, evaluations, id_to_member
)
final_response = self.chairman.run(task=synthesis_prompt)
if self.verbose:
print(f"{'='*80}")
print("✅ FINAL RESPONSE")
print(f"{'='*80}\n")
return {
"query": query,
"original_responses": original_responses,
"evaluations": evaluations,
"final_response": final_response,
"anonymous_mapping": id_to_member,
}
Loading…
Cancel
Save