Skip to main content

Achieve consensus across multiple LLMs through an AI judge coordinator

Project description

LLM Ensemble

LLM Ensemble Banner

A Python library for achieving consensus across multiple Agents.

Features

  • Consensus: Uses a moderator to iteratively coordinate multiple LLMs until consensus is reached
  • Can use any model API based model such as OpenAI, Anthropic, Gemini, Grok supported by Langgraph
  • Supports web search for real-time data

Installation

uv add multi-llm-consensus

Or install from source:

git clone https://github.com/zzzrbx/llm-ensemble.git
cd llm-ensemble
uv sync

Environment Setup

Create a .env file with your API keys, for example:

OPENAI_API_KEY=your_openai_key
ANTHROPIC_API_KEY=your_anthropic_key
GOOGLE_API_KEY=your_google_key
XAI_API_KEY=your_xai_key
TAVILY_API_KEY=your_tavily_key  # For web search

You must provide at least two API keys for the models you want to use in the ensemble.

How It Works

User Query → Judge (configurable, default: Claude Opus 4.5)
    ↓
Judge calls run_llms tool
    ├── Model A (parallel)
    ├── Model B (parallel)
    ├── Model C (parallel)
    └── Model D (parallel)
         ↓
Judge analyzes responses
    ├── Consensus? → Return answer
    └── No consensus? → Refine query and call run_llms again
         ↓
Repeat until consensus or limit reached

Key Features:

  • Dynamic queries - Judge crafts different prompts each iteration:
    • Iteration 1: Sends initial question with research instructions
    • Iteration 2+: Summarizes agreements, highlights disagreements, requests refinements
    • Final iteration: Presents refined consensus statement for confirmation
  • Error handling - Returns default values on timeout or tool call limit reached

Tools currently available for LLMs:

  • search_the_web - Tavily web search for current events and factual data
  • add, subtract, multiply, divide - Math operations

Examples

Example 1: With structured output

from typing import TypedDict
from llm_ensemble import Consensus

class UserSchema(TypedDict):
    consensus: bool
    final_answer: str
    notes: str

consensus = Consensus(
    models=[
        "openai:gpt-5-mini",
        "google_genai:gemini-3-flash-preview",
        "anthropic:claude-3-5-haiku-20241022",
        "xai:grok-3-mini",
    ],
    response_schema=UserSchema
)

result = consensus.invoke(
    "If survival is arbitrary, is moral judgment arbitrary too?"
)

print(f"Consensus: {result['consensus']}")
print(f"Answer: {result['final_answer']}")
print(f"Notes: {result['notes']}")

Example 2: No structured output with web search enabled (you just need to mention it in the prompt)

from llm_ensemble import Consensus

# No response_schema - returns full agent result
consensus = Consensus(
    models=[
        "openai:gpt-5-mini",
        "google_genai:gemini-3-flash-preview",
        "anthropic:claude-3-5-haiku-20241022",
        "xai:grok-3-mini",
    ]
)

result = consensus.invoke(
    "What are the latest developments in quantum computing?\n\n"
    "Use the web search to research current news and breakthroughs."
)

# Access full agent result
print(result['messages'][-1].content)

Debugging and Observability

The library integrates with LangSmith for trace observability. Set LANGSMITH_API_KEY and LANGSMITH_PROJECT in your .env file to enable tracing.

License

MIT License

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multi_llm_consensus-0.1.2.tar.gz (534.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

multi_llm_consensus-0.1.2-py3-none-any.whl (11.9 kB view details)

Uploaded Python 3

File details

Details for the file multi_llm_consensus-0.1.2.tar.gz.

File metadata

  • Download URL: multi_llm_consensus-0.1.2.tar.gz
  • Upload date:
  • Size: 534.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.8.0

File hashes

Hashes for multi_llm_consensus-0.1.2.tar.gz
Algorithm Hash digest
SHA256 0c1daff439638d7cb9b529ed3d9e59196c34de9a2ced05cd86e801092c995da1
MD5 a095f3c7fd79f68338b2ea52b20dd7a3
BLAKE2b-256 e9326a5147945bd90237ed1de41833c06d28746d23f6010e51ef21fcdc429126

See more details on using hashes here.

File details

Details for the file multi_llm_consensus-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for multi_llm_consensus-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fa7926952204dbaf101a285c763677608d5aad8a48c527e346fb439e1eb3801e
MD5 0fcf7ae17e62e7204f6626539a2365de
BLAKE2b-256 ea23dd260b1d090f5950bb37aac79c7209f56151c91d59550b2618dab898e687

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page