For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
ModelsChatRankingsDocs
DocsAPI ReferenceClient SDKsAgent SDKCookbookChangelog
DocsAPI ReferenceClient SDKsAgent SDKCookbookChangelog
  • Overview
    • Quickstart
    • Principles
    • Models
    • Stripe Projects
    • FAQ
    • Report Feedback
  • Models & Routing
    • Model Fallbacks
    • Provider Selection
    • Auto Exacto
    • Private Models
  • Features
    • Workspaces
    • Presets
    • Response Caching
    • Tool Calling
      • Overview
      • Web Search
      • Response Healing
      • Fusion
      • PDF Inputs
    • Structured Outputs
    • Message Transforms
    • Zero Completion Insurance
    • ZDR
    • App Attribution
    • Service Tiers
    • Sovereign AI
    • Router Metadata
    • Input & Output Logging
LogoLogo
ModelsChatRankingsDocs
On this page
  • When to use Fusion
  • How it works
  • Configuration
  • Two entry points, one pipeline
  • Complete example
  • Recursion protection
  • Related
FeaturesPlugins

Fusion

Multi-model analysis with a judge model

Was this page helpful?
Previous

Structured Outputs

Return structured data from your models
Next
Built with

The Fusion plugin gives your model access to a multi-model deliberation tool. When the model invokes it, a panel of models answers your prompt in parallel (with openrouter:web_search), a judge compares their responses and returns structured analysis, and your model uses that analysis to write a better final answer.

The Fusion plugin is a configuration surface for the openrouter:fusion server tool. It’s also the mechanism behind the openrouter/fusion model alias. All three entry points hit the same pipeline.

When to use Fusion

Reach for Fusion when a single model isn’t enough — research, expert critique, or tasks that benefit from multiple perspectives. Fusion is overkill for short tactical prompts; use it when the cost of being wrong outweighs the cost of a few extra completions.

How it works

  1. The plugin injects the openrouter:fusion tool into your request. If you used model: "openrouter/fusion", it also resolves the alias to a real model.
  2. Your model reads the prompt and decides whether to invoke openrouter:fusion.
  3. The panel — a set of models — answers your prompt in parallel, each with openrouter:web_search and openrouter:web_fetch enabled.
  4. The judge receives all panel responses, with openrouter:web_search and openrouter:web_fetch available, and compares them — it doesn’t merge them. It returns structured analysis as JSON: consensus (points all or most models agree on, treated as higher-confidence), contradictions, partial coverage, unique insights from individual models, and blind spots none of them addressed.
  5. Your model receives the structured analysis and writes the final answer.

Configuration

1{
2 "model": "openrouter/fusion",
3 "plugins": [
4 {
5 "id": "fusion",
6 "analysis_models": [
7 "~anthropic/claude-opus-latest",
8 "~openai/gpt-latest",
9 "~google/gemini-pro-latest"
10 ],
11 "model": "~openai/gpt-latest"
12 }
13 ]
14}
FieldDefaultDescription
analysis_modelsQuality 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. 1–8 models allowed.
modelFirst model in the Quality preset (~anthropic/claude-opus-latest)The judge model that produces the structured analysis. With model: "openrouter/fusion", this also becomes the model that writes your final answer; when you attach the plugin to your own model instead, the judge defaults to that model.
max_tool_calls8Max 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.
enabledtrueSet to false to bypass fusion for a single request.

When you send model: "openrouter/fusion" without a plugin config, the defaults match the Quality preset on the Fusion lab.

Two entry points, one pipeline

openrouter/fusion is equivalent to enabling the openrouter:fusion server tool on the configured model. These behave identically:

1{
2 "model": "openrouter/fusion",
3 "messages": [
4 { "role": "user", "content": "What are the strongest arguments for and against carbon taxes?" }
5 ]
6}

In both cases, the model decides when to call openrouter:fusion. For prompts that don’t need deliberation, it answers directly — including invoking any other tools you’ve defined.

Complete example

1const response = await fetch('https://dynamicsinfo.com/api/v1/chat/completions', {
2 method: 'POST',
3 headers: {
4 Authorization: 'Bearer {{API_KEY_REF}}',
5 'Content-Type': 'application/json',
6 },
7 body: JSON.stringify({
8 model: 'openrouter/fusion',
9 messages: [
10 {
11 role: 'user',
12 content: 'Compare ridge, lasso, and elastic-net regression. Where does each shine?',
13 },
14 ],
15 plugins: [
16 {
17 id: 'fusion',
18 analysis_models: [
19 '~anthropic/claude-opus-latest',
20 '~openai/gpt-latest',
21 ],
22 },
23 ],
24 }),
25});
26
27const data = await response.json();
28console.log(data.choices[0].message.content);

Recursion protection

Inner fusion calls carry an x-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

  • openrouter:fusion server tool
  • Fusion Router (openrouter/fusion)
  • Web Search server tool
  • Web Fetch server tool
  • /labs/fusion — interactive playground