* feat(sync): auto-resolve EmpirioLabs models from canonical metadata
The EmpirioLabs adapter only tried a few family prefixes, so models
with existing lab TOMLs were skipped. Resolve via family prefixes,
version-dot slugs, unique filenames, and dated/version suffixes.
Treat EmpirioLabs as a reviewed reasoning provider so hourly syncs
can auto-merge factored catalog updates.
* fix(sync): use mistralai prefix for EmpirioLabs Mistral ids
* test(sync): stop asserting qwen3-8-27b has no canonical
* fix(cloudflare-ai-gateway): trim new providers to Cloudflare's priced model catalog
* fix(cloudflare-ai-gateway): remove google-ai-studio and grok entries unusable on the unified endpoint
Adds 14 Abacus RouteLLM provider entries that were present in the live https://routellm.abacus.ai/v1/models endpoint but missing from the repo.
All entries use existing lab metadata via base_model and override only provider-specific cost, context/output limits, and modalities per Abacus API values.
Validation: bun validate passes.
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
* fix(cloudflare-ai-gateway): align reasoning effort options with first-party catalogs
* fix(cloudflare-ai-gateway): use budget_tokens for pre-effort Claude models
The issue-fixer pipeline brought Ofox to full listing (72 models) after
trackMissingModels was enabled — this PR is rebuilt on top of that to
cover only what automation could not author:
- 4 models the pipeline missed: gemini-3.5-flash-lite, minimax-m2.7,
kimi-k2.7-code, gpt-5.4-pro (flat-rate comment included)
- [provider] native gemini protocol for the four Gemini models
(@ai-sdk/google + https://api.ofox.ai/gemini/v1beta, verified
end-to-end: listing, generateContent, SSE, x-goog-api-key auth)
- kimi-k3: replace the effort-only declaration with the behaviorally
verified toggle (reasoning_tokens 118 vs none; adaptive rejected by
the host; neither effort path shows graded effect)
- gemini-3.6-flash: add input_audio = 1.5 (matches live catalog and
first-party)
Co-authored-by: celeste1900 <caojingmiao@meiqia.com>
* Add Crusoe provider
* Remove pricing; add Nemotron-3-Ultra-550B
* Address review: declare reasoning_options, theme-adaptive logo
- Add reasoning_options = [] to the 12 reasoning-model TOMLs: Crusoe's
OpenAI-compatible endpoint documents no caller-side reasoning controls
(docs.crusoecloud.com defers to the generic OpenAI API reference), so
an empty declaration is correct per the validate schema.
- logo.svg: drop fixed width/height, use fill="currentColor" so the
wordmark adapts to light/dark themes.
bun validate passes locally.
* Move reasoning_options rationale comments above first key
* Restore trailing newlines in reasoning-model TOMLs
* fix(crusoe): set reasoning config from live endpoint probe
Probed api.inference.crusoecloud.com on 2026-08-13 with reasoning_effort
low/medium/high/none/max plus tool-call interleaving checks per model.
- gpt-oss-120b: effort low/medium/high (reasoning length scales; none/max
return 400), interleaved with tool calls
- GLM-5.2, Kimi-K2.6, Nemotron-3-Nano-Omni-Reasoning: toggle (effort
"none" disables reasoning; low/medium/high inert), interleaved
- GLM-5.1: reasoning always on, no working caller-side control
- Reasoning arrives in the message field named "reasoning", so the
boolean interleaved form is used
- Drop reasoning_options = [] from non-reasoning models
- Remove six models whose IDs drifted from the live /v1/models catalog
or whose reasoning deployment is unverified; follow-up will re-add
* fix(crusoe): gemma-4-31b-it reasoning toggle
Base model has reasoning = true so reasoning_options is required by the
schema. Probe shows reasoning_effort acts as an enable/disable toggle on
this deployment (off by default, "none" disables, other values enable).
* feat(crusoe): add per-model pricing
Source: https://www.crusoe.ai/cloud/pricing (accessed 2026-08-13).
Input, output, and cached-read rates per million tokens for all eight
models. Nemotron Omni carries a separate audio input rate (0.50) via
cost.input_audio; its text/image/video input rate is 0.30.
* Add Inceptron provider sync module
* Require review for Inceptron reasoning sync changes
Inceptron's models_dev reasoning metadata is provider-authored and is not independently constrained to reviewed lab or peer baselines. Keep it outside the reasoning auto-merge allowlist and assert that changes to its reasoning metadata require manual review.
* feat: DeepSeek-V4-Flash-0731, GLM-5.2-NVFP4 and Kimi-K2.7-Code for provider Hetzner
* fix: reasoning_options for deepseek, glm, and remove limits for kimi k2.7
* chore: remove redundant kimi k2.7 output modality
* feat(models): add Meta Muse Glimmer 30B lab metadata
Add the lab model so OpenRouter, Vercel, Kilo, and other hosts can
base_model onto meta/muse-glimmer-30b instead of shipping standalone
copies.
* fix: map Muse Glimmer hosts onto the Meta lab model
Factor OpenRouter and Vercel onto base_model = meta/muse-glimmer-30b
and keep only host cost plus the documented low/medium/high/xhigh
reasoning_effort controls.
The logo declared only a viewBox, so consumers that size an <img> from the
SVG's intrinsic dimensions rendered nothing and fell back to a placeholder
icon (visible in OpenCode's provider list). Adding width/height scales the
existing artwork into the same 24x24 box every other provider logo uses;
the viewBox does the scaling, so the art is unchanged.
The provider.toml comment said request-side reasoning control was not
declared because local serving rejected it. That stopped being true when
the gateway normalized the reasoning field, and the model entries have
declared reasoning_options (toggle + effort) since then, so the note now
contradicts the data next to it. Re-verified against the live API today:
reasoning {effort} and {enabled: false} both behave as declared on
glm-5.2-fp4, gpt-oss-120b and kimi-k3.
* provider: add CoralBricks (OpenAI-compatible gateway)
Adds CoralBricks (https://inference.coralbricks.ai/v1) with four hosted
models referencing existing lab entries: zhipuai/glm-5.2 (as glm-5.2-fp4,
1M ctx), moonshotai/kimi-k2.6, moonshotai/kimi-k3, openai/gpt-oss-120b.
Reasoning toggle verified against the live endpoint. bun validate passes.
* review: currentColor logo, interleaved=true, affirmative reasoning audit
- logo.svg rebuilt from brand source: currentColor, square viewBox, no
fixed size or hardcoded colors
- interleaved = true on all four reasoning models (side channel streams
via a 'reasoning' delta field, name not in the field enum)
- reasoning_options = []: live-tested reasoning.effort low/high — honored
on the gateway's vendor-relay path (e.g. gpt-oss 68 vs 248 reasoning
tokens) but rejected with 400 by its local-serving path, so no
request-side control is declared until the gateway normalizes it
* review: omit cost during design-partner phase; name GLM FP4 variant
Costs are deliberately omitted while pricing is in a design-partner
phase and subject to change; a follow-up PR adds [cost] at GA (schema
allows omission). glm-5.2-fp4 gets a display-name override so UIs show
the FP4 serving variant.
* review: restore [cost] with published rates; cache_read = 0
Maintainer asked for cost to always be authored. Real published rates
rather than zeroes (zeroed costs render as free in consumers).
cache_read = 0 is accurate: cached input tokens are not billed.
* chore: drop kimi-k2.6 (model deprecated on CoralBricks)
* coralbricks: update published input rates (GLM $1.12, GPT-OSS $0.12)
* coralbricks: declare reasoning + effort/toggle options (glm effort verified end-to-end)
* feat(snowflake-cortex): add Claude Opus 5, Sonnet 5, Opus 4.6 and Opus 4.5
* fix(snowflake-cortex): align Claude reasoning_options with tested chat-completions surface
Verified against POST /api/v2/cortex/v1/chat/completions:
- Opus 5 / Sonnet 5: reasoning.effort and reasoning.max_tokens return 400.
reasoning_effort, output_config.effort and thinking.type return 200 but are
ignored (reasoning_effort=bogus_zzz also returns 200) and never produce
reasoning_details, so no caller control is exposed -> [].
- Opus 4.6 / 4.5: reasoning.max_tokens is the only field that actually engages
thinking (sole case returning reasoning_details) -> budget_tokens. Effort
values are not read (effort=bogus_zzz behaves identically), and max_tokens=100
is accepted, so no effort enum and no min bound.
The Gateway catalog emits capabilities.reasoning = null on some routes
even when supports_reasoning is true. Treat null like a missing object
so sync does not crash while deriving reasoning_options.
Synthetic's inference backend rejects inputs above 365,178 tokens
("Input length (369084 tokens) exceeds the maximum allowed length
(365178 tokens)") even though the docs and this TOML advertise a
524,288 context. Without an input override, opencode only compacts at
~504K and overruns the real cap, causing hard 400s on long sessions.
The 365,178 value comes from Synthetic's own error message; the
context field stays 524,288 as the nominal window advertised by the
model card.
* feat(nebius): add DeepSeek-V4-Flash
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(nebius): author DeepSeek-V4-Flash reasoning controls from the lab entry
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(nebius): verify DeepSeek-V4-Flash reasoning controls against the live API
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(nebius): set cache_read price for DeepSeek-V4-Flash
Nebius has no discounted prompt-cache tier, so cached input is billed at the
full input rate. Leaving cache_read unset makes downstream consumers treat it
as $0/M. Same reasoning as #3956 for Kimi-K3.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
* Update Kimi K3 reasoning options and add kimi-k3-fast to neuralwatt
Neuralwatt now exposes the full K3 reasoning surface: a per-request
thinking toggle and graded reasoning effort. The previous toggle-only
entry no longer matches the live API. Verified against the live API on
2026-08-05 and aligned with the first-party moonshotai baseline plus
~19 peer relays.
- models/moonshotai/kimi-k3.toml: fix base description (toggleable ->
configurable low/high/max effort)
- providers/neuralwatt/models/kimi-k3.toml: reasoning_options now
toggle (chat_template_kwargs.enable_thinking) + effort(low/high/max);
drop redundant inherited name. thinking_token_budget is documented but
rejected by the current vLLM V2 runner, so it is not declared.
- providers/neuralwatt/models/kimi-k3-fast.toml: add non-reasoning
variant (reasoning = false, same pricing)
* Revert unnecessary kimi-k3 lab description change
Address reviewer feedback on #4090: keep the lab model description as-is.
---------
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
* Neon: add kimi-k3, gemini-3-6-flash, gemini-3-5-flash-lite
* Neon: add the missing gpt-5-5-pro cost
The entry shipped without [cost] because no databricks provider entry exists for it and
the rule was to omit rather than publish an unsourceable rate. The rate is sourceable:
OpenAI's own gpt-5.5-pro entry has 30/180 with a 272k tier at 60/270, and Databricks'
published DBU rate for GPT 5.4/5.5 Pro reconciles to the same four numbers at the
$0.07/DBU rate every other neon entry already implies.
* feat(providers/azure): add Kimi K2.7 Code
* fix(providers/azure): inherit attachment from base model for kimi-k2.7-code
---------
Co-authored-by: Denis Kot <denis.kot@makersite.de>
Add solar-pro4 (alias of solar-pro4-260806, released 2026-08-06):
512K context, 128K max output, reasoning on by default with
none/minimal/low/medium/high/xhigh/max effort levels, tool calling
and structured outputs. Pricing $0.30/$1.20 per 1M tokens
($0.06 cached input). Specs from console.upstage.ai model catalog.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
* baseten: refresh reasoning_effort values from Baseten's docs
Baseten's reasoning page has grown a "Control reasoning depth" table since
these entries were written, and each entry's own comment cites that page. The
values there now differ from what we ship:
GLM 5.2 / GLM 5.2 Fast toggle -> none | high | max
OpenAI GPT 120B low | medium | high -> full none..max scale
DeepSeek V4 Pro low..xhigh -> full none..max scale
Kimi K3 no options -> none | low | high | max
The GLM 5.2 routes matter most: the docs state the endpoint returns a 400 for
any value outside its set, so describing them as a toggle both hides the two
depths that work and leaves a consumer no way to know the rest are rejected.
Every value above comes from the "Supported values" table on
https://docs.baseten.co/inference/model-apis/reasoning
* baseten: drop the inferred effort scale from DeepSeek V4 Flash 0731
This entry's own comment says the values were reached by "mirroring the
DeepSeek V4 Pro entry" rather than read from Baseten's docs, and the mirror
does not hold. V4 Flash is absent from the "Control reasoning depth" table,
and the reasoning page warns that models outside that table accept
reasoning_effort and ignore it, so the four values here describe a control
that does nothing.
The model matrix does list its reasoning as "Enabled by default", so it keeps
an empty reasoning_options: it reasons, with no addressable depth. Split from
the previous commit because this one drops values rather than citing them.
https://docs.baseten.co/inference/model-apis/overviewhttps://docs.baseten.co/inference/model-apis/reasoning
* fix(pioneer): filter API alias dupes, derive cost, honor base-model reasoning
Pioneer /v1/models returns each served model twice: once under its real
id and once under a duplicate "anthropic/pioneer/<id>" alias. Drop the
aliases so the sync no longer authors phantom "anthropic/pioneer/*" TOMLs.
Also derive cost from the API's per-1M-token prices for newly created
models (previously cost was only preserved from an existing file), and
trust the base model's authored reasoning flag instead of Pioneer's
boilerplate reasoning levels, which are identical for every model and
were wrongly marking non-reasoning models (e.g. Pixtral) as reasoning.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* feat(pioneer): add frontier and open models via base_model inheritance
Add 26 Pioneer models, each inheriting provider-agnostic facts through
base_model rather than duplicating them inline.
New model metadata entries:
- anthropic/claude-opus-5 (released 2026-07-24)
- alibaba/qwen2.5-coder-0.5b, alibaba/qwen3-235b-a22b-instruct-2507
- deepseek/deepseek-v3, deepseek/deepseek-v3.1
- meta/llama-3.2-1b, meta/llama-3.2-3b
- mistral/codestral-22b-v0.1, mistral/magistral-small-2506,
mistral/ministral-8b-instruct-2410
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix(qwen): set tool_call=false for Qwen2.5-Coder-0.5B base model
The served id and weights are the base (pretrained) checkpoint, not the
Instruct variant. The Qwen model card states base models are not
recommended for conversation and documents no tool/function calling, so
tool_call=true was inaccurate. Matches the Llama base entries in this PR.
---------
Co-authored-by: Samrath <samrath@Samraths-MacBook-Pro-6.local>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
The merge-gateway sync synthesized a bare reasoning toggle from
disable_supported and ignored reasoning.controls, so claude-opus-5 (newly
added, no curated reasoning_options) got a bare [[reasoning_options]] toggle
even though the route advertises a graded reasoning.effort control. The rest
of the Claude family carried toggle + effort because their options were
hand-authored; any future new model would regress the same way.
Map reasoning.controls into synthesized options: toggle when disable is
supported, plus effort when the route advertises effort and the API provides
effort_values. Author claude-opus-5's TOML to toggle + effort [low..max],
matching the family.
* feat(scx): add SCX.ai provider with coder and MiniMax-M2.7 models
* feat(scx): list gpt-oss-120b, correct MiniMax-M2.7, drop coder
Scope the SCX.ai provider to its coding models.
- add gpt-oss-120b (inherits openai/gpt-oss-120b)
- remove coder
- correct MiniMax-M2.7 limits and capabilities
Values verified against the live SCX API (/v1/models and
/v1/chat/completions) rather than documentation:
- MiniMax-M2.7 context 191_000 -> 192_000, output 8_000 -> 4_096
- both models accept reasoning_effort low/medium/high; the API
rejects any other value with 400, so reasoning_options is
declared as an effort enum instead of an empty list
- both return tool_calls and support json_mode, so
structured_output is set on MiniMax-M2.7
* fix(scx): compliant logo, correct MiniMax-M2.7 output limit
Address automated review feedback on the provider.
- logo.svg: re-export the SCX mark with a square viewBox and
currentColor, dropping the fixed width/height and the hardcoded
#262626 fill, per the logo guidelines in AGENTS.md
- MiniMax-M2.7: max output 4_096 -> 64_000
- move the reasoning_effort provenance notes out of the TOMLs and
into the PR description
* feat(scx): use square knockout icon for the provider logo
Replace the wordmark export with the SCX mark: a single path whose
letterforms are cut out with fill-rule="evenodd", so the glyphs read as
holes and the icon inverts correctly between light and dark themes.
- square viewBox (0 0 512 512), no fixed width/height
- fill="currentColor", no hardcoded brand colours
- letterforms taken from the official brand SVG rather than traced
* feat(scx): add USD pricing for both models
Cost is USD per 1M tokens, matching the SCX rates already carried in
theopenco/llmgateway so the two registries stay consistent.
- MiniMax-M2.7: 0.48 in / 1.79 out / 0.05 cache read
- gpt-oss-120b: 0.17 in / 0.55 out
Source citations live in a leading header block in each file, since the
daily model sync discards comments placed anywhere else.
* feat: add infomaniak provider with 10 models
* fix: correct infomaniak reasoning options after live API testing
Verified each reasoning model against the live Infomaniak API:
- reasoning text is returned in `message.reasoning`, so use `interleaved = true`
instead of the non-existent `field = "reasoning_content"`
- gemma-4-31B-it ignores `reasoning_effort` and never emits reasoning, so drop
its reasoning_options/interleaved and set `reasoning = false`
- Mistral-Small only accepts `none`/`high`; documented the per-model wire format
(reasoning_effort on/off) in comments above each reasoning_options
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: use INFOMANIAK_PRODUCT_ID env var to match Infomaniak API
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: promote infomaniak Qwen3.5 122B and Gemma 4 31B out of beta
Infomaniak announced that Qwen3.5 (122B), Gemma 4 (31B) and Mistral
Small 4 (119B) are no longer beta and are production-ready. Mistral
Small 4 already had no beta status, so drop `status = "beta"` from the
Qwen3.5 122B and Gemma 4 31B models and bump last_updated.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: add required description to standalone infomaniak models
The schema now requires a non-empty `description` on every model. The
six base_model references inherit it from their base model, but the four
standalone models (two embeddings, Ministral 3, Apertus 70B) need their
own. Add descriptions following the repo's existing conventions.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* fix: refresh infomaniak pricing, reasoning support, and model identities
Corrects USD pricing to match Infomaniak's CHF-billed rates, fixes reasoning
support flags for gemma-4-31B-it and Mistral-Small (no verified toggle), and
renames models to match their actual upstream identities: MiniLM entry was
mislabeled as the multilingual 117M variant instead of the English-only 33M
one actually served, and Apertus 70B is replaced by the v1.5 release. Also
corrects Kimi-K2.6 modalities (image, no video) and MiniLM's context limit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
* fix: align infomaniak data with live catalog and source every claim
Verified all ten model ids case-by-case against Infomaniak's pricing page,
open-source-models catalog and GET /1/ai/models; all match exactly and are
unchanged.
Data corrections:
- gemma-4-31B-it is served text-only ("Text-to-Text" in both the EN and FR
catalog), so override attachment=false and modalities.input=["text"] instead
of inheriting image input from the base model
- bge_multilingual_gemma2 input cap is 8'000, not 8'192 (catalog row and the
API's own max_token_input)
- drop the unsourced limit.output overrides on Qwen3.5-122B and gemma-4-31B-it
so both inherit from base_model, matching the Qwen3.5-397B sibling
- Ministral-3-14B release_date 2025-12-15 -> 2025-12-02 (repo majority for this
model); bge release_date 2024-07-30 -> 2024-07-25 (Hugging Face createdAt)
- provider.toml doc pointed at the French marketing landing page; the schema
wants a page where models are listed
Claim corrections:
- Mistral-Small-4 claimed the live probe confirmed Infomaniak's docs. It does
not: the docs say thinking is unsupported, the probe found thinking on by
default and returned in message.reasoning. Only the reasoning_effort
parameter itself is unsupported. Pin `mistral3` to the model's transformers
model_type, which is what makes the exclusion apply.
- MiniLM identity rested on the "based on a Microsoft model" blurb, which does
not discriminate (both candidates descend from a Microsoft MiniLM). Cite
Infomaniak's "Parameters 33 M" spec row instead.
- label the two forced limit.output estimates (Apertus, Ministral) as estimates
- note that Nemotron's published 1M input cap exceeds its native window
Per AGENTS.md, move every comment into a single top-of-file block (five files
had reasoning notes below the first key) and add the exact reasoning_effort
wire syntax next to each toggle.
bun validate passes.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Publish GreenPT cached-token rates and refresh prices
GreenPT now bills prompt-cache hits at a reduced input rate on these models, so
each gains cost.cache_read. Cache writes are not charged, so cost.cache_write is
omitted rather than set to zero.
glm-5.2 cache_read 0.3135
kimi-k2.6 cache_read 0.2508
kimi-k2.7-code cache_read 0.1881
minimax-m2.5 cache_read 0.0627
The same pass also picks up list-price corrections: kimi-k2.6 moves to
0.7524 / 4.275, kimi-k2.7-code input to 0.9006, and minimax-m2.5 input to
0.1938. glm-5.2's own prices are unchanged.
Rates: https://docs.greenpt.ai/prompt-caching and https://docs.greenpt.ai/pricing
* Add kimi-k3 to GreenPT
Kimi K3 is generally available on GreenPT at 3.762 input, 18.81 output and
0.9405 for cached prompt tokens. GreenPT serves it with text and image input,
so the inherited video modality is overridden away.
https://docs.greenpt.ai/model-cards
* Add the nine GreenPT glm-5.2 compression variants
GreenPT serves nine ids that are glm-5.2 carrying a built-in output-compression
ruleset: three families (caveman compresses prose, ponytail compresses generated
code, honey compresses both) at three intensities (-lite, unsuffixed, -ultra).
They are the same upstream model at the same price per token, including the same
cached rate, and return fewer output tokens. Each is declared through base_model
so cost and limits cannot drift from glm-5.2.
https://docs.greenpt.ai/compression-models
* Mark GreenPT kimi-k2.6-fast as deprecated
The upstream provider withdrew this model and GreenPT no longer serves the id,
so requests for it now fail. Marked deprecated rather than deleted so existing
configurations still resolve against the catalog.
* Mark GreenPT glm-5.1 as deprecated
The id is still advertised by /v1/models but every request for it returns 404
from production, so it is not servable. Marked deprecated rather than deleted,
matching how kimi-k2.6-fast is handled here.
* Declare the reasoning_effort values each GreenPT model accepts
Replaces the blanket reasoning_options = [] with the values each endpoint
actually accepts, established by sending every documented value to every model
on the production API.
The sets are not uniform, which is why the previous blanket declaration was
wrong in both directions:
none, minimal, low, medium, high glm-5.2 and its nine compression variants,
kimi-k3, kimi-k2.6, kimi-k2.7-code,
minimax-m2.5, qwen3.5-397b, qwen3.6-35b,
gemma4
low, medium, high green-r, green-r-raw, gpt-oss-120b,
holo2-30b-a3b (none and minimal return 400)
none, high mistral-medium-3.5-128b (minimal, low and
medium return 400)
This also corrects green-r and green-r-raw, which previously advertised none and
minimal even though both are rejected.
On glm-5.2 and its variants the control is observable, not just accepted:
reasoning_effort "none" takes the reported reasoning tokens to zero.
* Add deepseek-v4-flash-0731 to GreenPT
Generally available on GreenPT at 0.1596 input, 0.399 output and 0.0456 for
cached prompt tokens, with the 1M context inherited from the base model. It
accepts the full reasoning_effort value set.
https://docs.greenpt.ai/model-cards
* Date deepseek-v4-flash-0731 to its own snapshot
The id is the 2026-07-31 snapshot, so inheriting the base model's 2026-04-24
release and update dates would have shown the wrong dates for this endpoint.
The remaining inherited fields were checked against production: structured
output and tool calling both work, and the 1M context matches the published
model card. attachment stays false, since the model card lists no vision
capability.
* feat(requesty): provider sync script to get models from /v1/models/managed
Requesty has "managed" models, which are provider agnostic.
* feat(requesty): syncing all models from requesty
* umans-ai + coding-plan: add Kimi K3 (prerelease)
* umans-ai + coding-plan: k3 is released — drop beta status
Pay-per-token pricing ($3.00/$15.00/$0.30 per 1M) is effective on the
umans-ai provider from 2026-07-31; the coding-plan entry stays zeroed per
the flat-fee subscription convention. Stable = no status field, matching
the sibling models.
* umans-ai + coding-plan: add DeepSeek V4 Flash (pay-per-token release)
umans-deepseek-v4-flash-0731 joins the lineup at DeepSeek first-party
list pricing ($0.14 / $0.28 / $0.0028 per Mtok) — served from the
official DeepSeek-V4-Flash-0731 release on Umans AI's own GPU
infrastructure, 1M context, think-low default (levels none/low/high/max,
the 0731 vocabulary — unlike the first-party API's high|max surface).
* umans-ai + coding-plan: leading wire-path comments on reasoning toggles (AGENTS.md)
* umans-ai: deepseek v4 flash cost is the public rate ($0.14/$0.28/$0.028)
* umans-ai + coding-plan: reviewer nits — comments to file tops, drop redundant name override + zeroed-cost notes
* umans-ai + coding-plan: document the cap-1 limit.output choice on v4 flash
* fix(chutes): declare reasoning toggles instead of empty options
Every Chutes model with `reasoning = true` carried
`reasoning_options = []`, which asserts that the host exposes no
caller-facing reasoning control. That is not the case: Chutes serves
these models on vLLM and forwards `chat_template_kwargs`, so the
underlying chat templates' thinking switches are reachable over the
wire.
Ten models are switched to `[{ type = "toggle" }]`; each one is
verified twice, against the model's published chat template and
against a live request to this host. `Qwen3-235B-A22B-Thinking-2507-TEE`
keeps `[]`: its chat template exposes no thinking switch and the live
request confirms reasoning cannot be turned off.
* fix(chutes): keep authored reasoning options across sync
The toggles added in the previous commit were not durable. `buildChutesModel`
always emitted `reasoning_options: []`, and `preserveReasoningOptions` returns
early whenever the synced model defines the field at all, so the branch that
restores authored options was unreachable for this provider. The next
`bun chutes:sync` would have reset all ten models to an empty list.
Leaving the field unset in the sync restores the intended behaviour: authored
options are preserved, and reasoners with no entry yet still default to `[]`.
Verified by running `bun chutes:sync` against the live endpoint with the
toggles in place — 13 unchanged, all ten toggles intact.
The provider header and sync notes both still claimed Chutes exposes no
caller-facing reasoning control, which contradicted the model files. Both now
document the verified `chat_template_kwargs` paths and record that the control
is authored per model rather than derived from `/v1/models`.
Sync existing Ofox TOMLs from the public catalog API
(https://api.ofox.ai/v1/models/catalog). Conservative scope:
- skipCreates + trackMissingModels=false: the Ofox listing here is a
curated subset, so new models keep entering via hand-authored PRs
- deleteMissing=false with a notice: delisted models get flagged for
manual deprecation review instead of silent removal
- catalog is treated as authoritative for cost and deprecation status
only; base_model inheritance, reasoning_options, and per-model
[provider] protocol overrides are preserved as authored
Co-authored-by: celeste1900 <caojingmiao@meiqia.com>
Anthropic removed temperature/top_p/top_k on Opus 4.7 and later, Sonnet 5
and Fable 5 -- sending them returns a 400. Ten provider entries still
advertise temperature support for those models.
Eight of them declare base_model pointing at a lab entry that already says
temperature = false, then override it back to true; per AGENTS.md a provider
entry should carry only real overrides, so those lines are dropped and the
lab value is inherited. The two standalone entries state false explicitly.
Co-authored-by: Asjad Abbas <215788583+asjad3@users.noreply.github.com>
* fix(sync): harden DigitalOcean catalog translation
Stop incomplete DO catalog rows from corrupting curated model data:
- map mimo-* IDs to xiaomi base metadata
- only treat thinking=true as authoritative reasoning (not bare efforts)
- merge effort lists so incomplete remote values cannot drop none/xhigh
- normalize x-high → xhigh
- union modalities with authored data; skip text-only overrides on base models
- keep beta status for Public Preview names
* fix(sync): preserve DigitalOcean modality overrides
* fix(sync): prefer DigitalOcean catalog metadata
* fix(sync): fall back on empty reasoning efforts
* fix(sync): respect DigitalOcean modality removals
* Add Impossibl provider
Impossibl (https://impossibl.com) is an OpenAI-compatible AI gateway,
served via @ai-sdk/openai-compatible at https://api.impossibl.com/v1.
Adds provider.toml, logo, and 76 model entries generated from the live
api.impossibl.com/v1/models catalog. Each entry inherits metadata via
base_model and carries Impossibl's serving price (USD / 1M tokens); no
limit/modalities overrides (the gateway serves the base metadata's).
reasoning_options are effort-only (the OpenAI-compatible /v1/chat/completions
surface exposes only reasoning_effort), with per-model value subsets taken
from each model's canonical metadata intersected with the gateway's accepted
set, or [] where the model has no effort control on this surface.
14 served models are omitted for now — models.dev has no base metadata to
inherit from for them yet.
* Do not assert per-model reasoning_options for Impossibl
The published effort ladders were derived from which values the live gateway
accepted with HTTP 200. That measures the request validator of whichever
upstream happened to serve the probe, not the model: Fireworks validates against
a generic OpenAI-style enum, Azure Foundry ignores the field entirely, and the
gateway forwards reasoning_effort verbatim without per-model mapping. The same
GLM-5.2 therefore read as a five-rung ladder on one route and as no control at
all on another.
Replaces every asserted set with an empty one plus the reason, matching how
other gateway providers document an unverifiable control surface. Entries whose
base model has no reasoning at all keep no key.
* Give the Inkling entry its own served limits
models/thinkingmachines/inkling.toml omits limit.output because the served
output cap varies by host (16K on NVIDIA, 32K on Baseten, 256K on Vercel, 1M on
OpenRouter), so every provider entry supplies its own. This one did not, which
fails validation now that the base model has changed on dev.
Impossibl serves Inkling through Thinking Machines' own Tinker API, so their
published served limits apply verbatim: 65_536 both ways, matching the context
window the gateway itself records for this route.
* Move in-file rationale into the leading comment block
AGENTS.md: the daily model sync re-serializes provider TOMLs and discards every
comment except a leading header block, so rationale placed between keys is
silently deleted on the next sync. The reasoning_options justification sat
between base_model and reasoning_options in all 68 files, and the Inkling limit
note sat above [limit]; both would have been lost.
Also recites the Inkling limits against the gateway catalog and Tinker's own
docs rather than an in-repo path, since that path differs between this branch
and dev.
* Explain the Inkling route instead of reusing the generic rationale
Inkling is the one Impossibl entry with a fixed single upstream, so the generic
"whichever upstream serves the model" rationale did not fit it.
limit: the 64K window now cites the first-party Tinker entry in this repo, which
publishes the same 65_536/65_536 limits and the same 1.87/4.68/0.374 pricing.
Tinker's 256K window is a separately priced tier (Inkling:peft:262144, 3.74/9.36),
not this route.
reasoning_options: Tinker documents its effort control only on the
Anthropic-compatible surface (output_config.effort, thinking.type). Impossibl
reaches Tinker over the OpenAI-compatible endpoint, for which no control is
documented, so none is asserted — the same basis on which providers/nvidia
publishes an empty set.
* Match the Inkling route modalities to the first-party Tinker entry
The entry already aligns limits and cost with providers/thinkingmachines/models/
thinkingmachines/Inkling.toml on the grounds that it is the same Tinker tier, but
still inherited the base model's audio input. Tinker serves this route as
text+image, so advertising audio implied an input the route may reject.
* fix: derive reasoning_options from verified per-route behavior, correct pricing
reasoning_options was `[]` on all 68 reasoning entries; a maintainer was right that this
is wrong for essentially all of them. 59 of 68 now publish a verified control.
These are generated from our gateway's model registry rather than hand-authored, and a
`--check` mode fails on drift. A control is published only where the model's declared shape
and its verified REACH agree: reach is established by making the upstream do the rejecting,
so a 502/422 carrying its own error text proves the field was forwarded rather than dropped.
Where our enum and the upstream's coincide and no rejection is possible, reach is shown by
billed effect instead. Acceptance alone is never used as evidence.
Every verdict is taken on the route that actually serves the model, confirmed per attempt in
our request log. That distinction is load-bearing: `zai/glm-5.2` is answered by Azure Foundry
(which ignores reasoning fields) while its seven siblings are answered by Z.ai, so one GLM
entry is `[]` and seven publish a toggle. An earlier draft had this backwards, having
measured Z.ai's own API rather than the route we use.
Also corrects three classes of pricing error found by diffing every entry against the
catalog the PR cites:
- `gpt-5.6-luna` was published at 5x the billed rate; `gpt-5.6-terra` carried a copied
`gpt-5.4` cost block.
- `gpt-5.6-sol` omitted `cache_write` entirely.
- 11 entries published flat pricing for models the catalog bills in a higher bracket above a
per-model input threshold, understating long-context requests by up to 2x.
Provider `doc` now points at the public models-and-pricing listing rather than the site root,
and the shared rationale lives in one leading comment block on provider.toml.
* fix: fireworks/glm-5.2 has no verified effort control
Fireworks does validate `reasoning_effort` for this model id — it enumerates its own enum in
a 502 for `minimal` — so the value genuinely reaches the upstream. But validation is not a
control, and this entry was published on that basis alone while Z.ai and Qwen were held to a
stricter standard.
Measured per rung through the gateway on a short-answer prompt, where output length is the
reasoning signal: output swings 121-275 tokens WITHIN the same rung, with no ordering across
rungs and no reasoning content at any level. No rung is distinguishable, so there is nothing
meaningful to advertise.
Both `glm-5.2` entries are now `[]`, for opposite reasons: the Fireworks route validates but
has no effect, and the Z.ai-namespaced route is served by Azure Foundry, which ignores the
field entirely.
* chore: keep the provider files data-only
The generated header on provider.toml was carrying material that has no business in another
project's repository: our internal source-file and tooling names, which upstream serves which
model, raw probe transcripts, and — worst — a description of an unfixed defect in our own
product. None of that is data about the models.
Evidence for the published values belongs in the PR conversation, where a reviewer can weigh
it, not in a committed data file. The audit guide says the same: "Put citations in the PR
body, not TOML comments."
Per-option `# API:` comments stay, trimmed to the bare request payload, matching the example
AGENTS.md gives for exactly this purpose. They document the public request syntax a caller
sends, which is not obvious for the controls that are not OpenAI's `reasoning_effort`.
* chore: justify the Inkling overrides from our own catalog, not from routing
The limit and modality overrides were explained by naming the upstream that serves this
model. That is routing detail, and it does not belong in another project's repository.
Our own public catalog reports this model's served context window (65_536), its input
modalities (text+image) and its prices directly, so it justifies every overridden value on
its own terms — the base model's 1_048_576 window and audio input are simply not what is
served here. No upstream needs naming for that to be checkable.
* Revert "chore: justify the Inkling overrides from our own catalog, not from routing"
This reverts commit 71598cbd14e7622735f1c84ded3dafccaab9dc20.
* feat(mistral): add Voxtral audio models
Mistral ships a full audio line that the catalog does not cover yet:
transcription, text-to-speech and an instruct model with native audio input.
- voxtral-mini-latest: audio to text transcription
- voxtral-mini-tts-latest: text to audio, zero-shot voice cloning, 9 languages
- voxtral-small-latest: audio+text to text, tool calling, 32k context
The two first ones intentionally omit the [cost] block: transcription bills per
MINUTE of audio (\$0.003/min) and synthesis per CHARACTER (\$16 per 1M chars),
neither of which the token-based schema models. Same treatment as the existing
Whisper entries, e.g. providers/groq/models/whisper-large-v3-turbo.toml.
Voxtral Small does carry token pricing for its text side; its audio input bills
per minute (\$0.004) and is documented in the file header.
Sources are cited as a leading comment block in each file, per AGENTS.md.
Validated with bun validate.
* fix(mistral): align Voxtral Mini entries with the live API ids
voxtral-mini-latest resolves to voxtral-mini-2602, not the 25-07
Transcribe card the entry was named and dated after. Date the entry on
the revision it points at, matching mistral-small-latest, and drop the
product word absent from the API id. Note the Bedrock Voxtral Mini 3B
entry as a distinct product surface to prevent the same confusion.
Name the TTS entry after its own id for consistency.
* fix(modelis): declare reasoning_options per model from measurements
Follow-up to #3932. That PR landed with the same six-value effort list on
all nine models; the review bot was right that this is over-broad, and
re-measuring showed it is also incomplete.
Measured one control at a time against the live endpoint:
- effort kept only where the levels measurably change reasoning
(Claude x3, Gemini x2). Dropped on both DeepSeek and both Qwen models,
which accept every value and return 200 but do not change behaviour.
- toggle added where both states are caller-reachable. The mechanism
differs by family: reasoning.enabled for Claude/Gemini/Qwen, and
reasoning_effort "none" for DeepSeek, which ignores reasoning.enabled.
- budget_tokens added where reasoning_tokens tracks the requested budget
(Gemini x2, Qwen x2). No min/max, since no boundary was probed.
- claude-fable-5 and gemini-2.5-pro reject disabling with a 400, so
neither declares a toggle.
Also drops the header comment that claimed all six effort values were
reflected in reasoning_tokens: that holds for five models, not nine.
Costs are unchanged and re-verified against the live pricing endpoint.
* fix(modelis): move wire-path comments to a leading header block
Review finding: every declared control needs its exact request syntax in a
leading top-of-file comment, not an inline one next to the option.
I had put them inline because Modelis has no sync module, so nothing would
strip mid-file comments today. That was the wrong call: the sync rewrites
provider TOMLs by parsing and re-serializing them and keeps only a leading
header, so an inline comment is one sync module away from vanishing with
nobody noticing.
Each file now opens with the wire path for every control it declares.
* fix(modelis): narrow effort values to measured separable levels
Review finding: the six-value lists were the gateway's global accept-set
minus none, not per-model truth.
Re-measured at three task difficulties, asking which ADJACENT levels are
actually distinguishable (sample ranges that do not overlap):
- minimal collapses into low on every Claude model at every difficulty
-> dropped from all three, as the lab baseline predicted.
- xhigh never rises above high on opus, sonnet or gemini-2.5-flash
-> dropped there; kept on fable, where it does separate.
- gemini-2.5-flash keeps minimal: 37 vs 107 with zero scatter across
three repeats.
- claude-fable-5 returns 145 reasoning tokens at reasoning_effort none,
so it has no off switch at all and declares neither toggle nor none.
Per-file: opus/sonnet/gemini-2.5-pro low|medium|high|max, fable
low|medium|high|xhigh|max, gemini-2.5-flash minimal|low|medium|high|max.
DeepSeek and Qwen still declare no effort list: repeats at one setting
scatter up to 5x and the ordering inverts at medium on both DeepSeek
models. Numbers are in the PR discussion.
* fix(modelis): effort-none authored as effort; restore lab-baseline levels
Review findings:
1. Off via reasoning_effort "none" must be authored as effort with none
in values, not as toggle. Both DeepSeek files had a toggle declaration
whose own wire comment named the effort parameter -- self-contradicting.
They now declare effort = [none, high, max] per the peer set.
Qwen keeps toggle because there the mechanism really is a separate
field: reasoning.enabled false -> 0, while reasoning_effort none
leaves those models reasoning unchanged.
2. Dropping a level because adjacent reasoning_tokens ranges overlapped
was the wrong test -- a level can differ in latency or quality without
differing in thinking tokens. Reverted to the lab/peer baseline and
restored xhigh on claude-opus-4-8.
minimal stays dropped on the Claude models: it is absent from the lab
baseline and returned output identical to low at every difficulty tested.
Nebius Token Factory does not offer a discounted prompt-cache tier for
Kimi-K3. The models_info API has no cache pricing fields, the docs
have no cache pricing for this model, and the public endpoint page
lists only "$3.00 / 1M In" and "$15.00 / 1M Out" with no cache-hit
rate.
The entry previously left cache_read unset, which downstream
consumers (e.g. opencode) treat as $0/M for cached input tokens. On a
cache-heavy agentic session that undercounts real cost by roughly
18x. Set cache_read = 3 (equal to input) so cached and fresh input
tokens are billed at their actual, identical rate.
2026-08-02 10:53:58 -05:00
2843 changed files with 28917 additions and 17845 deletions
opencode run --agent pr-reviewer -m opencode/grok-4.5 --format json <<'EOF' | tee "$EVENTS_FILE"
Review this pull request using the trusted reviewer instructions. Start with `.pr-review/pull-request.json`, `.pr-review/diff.patch`, `AGENTS.md`, and the contributing guidance in `README.md`. Read `sync.md`, the reasoning-options audit guide, schema code, and nearby base-revision files when relevant to the changed files. Use only the read, glob, and grep tools. Return only the final review comment in the agent's required output format. Never include progress narration or passed-check summaries.
Review this pull request using the trusted reviewer instructions. Start with `.pr-review/pull-request.json`, `.pr-review/diff.patch`, `AGENTS.md`, and the contributing guidance in `README.md`. Read `sync.md`, the reasoning-options audit guide, schema code, and nearby base-revision files when relevant to the changed files. Use only the read, glob, grep, and mark-pr-ready tools. Return only the final review comment in the agent's required output format. Never include progress narration or passed-check summaries.
EOF
if ! jq -ers 'map(select(.type == "text") | .part.text) | last | select(length > 0)' "$EVENTS_FILE" > "$RESPONSE_FILE"; then
@@ -65,6 +66,8 @@ Focus only on actionable problems introduced by the pull request:
Do not report style preferences, speculative concerns, pre-existing problems, or bare schema errors that validation will identify without useful explanation. Do not invent requirements from neighboring files when provider behavior is intentionally different. Do not claim to have run commands, opened links, or performed validation. Do not edit files or attempt to post comments yourself.
Use `mark-pr-ready` only after completing the review and determining there are no action items. Never use it when returning one or more action items.
Every finding must be an action item: the author must need to change something, verify a specific fact, or provide missing evidence. Do not list checks that passed or general observations. If you find action items, list them in severity order and return exactly this structure:
```markdown
@@ -74,6 +77,6 @@ Every finding must be an action item: the author must need to change something,
Use `violation` only when the change demonstrably breaks a repository requirement or expected behavior. Use `possible mistake` when the diff provides concrete contradictory or suspicious evidence but external facts must be verified. Use `critical`, `high`, `medium`, or `low` for severity. Reference a changed line whenever possible and keep each action item concise.
If there are no action items, respond with exactly the following text and nothing else. Do not explain what you checked or why it passed:
If there are no action items, call `mark-pr-ready`, then respond with exactly the following text and nothing else. Do not explain what you checked or why it passed:
description="Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding."
description="Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows."
description="Fully open 70B multilingual LLM supporting 1800+ languages with 65K context. Trained on 15T tokens of compliant open data. Apache 2.0, EU AI Act compliant."
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.