Skip to content

feat(providers): add minirouter - #5274

Open
zhe-t wants to merge 29 commits into
anomalyco:devfrom
zhe-t:feat/provider-minirouter
Open

feat(providers): add minirouter#5274
zhe-t wants to merge 29 commits into
anomalyco:devfrom
zhe-t:feat/provider-minirouter

Conversation

@zhe-t

@zhe-t zhe-t commented Aug 22, 2026

Copy link
Copy Markdown

minirouter is an OpenAI-compatible gateway over the Vercel AI Gateway catalog with
prepaid, accountless keys. Same model ids as providers/vercel; prices are Vercel
list + 5%.

  • provider.toml: @ai-sdk/openai-compatible, MINIROUTER_API_KEY, https://api.minirouter.sh/v1
  • logo.svg: currentColor, square viewBox
  • models/: base_model overrides (cost, reasoning_options, limit where it differs)
  • generation report: 154 base_model overrides, 70 inline registry mirrors, 0 not emitted

Pricing: https://minirouter.sh/docs/models (and GET https://api.minirouter.sh/v1/models)
Docs: https://minirouter.sh/docs

bun validate and bun run compare:migrations pass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/anthropic/claude-sonnet-4.5.toml:1 - Check: Non-lab hosts must use base_model when the lab model is nameable; full inline definitions are not allowed. Why: Minirouter is a multi-model gateway, not Anthropic. models/anthropic/claude-sonnet-4-5.toml already exists and other relays (OpenRouter, Kilo, Bedrock, etc.) point at it, but this file is a full standalone copy. The same pattern appears across the PR’s ~70 “inline registry mirrors” (e.g. meta/llama-3.3-70b.tomlmeta/llama-3.3-70b-instruct, alibaba/qwen-3-30b.tomlalibaba/qwen3-30b-a3b, alibaba/qwen-3-32b.tomlalibaba/qwen3-32b, alibaba/qwen-3.6-max-preview.tomlalibaba/qwen3.6-max-preview, Amazon Nova, Mistral, DeepSeek terminus/thinking, etc.). Copying Vercel’s legacy full-inline files does not satisfy AGENTS.md. Action: For every nameable lab model, switch the provider file to base_model + provider-only deltas (cost, reasoning_options, real limit/modality overrides). Where models/<lab>/… is missing, add a complete lab entry first, then reference it.
  • [high] [violation] providers/minirouter/models/openai/gpt-5-mini.toml:1 - Check: After base_model, keep only provider-specific fields and real deltas (no restated identical lab data). Why: With base_model = "openai/gpt-5-mini", the file still re-authors identical name, description, family, dates, booleans, knowledge, and modalities from the lab entry. The same redundant override pattern appears on other base_model files (e.g. deepseek/deepseek-r1.toml restates family/dates/booleans/modalities; several GPT/Alibaba files restate unchanged display metadata). Action: Strip fields that match the lab merge result; leave only cost, host reasoning_options, and genuine overrides (different name, limits, modalities, status, etc.).
  • [high] [violation] providers/minirouter/provider.toml:1 - Check: Every toggle needs a leading top-of-file wire comment with the exact request path. Why: Dozens of models set { type = "toggle" } (Claude, Qwen, DeepSeek, Gemini 2.5, MiniMax, ZAI, NVIDIA, etc.) but neither provider.toml nor those model files document the wire control. On an OpenAI-compatible gateway this is required catalog surface, not optional docs. Vercel documents reasoning.enabled / reasoning.effort / reasoning.max_tokens on the provider; minirouter has no equivalent. Action: Document the real minirouter request fields (provider-level and/or per-model leading comments) for toggle, effort, and budget_tokens, matching what this host actually accepts.
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:2 - Check: Relay reasoning_options must follow the lab + same-surface peer baseline, not invent alternate effort labels. Why: First-party DeepSeek V4 uses toggle + effort high/max. This file (and deepseek-v4-flash-vision-exp.toml) use high/xhigh, matching Vercel but not the lab native set. AGENTS.md calls out DeepSeek V4 specifically as high/max, not L/M/H or xhigh. Action: Align DeepSeek V4 effort values with the lab (high/max) unless minirouter docs prove a distinct xhigh wire value with meaningful effect; cite that evidence in a leading comment if kept.
  • [medium] [possible mistake] providers/minirouter/models/openai/gpt-5.1-thinking.toml:2 - Check: Provider model metadata must be factually consistent for the named model. Why: Description is “Image model for prompt-driven generation, editing, and visual design workflows” and modalities include output = ["text", "image"] for a GPT-5.1 Thinking chat/reasoning SKU. Same bad description text is on the Vercel source copy; minirouter should not re-publish it. Related: gpt-5.1-thinking-fast.toml uses reasoning_options = [] while the non-fast twin exposes effort controls—empty means no caller control, which is suspicious for a GPT-5.1 thinking variant on a Vercel-catalog relay. Action: Fix description/modalities to match the actual model (or point base_model at a correct lab entry). Verify and correct reasoning_options for both thinking variants against minirouter/Vercel controls.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/provider.toml:1 - Check: Relay reasoning_options must match this host’s wire surface and must not use [] when caller controls exist. Why: The provider header documents reasoning.effort including none and reasoning.max_tokens, and states MiniRouter rejects reasoning.enabled (so no toggle). Commit 2 correctly drops toggle, but many reasoners are left as reasoning_options = [] or graded effort without none, which catalogs “no caller control” / “cannot turn off” even though the host documents effort=none as the off path. Same-surface Vercel peers still advertise on/off (via toggle) for these models. Action: For every reasoning = true model that previously had toggle (or whose Vercel peer has toggle), replace bare [] / effort-without-off with this host’s real controls: include none in effort.values when off is reasoning.effort=none; keep budget_tokens only when reasoning.max_tokens applies; use [] only when the model is affirmatively always-on with no control. Sweep at least: alibaba/qwen-3-14b, alibaba/qwen-3-30b, bytedance/seed-1.6, deepseek/deepseek-v3.1, deepseek/deepseek-v3.1-terminus, minimax/minimax-m3, zai/glm-5, zai/glm-5.1, zai/glm-5-turbo, zai/glm-5v-turbo, and other former toggle-only / toggle+effort entries (e.g. zai/glm-5.2, DeepSeek V4) so off is expressible without reintroducing toggle.
  • [medium] [possible mistake] providers/minirouter/models/anthropic/claude-sonnet-4.6.toml:9 - Check: Pricing should match stated Vercel list + 5%, including context tiers. Why: PR body says prices are Vercel + 5%, and providers/vercel/models/anthropic/claude-sonnet-4.6.toml authors [[cost.tiers]] at 200k (6/22.5 + cache). Minirouter only has flat 3.15/15.75 and no tiers, so >200k pricing is wrong if MiniRouter follows the same banded schedule. Action: Confirm MiniRouter’s published Sonnet 4.6 pricing; if tiered like Vercel, add [[cost.tiers]] at +5%; if intentionally flat, document that in a leading comment and drop the “Vercel + 5%” claim for this model.
  • [medium] [possible mistake] providers/minirouter/models/mistral/magistral-small.toml:1 - Check: base_model / display identity must match the served model. Why: File points at mistral/magistral-small-2506 but sets name = "Magistral Small 2509", which looks like a snapshot/id mismatch (2506 vs 2509). Action: Verify the MiniRouter/Vercel model id and either point base_model at a 2509 lab entry (add lab metadata if needed) or fix the display name to match 2506.
  • [low] [possible mistake] providers/minirouter/models/anthropic/claude-opus-5.toml:3 - Check: Override-only provider files should not restate non-delta identity fields. Why: description = "Flagship Claude model…" replaces the lab description ("Strongest Claude Opus model…") without a clear MiniRouter-specific naming need (same pattern on claude-opus-5-fast). Action: Drop the description override unless MiniRouter intentionally uses different marketing copy; keep only cost/reasoning/name deltas.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/alibaba/qwen3-235b-a22b-thinking.toml:1 - Check: Non-lab hosts must use the correct underlying lab base_model. Why: Final entry sets base_model = "alibaba/qwen3-vl-235b-a22b-thinking" for provider id alibaba/qwen3-235b-a22b-thinking (originally “Thinking 2507”). That binds a distinct host id to VL lab metadata and collides with qwen3-vl-thinking.toml, which uses the same base. Action: Point this file at the correct lab model (add a complete models/alibaba/… entry if missing); keep VL and non-VL host ids on separate bases.
  • [high] [violation] providers/minirouter/models/xiaomi/mimo-v2.5.toml:4 - Check: Relay reasoning_options must match this host’s real controls using lab + same-surface peer baselines; effort with only none is not a stand-in for toggle/graded controls or for “no control.” Why: Patch 3 sets [[reasoning_options]] type = "effort"; values = ["none"] on many reasoners whose lab/peer entries expose toggle and/or graded effort (e.g. Xiaomi MiMo, ZAI GLM 4.x/5, NVIDIA Nemotron, Moonshot Kimi K2.5/K2.6, Qwen3-14B/30B, DeepSeek V3.1, poolside Laguna). Sole none does not encode on/off or graded effort and is not [] (no caller control). Provider.toml noting that reasoning.enabled is rejected does not justify inventing none-only effort across those models. Action: Re-author each affected model from lab + peers + this host’s actual reasoning.effort / reasoning.max_tokens surface: graded effort (include none only when off is effort-based alongside other levels), real budget_tokens only when present, or [] only when there is affirmatively no caller control—not effort = ["none"] alone.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:4 - Check: Same reasoning-options baseline for Qwen budget models on this relay. Why: Final files pair effort = ["none"] with budget_tokens on several Qwen reasoners (e.g. 3.5 Plus/Flash, 3.6/3.7 Plus/Max, 3-32B). Lab/Vercel peers use toggle + budget_tokens (or budget alone on always-on paths). none-only effort does not replace toggle and invents a control shape peers do not use. Action: Match lab/peer shapes adapted to MiniRouter wire fields: if only budget is exposed, author budget_tokens without fake none effort; if off is effort-based, use a full effort list that includes none plus real levels when applicable; do not use effort = ["none"] as a fake off switch next to budget.
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:5 - Check: DeepSeek V4 effort set should follow lab/peer baseline on this host. Why: Final effort is ["none", "high", "max"]. Lab is toggle + high/max; Vercel peer is toggle + high/xhigh. Adding none is only correct if this host maps off via reasoning.effort=none (as provider.toml suggests for the gateway vocabulary). Action: Confirm MiniRouter accepts reasoning.effort=none (or equivalent) for DeepSeek V4; if off is not available, drop none and keep high/max (or high/xhigh if that is the wire enum on this host).
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v3.2-thinking.toml:1 - Check: Distinct host model ids should not silently inherit a non-thinking sibling’s identity. Why: Final file uses base_model = "deepseek/deepseek-v3.2" while the provider id is deepseek-v3.2-thinking, and the non-thinking sibling overrides reasoning = false. The thinking SKU only re-enables reasoning via inheritance defaults and a different name—fragile and easy to mis-merge. Action: Prefer a dedicated lab entry (or clear overrides: reasoning = true, correct limits/options) so the thinking host id cannot pick up the non-thinking sibling’s reasoning = false if files drift.
  • [low] [possible mistake] providers/minirouter/models/alibaba/qwen3-vl-instruct.toml:1 - Check: Provider path id vs base_model identity for VL aliases. Why: qwen3-vl-instruct and qwen3-vl-thinking both base_model the 235B VL lab entries, while Vercel still carries separate full-inline ids. If MiniRouter’s catalog ids are generic aliases of the 235B checkpoints this is fine; if they are different SKUs, metadata is wrong. Action: Verify against MiniRouter/Vercel model ids; if not the 235B checkpoints, add/fix lab bases and point correctly.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/deepseek/deepseek-v3.1.toml:3 - Check: Relay reasoning_options must copy lab/same-surface peer controls; [] is not allowed from uncertainty. Why: MiniRouter is a multi-model OpenAI-compatible gateway. Lab/peer hosts expose a real on/off control for hybrid reasoners (e.g. Vercel/OpenRouter use toggle on DeepSeek V3.1 / Terminus, Kimi K2.5/K2.6, GLM 4.x/5, MiniMax M3, Nemotron, Seed 1.6, Qwen3-14B/30B). This PR ends many of those entries at reasoning_options = [], which catalogs “no caller control” and strips documented controls. Action: For every reasoning = true model, set options from the lab entry + established peers (especially Vercel, since MiniRouter mirrors that catalog). Restore toggle (with a leading wire comment) where peers/lab expose on/off; keep [] only for always-on / no-control IDs (e.g. R1, dedicated -thinking aliases).
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:6 - Check: Qwen hybrid reasoners on relays must include the native toggle when peers do. Why: Alibaba first-party and Vercel/OpenRouter author toggle + budget_tokens for Qwen3.5/3.6/3.7-class models. Final MiniRouter files keep only budget_tokens (no toggle) for qwen-3-32b, qwen-3.6-max-preview, qwen3.5-flash/plus, qwen3.6-27b/plus, qwen3.7-max/plus, and similar Gemini 2.5 flash paths that peers mark toggle + budget. Callers cannot turn thinking off. Action: Match peer shape: toggle + budget_tokens (with verified bounds), plus a top-of-file wire comment for the MiniRouter request field (or document if this host truly cannot forward toggle).
  • [high] [violation] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:6 - Check: DeepSeek V4 baseline is toggle + high/max, not none + graded effort. Why: Lab DeepSeek V4 Pro is toggle + effort high|max. Final MiniRouter uses effort none/high/max (and the same pattern on deepseek-v4-flash-vision-exp). That invents none as an effort value and drops the separate on/off control peers/lab use. Action: Author toggle + effort ["high", "max"] (no none in effort), with a leading wire comment; align any other DeepSeek V4 MiniRouter IDs the same way.
  • [high] [violation] providers/minirouter/models/anthropic/claude-opus-4.6.toml:6 - Check: Claude reasoning controls on this gateway must match lab/peer surfaces, not a rewritten none+effort enum. Why: Vercel peers keep toggle (+ budget and/or effort) for Haiku 4.5, Opus 4.5/4.6, Sonnet 4.6, Opus 4.7/4.8, Sonnet 5, Fable 5, etc. Final MiniRouter drops toggles and often injects none into effort lists (or budget-only). That misrepresents both Anthropic-native and gateway peer surfaces. Action: Re-copy each Claude model’s options from lab + Vercel/OpenRouter peers for this model ID (toggle vs effort-only vs budget), and only add none when peers actually use effort-off that way.
  • [high] [violation] providers/minirouter/models/zai/glm-5.2.toml:6 - Check: GLM 5.2-class peers use toggle + graded effort, not none inside effort. Why: Vercel/OpenRouter use toggle + high/xhigh for GLM 5.2; MiniRouter final is effort none/high/xhigh (and [] on many other GLM reasoners that peers mark toggle). Action: Restore peer shapes (toggle + effort where applicable; toggle alone or peer [] only when peers affirm no control).
  • [medium] [violation] providers/minirouter/models/alibaba/qwen3-235b-a22b-thinking.toml:2 - Check: Provider overrides must not invent modalities/attachment that contradict the lab model. Why: After retargeting base_model to text-only alibaba/qwen3-235b-a22b-thinking-2507, the file still sets attachment = true and modalities.input = ["text", "image", "pdf"]. That is the old VL identity, not the thinking-2507 lab entry. Action: Drop the VL attachment/modalities overrides (or point at the VL lab model if this MiniRouter ID is actually VL).
  • [medium] [possible mistake] providers/minirouter/models/amazon/nova-2-lite.toml:5 - Check: Nova 2 Lite peer options include toggle + effort. Why: Vercel authors toggle + low/medium/high; MiniRouter final is effort-only with none added. Action: Verify MiniRouter’s actual wire controls; if it mirrors Vercel/AI Gateway, restore toggle + graded effort (no invented none unless documented).
  • [low] [possible mistake] providers/minirouter/provider.toml:1 - Check: Provider docs should describe this host’s reasoning request surface. Why: Vercel’s provider.toml documents the gateway reasoning vocabulary MiniRouter claims to proxy; MiniRouter only sets name/env/npm/api/doc. Without a leading wire-path note, dozens of reasoning_options choices cannot be reviewed against this host. Action: Add a short top-of-file comment (or PR-body mapping) for MiniRouter’s reasoning fields (reasoning.effort, enable_thinking, etc.) and cite which models those apply to.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/zai/glm-4.7.toml:4 - Check: Relay reasoning_options must match this host’s controls plus lab/same-surface peers; [] is only for no caller control. Why: MiniRouter documents reasoning.effort including none (and rejects reasoning.enabled), so off is expressible as effort. Peers such as providers/vercel/models/zai/glm-4.7.toml expose toggle for this model. Final reasoning_options = [] falsely marks no control and under-describes the API. The same pattern lands on other toggle-style reasoners (e.g. zai/glm-4.5*.toml, zai/glm-4.6.toml, zai/glm-4.7-flash*.toml, zai/glm-5.toml, zai/glm-5-turbo.toml, zai/glm-5.1.toml, zai/glm-5v-turbo.toml, moonshotai/kimi-k2.5.toml, moonshotai/kimi-k2.6.toml, deepseek/deepseek-v3.1.toml, deepseek/deepseek-v3.1-terminus.toml, minimax/minimax-m3.toml, xiaomi/mimo-v2.5.toml, xiaomi/mimo-v2.5-pro.toml, nvidia/nemotron-*.toml, alibaba/qwen-3-14b.toml, alibaba/qwen-3-30b.toml, bytedance/seed-1.6.toml, poolside/laguna-s-2.1.toml). Action: For each reasoner with peer/lab on/off or graded controls, author MiniRouter-native options (typically effort with none and any graded values this host forwards; never toggle if rejected). Use [] only when lab and peers affirmatively have no control.
  • [medium] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:4 - Check: Baseline effort/toggle set for the underlying model on this host surface. Why: Lab/Vercel Qwen3.5-class entries use toggle + budget_tokens. MiniRouter cannot advertise toggle, but it does accept reasoning.effort=none and reasoning.max_tokens. Final files keep only budget_tokens (also qwen3.5-flash, qwen3.6-*, qwen3.7-max/plus, qwen-3-32b, qwen-3.6-max-preview, google/gemini-2.5-flash*, anthropic/claude-haiku-4.5, anthropic/claude-opus-4.5), so callers cannot discover the off path that replaces toggle. Action: Pair budget_tokens with effort values that include none (and any other verified efforts) wherever peers use toggle+budget and MiniRouter forwards both fields.
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:5 - Check: DeepSeek V4 baseline is toggle + high/max (or peer-equivalent), not a mismatched effort enum. Why: Final MiniRouter uses effort = ["none", "high", "max"]. Mapping toggle→none is plausible on this host, but Vercel’s same-catalog peer still uses toggle + ["high", "xhigh"] (xhigh vs max). Action: Confirm MiniRouter’s accepted values for this model ID (max vs xhigh, and that none is the real off wire) against host docs/API, then align with the verified set.
  • [low] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder-next.toml:3 - Check: Provider overrides after base_model must be real deltas only. Why: File sets description and reasoning = true with reasoning_options = [] while models/alibaba/qwen3-coder-next.toml has reasoning = false and a different description. Matching Vercel’s override may be intentional, but restating a near-generic description and flipping reasoning without a host-specific note is easy to get wrong. Action: Keep only true MiniRouter deltas; if reasoning really differs from the lab file, cite why; drop an identical/redundant description if it is not a deliberate display change.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:4 - Check: Reasoning options must follow lab + same-surface peer baselines; never dump the full schema effort enum. Why: Patch 6 sets effort to ["none","minimal","low","medium","high","xhigh","max"] on ~41 reasoners (Qwen 3.x, Claude Haiku/Opus 4.5, Gemini 2.5 Flash*, DeepSeek V3.1*, MiniMax M3, Kimi K2.5/2.6, Nemotron*, GLM 4.x/5.x, MiMo, Seed 1.6, Laguna, etc.). MiniRouter’s closed schema may accept that vocabulary, but AGENTS.md / the audit skill require the intersection this model actually exposes, matching lab + Vercel-gateway peers—not the entire gateway enum. This over-advertises controls (e.g. max on Qwen budget models, graded L/M/H on GLM peers that only use toggle). Action: Per model, copy lab + providers/vercel (and first-party lab) option sets for that ID; keep only values MiniRouter meaningfully forwards. Drop the universal 7-value list.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:6 - Check: Qwen / Gemini 2.5 / Claude 4.5 budget paths must not invent full effort enums. Why: Lab Alibaba is toggle + budget_tokens; Vercel peers match that. MiniRouter correctly omits toggle (rejects reasoning.enabled), but final files pair full effort enum + budget_tokens (qwen3.5-plus/flash, 3.6/3.7, qwen-3-32b, qwen-3.6-max-preview, gemini-2.5-flash(-lite), claude-haiku-4.5, claude-opus-4.5). That invents graded effort beyond lab/peers. Action: Prefer budget_tokens only (peer baseline). If off is needed without toggle, use a documented wire for off (e.g. omit reasoning, or a verified single none)—not the full enum.
  • [high] [violation] providers/minirouter/models/zai/glm-4.7.toml:6 - Check: When peers only expose toggle and this host rejects toggle, do not invent full graded effort. Why: Vercel GLM 4.7/4.5/4.6/etc. use toggle only (or toggle + narrow effort on 5.2). Final MiniRouter entries use the full 7-value effort list. With no toggle and no peer graded set, that is an invented control surface. Action: Match peer capability under MiniRouter’s wire: [] if no caller control; or effort with only levels proven for that model (e.g. GLM 5.2 peers: high/xhigh, plus none only if reasoning.effort=none actually disables thinking on this host).
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:7 - Check: DeepSeek V4 effort baseline is lab/peer high/max (or Vercel high/xhigh), not an unstated none mix without evidence. Why: First-party DeepSeek is toggle + high/max. Final MiniRouter has ["none","high","max"]. none as off without toggle can be valid on this host, but needs explicit wire evidence; Vercel still uses xhigh not max. Action: Confirm MiniRouter maps reasoning.effort=none|high|max for V4; align value names with what the gateway actually forwards (max vs xhigh) and document in a leading comment.
  • [medium] [possible mistake] providers/minirouter/models/anthropic/claude-opus-4.7.toml:5 - Check: Claude 4.7+ adaptive effort must match lab/peer levels on this surface. Why: Lab Opus 4.7 is low|medium|high|xhigh|max (no none); Vercel is toggle + low|medium|high|xhigh. Final MiniRouter is none|low|medium|high|xhigh (adds none, drops max). Action: Verify MiniRouter’s accepted efforts for Opus 4.7/4.8/Sonnet 5 against lab + Vercel; restore max if supported, and only keep none if it is the real off control on this host.
  • [low] [possible mistake] providers/minirouter/models/openai/gpt-5.2-pro.toml:3 - Check: Display name should be intentional, not a truncated copy. Why: Final name is "GPT 5.2 " (trailing space / incomplete “Pro”). Action: Set the intended display name (e.g. GPT 5.2 Pro) to match peers.

