Skip to content
InferenceHub

Model synthesis

One prompt, several models. A synthesis request fans your prompt out to a panel of models that answer independently in parallel, then a synthesizer model reads the attributed candidates and streams back one merged reply. You get answers that survive disagreement between models — at the honest price of running each of them.

The three synthesis ids

Each id is a curated panel + synthesizer pairing. Send it anywhere a model id goes on the OpenAI Chat wire:

idPanelSynthesizer
ih-synthesis-budgetglm-5.2 + deepseek-v4-proglm-5.2
ih-synthesiskimi-k2.6 + glm-5.2glm-5.2
ih-synthesis-maxfable-5 + gpt-5.6-terrafable-5

The compositions are curated for answer quality per dollar and will evolve as models come and go — the disclosure header below always tells you exactly who participated in your turn. ih-synthesis-max runs frontier models on both stages; picking it is the consent to frontier billing on every participant.

curl https://app.inferencehub.tech/v1/chat/completions \
-H "Authorization: Bearer sk-prov-live-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ih-synthesis",
"stream": true,
"messages": [{ "role": "user", "content": "Design a rate limiter for a multi-tenant API." }]
}'

Or bring your own panel

The model_synthesis tool gives you the same orchestration with explicit participants: name up to four analysis_models and a synthesizer_model, and set the request's model to the synthesizer. Any model you can reach on the chat wire can sit on the panel.

curl https://app.inferencehub.tech/v1/chat/completions \
-H "Authorization: Bearer sk-prov-live-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "glm-5.2",
"stream": true,
"messages": [{ "role": "user", "content": "Design a rate limiter for a multi-tenant API." }],
"tools": [{
"type": "model_synthesis",
"analysis_models": ["glm-5.2", "kimi-k2.6"],
"synthesizer_model": "glm-5.2"
}]
}'
Synthesis requests must set stream: true — the panel phase runs for up to a few minutes before the first visible token, and only a stream can stay honestly alive that long (you'll see SSE keepalive comments while the panel works). Non-streaming synthesis requests get a clean 400.

Pricing: each participant at its normal rates

Synthesis has no bundle price and no markup. Every participant — each panel model and the synthesizer — bills as its own line item at that model's normal per-token rates, exactly as if you had called it directly. A synthesis turn therefore costs roughly the sum of asking each panel model yourself, plus the synthesizer pass over the candidates.

  • Pay-as-you-go only (for now) — synthesis turns bill your prepaid balance and are not covered by subscription plan windows.
  • Line items are linked — the portal's usage view shows one row per participant, tied to the request that spawned them, so you can audit exactly what a synthesis turn cost.
  • A failed panelist bills only what it used — a candidate that errors or times out settles its actual tokens (often zero) and the synthesis continues without it.

How a turn runs

  • Fresh questions fan out — a new user turn goes to the whole panel in parallel; the synthesizer then streams the merged answer.
  • Tool follow-ups don't — when your agent returns tool results mid-conversation, the turn goes to the synthesizer alone (your function tools are its business, not the panel's), so agent loops don't multiply every step's cost.
  • Survivors continue — if some panelists fail, synthesis proceeds on the rest; if every panelist fails, the synthesizer answers solo and the response discloses it. You still get an answer, never a wasted turn.

In coding agents

Any coding agent that speaks OpenAI Chat Completions against a custom base URL can use synthesis today — add a synthesis id as a custom model in Cursor or on Kilo Code's OpenAI-wire provider, exactly like any other model. The turn rules above are what make this practical: only your fresh prompts pay the panel's cost and latency, and every tool step in an agent loop runs the synthesizer alone at its normal single-model price and speed.

On a fresh prompt the agent's spinner can sit for a couple of minutes before the first token while the panel works — that's the panel phase, not a hang. The connection is held open with keepalives the whole time.

You always see who served you

Like Auto routing, synthesis is not a black box:

  • the x-ih-synthesis response header names every participant, e.g. panel=kimi-k2.6,glm-5.2; synthesizer=glm-5.2;
  • panel failures and timeouts are disclosed as SSE comments in the stream (a spec-mandated parser no-op — your client ignores them unless you look);
  • the final usage chunk aggregates the whole turn's tokens, and the portal shows the per-participant breakdown.
Orchestration metadata only — participant ids, timings, token counts. Prompt content is never logged, on any stage.