BetaServer tools are currently in beta. The API and behavior may change.
openrouter:fusion server tool gives any model access to multi-model deliberation. When your model decides a prompt benefits from multiple perspectives, it invokes this tool — a panel of models answers in parallel, a judge compares their responses, and the structured analysis comes back to your model for the final answer.
This is the same pipeline behind the openrouter/fusion model alias and the fusion plugin. Using the server tool directly gives you the most control: choose your own outer model, combine it with other tools, and configure the panel and judge independently.
Quick start
Fusion in the
tools array works on /chat/completions today, but it’s slower there than on the Responses API. For latency-sensitive use, send the same tools: [{ type: "openrouter:fusion" }] payload to the Responses API instead.When does the model invoke it?
The tool’s description tells the model to callopenrouter:fusion only when a task genuinely benefits from multiple perspectives — research questions, multi-domain critique, “compare and contrast” prompts, or anything where being wrong is expensive. Simple tactical prompts won’t trigger it.
To force fusion on every request, set tool_choice: "required". See Forcing fusion on every request.
Parameters
Pass an optionalparameters object on the tool entry to override defaults:
| Field | Default | Description |
|---|---|---|
analysis_models | Quality preset (~anthropic/claude-opus-latest, ~openai/gpt-latest, ~google/gemini-pro-latest) | Models that form the panel. Each runs in parallel with openrouter:web_search and openrouter:web_fetch enabled. 1–8 models allowed. |
model | Your outer model | The judge that produces the structured analysis JSON. Defaults to the same model handling your request. |
max_tool_calls | 8 | Max tool-calling steps each panel model and the judge may take in their openrouter:web_search / openrouter:web_fetch loop before they must return text. Range 1–16. |
max_completion_tokens | Provider default | Max output tokens (including reasoning) per inner panel/judge call. Keeps reasoning-heavy models from exhausting their budget before producing visible text. |
reasoning | Provider default | Reasoning config forwarded to the panel and judge calls — an object with optional effort and max_tokens. |
temperature | Provider default | Temperature (0–2) forwarded to the panel calls. The judge always runs at temperature 0. |
What the tool returns
On success, the tool result contains the structured analysis and the raw panel responses:status: "ok" and adds a failed_models array describing which ones failed and why.
Judge degradation
If the panel succeeds but the judge fails — an upstream error, an empty completion, or output that isn’t valid analysis JSON — the tool does not error. It returnsstatus: "ok" with the raw panel responses and simply omits analysis. Your model can still write the final answer from the panel responses:
Hard failures
The tool only returnsstatus: "error" when it can’t produce any useful output. In that case it includes a typed failure_reason:
| Reason | Meaning |
|---|---|
all_panels_failed | Every panel model returned an error. |
insufficient_credits | Every panel model failed and at least one was due to insufficient credits. |
rate_limited | Every panel model failed and at least one was rate-limited. |
fusion_invocation_capped | Fusion was already invoked earlier in the same turn; a second call is rejected. |
unexpected_error | An unexpected error interrupted the fusion run. |
Web tools
openrouter:web_search and openrouter:web_fetch are enabled on both the panel and the judge calls, so models can pull fresh sources while they answer and analyze. The judge compares the panel responses rather than merging them: it treats what all or most models agree on as higher-confidence consensus, surfaces contradictions, preserves unique insights from individual models, and flags blind spots none of them addressed. The outer model writes the final answer from that analysis — so the result isn’t a simple majority vote.
Recursion protection
Inner fusion calls carry anx-openrouter-fusion-depth header. Panel and judge models cannot recursively invoke openrouter:fusion — the plugin refuses to inject the tool a second time, keeping deliberation bounded to a single level.
Related
- Fusion Router (
openrouter/fusion) - Fusion plugin
- Web Search server tool
- Web Fetch server tool
/labs/fusion— interactive playground