@zhe-t

zhe-t commented Aug 22, 2026

Copy link
Copy Markdown
Author

Addressed the review feedback across the follow-up commits:

  • converted MiniRouter entries to base_model plus provider-only deltas and added the missing shared model records
  • corrected GPT-5.1, DeepSeek, Qwen, Nova, Grok, Mercury, Morph, Magistral, and Claude metadata/pricing issues
  • removed unsupported toggle controls and kept per-model graded, budget-only, or no-control shapes based on the lab and Vercel peers
  • fixed the GPT-5.2 Pro display-name override

Reasoning wire note: MiniRouter has a closed POST /v1/chat/completions schema that accepts reasoning.effort, reasoning.max_tokens, and reasoning.exclude, and rejects reasoning.enabled / enable_thinking. The provider header now cites the source directly: https://github.com/SolWorks-Dev/minirouter/blob/401f445fe23e94e21a6cb921c7c855296732ee27/packages/pricing/src/admission-bound.ts#L520-L538

Validated with bun validate, bun run compare:migrations, git diff --check, and custom audits across all 224 MiniRouter model entries.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/zai/glm-5.toml:2 - Check: Relay reasoning_options must reflect this host’s controls using lab/same-surface peer baselines; [] means no caller control, not uncertainty (AGENTS.md → Reasoning options; audit skill §2/anti-patterns). Why: MiniRouter is a multi-model OpenAI-compat relay whose provider.toml documents reasoning.effort (including none) and rejects only reasoning.enabled/enable_thinking. Final entries set reasoning_options = [] for many models that the same-surface Vercel peer exposes as controllable (typically toggle), including at least: zai/glm-{4.5,4.5-air,4.5v,4.6,4.7,4.7-flash,4.7-flashx,5,5.1,5-turbo,5v-turbo}, deepseek/deepseek-v3.1, deepseek/deepseek-v3.1-terminus, alibaba/qwen-3-14b, alibaba/qwen-3-30b, bytedance/seed-1.6, minimax/minimax-m3, moonshotai/kimi-k2.5, moonshotai/kimi-k2.6, nvidia/nemotron-*, poolside/laguna-s-2.1, xiaomi/mimo-v2.5, xiaomi/mimo-v2.5-pro. That understates the API and blocks clients from the documented off path. Action: For each of these, replace [] with the host-mapped peer/lab set (at minimum effort including none where off is reasoning.effort=none; add graded efforts only when lab/peers expose them). Do not leave [] without affirmative per-model evidence that MiniRouter ignores effort for that route.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:5 - Check: When peers expose on/off plus budget and this host rejects toggle but accepts reasoning.effort=none + reasoning.max_tokens, author both off and budget. Why: Final Qwen budget-only reasoners (e.g. qwen3.5-plus, qwen3.5-flash, qwen3.6-*, qwen3.7-max/plus, qwen-3-32b, qwen-3.6-max-preview) and Claude budget-only entries (claude-haiku-4.5, claude-opus-4.5) drop the peer toggle and do not add effort with none. Budget mins are 1 / 1024, so there is no off control at all, unlike Vercel (toggle + budget_tokens) and unlike MiniRouter’s documented none off path. Action: Add { type = "effort", values = ["none"] } (or the real graded set if verified) alongside existing budget_tokens for those models; keep budget bounds only where already justified.
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:8 - Check: Relay effort values should match lab + same-surface peers for this model. Why: Final MiniRouter uses none|high|max. First-party DeepSeek is toggle + high|max (good max); Vercel peer is toggle + high|xhigh. If MiniRouter’s Vercel-backed path actually forwards xhigh rather than DeepSeek-native max, catalog clients will send a non-working level (or miss a working one). Action: Confirm the wire values MiniRouter accepts/forwards for DeepSeek V4 on this host and align values (and the leading comment) to that set; keep none only if it is the real off path here.
  • [medium] [possible mistake] providers/minirouter/models/anthropic/claude-opus-4.7.toml:6 - Check: Do not invent effort levels beyond lab/same-surface peers without host evidence. Why: Final Claude adaptive models use none|low|medium|high|xhigh|max (claude-opus-4.7, claude-opus-4.8, claude-opus-4.8-fast, claude-sonnet-5). Lab Opus 4.7 includes max; Vercel peers use toggle + low|medium|high|xhigh without max and without none in effort. Action: Verify MiniRouter accepts/forwards both none and max for these IDs; drop any level that is schema-accepted globally but not effective on this route.
  • [low] [possible mistake] providers/minirouter/models/zai/glm-5.3.toml:6 - Check: Off path consistency with host reasoning.effort=none. Why: glm-5.2 correctly adds none beside high|xhigh, but glm-5.3 stays low|high|max with no none while the provider documents none as a global effort token. Action: Confirm whether GLM 5.3 can be turned off via reasoning.effort=none on MiniRouter; if yes, add none to match the host off path used elsewhere.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/deepseek/deepseek-v3.1.toml:3 - Check: Relay reasoning_options must copy the lab/same-surface peer control set; do not invent a degenerate effort list. Why: Final MiniRouter entries collapse Vercel peer toggle (e.g. deepseek-v3.1, kimi-k2.5/kimi-k2.6, minimax-m3, poolside/laguna-s-2.1, many zai/glm-*, several nvidia/nemotron-*, xiaomi/mimo-*, qwen-3-14b/qwen-3-30b, seed-1.6) to reasoning_options = [{ type = "effort", values = ["none"] }]. On a Vercel-forwarding host that rejects reasoning.enabled, that is not a faithful toggle map: it only advertises force-off and drops the peer on/off (or on+graded) surface, so clients cannot enable thinking the way the same-surface catalog documents. Action: For each affected model, re-author from the Vercel peer + lab baseline under MiniRouter’s real wire (reasoning.effort / reasoning.max_tokens): map toggle-off to none only when graded/on levels (or budget) remain; if the host truly cannot enable a toggle-only model, use affirmative [] with evidence—not effort=["none"] alone.
  • [high] [violation] providers/minirouter/models/spacexai/grok-4.5.toml:5 - Check: Baseline = lab ∩ same-surface peer controls this host can actually expose; unchanged forward must not invent levels. Why: provider.toml states MiniRouter’s default upstream is Vercel AI Gateway and admitted fields are forwarded unchanged, but MiniRouter advertises effort for Grok models where the same-surface Vercel peer is [] (grok-4.5low|medium|high, grok-4.3none|low|medium|high, grok-4.20-multi-agent*low|medium|high|xhigh). That overstates caller control on this path. Action: Align those MiniRouter Grok reasoners with the Vercel peer ([]) unless you have host-specific evidence that MiniRouter applies effort before relay; if matching first-party xAI instead, document why this path is not a thin Vercel forward for those IDs.
  • [medium] [possible mistake] providers/minirouter/models/amazon/nova-lite.toml:7 - Check: Provider overrides must be real deltas, not accidental modality regressions. Why: nova-lite and nova-pro override [modalities].input to ["text", "image", "pdf"], dropping video that the Vercel/Nova catalog normally includes for these SKUs. Action: Confirm MiniRouter/Vercel actually drop video for these IDs; if not, remove the modalities override and inherit the base.
  • [low] [possible mistake] providers/minirouter/models/alibaba/qwen3.5-plus.toml:6 - Check: none + budget_tokens mapping for former toggle+budget peers. Why: Several Alibaba/Claude/Gemini files correctly keep budget_tokens but add bare effort=["none"] as the off path. That can be valid on this host, but only if reasoning.max_tokens is what enables thinking and effort=none is the documented off switch (not a leftover from the full schema enum). Action: Spot-check a few representatives (qwen3.5-plus, claude-haiku-4.5, gemini-2.5-flash) against MiniRouter/Vercel behavior and drop none where off is simply “omit budget,” or keep it only where effort=none is the real wire off path.

