---
title: "Fusion model"
url: "/docs/fusion"
canonical_url: "https://docs.litellm.ai/docs/fusion"
type: "docs"
last_updated: "2026-10-10"
summary: "Use litellm/fusion-1 for judge-synthesized answers from a parallel model panel."
related:
  - "/docs/routing"
  - "/docs/routing_plugins"
---
# Fusion model

> Index of all LiteLLM docs: https://docs.litellm.ai/llms.txt


:::caution Not yet released

Fusion is not in any released litellm version or on litellm `main` yet. It lives on the `litellm_fusion_router` branch and ships once [litellm PR #39224](https://github.com/BerriAI/litellm/pull/39224) merges. Until then, the snippets on this page fail with `BadRequestError: LLM Provider NOT provided ... You passed model=litellm/fusion-1`

:::

`litellm/fusion-1` is a LiteLLM-provided virtual model for requests that benefit from independent model perspectives. It sends the request to a configurable panel in parallel, asks a judge to compare the successful responses, then has the judge synthesize one public response.

The request and response keep the native shape of the SDK method you call. Fusion works with Chat Completions, Anthropic Messages, and Responses.

```mermaid
flowchart LR
    Request["One request"] --> Panel["Panel models run in parallel"]
    Panel --> Judge["Judge compares the responses"]
    Judge --> Synthesis["Judge synthesizes the final answer"]
    Synthesis --> Response["One public response"]
```

The judge first produces a structured comparison covering consensus, contradictions, coverage gaps, unique insights, and blind spots. LiteLLM feeds that private analysis back to the judge, which writes the final answer. The public `response.model` identifies the concrete judge model that produced it.

## Quick start

Set credentials for every provider used by the panel and judge. The same `fusion` configuration works across all three SDK interfaces.

**Chat Completions**

```python showLineNumbers
import litellm

fusion = {
    "models": [
        "openai/gpt-4o-mini",
        "anthropic/claude-haiku-4-5",
    ],
    "judge": {
        "model": "openai/gpt-4o-mini",
        "criteria": "Prioritize correctness and verifiable evidence.",
    },
}

response = litellm.completion(
    model="litellm/fusion-1",
    messages=[
        {
            "role": "user",
            "content": "Review this database migration plan for operational risks.",
        }
    ],
    fusion=fusion,
)

print(response.model)
print(response.choices[0].message.content)
```

**Anthropic Messages**

```python showLineNumbers
import litellm

fusion = {
    "models": [
        "openai/gpt-4o-mini",
        "anthropic/claude-haiku-4-5",
    ],
    "judge": {
        "model": "openai/gpt-4o-mini",
        "criteria": "Prioritize correctness and verifiable evidence.",
    },
}

response = litellm.anthropic.messages.create(
    model="litellm/fusion-1",
    max_tokens=2048,
    messages=[
        {
            "role": "user",
            "content": "Review this database migration plan for operational risks.",
        }
    ],
    fusion=fusion,
)

print(response["model"])
print(response["content"][0]["text"])
```

**Responses**

```python showLineNumbers
import litellm

fusion = {
    "models": [
        "openai/gpt-4o-mini",
        "anthropic/claude-haiku-4-5",
    ],
    "judge": {
        "model": "openai/gpt-4o-mini",
        "criteria": "Prioritize correctness and verifiable evidence.",
    },
}

response = litellm.responses(
    model="litellm/fusion-1",
    input="Review this database migration plan for operational risks.",
    fusion=fusion,
)

print(response.model)
print(response.output_text)
```

Calling `litellm/fusion-1` always runs deliberation. There is no separate flag to enable it. You can omit `fusion` to use the default panel and judge.

## Response behavior

Fusion returns one normal response in the format of the SDK method you called. It does not return separate panel responses or the private judge comparison. The response's hidden Fusion metadata reports whether deliberation ran and how many panel calls succeeded or failed, without including their content. Its hidden `router` field identifies `litellm/fusion-1`.

## Configuration

Pass a `fusion` dictionary alongside `model="litellm/fusion-1"`. Every field is optional.

| Field | Default | Description |
|---|---|---|
| `models` | LiteLLM default panel | One to eight models that answer independently in parallel. |
| `judge.model` | LiteLLM default judge | Model that compares successful panel responses and writes the final answer. |
| `judge.criteria` | `None` | Instructions used to compare the panel responses. |
| `max_completion_tokens` | `16000` | Maximum output tokens, including reasoning, for each internal call. |
| `reasoning` | Provider default | Reasoning effort forwarded to panel and judge calls. |
| `temperature` | Provider default | Temperature forwarded to panel calls. The judge uses temperature `0`. |

## Tools and streaming

Standard tools remain available on the public request. Client tool schemas are kept private from panel and comparison calls. The judge receives them when it authors the final response.

Streaming uses the async SDK methods: `litellm.acompletion()`, `litellm.anthropic.messages.acreate()`, or `litellm.aresponses()`. Synchronous streaming is rejected with guidance to the matching async method.

## Cost and recursion

Fusion makes several provider calls for one public request. Cost and latency increase with panel size and the configured models. Panel and judge models cannot recursively invoke `litellm/fusion-1`; deliberation is bounded to one level.

## Related pages

- [Router - Load Balancing](https://docs.litellm.ai/docs/routing.md)
- [Routing Plugins](https://docs.litellm.ai/docs/routing_plugins.md)
