TrustedRouter Synth
Run a panel of models inside the attested gateway, then use judge and final fallbacks to return one OpenAI-compatible answer.
Run a panel of models inside the attested gateway.
trustedrouter/synth fans one request across several models,
asks a judge model to evaluate the panel, and returns one OpenAI-compatible
chat completion. Use it for hard prompts, evals, and prompts where one
provider's refusal or error should not decide the whole result.
- Panel calls, judge calls, and final synthesis calls stay in the attested gateway.
- Judge and final models can each have up to 8 fallbacks.
- Default quality mode judges with Kimi K2.7 Code, falls back to MiniMax M3, synthesizes with GLM 5.2, then falls back to MiniMax M3.
synthesize_non_refusalsis the default and removes panel refusals before synthesis.- TrustedRouter stores billing and route metadata, not prompt/output content by default.
curl https://api.trustedrouter.com/v1/chat/completions \
-H "Authorization: Bearer $TRUSTEDROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "trustedrouter/synth",
"messages": [
{"role": "user", "content": "Compare the best options and answer plainly."}
],
"tools": [{
"type": "trustedrouter:synth",
"parameters": {
"preset": "quality",
"max_completion_tokens": 800
}
}]
}'
How it works
1. Panel
The gateway runs analysis_models in order, with normal
provider fallback for each route. A failed or empty panel member is
recorded as a panel failure, not a client-visible failure. The quality
preset uses MiniMax M3, Kimi latest, GLM latest, Gemma 4 31B, and
DeepSeek V4 Pro unless you supply a custom panel.
2. Judge
The judge sees the panel outputs and produces an internal assessment.
judge_models, fallback_judges, and
judges are aliases for the same ordered fallback list. If
omitted, Kimi K2.7 Code is the first judge and MiniMax M3 is the fallback.
3. Final
The final model writes the visible answer. final_models,
fallback_final_models, synthesis_models, and
synthesizer_models are aliases for that ordered fallback list.
If omitted, GLM 5.2 is the first final synthesizer and MiniMax M3 is the fallback.
Parameters
| Name | Use |
|---|---|
preset | quality or budget. Sets a built-in panel unless analysis_models is supplied. Quality defaults to an open-model panel: MiniMax M3, Kimi latest, GLM latest, Gemma 4 31B, and DeepSeek V4 Pro. |
analysis_models | Panel model IDs. Must contain 1 to 8 models. |
model | Legacy shorthand for the judge/final model when specific fallback lists are not supplied. |
selection_strategy | synthesize, synthesize_non_refusals, first_success, or first_non_refusal. The default is synthesize_non_refusals. |
judge_models | Ordered judge fallback list. Also accepts fallback_judges or judges. Defaults to Kimi K2.7 Code, then MiniMax M3. |
final_models | Ordered final-answer fallback list. Also accepts fallback_final_models, synthesis_models, or synthesizer_models. Defaults to GLM 5.2, then MiniMax M3. |
max_completion_tokens | Caps each internal panel, judge, and final completion. |
max_tool_calls | Reserved compatibility field, accepted from 1 to 16. |
Exact model IDs are accepted. The gateway also resolves ~anthropic/claude-latest,
~openai/gpt-latest, ~google/gemini-pro-latest,
~google/gemini-flash-latest, ~kimi/latest, and
~zai/glm-latest aliases. The built-in quality panel uses
minimax/minimax-m3, ~kimi/latest,
~zai/glm-latest, google/gemma-4-31b-it, and
deepseek/deepseek-v4-pro. Default judging resolves to
moonshotai/kimi-k2.7-code, then minimax/minimax-m3;
default final synthesis resolves to z-ai/glm-5.2, then
minimax/minimax-m3.
SDK examples
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["TRUSTEDROUTER_API_KEY"],
base_url="https://api.trustedrouter.com/v1",
)
result = client.chat.completions.create(
model="trustedrouter/synth",
messages=[{"role": "user", "content": "Give the best answer."}],
)
print(result.choices[0].message.content)
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.TRUSTEDROUTER_API_KEY,
baseURL: "https://api.trustedrouter.com/v1"
});
const result = await client.chat.completions.create({
model: "trustedrouter/synth",
messages: [{ role: "user", content: "Give the best answer." }],
});
console.log(result.choices[0].message.content);
Operational notes
Cost
Synth is multiple model calls. Budget it as panel calls plus judge
attempts plus final attempts. Use preset="budget" and
max_completion_tokens for cheaper eval loops.
Streaming
Streaming runs the panel and judge first, then streams the final answer. Final fallback can switch before the first byte. After bytes are sent, the stream cannot safely switch to a different final model.
Privacy
The intermediate panel, judge, and final prompts live in enclave memory. Durable storage keeps request IDs, route metadata, usage, cost, and status, not prompt or output text by default.
Need an agent to wire it in?
Use the agent setup guide and ask the agent to call trustedrouter/synth only for hard prompts or evals.