@zhe-t

zhe-t commented Aug 22, 2026

Copy link
Copy Markdown
Author

Addressed the latest review in 05e9ed3d1:

  • Aligned grok-4.3, grok-4.5, and both grok-4.20-multi-agent* entries with their exact Vercel same-surface peers (reasoning_options = []).
  • Removed the Nova Lite/Pro modality overrides so they inherit the complete lab inputs, including video and PDF.
  • Spot-checked qwen3.5-plus, claude-haiku-4.5, and gemini-2.5-flash: their budget bounds still match the Vercel peers, while MiniRouter's reasoning.effort=none is the off path.

I kept effort = ["none"] on the former toggle-only routes intentionally. The repository audit policy defines [] as no caller control; these routes do have an explicit caller control (reasoning.effort=none), while omission preserves the model/provider default. Replacing those entries with [] would erase that real off control and contradict the preceding review request.

Wire evidence:

Validation is clean:

  • bun validate
  • bun run compare:migrations
  • git diff --check
  • 224-model provider audit: no duplicate IDs, missing reasoning options, toggle fields, or pricing issues
  • 53 former-toggle peer audit: exact none + peer efforts, unchanged peer budgets
  • Focused Grok/Nova/budget audit: no mismatches

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:2 - Check: Relay reasoning_options must follow lab + same-surface peer controls (AGENTS.md Reasoning options; audit skill baseline). Why: Final catalog sets reasoning_options = [{ type = "effort", values = ["none"] }] on many MiniRouter models whose Vercel peers use toggle only (e.g. qwen-3-14b, qwen-3-30b, deepseek-v3.1, deepseek-v3.1-terminus, kimi-k2.5, kimi-k2.6, minimax-m3, Nemotron toggles, most ZAI GLM toggle models). MiniRouter’s own provider.toml only documents that reasoning.enabled is rejected and that callers should omit reasoning for defaults—it does not establish effort=none as a complete stand-in for those toggle surfaces. A lone none effort is not the peer baseline and mis-advertises caller control. Action: For each former toggle-only peer, either (a) drop to [] only with affirmative host evidence of no control, or (b) author the real MiniRouter-exposed control set with a leading wire comment and peer/host evidence—do not leave degenerate effort: ["none"] across the toggle cohort.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:5 - Check: Same baseline rule for toggle + budget peers. Why: Final files pair effort = ["none"] with budget_tokens on Qwen/Claude/Gemini models where Vercel peers use toggle + budget_tokens (e.g. qwen3.5-plus, qwen3.5-flash, qwen3.6-*, qwen3.7-*, claude-haiku-4.5, claude-opus-4.5, gemini-2.5-flash(-lite)). That invents an effort enum the peers do not publish and treats none as a universal off-path without per-model host proof. Action: Align each file to the Vercel/lab control shape adapted to MiniRouter’s admitted keys (reasoning.effort / reasoning.max_tokens); keep none only where this host actually maps off that way, and document the wire path in a leading comment.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3-coder-next.toml:1 - Check: Provider overrides must preserve real host capability deltas vs lab base_model. Why: Lab models/alibaba/qwen3-coder-next.toml has reasoning = false. Patch 6 removed MiniRouter’s reasoning = true and reasoning_options = [], so the resolved entry is non-reasoning. Same-surface Vercel still serves it as reasoning = true with reasoning_options = []. The same inheritance hole exists for qwen3-coder.tomlalibaba/qwen3-coder-480b-a35b-instruct and qwen3-coder-30b-a3b.tomlalibaba/qwen3-coder-30b-a3b-instruct (lab reasoning = false, no provider reasoning/reasoning_options override). Action: Restore provider-side reasoning = true and appropriate reasoning_options (or correct the lab metadata if the lab model is actually a reasoner) so MiniRouter matches the served capability.
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-r1.toml:3 - Check: Override-only files should not silently flip lab facts. Why: Provider sets open_weights = false while lab models/deepseek/deepseek-r1.toml has open_weights = true. Action: Drop the override unless MiniRouter truly serves a closed-weight variant; cite evidence if keeping it.
  • [low] [possible mistake] providers/minirouter/models/anthropic/claude-sonnet-4.5.toml:2 - Check: After base_model, keep only real deltas. Why: structured_output = true is restated without a lab counterpart showing a delta; harmless if intentional host fact, otherwise noise. Action: Remove if identical to intended inherited/default behavior, or keep only if this host uniquely guarantees structured output.

@zhe-t

zhe-t commented Aug 22, 2026

Copy link
Copy Markdown
Author

Follow-up pushed in 535e556bd after a full 224-model inheritance audit:

  • Restored reasoning = true + reasoning_options = [] on the three cited Qwen Coder entries and the same missed case, kwaipilot/kat-coder-pro-v1.
  • Removed incorrect open_weights = false overrides from deepseek-r1 and the same missed case, mistral-nemo; both now inherit their open-weight lab facts.
  • Kept claude-sonnet-4.5's structured_output = true because it is a confirmed same-surface Vercel capability delta.

The full comparison now reports:

  • zero MiniRouter/Vercel reasoning inheritance mismatches
  • zero suspicious open-weight overrides against the lab base
  • one structured-output override, confirmed true on both MiniRouter and Vercel

bun validate, bun run compare:migrations, all focused reasoning/peer audits, and git diff --check pass.

The repeated effort=["none"] concern is resolved in the preceding comment with the MiniRouter wire schema, unchanged Vercel forwarding path, official Vercel reasoning mapping, and the repository's explicit [] = no caller control policy.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/deepseek/deepseek-v3.1.toml:3 - Check: Relay reasoning_options must copy the lab + same-surface peer control set for what this host can expose (AGENTS.md → Reasoning options; audit skill baseline). Why: Final MiniRouter entries replace Vercel peer toggle with sole effort = ["none"] on many toggle-only reasoners (e.g. deepseek-v3.1, deepseek-v3.1-terminus, alibaba/qwen-3-14b, alibaba/qwen-3-30b, bytedance/seed-1.6, minimax/minimax-m3, moonshotai/kimi-k2.5, moonshotai/kimi-k2.6, nvidia/nemotron-*, xiaomi/mimo-v2.5*, poolside/laguna-s-2.1, zai/glm-4.5*, zai/glm-4.6, zai/glm-4.7*, zai/glm-5, zai/glm-5-turbo, zai/glm-5.1, zai/glm-5v-turbo). ["none"] alone is not the peer option set and does not represent on/off toggle; empty [] means no caller control, not a fake single-value effort. Action: For each model, match the Vercel peer shape under MiniRouter’s wire surface (reasoning.effort / reasoning.max_tokens only; no reasoning.enabled): where peers are toggle-only and this host cannot express both on and off, use [] (or a documented, verified dual-state mapping)—do not ship sole effort = ["none"] as a toggle substitute.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:7 - Check: Same-surface peer options for toggle + budget models. Why: Vercel peers use toggle + budget_tokens (e.g. qwen3.5-plus, qwen3.5-flash, qwen3.6-*, qwen3.7-max/plus, qwen-3-32b, qwen-3.6-max-preview, google/gemini-2.5-flash, google/gemini-2.5-flash-lite, anthropic/claude-haiku-4.5, anthropic/claude-opus-4.5). Final MiniRouter files use effort = ["none"] + budget_tokens (or budget-only after earlier edits). That drops the peer on/off control and invents a none-only effort list the peers do not use. Action: Align each file to the Vercel peer control set expressible on MiniRouter: keep verified budget_tokens bounds; replace none-only effort with a real dual-state mapping or omit effort if only budget is valid on this path—do not advertise ["none"] as the toggle replacement without host evidence that reasoning.effort=none disables thinking for that model on the Vercel-forwarded route.
  • [medium] [possible mistake] providers/minirouter/models/zai/glm-5.3.toml:5 - Check: Do not add effort levels beyond lab/same-surface peers without host evidence. Why: Vercel glm-5.3 is ["low", "high", "max"]; this PR ends at ["none", "low", "high", "max"]. Adding none may be intended as MiniRouter’s off path, but it is not on the peer entry and is applied inconsistently (e.g. claude-opus-5 / claude-sonnet-4.5 stay without none like Vercel). Action: Either add none only where MiniRouter docs/tests show off via reasoning.effort=none for that model family, and apply that rule consistently, or match the Vercel peer lists exactly (no extra none).
  • [medium] [possible mistake] providers/minirouter/models/anthropic/claude-opus-4.7.toml:5 - Check: Effort baseline vs lab + peers for Claude 4.7/4.8/Sonnet 5. Why: First-party Anthropic lab entries include max (low/medium/high/xhigh/max). Final MiniRouter (and Vercel) use none/low/medium/high/xhigh without max. If MiniRouter truly forwards Vercel’s vocabulary only, matching Vercel is fine; if lab max is accepted on this path, these are under-specified. Action: Confirm against MiniRouter/Vercel behavior whether max is honored for these Claude IDs; if yes, add max; if no, keep the Vercel set and drop any implication that lab-full effort is exposed.
  • [low] [possible mistake] providers/minirouter/models/kwaipilot/kat-coder-pro-v1.toml:2 - Check: Provider reasoning overrides of lab metadata should be intentional deltas. Why: New lab models/kwaipilot/kat-coder-pro-v1.toml sets reasoning = false, while the provider forces reasoning = true + reasoning_options = [] (and Vercel’s inline copy also claims reasoning). That leaves lab vs gateway disagreement. Action: Verify whether this ID reasons on MiniRouter/Vercel; if not, drop the provider reasoning = true override; if yes, set reasoning = true on the lab entry (or document the host-only delta) so lab metadata is not false.

@zhe-t

zhe-t commented Aug 22, 2026

Copy link
Copy Markdown
Author

Final control-shape follow-up pushed in 4dac76429:

  • The 28 former toggle-only peers now use reasoning_options = [] because MiniRouter rejects the toggle wire and cannot express both states.
  • The 12 former toggle+budget peers now retain only their verified budget_tokens controls and bounds.
  • glm-5.3 now exactly matches its Vercel effort set (low|high|max).
  • The three Qwen Coder IDs and kat-coder-pro-v1 now inherit non-reasoning lab metadata, with leading comments recording that MiniRouter's live /v1/models catalog omits the reasoning tag for those exact IDs (checked 2026-08-22).
  • Claude 4.7/4.8/Sonnet 5 remain aligned with the Vercel-forwarded vocabulary (none|low|medium|high|xhigh, no max).

The consolidated audit covers all 53 former toggles and reports zero mismatches. Full validation remains clean:

  • bun validate
  • bun run compare:migrations
  • git diff --check
  • 224-model audit: no duplicate IDs, missing reasoning options, toggle fields, or pricing issues
  • exact Grok/GLM peer checks, Nova inherited-modality checks, live-catalog exceptions, and open-weight override checks all pass

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:2 - Check: Relay reasoning_options must follow lab + same-surface peer controls; [] means no caller control, not uncertainty. Why: MiniRouter is a multi-model relay over Vercel AI Gateway and admits reasoning.effort (including none) while rejecting reasoning.enabled. Final entries still use reasoning_options = [] for many models whose Vercel peers expose a real on/off control (toggle), including at least: alibaba/qwen-3-14b, alibaba/qwen-3-30b, bytedance/seed-1.6, deepseek/deepseek-v3.1, deepseek/deepseek-v3.1-terminus, minimax/minimax-m3, moonshotai/kimi-k2.5, moonshotai/kimi-k2.6, nvidia/nemotron-3-nano-30b-a3b (and other Nemotron reasoners here), poolside/laguna-s-2.1, xiaomi/mimo-v2.5, xiaomi/mimo-v2.5-pro, and the Z.AI/GLM reasoners that Vercel marks as toggle (glm-4.5*, glm-4.6, glm-4.7*, glm-5*, glm-5v-turbo). That understates caller control on this host. Action: For each of those IDs, copy the Vercel peer control set mapped onto MiniRouter’s wire surface: replace peer toggle with effort including none (no toggle type), keep any peer graded effort/budget that this host forwards, and only keep [] where lab + Vercel peers are already always-on / no control.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:4 - Check: When peers expose on/off plus budget/effort, the relay must preserve an off path on its real wire fields. Why: Final files for several toggle+budget peers are budget-only after dropping effort = ["none"], so callers cannot turn reasoning off even though MiniRouter accepts reasoning.effort=none and Vercel peers advertise toggle. Affected at least: alibaba/qwen-3-32b, alibaba/qwen-3.6-max-preview, alibaba/qwen3.5-flash, alibaba/qwen3.5-plus, alibaba/qwen3.6-27b, alibaba/qwen3.6-plus, alibaba/qwen3.7-max, alibaba/qwen3.7-plus, anthropic/claude-haiku-4.5, anthropic/claude-opus-4.5, google/gemini-2.5-flash, google/gemini-2.5-flash-lite. Action: Restore an off path as effort values including none alongside the existing budget_tokens (or full peer effort list where graded), matching Vercel peers on MiniRouter’s admitted keys; do not advertise type = "toggle".
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:8 - Check: DeepSeek V4 effort baseline is lab/peer high/max (or same-surface peer set), not an unmapped substitute. Why: Final MiniRouter uses ["none", "high", "xhigh"] while first-party DeepSeek is high/max; the comment cites Vercel, and Vercel does use high/xhigh, but if MiniRouter truly only remaps off→none and otherwise forwards lab semantics, xhigh may be wrong. Action: Confirm the live MiniRouter→upstream mapping for these two IDs and set enabled efforts to the values that actually work (high/max vs high/xhigh); keep none only if off is real on this host.
  • [low] [violation] providers/minirouter/models/deepseek/deepseek-v3.1.toml:2 - Check: After base_model, provider files must stay override-only. Why: Several override files still restate provider-agnostic fields that match the lab entry (e.g. identical description on deepseek/deepseek-v3.1 and deepseek/deepseek-v4-pro-0813, and similar restated metadata on other converted models). Action: Drop restated identical lab fields; keep only real deltas plus provider-authored cost / reasoning_options / interleaved / status / limits that differ.

@zhe-t

zhe-t commented Aug 22, 2026

Copy link
Copy Markdown
Author

Final review note: no additional code change is warranted from the latest bot comment.

  • The toggle mapping request reverses the immediately preceding review, which required toggle-only peers to be [] and toggle+budget peers to be budget-only. 4dac76429 follows that repeated/stable interpretation and its 53-model consolidated audit is clean.
  • DeepSeek V4 uses the exact Vercel same-surface enabled set (high|xhigh) because MiniRouter forwards the admitted request unchanged to Vercel AI Gateway; the provider/model comments cite that wire path.
  • The claimed duplicate descriptions are not duplicates. For example, MiniRouter deepseek-v3.1 says “DeepSeek chat model for instruction following, coding, and analysis,” while the lab says “Hybrid-reasoning DeepSeek model with thinking and non-thinking modes.” The V4 Pro descriptions likewise differ. The full 224-model provider-vs-lab duplicate audit reports duplicates: [].

Both PR checks are green on 4dac76429 (validate and review), and all focused audits plus git diff --check pass.

@zhe-t

zhe-t commented Aug 22, 2026

Copy link
Copy Markdown
Author

Applied the latest requested mapping in fe56df5d3:

  • Former Vercel toggle-only controls now map to MiniRouter reasoning.effort = none (no unsupported toggle type).
  • Former toggle + budget_tokens controls now retain their verified budget bounds and add the effort = none off path.
  • Models with graded Vercel effort use none + the exact same-surface effort values.
  • DeepSeek V4 remains none|high|xhigh: MiniRouter forwards the admitted body unchanged to Vercel AI Gateway, and high|xhigh is the exact Vercel peer set for these IDs.
  • glm-5.3 now includes the mapped none off path alongside its Vercel peer efforts.

No description fields were removed: the cited DeepSeek descriptions are not identical to their lab bases, and the complete duplicate audit reports duplicates: [].

Validation is clean:

  • bun validate
  • bun run compare:migrations
  • git diff --check
  • 224-model audit: no duplicates, missing reasoning options, toggle fields, or pricing issues
  • 53 former-toggle audit: zero effort/budget mismatches
  • exact same-surface DeepSeek/Claude/GLM and host-specific exception checks: zero mismatches

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/moonshotai/kimi-k2.5.toml:3 - Check: Relay reasoning_options must match lab + same-surface peer controls for this host’s real request surface. Why: Final MiniRouter entries use reasoning_options = [{ type = "effort", values = ["none"] }] for many models whose lab/Vercel peers expose a real on/off toggle (and sometimes only that), including at least kimi-k2.5, kimi-k2.6, deepseek-v3.1, deepseek-v3.1-terminus, minimax-m3, seed-1.6, poolside/laguna-s-2.1, Nemotron reasoners, Xiaomi MiMo, and most Z.AI GLM reasoners. effort=["none"] only advertises an off value; it is not a peer baseline and drops the enable path that hybrid/toggle models need. Provider comments that MiniRouter rejects reasoning.enabled explain why toggle cannot be copied literally, but they do not justify inventing a none-only effort enum. Action: For each affected model, re-author options from lab + Vercel peer intersection that this host can actually forward (graded effort and/or budget_tokens when peers have them). Use [] only with affirmative evidence of no caller control. Do not keep none-only effort as a stand-in for toggle across the catalog.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml - Check: When peers use toggle + budget/effort, the relay must preserve both off and enable controls on the host wire. Why: Final files pair effort = ["none"] with budget_tokens (Qwen 3.5/3.6/3.7 family, Claude Haiku/Opus 4.5, Gemini 2.5 Flash/Lite, etc.). Lab/Vercel peers use toggle + budget (or toggle + effort), not none-only effort. On a budget path, enable is the budget; advertising none without the peer enable shape still mis-states the control surface and diverges from the documented same-surface Vercel baseline. Action: Align these to peer shapes adapted to MiniRouter’s admitted fields (typically budget, and graded effort only where peers/native expose it). Drop synthetic none-only effort unless host docs prove reasoning.effort=none is the only off switch and default-on behavior is verified per model.
  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder.toml:1 - Check: Non-lab hosts should not silently drop reasoning vs the same-surface Vercel peer without strong host evidence. Why: After the later commits, qwen3-coder, qwen3-coder-next, qwen3-coder-30b-a3b, and kat-coder-pro-v1 inherit lab reasoning = false (overrides removed; comments only say MiniRouter /v1/models omits a reasoning tag). Vercel peers for the same IDs set reasoning = true with reasoning_options = []. Tag omission in a model list is weak evidence that the served model never reasons. Action: Either restore reasoning = true + appropriate reasoning_options to match Vercel/same-ID behavior, or keep false only with stronger host proof (completion traces / docs) and note the intentional delta vs Vercel.
  • [medium] [possible mistake] providers/minirouter/models/anthropic/claude-opus-4.7.toml - Check: Graded effort lists on relays should not drop lab levels without peer or host evidence. Why: Final MiniRouter Claude Opus 4.7/4.8 and Sonnet 5 effort sets are none + low/medium/high/xhigh and omit lab max (Anthropic first-party Opus 4.7 / Sonnet 5 include max). Vercel also omits max on some of these, so this may be intentional same-surface copying, but adding none while dropping max is an uncited hybrid of host off-path mapping and peer truncation. Action: Verify against MiniRouter/Vercel live acceptance for these IDs; include max where the upstream accepts it, and only keep none if reasoning.effort=none is a real off path for that model.
  • [low] [possible mistake] providers/minirouter/models/anthropic/claude-sonnet-4.5.toml - Check: Override-only provider files after base_model. Why: Final Sonnet 4.5 still restates name, structured_output, and a full matching context limit while mainly needing cost + budget_tokens (and any true deltas). Same pattern appears on other files that still carry non-delta description / modality copies. Action: Strip fields identical to the lab base; keep only cost, reasoning_options, and real host deltas.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [possible mistake] providers/minirouter/models/alibaba/qwen3-235b-a22b-thinking.toml:1 - Check: base_model must identify the actual underlying lab model. Why: This entry points at alibaba/qwen3-235b-a22b-thinking-2507 (text-only lab metadata), while the same Vercel peer slug is authored as a multimodal vision/thinking model (image/pdf). If MiniRouter serves the VL id, the lab link, modalities, and limits are wrong. Action: Confirm the MiniRouter model id against the upstream catalog and either keep qwen3-235b-a22b-thinking-2507 with text-only facts, or point at the correct VL lab model and restore real host deltas only.
  • [high] [violation] providers/minirouter/models/kwaipilot/kat-coder-pro-v1.toml:3 - Check: Host reasoning / reasoning_options must match this host’s real surface and same-surface peers, not contradictory tag heuristics. Why: Final state sets MiniRouter reasoning = false because /v1/models omits a reasoning tag, while models/kwaipilot/kat-coder-pro-v1.toml is flipped to reasoning = true and the Vercel peer is reasoning = true with reasoning_options = []. For a Vercel-catalog relay, that is an inconsistent capability story. Action: Align MiniRouter with the verified host behavior (likely reasoning = true + peer options/[]), or keep false only with host-specific evidence that this route truly cannot reason—and then do not mark the shared lab model true from the opposite claim.
  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:2 - Check: Relay reasoning_options baseline is lab + same-surface peers for this host’s wire surface; do not invent a none-only control set. Why: Final MiniRouter uses reasoning_options = [{ type = "effort", values = ["none"] }] (and the same none-only or none+budget pattern across many Vercel toggle peers: Qwen3.x, Claude Haiku/Opus 4.5, Gemini 2.5 Flash, GLM, Kimi, MiniMax M3, Nemotron, etc.). Vercel peers expose real on/off or graded controls (toggle, toggle+budget_tokens, toggle+effort). Advertising only effort=none claims a caller control that cannot turn reasoning on or select graded levels, which misrepresents the relay surface. Action: For each reasoner, copy the intersection of MiniRouter’s admitted wire fields (reasoning.effort, reasoning.max_tokens) with the Vercel peer/lab option set: map peer toggle to effort that includes none plus the peer’s graded values or keep budget_tokens when peers have budgets; use [] only when peers truly have no caller control.
  • [medium] [violation] providers/minirouter/models/alibaba/qwen3-coder-30b-a3b.toml:3 - Check: Provider reasoning overrides must not contradict established same-surface peers without stronger host evidence. Why: Final MiniRouter forces reasoning = true + reasoning_options = [] on qwen3-coder-30b-a3b, qwen3-coder-next, and qwen3-coder while lab metadata is reasoning = false. Vercel peers also mark these true with [], but MiniRouter earlier documented that /v1/models omits the reasoning tag for these IDs, then removed that evidence and forced true anyway. Action: Either keep lab false and host-only true with concrete MiniRouter proof of reasoning output, or keep true only if the Vercel peer is intentionally mirrored and drop the contradictory “omits reasoning tag” narrative; do not flip shared lab files without first-party lab evidence.
  • [medium] [possible mistake] models/interfaze/interfaze-beta.toml:1 - Check: Lab metadata must be provider-agnostic facts, not one gateway’s tag dump. Why: The lab file is updated from MiniRouter /v1/models tags (file-input, reasoning, tool-use, vision) after initially matching Vercel, which can bake host-specific capability claims into shared models/. Action: Keep models/interfaze/interfaze-beta.toml to lab-level facts; put MiniRouter-only capability deltas on the provider file only.
  • [low] [possible mistake] providers/minirouter/models/bytedance/seed-1.8.toml:2 - Check: Provider display name overrides should be real host deltas. Why: MiniRouter renames the model to "Bytedance Seed 1.8" while lab/Vercel use "Seed 1.8", which looks like an accidental rename rather than a host display difference. Action: Drop the name override unless MiniRouter’s public catalog actually uses that string.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/provider.toml:10 - Check: Relay reasoning_options must copy the underlying model’s caller controls from lab + same-surface peers; [] means no control, not a dropped off-path (AGENTS.md → Reasoning options; audit skill anti-pattern “[] on a relay of a controlled reasoner”). Why: MiniRouter’s own header documents admitted reasoning.effort including none, and rejects only reasoning.enabled / enable_thinking. Patch 17 then sets toggle-only Vercel peers to [] and strips both toggle and none from toggle+effort / toggle+budget peers, claiming no representable off control while none remains in the admitted schema. That under-reports off for models such as alibaba/qwen-3-14b, deepseek/deepseek-v3.1, moonshotai/kimi-k2.5, zai/glm-4.5, amazon/nova-2-lite, deepseek/deepseek-v4-pro-0813, anthropic/claude-opus-4.7, and alibaba/qwen3.5-plus (budget kept, off dropped). Action: Restore a representable off path where peers expose one: for toggle-only peers use effort with none (no fake toggle); for toggle+graded effort use none + graded values (no toggle); for toggle+budget keep budget and add none (or document a verified budget-off) rather than budget-only. Do not use [] unless the host truly cannot pass any off/effort control for that model.
  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3-235b-a22b-thinking.toml:3 - Check: base_model must name the actual underlying lab model for this provider ID. Why: Final file sets base_model = "alibaba/qwen3-vl-235b-a22b-thinking" (vision) after earlier commits used alibaba/qwen3-235b-a22b-thinking-2507 (text). The same provider still has qwen3-vl-thinking.toml → the same VL base, while Vercel’s same-ID peer is the non-VL 235B Thinking 2507 entry, and this PR still adds unused models/alibaba/qwen3-235b-a22b-thinking-2507.toml. Wrong identity would publish incorrect modalities/limits/description for alibaba/qwen3-235b-a22b-thinking. Action: Verify MiniRouter’s model id against the catalog/API; if it is the 2507 text reasoner, point base_model at alibaba/qwen3-235b-a22b-thinking-2507 and drop the VL overrides; if it truly is the VL model, keep the VL base, justify the non-VL filename/id, and remove or stop orphaning the unused 2507 lab stub if nothing references it.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [possible mistake] providers/minirouter/models/mistral/magistral-medium.toml:8946 - Check: Provider base_model must identify the real underlying lab model; override-only files must not invent a different product identity. Why: Final entry uses base_model = "mistral/magistral-medium-latest" while setting name = "Magistral Medium 2509", attachment = true, image input, and limit.output = 64_000. Lab models/mistral/magistral-medium-latest.toml is text-only, attachment = false, output 16_384, and is not a 2509 checkpoint. Same pattern was already corrected for Magistral Small (25062509). Action: Point at a real Magistral Medium 2509 lab id (add complete models/mistral/… if missing), or drop the 2509 rename/modality overrides and match magistral-medium-latest.
  • [medium] [possible mistake] providers/minirouter/models/mistral/ministral-8b.toml:9089 - Check: Provider overrides must be real host deltas, not contradictions of lab + same-surface peers. Why: Entry uses base_model = "mistral/ministral-8b-instruct-2410" (lab: text-only, attachment = false) but overrides attachment = true, modalities.input = ["text", "image"], and output = 4_000. Same-ID Vercel peer stays text-only with much larger output. Action: Verify MiniRouter’s catalog/API for this ID; remove unsupported vision/attachment overrides (and fix output) or retarget a multimodal Ministral lab model if that is what is served.
  • [medium] [possible mistake] providers/minirouter/models/morph/morph-v3-fast.toml:9510 - Check: Limit overrides need evidence when they diverge from lab metadata and the default upstream peer. Why: Final MiniRouter files set context = 81_920 (and large output caps) while new lab files and Vercel peers document 16k/16k (fast) and 32k/32k (large), and the lab description explicitly says 16k I/O. Action: Confirm MiniRouter /v1/models (or docs) for these IDs; if not 81_920, inherit lab limits or set the verified values for both morph-v3-fast and morph-v3-large.
  • [medium] [possible mistake] models/xai/grok-4.20-multi-agent.toml:6472 - Check: New lab metadata should not contradict established same-model provider facts without rationale. Why: New lab sets tool_call = false, but existing providers/vercel/models/spacexai/grok-4.20-multi-agent.toml and the MiniRouter host files set tool_call = true. Action: Align lab tool_call with first-party/peer evidence, or document why the lab default differs and keep only a real host override.
  • [low] [possible mistake] models/amazon/nova-lite.toml:5866 - Check: New lab [modalities] should match the model’s real inputs, not gateway guesses. Why: New lab entries for Nova Lite/Pro include pdf (and video), while existing Vercel peers list text/image/video without pdf. MiniRouter inherits the lab modalities after dropping local overrides. Action: Verify Amazon/Vercel modality docs and drop pdf from the lab files (or keep it only as a documented host override) if PDF is not supported.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/zai/glm-4.5.toml:4 - Check: Relay reasoning_options must follow lab + same-surface peer controls (AGENTS.md Reasoning options; audit skill §2). Why: MiniRouter rejects reasoning.enabled/enable_thinking, so Vercel toggle-only peers have no representable on/off control. Final files still author reasoning_options = [{ type = "effort", values = ["none"] }] (and the same shape on many peers: glm-4.5-air, glm-4.5v, glm-4.6, glm-4.7*, glm-5, glm-5.1, glm-5-turbo, glm-5v-turbo, kimi-k2.5, kimi-k2.6, deepseek-v3.1, deepseek-v3.1-terminus, qwen-3-14b, qwen-3-30b, seed-1.6, minimax-m3, Nemotron IDs, mimo-v2.5*, laguna-s-2.1, etc.). Vercel peers expose toggle only (no effort enum). Solo none invents an incomplete control (off without an on path) and contradicts the earlier correct provider note that toggle-only peers should use []. Action: Set those toggle-only MiniRouter entries to reasoning_options = [] (always-on / no caller control on this wire). Keep none only where the peer already has graded effort (or a real budget) and MiniRouter’s documented off path is reasoning.effort=none.
  • [medium] [possible mistake] providers/minirouter/models/morph/morph-v3-fast.toml:1 - Check: Provider overrides must include real deltas claimed from the host catalog. Why: Leading comments state MiniRouter reports context_window=81920 and max_tokens=16384, but the files only set cost and still inherit lab limit 16_000/16_000 (morph-v3-large same). Catalog consumers will publish the wrong limits. Action: Add matching [limit] overrides on both Morph entries, or remove the limit claims from the comments if the lab values are intentional.
  • [medium] [possible mistake] providers/minirouter/models/mistral/ministral-8b.toml:1 - Check: Host-reported modalities/limits must be authored as overrides. Why: Comments claim MiniRouter reports vision, context_window=128000, and max_tokens=4000, but the file only sets attachment = true while still inheriting lab text-only modalities and output = 8_192. That is internally inconsistent with the stated MiniRouter catalog. Action: Override [modalities].input and [limit] to match MiniRouter, or drop the vision/max_tokens=4000 claims if they are not accurate for this ID.
  • [medium] [possible mistake] providers/minirouter/models/zai/glm-5.3.toml:6 - Check: Do not invent effort levels beyond lab/same-surface peers without host evidence. Why: Final values are ["none", "low", "high", "max"] while the Vercel peer is ["low", "high", "max"] with no toggle and no none. Same class of unforced none addition appears on other graded-only peers where Vercel has no off control. Action: Drop none unless MiniRouter docs/tests show a meaningful off path for these IDs; otherwise match the Vercel peer effort list exactly.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [possible mistake] providers/minirouter/models/alibaba/qwen3-235b-a22b-thinking.toml:4 - Check: base_model must identify the underlying lab model for this provider ID. Why: This file sets base_model = "alibaba/qwen3-vl-235b-a22b-thinking" (vision lab entry) and adds PDF input, while the same relative ID on the stated same-surface peer (providers/vercel/models/alibaba/qwen3-235b-a22b-thinking.toml) is authored as non-VL “Qwen3 235B A22B Thinking 2507”. The PR also deleted models/alibaba/qwen3-235b-a22b-thinking-2507.toml. If the MiniRouter ID is the 2507 thinking checkpoint, the VL base is wrong and inherited modalities/capabilities will be wrong. Action: Confirm the MiniRouter model identity against the live catalog; point base_model at the correct lab entry (re-add a complete models/alibaba/… file if needed) and drop incorrect modality overrides.
  • [high] [possible mistake] providers/minirouter/models/alibaba/qwen3.5-plus.toml:5 - Check: Relay reasoning_options must match this host’s real controls and the lab/same-surface baseline (not invented effort). Why: Final MiniRouter entries for toggle+budget peers (Qwen 3.5/3.6/3.7 budget models, Claude Haiku/Opus 4.5, Gemini 2.5 Flash/Flash-Lite, etc.) advertise effort with values = ["none"] plus budget_tokens, while Vercel peers use toggle + budget_tokens and do not expose an effort enum for those models. MiniRouter documents rejecting reasoning.enabled / enable_thinking, but that alone does not prove reasoning.effort=none is a meaningful off-path for Claude extended thinking / Qwen thinking_budget routes through the gateway. Action: Verify on MiniRouter that reasoning.effort=none actually disables reasoning for each of these families; if it does not, remove the synthetic effort=["none"] and keep only real budget (or [] when there is no caller control). Apply the same fix consistently across the affected files.
  • [medium] [possible mistake] providers/minirouter/models/amazon/nova-2-lite.toml:1 - Check: Provider overrides should reflect this host and established same-surface peers. Why: After switching to base_model = "amazon/nova-2-lite", MiniRouter no longer sets tool_call, so it inherits the new lab value tool_call = true, while the Vercel peer for the same ID sets tool_call = false. If MiniRouter is a Vercel-catalog gateway, this likely overstates tool calling. Action: Confirm MiniRouter/Vercel tool-use for Nova 2 Lite and set an explicit tool_call override if the host does not support tools.
  • [medium] [possible mistake] providers/minirouter/models/interfaze/interfaze-beta.toml:3 - Check: Provider capability overrides must not contradict lab/peer facts without solid host evidence. Why: The provider file forces attachment = true and tool_call = true, while the lab entry added in this PR ends at attachment = false / tool_call = false and the Vercel peer matches those false values. Catalog tag comments are thin evidence against the shared lab baseline. Action: Reconcile MiniRouter vs lab/Vercel (either prove MiniRouter really accepts files/tools and keep overrides, or drop the overrides and align the lab entry if the catalog was wrong).
  • [low] [possible mistake] models/kwaipilot/kat-coder-pro-v1.toml:8 - Check: Lab reasoning must be a provider-agnostic fact, not a single-host tag. Why: This PR flips lab reasoning from false to true based on Vercel/MiniRouter metadata, while other KAT coder lab entries and host behavior may not agree. That changes every future host that inherits the lab file. Action: Cite first-party KAT/Kwai docs (or clear multi-host agreement) for always-on reasoning; otherwise keep lab reasoning = false and only override on hosts that truly reason.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [possible mistake] models/kwaipilot/kat-coder-pro-v1.toml:11 - Check: Lab reasoning must match the model’s real capability and established same-ID peers when authoring shared models/ metadata. Why: This PR sets lab reasoning = false and drops provider reasoning_options, while the same-ID Vercel peer is reasoning = true with reasoning_options = []. That makes the shared lab entry disagree with the established relay catalog MiniRouter claims to mirror, and any future base_model consumer will inherit non-reasoning. Action: Reconcile with first-party/peer evidence: if the model reasons (even with no controls), set lab reasoning = true and author MiniRouter reasoning_options = []; if it truly does not reason, keep lab false and explain why Vercel’s reasoning = true is wrong.
  • [medium] [violation] models/interfaze/interfaze-beta.toml:7 - Check: New lab entries must be internally consistent (attachment vs [modalities].input). Why: Final lab metadata keeps attachment = false and tool_call = false while advertising input = ["text", "image", "pdf"]. Image/PDF inputs require attachment = true. MiniRouter then overrides both flags to true, which papers over broken lab metadata instead of fixing it. Action: Set lab attachment = true (and set tool_call to the host-agnostic truth). Keep only real MiniRouter deltas on the provider file.
  • [medium] [possible mistake] providers/minirouter/models/meta/llama-3.3-70b.toml:3 - Check: Provider overrides after base_model must be real host deltas, not accidental capability regressions. Why: MiniRouter sets attachment = false while lab meta/llama-3.3-70b-instruct and the Vercel same-ID entry are attachment = true. Unless MiniRouter actually rejects attachments for this ID, this is a false capability downgrade. Action: Verify against MiniRouter /v1/models (or request behavior). If attachments work, drop the override; if not, keep it and cite the host limitation in a leading comment.
  • [medium] [possible mistake] providers/minirouter/models/mistral/ministral-8b.toml:4 - Check: Multimodal/limit overrides on a text-only lab base need a correct identity or proven host delta. Why: base_model = "mistral/ministral-8b-instruct-2410" is text-only (attachment = false, input = ["text"]), but MiniRouter forces attachment = true, input = ["text", "image"], and output = 4_000. That is a large modality/limit rewrite on a non-vision lab id; if the served model is a different Ministral SKU, the base is wrong. Action: Confirm the exact upstream model MiniRouter serves for mistral/ministral-8b. Point base_model at the correct lab entry (adding one if needed), or keep these overrides only with clear host evidence that this ID is vision-capable with a 4k max output.
  • [medium] [possible mistake] providers/minirouter/models/bytedance/seed-1.6.toml:2 - Check: base_model must identify the underlying lab model, not a nearby text-only sibling. Why: MiniRouter uses bytedance-seed/seed-1-6 (lab is text-only) while setting attachment = true and input = ["text", "image"]. Repo already has models/bytedance-seed/seed-1-6-vision.toml for the multimodal Seed 1.6 line. Action: If this ID is the vision model, switch base_model to bytedance-seed/seed-1-6-vision and drop redundant multimodal overrides; if it is truly text Seed 1.6 with host-side vision, keep the overrides and document that host-specific delta.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/bytedance/seed-1.6.toml:1 - Check: Non-lab hosts must base_model the real underlying lab model; overrides may only express true host deltas. Why: Final mapping uses bytedance-seed/seed-1-6-vision (reasoning = false, vision SKU) then forces reasoning = true and reasoning_options = []. That invents a hybrid identity: lab description/dates/family come from the non-reasoning vision entry while the host claims a reasoner. Same-surface Vercel bytedance/seed-1.6 is a multimodal reasoner with toggle; lab already has bytedance-seed/seed-1-6 (reasoning = true, text-only). Action: Point base_model at bytedance-seed/seed-1-6 (or a complete multimodal-reasoning lab entry if that is the real SKU), keep only real host deltas (attachment/modalities/cost/reasoning_options), and stop re-enabling reasoning on the vision lab row.
  • [high] [possible mistake] providers/minirouter/models/mistral/ministral-8b.toml:1 - Check: base_model must identify the same lab model the host serves. Why: File points at mistral/ministral-8b-instruct-2410 (text-only, output 8_192) while overriding attachment = true, modalities.input = ["text","image"], context = 128_000, output = 4_000. Same-ID Vercel peer is text-only. Forcing vision onto the 2410 instruct lab identity looks like a wrong base or an uncatalogued multimodal SKU. Action: Verify the exact upstream model MiniRouter serves for this ID; if it is not 2410-instruct, add/use the correct lab entry. If it is 2410, drop the vision/attachment overrides or prove this host alone exposes image input for that model.
  • [medium] [violation] providers/minirouter/models/deepseek/deepseek-v3.1.toml:1 (and same pattern on other former toggle-only peers: deepseek-v3.1-terminus, moonshotai/kimi-k2.5, moonshotai/kimi-k2.6, minimax/minimax-m3, nvidia/nemotron-*, zai/glm-*, alibaba/qwen-3-14b, alibaba/qwen-3-30b, etc.) - Check: On multi-model relays, reasoning_options = [] means no caller control and must not be used from uncertainty when lab/same-surface peers expose controls (AGENTS.md Reasoning options; audit skill). Why: MiniRouter is an OpenAI-compatible gateway over the Vercel catalog. Vercel peers for these IDs advertise toggle (or toggle+budget). Final MiniRouter files set [] because the host rejects reasoning.enabled/enable_thinking, without documenting a remaining on/off path. For hybrid reasoners (e.g. DeepSeek V3.1), that drops the only peer control rather than mapping an admitted wire field. Graded-effort peers correctly keep levels (and often none); toggle-only peers lose enable/disable entirely. Action: For each former toggle peer, either (1) document and author the real MiniRouter off/on mapping that still works (e.g. reasoning.effort=none vs omit/default, or budget), matching lab/Vercel capability, or (2) keep [] only with host evidence that callers truly cannot control reasoning on that ID—not merely that one toggle field name is rejected.
  • [medium] [possible mistake] providers/minirouter/models/mistral/mistral-nemo.toml:1 - Check: Override-only base_model files must not invent modalities/metadata the host does not serve. Why: Final file still overrides description, release_date, knowledge, and modalities.input = ["text","image"] on lab mistral/mistral-nemo (text-only, open weights). Image input is not established on the lab entry and conflicts with open-weight Nemo instruct identity. Action: Confirm MiniRouter actually accepts images for this ID; if not, drop the modality/description/date overrides and inherit the lab row.
  • [low] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder-30b-a3b.toml:1 (also qwen3-coder-next.toml, qwen3-coder.toml) - Check: Provider reasoning overrides should be real host deltas, not copied peer mistakes. Why: Lab entries are reasoning = false; MiniRouter sets reasoning = true + [] “mirroring Vercel.” Vercel’s same-ID files are themselves full inline reasoners without lab base_model, so copying that does not prove MiniRouter (or the model) is a reasoner. Action: Confirm MiniRouter/catalog tags or live behavior show reasoning for these coder IDs; if not, drop the reasoning = true override and inherit lab false.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/poolside/laguna-s-2.1.toml:2 - Check: Relay reasoning_options must copy lab/same-surface peer controls the host can expose; [] means no caller control, not uncertainty. Why: Final file keeps reasoning_options = [] while the same-ID Vercel peer is toggle-only, MiniRouter admits reasoning.effort=none, and sibling MiniRouter toggle peers were restored to { type = "toggle" } with a wire comment. Callers cannot discover the off path. Action: Set reasoning_options to toggle (with a leading # Toggle: reasoning.effort=none … wire comment), matching other MiniRouter toggle-only entries.
  • [high] [violation] providers/minirouter/models/nvidia/nemotron-3.5-lightning.toml:4 - Check: Same relay reasoning-options rule as above. Why: Left as [] after the toggle restore pass; Vercel peer is toggle-only and other MiniRouter Nemotron entries now advertise toggle via reasoning.effort=none. Action: Restore toggle + leading wire comment, consistent with nemotron-3-nano-30b-a3b, nemotron-nano-9b-v2, etc.
  • [high] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:4 - Check: When peers expose toggle + budget and this host admits reasoning.effort=none, the relay must keep an off control (toggle, or effort including none with budget—not budget alone). Why: Final shape is budget-only after dropping effort=none; same-surface Vercel peer is toggle + budget_tokens, and MiniRouter’s own schema/docs accept reasoning.effort=none. Same broken pattern on the other budget-only MiniRouter files that still omit off: qwen-3-32b, qwen-3.6-max-preview, qwen3.5-flash, qwen3.6-27b, qwen3.6-plus, qwen3.7-max, qwen3.7-plus, claude-haiku-4.5, claude-opus-4.5, gemini-2.5-flash, gemini-2.5-flash-lite (and any other peer toggle+budget rows reduced to budget-only). Action: For each, restore the peer off path MiniRouter can wire (toggle + budget with a toggle wire comment, or effort values including none + budget—without pairing toggle with none in the same effort list).
  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder-next.toml:4 - Check: Host capability should match the upstream/same-ID peer when MiniRouter is a Vercel AI Gateway relay with the same model IDs. Why: These entries inherit lab reasoning = false (and drop host overrides), while providers/vercel/models/alibaba/qwen3-coder-next.toml (and the matching coder-30b / coder-480b Vercel rows) set reasoning = true with reasoning_options = []. If MiniRouter truly mirrors that catalog, the resolved MiniRouter models under-report reasoning. Action: Verify against MiniRouter/Vercel for qwen3-coder-next, qwen3-coder-30b-a3b, and qwen3-coder; if they are reasoning-capable on this path, set reasoning = true and reasoning_options = [] (or the real controls) on the provider files.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:1 - Check: Reasoning options must match this host’s real wire controls (AGENTS.md → Reasoning options / toggle rules). Why: Final provider.toml and file comments state MiniRouter’s off path is reasoning.effort=none (and on is omit/default). That is an effort control, not a separate boolean toggle field. Authoring type = "toggle" for that path mis-describes the API and will drive incorrect client request shaping. The same pattern is applied across the restored toggle-only set (e.g. qwen-3-30b, seed-1.6, deepseek-v3.1*, kimi-k2.5/kimi-k2.6, Nemotron, Xiaomi, ZAI GLM toggle peers, etc.) and toggle+budget peers (qwen3.5-*, claude-haiku-4.5, claude-opus-4.5, gemini-2.5-flash*). Action: For every model whose only off path is reasoning.effort=none, author effort with none (alone for binary off, or none plus the verified graded levels). Reserve type = "toggle" only for a distinct on/off wire field. Align provider.toml comments with that encoding.
  • [high] [violation] providers/minirouter/models/bytedance/seed-1.8.toml:1 - Check: Relay baseline = same-surface peer option set for this model. Why: Final MiniRouter entry is effort-only none|minimal|low|medium|high. The same-ID Vercel peer (MiniRouter’s default upstream) is toggle + minimal|low|medium|high (off not via none). After re-encoding MiniRouter’s admitted surface, either keep graded levels and represent off as none without inventing levels Vercel does not use, or document host-specific proof if MiniRouter truly drops the peer toggle while adding none. As authored, the control shape is neither the Vercel peer nor a clean lab mapping. Action: Re-baseline Seed 1.8 (and other toggle+graded Vercel peers such as Nova 2 Lite / Claude 4.6–4.8 / Fable 5 / GLM 5.2) to the peer graded set plus MiniRouter’s real off encoding; do not mix peer toggle semantics with an undocumented effort enum.
  • [medium] [possible mistake] providers/minirouter/models/spacexai/grok-4.3.toml:1 - Check: Relays must not use reasoning_options = [] when lab/peer expose caller controls and this host admits the same field. Why: MiniRouter admits reasoning.effort, and first-party xAI entries expose graded effort for Grok 4.3 (none|low|medium|high) and 4.5 (low|medium|high). Final MiniRouter files set [] (matching Vercel’s empty catalog rows). Empty means no caller control, not “catalog tag missing.” If the gateway forwards effort for these IDs, [] under-reports controls. Action: Verify whether MiniRouter/Vercel actually accept effort for spacexai/grok-4.3 and spacexai/grok-4.5; if yes, copy the lab/peer effort lists; if no, keep [] and cite host-level rejection evidence in a leading comment.
  • [medium] [possible mistake] providers/minirouter/models/deepseek/deepseek-v4-pro-0813.toml:1 - Check: DeepSeek V4 effort baseline is lab high|max (or same-surface peer), not an invented synonym set. Why: Final MiniRouter uses none|high|xhigh. Lab first-party is toggle + high|max; Vercel peer is toggle + high|xhigh. xhigh may be the gateway synonym for max, but shipping xhigh without max (and without documenting the mapping) can break clients that send lab-native max. Action: Confirm the values MiniRouter/Vercel accept for these IDs; author the verified set and, if xhigh is gateway-only, note the lab max mapping in a leading comment.
  • [low] [possible mistake] providers/minirouter/models/bytedance/seed-1.6.toml:1 - Check: Provider overrides of attachment/modalities must be complete and consistent. Why: The file sets attachment = true and comments claim image+text input as a host delta from text-only bytedance-seed/seed-1-6, but the inherited lab [modalities].input is ["text"] unless an explicit modalities override remains in the final file. Attachment without image/pdf input is internally inconsistent. Action: Ensure final Seed 1.6 (and Seed 1.8) keep a real [modalities] input = ["text", "image"] (or whatever the host catalog proves) alongside attachment = true, or drop the attachment override.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:5 - Check: Binary on/off reasoning controls must be authored as toggle (AGENTS.md → Reasoning options; audit skill §3). Why: Final encoding uses effort with only values = ["none"] (and the same shape on the other binary-off models in patch 25: Qwen 3.x, DeepSeek V3.1*, MiniMax M3, Kimi K2.5/2.6, Nemotron, Laguna, MiMo, GLM toggle-only rows, etc.). That is not a valid schema shape for binary control: effort is for graded levels (optionally including none beside other values); binary on/off is toggle, with the wire path in a leading comment. Same-ID Vercel peers correctly use toggle for these IDs. Clients that key off toggle will miss the off control. Action: For every binary-off MiniRouter model, replace effort = ["none"] with { type = "toggle" } and a top-of-file wire comment such as # Toggle: reasoning.effort=none (off); omit reasoning (on). Keep effort only when there are graded levels (with none in that list when off is effort-based).
  • [medium] [violation] providers/minirouter/models/alibaba/qwen3.5-plus.toml:7 - Check: Separate on/off + reasoning budget must be toggle + budget_tokens, not effort=["none"] + budget. Why: Final Qwen/Claude/Gemini budget rows (e.g. qwen3.5-plus, qwen-3-32b, qwen-3.6-max-preview, qwen3.6-*, qwen3.7-max/plus, claude-haiku-4.5, claude-opus-4.5, gemini-2.5-flash(-lite)) pair lone effort=["none"] with budget_tokens. Lab and Vercel peers for these IDs use toggle + budget_tokens. Action: Change the off control to toggle (with leading wire comment) and keep the existing budget_tokens bounds; do not leave effort with only none.
  • [low] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder-next.toml:5 - Check: Provider reasoning overrides vs lab metadata must reflect this host, not only an upstream peer. Why: Lab alibaba/qwen3-coder-next (and the 30B/480B coder labs) has reasoning = false, but MiniRouter forces reasoning = true + reasoning_options = [] citing the Vercel peer. That can be correct if MiniRouter/Vercel actually serve a reasoning path, but it contradicts the shared lab fact and the earlier frozen MiniRouter snapshot comments that omitted reasoning for these IDs. Action: Confirm on MiniRouter (or the frozen catalog) that these coder IDs are reasoning-capable with no controls; if not, drop the reasoning = true override and inherit the lab false.

@github-actions

Copy link
Copy Markdown
Contributor

I have enough context on the final reasoning shapes; checking a few remaining high-risk final-state details before writing the review.Checking DeepSeek V4 final options and whether any models still lack base_model.Inspecting final states for DeepSeek V4, Claude Opus 4, and remaining non-base_model entries.Checking lab reasoning flags and a few final peer mismatches that may still be blockers.Reading DeepSeek V4 and related final hunks.Checking lab metadata and final provider configuration against AGENTS requirements.Inspecting seed-1.8 and DeepSeek V4 evolution, plus whether graded models still pair toggle with none.Gathering final states for the remaining contested models.Verifying a few lab names and peer reasoning flags against final provider entries.Checking lab metadata and Vercel peers for remaining mismatches.## Action items

  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3.8-max.toml:1 - Check: Provider entries must point base_model at the correct shared lab identity. Why: This host id is qwen3.8-max but base_model is alibaba/qwen3.8-max-preview while models/alibaba/qwen3.8-max.toml also exists, so capabilities/limits may follow the preview row instead of the GA max row. Action: Confirm which lab identity MiniRouter actually serves for alibaba/qwen3.8-max; if it is the GA model, set base_model = "alibaba/qwen3.8-max" and keep only real host deltas.
  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder.toml:1 - Check: Relay reasoning capability should match this host’s real surface and same-ID peers, not an under-specified catalog tag alone. Why: Final files drop reasoning/reasoning_options so these IDs inherit non-reasoning lab metadata, while the same-ID Vercel peer (MiniRouter’s stated upstream) treats the coder IDs as reasoning models with reasoning_options = [] (always-on / no caller control). Mis-tagging hides reasoning behavior for clients. Action: Verify live MiniRouter/Vercel behavior for qwen3-coder, qwen3-coder-next, and qwen3-coder-30b-a3b; if they reason, set reasoning = true and author the correct host controls ([] only if there is truly no caller control).
  • [medium] [violation] providers/minirouter/models/alibaba/qwen-3-30b.toml:3 - Check: After base_model, provider files must be override-only (no restated identical lab fields). Why: Final entries still restate name (and in other files description / unchanged capability flags) beside base_model even when those values are the shared lab defaults, which breaks the override-only rule and drifts from lab metadata over time. Same pattern appears on multiple MiniRouter rows (e.g. Haiku/Opus display names, DeepSeek descriptions). Action: Diff each base_model file against its lab target and delete fields that are identical after merge; keep only cost, reasoning_options, interleaved, status, and genuine host deltas.
  • [low] [possible mistake] providers/minirouter/models/deepseek/deepseek-v3.2.toml:1 - Check: Provider overrides of reasoning / tool_call must reflect this host, not an accidental inverse of the lab row. Why: The entry forces reasoning = false and tool_call = false on deepseek/deepseek-v3.2 while a separate deepseek-v3.2-thinking id exists; if MiniRouter’s non-suffix id is still the hybrid/toggle model (as on first-party/peers), these overrides are wrong. Action: Confirm MiniRouter’s deepseek/deepseek-v3.2 request surface; remove the false overrides if the id still supports reasoning and/or tools, or document the host-specific non-reasoning pin in a leading comment with evidence.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/provider.toml:13 - Check: Reasoning options — when off is reasoning.effort=none, author effort with none, not toggle. Why: The provider header and dozens of model files encode binary off as type = "toggle" while documenting the wire path as reasoning.effort=none (on = omit reasoning). AGENTS.md / the reasoning audit skill require that shape to be effort with none in values (alone, or beside graded levels/budget). toggle is only for a separate on/off request field. This mislabels the control surface for clients. Action: Revert the patch-26 toggle encoding: set binary-off models to reasoning_options = [{ type = "effort", values = ["none"] }]; for budget/graded peers use effort including none plus those controls, with no toggle. Update the provider.toml comment to match.
  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:1 - Check: Same effort-vs-toggle rule on all MiniRouter models whose header is Toggle: reasoning.effort=none. Why: Representative of the systematic set (Qwen 3.x toggle/budget rows, Claude Haiku/Opus 4.5, DeepSeek V3.1*, MiniMax M3, Moonshot K2.5/K2.6, Nemotron*, Xiaomi MiMo*, ZAI GLM*, Poolside Laguna, Seed 1.6, etc.). Each advertises toggle for an effort-value off path. Action: Replace those toggle entries with effort/none (and keep budget/graded values where already verified); keep leading comments as exact wire docs for reasoning.effort.
  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder-next.toml:1 - Check: Relay reasoning capability vs same-ID Vercel peer / lab base_model. Why: Final files drop host reasoning = true and inherit lab reasoning = false for qwen3-coder-next, qwen3-coder-30b-a3b, and qwen3-coder, while providers/vercel/models/alibaba/qwen3-coder*.toml mark the same IDs reasoning = true with reasoning_options = []. MiniRouter is described as a Vercel AI Gateway catalog relay; inheriting non-reasoning understates the peer surface unless this host truly never reasons. Action: Verify live/frozen MiniRouter behavior for these IDs. If they reason like the Vercel peer, set reasoning = true and reasoning_options = [] (with a short source comment). If they truly never reason, keep lab inheritance and cite host evidence that contradicts the Vercel peer.
  • [medium] [possible mistake] providers/minirouter/models/bytedance/seed-1.6.toml:1 - Check: Multimodal host vs text-only base_model. Why: Host sets attachment = true and [modalities].input = ["text", "image"] on base_model = "bytedance-seed/seed-1-6" (lab is text-only). A vision lab identity bytedance-seed/seed-1-6-vision exists; the PR briefly pointed there then reverted. Same pattern on seed-1.8 (text lab + image override). Action: Confirm whether MiniRouter’s Seed 1.6/1.8 IDs are the vision/reasoning variants. If yes, point base_model at the correct lab identity (or extend lab metadata) and keep only true host deltas; if text-only, drop the image/attachment overrides.
  • [low] [possible mistake] providers/minirouter/models/spacexai/grok-4.3.toml:1 - Check: Relay baseline = lab + same-surface peers. Why: Final Grok 4.3/4.5 restore first-party xAI effort lists, but the same-ID Vercel peers use reasoning_options = []. If MiniRouter only forwards the Vercel path and does not honor reasoning.effort for these IDs, the graded lists overstate caller control. Action: Confirm MiniRouter actually applies effort for these Grok IDs; if not, match the Vercel peer [] (always-on / no control).

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/minirouter/models/alibaba/qwen-3-14b.toml:1 - Check: Binary on/off reasoning must be authored as toggle (with a leading wire comment), not effort containing only none (AGENTS.md → Reasoning options; audit skill §3). Why: Final patch encodes dozens of binary MiniRouter off-paths as reasoning_options = [{ type = "effort", values = ["none"] }] (and the same shape on Qwen/Claude/Gemini budget models as effort=["none"] + budget_tokens). That is not a valid control shape: effort with only none does not describe graded levels, and binary on/off is defined as toggle. Same-surface peers (providers/vercel/... for Kimi K2.5, GLM, Qwen3.5 Plus, Claude Haiku 4.5, etc.) and lab entries use toggle (plus budget where applicable). Consumers will mis-handle off/on. Action: For every binary off model, restore [[reasoning_options]] type = "toggle" with a top-of-file comment such as # Toggle: reasoning.effort = none (off); omit reasoning (on). For toggle+budget models (Qwen 3.5/3.6/3.7, Claude Haiku/Opus 4.5, Gemini 2.5 Flash/Lite, etc.), use toggle + budget_tokens only—do not keep a lone effort=["none"] entry. Keep effort lists that include none together with real graded values (e.g. Claude 4.6/4.7/4.8, DeepSeek V4, Seed 1.8, GPT) as effort-only (no toggle). Update providers/minirouter/provider.toml so it no longer documents binary off as effort=[none].
  • [medium] [possible mistake] providers/minirouter/models/alibaba/qwen3-coder-next.toml:1 - Check: Relay reasoning / reasoning_options must follow lab + same-surface peers unless this host affirmatively lacks the capability (AGENTS.md → Reasoning options §2.4; audit skill anti-pattern “[] / no control from uncertainty”). Why: Final files for qwen3-coder, qwen3-coder-next, and qwen3-coder-30b-a3b inherit lab reasoning = false and drop controls, while the same-ID Vercel peers set reasoning = true with reasoning_options = [] (always-on / no caller control). MiniRouter is described as a Vercel AI Gateway catalog relay; catalog tag absence alone is weak proof that the upstream reasoner is non-reasoning. Action: Align with the Vercel peer (reasoning = true, reasoning_options = []) unless you can show MiniRouter does not forward a reasoning model for these IDs (not merely that the OpenAPI tag list omits reasoning). If host truly strips reasoning, keep reasoning = false and state that stronger evidence in the leading comment.

@github-actions

Copy link
Copy Markdown
Contributor

No actionable findings.

@github-actions github-actions Bot added the reviewer: ready Automated review found no actionable items label Aug 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

reviewer: ready Automated review found no actionable items

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant