Compare commits

..

642 Commits

Author SHA1 Message Date
Luke Parker 589619e2aa fix(web): restore provider logo tint for external SVGs
Normalize built and served logo SVGs so currentColor resolves to the themed gray used before provider logos moved to external images.
2026-04-20 18:05:41 +10:00
Luke Parker 041b6a3aef feat(web): load model rows from /api.json
Shrink the initial HTML payload by keeping the table shell server-rendered and filling rows client-side. This preserves the current UI while removing the giant SSR table from the document.
2026-04-20 17:53:36 +10:00
Aiden Cline 1a41934e55 Merge pull request #1448 from Lydanne/dev
feat(302ai): supplement commonly missing models
2026-04-19 22:19:18 -05:00
Aiden Cline aeb4caec9f Merge pull request #1488 from Sewer56/add-wafer-provider
Add wafer.ai provider
2026-04-19 22:19:06 -05:00
Aiden Cline ccb8dcc65f Merge pull request #1493 from rovo89/patch-1
Add context_over_200k for gemini-2.5-pro and adjust cache_read costs
2026-04-19 22:17:45 -05:00
Lyda 435ec1df7b feat(302ai): add claude-opus-4-7 model 2026-04-20 11:14:27 +08:00
Robert Vollmer 7c9d609143 Add context_over_200k for gemini-2.5-pro and adjust cache_read costs
https://ai.google.dev/gemini-api/docs/pricing#gemini-2.5-pro
https://cloud.google.com/vertex-ai/generative-ai/pricing#gemini-models-2.5 (rounds 0.125 to 0.13)
2026-04-20 00:09:11 +02:00
Aiden Cline add7947164 Merge pull request #1492 from dpuyosa/feat/venice-add-gemma4-uncensored
Venice: Add Gemma 4 and Venice Uncensored 1.2 models
2026-04-19 16:52:28 -05:00
Aiden Cline dd0c1af12a Merge pull request #1491 from dpuyosa/chore/venice-pricing-update
Venice: Update pricing for Grok 4.20 and Qwen3.5 9B
2026-04-19 16:52:15 -05:00
Aiden Cline 0c93cc03be Merge pull request #1485 from anomalyco/more-extends-cases
migrate more providers to extends format
2026-04-19 16:51:58 -05:00
Aiden Cline 62e25b73f8 Merge branch 'dev' into more-extends-cases 2026-04-19 16:47:05 -05:00
Aiden Cline 17093e0031 Merge pull request #1489 from berget-ai/update/berget-prices-gemma4
chore: update berget.ai models - prices and Gemma 4
2026-04-19 16:42:06 -05:00
Aiden Cline ae542978f0 Merge pull request #1490 from BlockListed/cortecs-add-claude-opus-4-7
add claude opus 4.7
2026-04-19 16:41:36 -05:00
dpuyosa 7f16117bba [venice] Add Gemma 4 and Venice Uncensored 1.2 models
- Add Gemma 4 Uncensored with 256K context, image support
- Add Venice Uncensored 1.2 with 128K context, image support
- Both models support tool calls and structured output
2026-04-19 23:41:17 +02:00
dpuyosa 2b96a2d3d6 [venice-models] Update pricing for Grok 4.20 and Qwen3.5 9B
- Update cache_read pricing for Grok 4.20 context_over_200k (0.23 → 0.45)
- Update input cost for Qwen3.5 9B (0.05 → 0.1)
2026-04-19 23:38:20 +02:00
BlockListed 9799a841c6 add claude opus 4.7
yes this model id is correct, cortecs is weird.
2026-04-19 23:13:58 +02:00
Christian Landgren 71c59b4235 chore: update berget.ai models - prices and Gemma 4
- Add Google Gemma 4 31B Instruct model
- Update prices for existing models (EUR to USD conversion)
- Remove non-coding models (bge-reranker, multilingual-e5 embeddings, kb-whisper)
- Remove deprecated Llama-3.1-8B-Instruct

Updated models:
- GLM-4.7: 0.77/2.75 USD/M (was 0.7/2.3)
- Llama-3.3-70B: 0.99/0.99 USD/M (was 0.9/0.9)
- Mistral-Small-3.2: 0.33/0.33 USD/M (was 0.3/0.3)
- GPT-OSS-120B: 0.44/0.99 USD/M (was 0.3/0.9)

New models:
- Gemma-4-31B-it: 0.275/0.55 USD/M

Removed models (not relevant for coding):
- BAAI/bge-reranker-v2-m3 (reranker)
- intfloat/multilingual-e5-large/* (embeddings)
- KBLab/kb-whisper-large (speech-to-text)
- meta-llama/Llama-3.1-8B-Instruct (deprecated)
2026-04-19 12:19:32 +02:00
Sewer56 0568b412aa Add wafer.ai provider with GLM-5.1 and Qwen3.5-397B-A17B models 2026-04-19 03:02:04 +01:00
Aiden Cline 812612465a Merge pull request #1484 from smakosh/feat/llmgateway-new-models
feat: update LLM Gateway to 182 models
2026-04-18 18:37:26 -05:00
Aiden Cline ac8a79dd74 Merge pull request #1487 from WJQSERVER/add/nvidia(nim)-z-ai-glm-5.1
Add Z.AI GLM-5.1 to NVIDIA(NIM)
2026-04-18 18:36:55 -05:00
smakosh 9460d981d4 fix: replace broken extends with concrete glm-4.6v-flash def
zhipuai/glm-4.6v-flash.toml is a symlink to zai/models/glm-4.6v-flash.toml
which does not exist, causing validate to fail with 'Unable to resolve
extends.from'. Inline the concrete definition instead.
2026-04-18 13:36:52 +02:00
smakosh 91db9d81ec feat: update LLM Gateway to 182 models
- Uses extends to reference canonical providers where
  possible (116 models), keeping 66 full definitions
- Only includes active text/chat models
- Adds new models: Claude Opus 4.7, Grok 4 Fast,
  Kimi K2, Mimo V2, GLM 5.1, Qwen 3 Coder, and more

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-18 13:20:41 +02:00
Jack d8d5f08df6 Merge pull request #1486 from chl-0537/feature/add-tencent
feat: add new provider and model
2026-04-18 17:30:53 +08:00
WJQSERVER 11d5443ab1 follow the nim modelcard change context length to 131072
https://build.nvidia.com/z-ai/glm-5.1/modelcard
Other Properties Related to Input: Supports multi-turn conversations, tool calling, system prompts, and extended agentic sessions. Input context length: 131,072 tokens.
2026-04-18 16:48:29 +08:00
wjqserver 90558e9eed add glm-5.1 2026-04-18 16:41:02 +08:00
Aiden Cline cb7d258e33 migrate more providers to extends format 2026-04-17 23:02:34 -05:00
Frank 2af43dc4f8 update zen models 2026-04-17 19:08:05 -04:00
Aiden Cline 93ddb6b131 Merge pull request #1482 from sopial42/ovhcloud/update-models-clean
chore(ovhcloud): remove 3 models no longer available in AI Endpoints
2026-04-17 16:50:53 -05:00
Aiden Cline 04bf671f18 Merge pull request #1481 from Spherrrical/add-digitalocean-provider
feat(provider): add DigitalOcean provider
2026-04-17 16:49:44 -05:00
Aiden Cline 1f3ba4ba21 Merge pull request #1483 from anomalyco/add-extends-support
feat: add extends support
2026-04-17 16:49:23 -05:00
Aiden Cline 305bdb6cdc Merge branch 'dev' into add-extends-support 2026-04-17 16:22:41 -05:00
Aiden Cline 2e5b4b44ae update some modes 2026-04-17 16:22:14 -05:00
aadhondt bb1c08dd41 chore(ovhcloud): remove 3 models no longer available in AI Endpoints
- deepseek-r1-distill-llama-70b
- mixtral-8x7b-instruct-v0.1
- qwen2.5-coder-32b-instruct

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 22:38:35 +02:00
Spherrrical 86d0f14397 feat(digitalocean): add DigitalOcean Gradient AI Platform provider
Adds the DigitalOcean provider with 46 models (Anthropic, OpenAI,
Arcee, fal, and DO-hosted open-source/embedding models) served via
the OpenAI-compatible endpoint at https://inference.do-ai.run/v1.
2026-04-17 13:07:47 -07:00
Aiden Cline f93c1a8998 Merge pull request #1478 from Kaspazza/dev
Add Github Copilot Claude Opus 4.7
2026-04-17 15:01:04 -05:00
Aiden Cline 27a6758eb7 new gen script 2026-04-17 14:57:57 -05:00
Aiden Cline 9dbafb81fa add script 2026-04-17 14:57:41 -05:00
Aiden Cline 419f8a3a20 add migration checker script 2026-04-17 14:57:32 -05:00
Aiden Cline 785a091073 Merge pull request #1480 from nicocasaisd/openai/remove-deprecated-codex-mini-latest
chore(openai): remove deprecated model codex-mini-latest
2026-04-17 14:52:34 -05:00
nicocasaisd ad2409dce1 chore(openai): remove deprecated model codex-mini-latest 2026-04-17 15:35:43 -03:00
kaspazza 63450ab67d Add Github Copilot Claude Opus 4.7 2026-04-17 20:19:36 +02:00
Aiden Cline 4002cb6739 model 2026-04-17 13:11:51 -05:00
Aiden Cline 72fa27a91e Merge pull request #1474 from vglafirov/add-gitlab-duo-chat-opus-4-7
feat(gitlab): add duo-chat-opus-4-7 model definition
2026-04-17 12:37:36 -05:00
Aiden Cline ddb3a0ff05 update agents.md 2026-04-17 12:14:04 -05:00
Aiden Cline 96c12042bc remeda 2026-04-17 12:13:54 -05:00
mickalchen 73b81ac027 add tencent provider 2026-04-17 17:27:35 +08:00
Vladimir Glafirov 9c5839a414 feat(gitlab): add duo-chat-opus-4-7 model definition 2026-04-17 08:54:07 +02:00
Aiden Cline 721464bc3c Merge pull request #1469 from GrahamCampbell/ops-4-7-fixes
Corrected and normalized claude opus 4.7 knowledge cut-off dates
2026-04-16 22:30:13 -05:00
Aiden Cline b6b45a9d25 Merge pull request #1463 from GrahamCampbell/claude-4-6
Correct Anthropic Claude 4.6 model knowledge cut-off dates
2026-04-16 21:36:19 -05:00
Aiden Cline 7b8f98bb23 Merge pull request #1471 from cfbender/fix/openrouter-opus-4-7
feat: add openrouter opus 4.7
2026-04-16 21:35:52 -05:00
Aiden Cline 92ac48b07f Merge pull request #1473 from fhennerkes/dev
Poe: add Claude-Opus-4.7
2026-04-16 20:57:21 -05:00
fhennerkes 36a455ce4a Merge branch 'anomalyco:dev' into dev 2026-04-16 18:11:32 -07:00
fhennerkes 0bf5c60319 poe: add Claude-Opus-4.7 model
Add new Anthropic model from Poe API (released 2026-04-15):
- Reasoning support
- 1M context window with 128K output
- Cost: $4.3/M input, $21/M output, $0.43/M cache read, $5.4/M cache write
- Modalities: text, image, pdf
2026-04-16 18:08:02 -07:00
Kit Langton b123711494 Merge pull request #1472 from elithrar/patch-4
cloudflare: add opus 4.7
2026-04-16 19:38:46 -04:00
Matt Silverlock 832064c1d1 cloudflare: add opus 4.7 2026-04-16 18:51:54 -04:00
Cody Bender c16e1c817b fix: add openrouter opus 4.7 2026-04-16 18:38:36 -04:00
Aiden Cline 8aaf31711b Merge pull request #1468 from heimoshuiyu/fix/opus-4-7-temperature
fix: set temperature=false for Claude Opus 4.7
2026-04-16 14:34:52 -05:00
Graham Campbell ca6acf0b3e Corrected and normalized claude opus 4.7 knowledge cut-off dates 2026-04-16 20:33:49 +01:00
heimoshuiyu 660a672647 fix: set temperature=false for firmware and venice Opus 4.7 2026-04-17 03:23:11 +08:00
heimoshuiyu 147cb3138a fix: set temperature=false for Claude Opus 4.7 across all providers 2026-04-17 03:22:33 +08:00
Aiden Cline 5c1fb729fd Merge pull request #1462 from dpuyosa/dev
Venice: Add Claude Opus 4.7 and remove deprecated models
2026-04-16 14:10:03 -05:00
Aiden Cline 0d34900078 Merge pull request #1464 from cgilly2fast/dev
feat(firmware): opus 4.7 remove old claude models
2026-04-16 14:09:39 -05:00
Aiden Cline 4bc71918f5 Merge pull request #1467 from vercel/update-vercel-models-20260416-1812
Update Vercel models
2026-04-16 13:34:40 -05:00
Jerilyn Zheng 6f62522505 Set temperature to false in claude-opus-4.7 configuration
Changed temperature setting from true to false.
2026-04-16 11:23:29 -07:00
Aiden Cline 7680a1d169 Merge pull request #1466 from vercel/fix-reranking-type-upstream
fix(vercel): accept reranking model type from API
2026-04-16 13:22:29 -05:00
github-actions[bot] bdc15a57ce chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-16 18:12:52 +00:00
R-Taneja c7d324fed8 fix(vercel): accept reranking model type from API
The Vercel AI Gateway API now returns models with type "reranking",
which caused the generate-vercel script to fail schema validation.

Add "reranking" to the ModelType enum and skip these models in the
main loop, matching the existing pattern for image/video types that
OpenCode does not consume.
2026-04-16 11:05:26 -07:00
Colby Gilbert 863bada2cf feat(firmware): opus 4.7 remove old claude models 2026-04-16 10:37:52 -07:00
dpuyosa 28c4af0631 [venice] Add Claude Opus 4.7 and update Qwen models
- Add Claude Opus 4.7 with 1M context, 128K output, multimodal support
- Update Qwen 3.5 35B and 397B to open_weights=true and refresh last_updated
- Remove deprecated models: Grok Code Fast 1, Mercury Edit 2, MiniMax M2.1
2026-04-16 18:30:45 +02:00
Aiden Cline 38f6b7dfc5 Merge pull request #1456 from Snat3r/dev
Add GML5.1.toml model to cortecs provider
2026-04-16 11:16:51 -05:00
Aiden Cline 1ba010f66e Merge pull request #1461 from llc1123/chore/zenmux-update
chore(zenmux): add claude-opus-4.7
2026-04-16 11:16:41 -05:00
粒粒橙 132a5ade8d chore(zenmux): add claude-opus-4.7 2026-04-17 00:02:58 +08:00
Graham Campbell 2ef2b10847 Correct anthropic 4.6 knowledge cut-off dates 2026-04-16 16:52:15 +01:00
Frank 87e1dcb70f update zen modles 2026-04-16 11:31:20 -04:00
Aiden Cline 43d2e058d9 Merge pull request #1449 from shikbupt/alibaba-glm5.1
add alibaba-cn glm5.1
2026-04-16 10:25:58 -05:00
Aiden Cline 0a6c2ca49d Merge pull request #1459 from itsnebulalol/dev
feat: add anthropic claude opus 4.7 models
2026-04-16 10:25:04 -05:00
Dominic Frye 2f954fc838 feat: add anthropic claude opus 4.7 models 2026-04-16 11:19:19 -04:00
Frank 91b7851971 update zen models 2026-04-16 04:51:30 -04:00
Jack 80e23ab90e Merge pull request #1266 from lioZ129/feature/add-hpc-ai-provider
feat: add HPC-AI model provider support
2026-04-16 15:09:44 +08:00
Snat3r 6e574da2e4 Update input modalities in minimax-M2.7.toml 2026-04-16 08:21:20 +02:00
Snat3r 5b68565783 Add MiniMax-M2.7 model configuration file cortecs 2026-04-16 08:19:51 +02:00
lioZ129 65dafb56a3 add [cost] and glm5.1 support 2026-04-16 14:13:27 +08:00
Snat3r 32c0c88600 Update context and output limits in glm-5.1.toml 2026-04-16 08:08:09 +02:00
Snat3r d911b6f610 Add GLM-5.1 model configuration file 2026-04-16 08:06:37 +02:00
Aiden Cline 5cf28a566f Merge pull request #1424 from WJQSERVER/feat/nvidia-minimax-m2.7
Add MiniMax M2.7 to NVIDIA(NIM)
2026-04-15 20:19:01 -05:00
Aiden Cline 52cdb783a1 Merge pull request #1452 from wwth8819/dev
For aihubmix add GPT-5.4 \ GPT-5.4-mini, remove Incorrect value from old models, update cost
2026-04-15 20:18:24 -05:00
wwth8819 4a14ce5ae6 Remove temperature setting from gpt-5.2-codex.toml
Removed the temperature setting from the configuration.
2026-04-16 03:12:14 +08:00
wwth8819 f17c352027 Update cost values in coding-glm-4.7.toml 2026-04-16 03:11:16 +08:00
wwth8819 46ec19ab02 add gpt-5.4-mini gpt-5.4 2026-04-16 03:09:26 +08:00
Frank f12aae094e update zen models 2026-04-15 10:55:02 -04:00
sk 377d0f1c8d add alibaba-cn glm5.1 2026-04-15 22:02:52 +08:00
WJQSERVER 884b799012 Merge branch 'dev' into feat/nvidia-minimax-m2.7 2026-04-15 21:53:54 +08:00
Lyda ac7e35af4e feat(302ai): supplement commonly missing models 2026-04-15 17:32:18 +08:00
Frank 6f04d267cf update zen models 2026-04-15 02:17:31 -04:00
Aiden Cline a0b89e739b Merge pull request #1425 from ceyhanmolla/add-minimax-m2.7-nvidia
feat(nvidia): add MiniMax-M2.7
2026-04-14 22:59:38 -05:00
Frank 0ce000a521 update go models 2026-04-14 23:09:06 -04:00
Frank 4b7dda6cc6 update go models 2026-04-14 22:50:12 -04:00
Aiden Cline 7220310828 Merge pull request #1447 from Sawyerb/dev
Removed deprecated models and added ME2 to all relevant providers.
2026-04-14 21:49:22 -05:00
Aiden Cline 15746b9845 Merge pull request #1444 from wwth8819/dev
Add glm-5.1,  coding-glm-5.1  TO  AiHubMix
2026-04-14 21:49:06 -05:00
Aiden Cline e9be42b4bc Merge pull request #1443 from teodortomas/add-minimax-m2.7
add minimax-m2p7 to fireworks-ai provider
2026-04-14 17:11:09 -05:00
Aiden Cline c0d21d802f Merge pull request #1429 from Lee-Si-Yoon/fix/cache-read-friendli
fix: cache read costs for friendliAI models
2026-04-14 17:10:56 -05:00
Aiden Cline 4937952a52 Merge pull request #1437 from Ardakilic/dev
feat: kilo gateway: elephant alpha
2026-04-14 17:10:37 -05:00
Aiden Cline 1bb5deadea Merge pull request #1439 from fhennerkes/dev
poe: update models with pricing, deprecations, and display name fixes
2026-04-14 17:10:26 -05:00
Aiden Cline c2ad18c87d Merge pull request #1445 from cantalupo555/chore/openrouter-remove-deprecated-free-models
chore(openrouter): remove deprecated free-tier models no longer available via API
2026-04-14 17:10:01 -05:00
Sawyer e4b0a53e26 Removed deprecated models and added ME2 to all relevant providers. 2026-04-14 12:33:35 -07:00
cantalupo555 61ea2e2093 chore(openrouter): remove deprecated free-tier models no longer available via API 2026-04-14 08:11:45 -03:00
wwth8819 162fd8b72b Add configuration for Coding-GLM-5.1 model 2026-04-14 17:35:23 +08:00
wwth8819 b8fae048db Add GLM-5.1 model configuration file 2026-04-14 17:32:59 +08:00
Teodor Tomáš ca6cf794c1 add minimax-m2p7 to fireworks-ai provider 2026-04-14 11:06:47 +02:00
fhennerkes 152b401976 poe: update models with pricing, deprecations, and display name fixes
Mark 11 models no longer on the Poe API as deprecated:
- anthropic: claude-sonnet-3.5, claude-sonnet-3.5-june
- cerebras: qwen3-235b-2507-cs, qwen3-32b-cs, llama-3.3-70b-cs
- google: gemini-3-pro, gemini-deep-research
- novita: glm-4.7
- openai: chatgpt-4o-latest, gpt-4-classic-0314, gpt-4-classic

Update existing models with latest API data:
- Cerebras (gpt-oss-120b-cs, llama-3.1-8b-cs): Add pricing and correct context (128K)
- kimi-k2.5: Add pricing, fix display name, temperature/reasoning from API
- gpt-4o: Fix output formatting (8_192)
- gpt-5.1-codex-max: Fix display name

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-13 16:55:18 -07:00
Aiden Cline d99a1581df Merge pull request #1435 from cantalupo555/feat/add-openrouter-elephant-alpha
feat(openrouter): add Elephant Alpha model
2026-04-13 15:01:55 -05:00
Arda Kilicdagi 21cf1fb1e9 feat: kilo gateway: elephant alpha 2026-04-13 20:39:54 +03:00
cantalupo555 970a00c3ad feat(openrouter): add Elephant Alpha model 2026-04-13 13:43:56 -03:00
cantalupo555 d611fc2ef7 feat(core): add elephant model family 2026-04-13 13:35:10 -03:00
Aiden Cline 7d7711878d Merge pull request #1434 from cantalupo555/chore/openrouter-step-3.5-flash-free
chore(openrouter): remove Step 3.5 Flash free-tier model
2026-04-13 10:45:25 -05:00
cantalupo555 fc5d5ec67f chore(openrouter): remove deprecated step-3.5-flash free-tier variant
- Remove the free-tier variant of Step 3.5 Flash as it is no longer needed
2026-04-13 11:51:10 -03:00
Aiden Cline bd5050a15f Merge pull request #1423 from spiffytech/dev
Add Synthetic support for GLM-5.1
2026-04-13 09:18:49 -05:00
Aiden Cline ac67c648a2 Merge pull request #1422 from hanouticelina/add-minimax-2.7-huggingface
feat(huggingface): add MiniMax-M2.7
2026-04-13 09:18:35 -05:00
Aiden Cline f58038fc21 Merge pull request #1421 from zainhas/dev
[Together AI]add minimax m2.7
2026-04-13 09:18:14 -05:00
Aiden Cline 3ea7d56b96 Merge pull request #1428 from dpuyosa/feat/venice-glm-5-models
Venice: Add Z-AI GLM-5 Turbo and GLM-5V Turbo models
2026-04-13 09:17:45 -05:00
Aiden Cline e23657368e Merge pull request #1426 from dpuyosa/venice/update-model-configs-0412
Venice: Update model configs and pricing
2026-04-13 09:17:33 -05:00
Aiden Cline d59ad3ffa3 Merge pull request #1427 from dpuyosa/refactor/venice-model-naming
Venice: Update model naming convention
2026-04-13 09:17:08 -05:00
siyoon dcbb415960 fix: add cache_read parameter to cost section 2026-04-13 16:05:36 +09:00
dpuyosa e302956dc4 [venice] Update model naming convention
- Rename files to use dashes instead of dots
- Rename opus/sonnet 45 to 4-5 format
- Remove beta suffix from Grok 4.20 models
- Update family from grok-beta to grok
- Remove knowledge field from Claude models
- Update output limits
2026-04-13 01:10:06 +02:00
dpuyosa 5d100a8243 [venice] Add Z-AI GLM-5 Turbo and GLM-5V Turbo models
- Add Z-AI GLM-5 Turbo (text-only, reasoning, tool_call)

- Add Z-AI GLM-5V Turbo (vision, reasoning, tool_call)
2026-04-13 01:05:47 +02:00
dpuyosa 9ff52ee539 [venice] Update model configs and pricing
- Update last_updated dates for 5 models

- Set open_weights to false for 4 models

- Add context_over_200k cache pricing for qwen-3-6-plus
2026-04-13 00:59:21 +02:00
ceyhanmolla 8114522671 feat(nvidia): add MiniMax-M2.7 2026-04-12 16:56:04 +02:00
wjqserver 5e534d84bc feat: add NVIDIA MiniMax M2.7 model 2026-04-12 22:51:46 +08:00
spiffytech 1f79cd8fd0 Added Synthetic support for GLM-5.1 2026-04-12 08:46:10 -04:00
Celina Hanouti 462b822e60 add minimax M2.7 for hugging face provider 2026-04-12 11:06:30 +02:00
Zain Hasan 8021e1afd0 Merge branch 'anomalyco:dev' into dev 2026-04-11 22:23:20 -07:00
Zain Hasan 304d85fa43 [Together AI]add minimax m2.7 2026-04-11 22:14:05 -07:00
Aiden Cline f07262370f Merge pull request #1418 from Ardakilic/dev
Kilo Gateway: Sync model list with upstream (2026-04-11)
2026-04-11 16:48:46 -05:00
Aiden Cline 7cfaa0393e Merge pull request #1419 from nicopujia/add-openrouter-deepseek-r1
Add OpenRouter support for DeepSeek R1
2026-04-11 16:46:58 -05:00
Arda Kilicdagi c93de9f54f chore: sync all kilo gw models 2026-04-11 03:31:00 +03:00
Aiden Cline 2b17d9efc2 Merge pull request #1414 from Ardakilic/dev
Feat: Kilo Gateway: Add MiniMax M2.7
2026-04-10 13:31:50 -05:00
Arda Kilicdagi 8d8521e0e1 feat: kilo gateway: MiniMax M2.7 2026-04-10 20:42:45 +03:00
Aiden Cline c9f22d26b9 Merge pull request #1413 from Ardakilic/dev
Kilo Gateway: Add GLM 5.1, Remove MiniMax M2.5 Free
2026-04-10 10:33:18 -05:00
Aiden Cline 61e8ea2a2e Merge pull request #1410 from gjtiquia/dev
Poe: add GLM-5 model
2026-04-10 10:26:57 -05:00
Aiden Cline 7d2cd9818f Merge pull request #1411 from Alex-wuhu/dev
novita-ai: add 8 new models and remove 2 deprecated models
2026-04-10 10:26:45 -05:00
Arda Kilicdagi 385b4fbcf6 feat: kilo gateway: glm-5.1 2026-04-10 15:11:37 +03:00
Alex-wuhu 2f0890c9a9 Add new model configurations for Gemma, MiniMax, Qwen, and GLM 2026-04-10 16:28:34 +08:00
GJ Tiquia 9d377b768f poe: GLM-5 temperature set to true 2026-04-10 15:57:25 +08:00
GJ Tiquia aa4f3f550a poe: add GLM-5 model 2026-04-10 14:13:03 +08:00
Aiden Cline f82d6fc61a Merge pull request #1404 from nicopujia/add-openrouter-qwen3.5-flash-02-23
Add OpenRouter support for Qwen3.5 Flash 2026-02-23
2026-04-09 22:37:05 -05:00
Aiden Cline 4222b040b7 Merge pull request #1407 from line72/deepinfra-glm-5.1
[DeepInfra] Add GLM 5.1
2026-04-09 22:36:53 -05:00
Aiden Cline d2e4174103 Merge pull request #1397 from qychen2001/dev
Add GLM-5.1 and GLM-5V-Turbo model configurations for siliconflow
2026-04-09 22:35:52 -05:00
Aiden Cline f30b5fc754 Merge pull request #1408 from nanai10a/dev
Add MiniMax M2.5 (free) configuration file
2026-04-09 22:35:37 -05:00
Aiden Cline 10239c95e2 Merge pull request #1401 from dpuyosa/venice-open-weights-fix
Venice: Remove private field fallback for open weights
2026-04-09 20:05:03 -05:00
Aiden Cline 59831a9a0e Merge pull request #1399 from dpuyosa/venice-model-updates-2026-04-09
Venice: Update model configs with refreshed pricing and limits
2026-04-09 20:04:55 -05:00
Aiden Cline c7552d0e00 Merge pull request #1396 from shelvick/add-azure-grok-4-20
Add Grok 4.20 reasoning and non-reasoning to Azure
2026-04-09 20:04:04 -05:00
Aiden Cline 76d53c9e96 Merge pull request #1382 from cgilly2fast/dev
feat(firmware): add zai 5.1 and qwen 3.6 plus
2026-04-09 20:03:50 -05:00
Aiden Cline 61573f666a Merge pull request #1395 from zainhas/dev
[Together AI] add GLM-5.1 + Gemma 4 31B it
2026-04-09 20:03:13 -05:00
Aiden Cline 1d30640400 Merge branch 'dev' into dev 2026-04-09 20:02:59 -05:00
Aiden Cline 1f1eafe173 Merge pull request #1406 from riccardogiorato/dev
Update GLM to version 5.1 for together provider
2026-04-09 20:02:08 -05:00
Aiden Cline a75c0f0fe9 Merge pull request #1400 from dpuyosa/venice-add-new-models
Venice: Add 4 new AI models
2026-04-09 17:34:55 -05:00
Marcus Dillavou 57c6d817d5 DeepInfra: Add GLM 5.1 2026-04-09 15:50:04 -05:00
Riccardo Giorato 3d1d77da76 Merge pull request #2 from riccardogiorato/orchestrator/add-glm-5-1-together-r8k9f
add GLM-5.1 for together provider
2026-04-09 22:42:54 +02:00
orchestrator-build[bot] e7cfed72ff fix GLM-5.1 open_weights to true 2026-04-09 20:40:20 +00:00
orchestrator-build[bot] b748364a20 fix GLM-5.1 pricing for together provider 2026-04-09 20:39:49 +00:00
orchestrator-build[bot] 30439f4409 replace GLM-5 with GLM-5.1 for together provider 2026-04-09 20:37:34 +00:00
orchestrator-build[bot] 7baad3cc22 add GLM-5.1 for together provider 2026-04-09 20:35:51 +00:00
Nicolás Pujia 564992885b Add OpenRouter support for DeepSeek R1 2026-04-09 11:54:16 -03:00
Nicolás Pujia 57a53889db Add OpenRouter support for Qwen3.5 Flash 2026-02-23 2026-04-09 11:53:53 -03:00
Nanai Jua 0f019a5e9a Add MiniMax M2.5 (free) configuration file
https://openrouter.ai/provider/open-inference
2026-04-09 18:11:40 +09:00
dpuyosa d6fec11252 [venice] Remove private field fallback for open weights
- Rely solely on modelSource for open weights detection
- Remove privacy field fallback per new ZDR policies
2026-04-09 11:03:03 +02:00
dpuyosa 7604313114 [venice] Add 4 new AI models
- Add Mercury 2 (reasoning model)
- Add Mistral Small 4 (multimodal)
- Add Nemotron Cascade 2 30B A3B
- Add Qwen 3.5 397B (multimodal)
2026-04-09 10:31:24 +02:00
dpuyosa c3a2b1a1db [venice] Update model configs with refreshed pricing and limits
- Update last_updated dates to 2026-04-09 across 6 models
- Adjust Grok pricing to reflect current rates
- Add context_over_200k pricing for Qwen 3.6 Plus
- Correct Gemma 4 output limits from 12288 to 8192
- Rename Qwen 3.6 Plus to "Uncensored" variant
2026-04-09 10:17:05 +02:00
QiyuanChen 68294f3bd6 Add GLM-5V-Turbo model configuration for siliconflow provider 2026-04-09 11:18:25 +08:00
QiyuanChen ad10ce6232 Add GLM-5.1 model configuration files for siliconflow provider 2026-04-09 11:08:53 +08:00
Scott Helvick 5a09420d65 Add Grok 4.20 reasoning and non-reasoning to Azure 2026-04-09 02:30:55 +00:00
Zain Hasan f1b3177ff7 add gemma 4 31b instruct 2026-04-08 18:49:38 -07:00
Zain Hasan a7d0152fd1 [Together AI] add GLM-5.1 2026-04-08 17:55:11 -07:00
Aiden Cline 46c6aef51b Merge pull request #1393 from spiffytech/dev
Add Synthetic support for GLM-5 and Nemotron 3 Super
2026-04-08 16:01:12 -05:00
Aiden Cline 7c34bf01b5 Merge pull request #1394 from spiffytech/ollama-changes
Add Ollama Cloud support for Gemma 4. Updated properties on Gemini 3 Flash
2026-04-08 16:00:12 -05:00
spiffytech 5ce20c0978 Added Ollama Cloud support for Gemma 4. Updated properties on Gemini 3 Flash. 2026-04-08 15:03:29 -04:00
spiffytech 6055551b33 Added Synthetic support for GLM-5 and Nemotron 3 Super 2026-04-08 14:57:51 -04:00
Aiden Cline a96094c059 Merge pull request #1390 from GoGoris/add-qwen3-coder-next-cortecs
Add qwen3-coder-next model for cortecs
2026-04-08 11:26:42 -05:00
Aiden Cline 39e86eb055 Merge pull request #1384 from dpuyosa/feat/add-venice-claude-opus-4-6-fast-glm-5-1
Venice: Add Claude Opus 4.6 Fast and GLM 5.1 models
2026-04-08 11:25:56 -05:00
Aiden Cline 119f421437 Merge pull request #1387 from cantalupo555/feat/add-gemma-4-free-openrouter
feat(openrouter): add Gemma 4 free models
2026-04-08 11:25:30 -05:00
Aiden Cline 6ab4c1be04 Merge pull request #1386 from cantalupo555/chore/remove-qwen3.6-plus-free-openrouter
chore(openrouter): remove discontinued Qwen3.6 Plus free
2026-04-08 11:25:15 -05:00
Aiden Cline f1eaa4bd9d Merge pull request #1392 from Solidsilver/feat/fireworks-add-glm-5-1-qwen-3-6-plus
feat(fireworks): add GLM 5.1 and Qwen 3.6 Plus models
2026-04-08 11:24:52 -05:00
Aiden Cline 2f4693b9cf Merge pull request #1391 from CassiusXiang/fix/openrouter-qwen3.6-plus
fix(openrouter): replace discontinued qwen3.6-plus free with paid model
2026-04-08 11:24:41 -05:00
Luke M 5c867d5fba feat(fireworks): add GLM 5.1 and Qwen 3.6 Plus models 2026-04-08 09:06:50 -07:00
XiangChang 682a486f09 fix(openrouter): replace discontinued qwen3.6-plus free with paid model 2026-04-08 22:31:52 +08:00
Steven Goris ea10c5674b Add qwen3-coder-next model for cortecs 2026-04-08 15:14:31 +02:00
cantalupo555 5829a9174c feat(openrouter): add Gemma 4 26B A4B free
- Add google/gemma-4-26b-a4b-it:free (MoE, 256K context, multimodal, reasoning)
2026-04-08 08:32:07 -03:00
cantalupo555 4717e5a902 feat(openrouter): add Gemma 4 31B free
- Add google/gemma-4-31b-it:free (256K context, multimodal, reasoning)
2026-04-08 08:31:55 -03:00
cantalupo555 20f225d6a6 chore(openrouter): remove discontinued Qwen3.6 Plus free
- Model no longer available on OpenRouter API
2026-04-08 08:16:47 -03:00
dpuyosa 04ada2c06e [venice] Add Claude Opus 4.6 Fast and GLM 5.1 models
- Add claude-opus-4-6-fast model with 1M context
- Add zai-org-glm-5-1 model with reasoning and tool_call
2026-04-08 11:40:46 +02:00
Frank 23fd440f57 update zen models 2026-04-08 02:20:44 -04:00
Colby Gilbert a4c09d58c3 feat(firmware): add zai 5.1 and qwen 3.6 plus 2026-04-07 22:18:54 -07:00
Aiden Cline 82924aa6f2 Merge pull request #1376 from mugnimaestra/feat/add-glm-5.1-tee-chutes
feat(chutes): add zai-org/GLM-5.1-TEE model
2026-04-07 23:55:23 -05:00
Aiden Cline c8f0b6d573 Merge pull request #1377 from mchenco/mchen/update-cf-workers-ai-models
update cloudflare-workers-ai: add gemma-4, remove non-LLMs, fix metadata
2026-04-07 23:55:07 -05:00
Aiden Cline 09c3cb3e0a Merge pull request #1379 from zhongruan0522/dev
add GLM-5.1 to zhipuai and zai providers
2026-04-07 23:54:32 -05:00
Aiden Cline 555662ec80 Merge pull request #1381 from llc1123/chore/zenmux-update
chore(zenmux): add GLM-5.1 model configuration
2026-04-07 23:54:20 -05:00
Aiden Cline fc63cc19c3 feat: add experimental modes to models to express things like "fast" that induce additional price changes 2026-04-07 23:47:19 -05:00
Aiden Cline 26d2f3e8e9 Merge pull request #1378 from friendliai/minpeter/add-friendli-glm-5.1
feat(friendli): add GLM-5.1 and remove deprecated models
2026-04-07 22:30:44 -05:00
粒粒橙 92374dd74d chore(zenmux): add GLM-5.1 model configuration 2026-04-08 11:30:14 +08:00
minpeter ee4de44fbe fix(friendli): align model display names with cross-provider majority convention 2026-04-08 11:39:05 +09:00
zhongruan0522 5513af5b6c add GLM-5.1 to zhipuai and zai providers 2026-04-08 02:34:12 +00:00
minpeter 755509be95 feat(friendli): add GLM-5.1 and remove deprecated models 2026-04-08 11:31:50 +09:00
mchen 392b0988f2 update cloudflare-workers-ai: add gemma-4, remove non-LLMs, fix metadata
- Add gemma-4-27b-a4b-it (multimodal, reasoning, tool calling)

- Remove non-LLM models: embeddings, TTS, translation, sentiment analysis

- Remove redundant models: Llama 2/3.x variants, Qwen, Mistral, DeepSeek, Gemma 3

- Update metadata: tool_call, reasoning, open_weights, attachment for remaining models

- Final models: gemma-4, llama-4-scout, kimi-k2.5, nemotron-3, gpt-oss-20b/120b, glm-4.7-flash
2026-04-07 21:00:44 -04:00
Muhammad Mugni Hadi 7f1e94f571 feat(chutes): add zai-org/GLM-5.1-TEE model 2026-04-08 06:40:30 +07:00
Aiden Cline 61c596874c feat: add new provider.body and provider.headers support 2026-04-07 17:36:40 -05:00
Frank ca0e64451d update zen models 2026-04-07 18:01:31 -04:00
Aiden Cline d2870fcfeb Merge pull request #1374 from fhennerkes/dev
Poe: adding Gemma-4-31B (free model)
2026-04-07 16:48:52 -05:00
fhennerkes 9c8e1e0fa0 Merge branch 'anomalyco:dev' into dev 2026-04-07 14:02:06 -07:00
Frank 30d42207cb update zen models 2026-04-07 16:48:49 -04:00
fhennerkes c450a6ffaf poe: add Gemma-4-31B model
Add new Google model from Poe API (released 2026-04-02):
- Free during preview
- 262K context, 8K output
- Modalities: text, image

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 13:04:03 -07:00
Frank e889bd7c3b update zen models 2026-04-07 13:43:40 -04:00
Aiden Cline dcd3803dea Merge pull request #1359 from rdbisme/dev
Add missing Qwen3 Coder Next model to Amazon Bedrock
2026-04-07 12:41:41 -05:00
Aiden Cline 05b22d8f8e Merge pull request #1372 from JoshuaDietz/dev
feat(ollama-cloud): add GLM-5.1
2026-04-07 12:30:52 -05:00
Aiden Cline 5c1a00bbe8 Merge pull request #1373 from cantalupo555/feat/openrouter-glm-5.1
feat(openrouter): add z-ai/glm-5.1 model
2026-04-07 12:30:12 -05:00
cantalupo555 27cbd6557d feat(openrouter): add z-ai/glm-5.1 model
- Add GLM-5.1 with 202K context, reasoning, tool call, and structured output

- Pricing: $1.40/M input, $4.40/M output, $0.26/M cache read
2026-04-07 14:02:55 -03:00
JoshuaDietz 8114fa2f13 Merge branch 'anomalyco:dev' into dev 2026-04-07 19:01:23 +02:00
Joshua Dietz 5dc325bf09 feat(ollama-cloud): add GLM-5.1
unsure about temperature=true which is not set for GLM-5 but is set for GLM-5.1 huggingface.
2026-04-07 19:00:54 +02:00
Aiden Cline d27ce785fe Merge pull request #1370 from gary149/feat/huggingface-glm-5.1
feat(huggingface): add GLM-5.1
2026-04-07 11:55:12 -05:00
Aiden Cline f47f9e8414 Merge pull request #1225 from mixlayer/add_mixlayer
New provider: Mixlayer
2026-04-07 11:46:19 -05:00
Victor Muštar df41a38c6f feat(huggingface): add GLM-5.1 2026-04-07 18:33:53 +02:00
Aiden Cline 5b37d05f82 Merge pull request #1367 from cantalupo555/feat/stepfun-step-3.5-flash-2603
feat(stepfun): add step-3.5-flash-2603 model
2026-04-07 11:21:02 -05:00
Aiden Cline 99e046916c Merge pull request #1360 from jonathancaevans/update-kimi-k2p5-turbo-name
Update Kimi K2.5 Turbo display name for Firepass clarity
2026-04-07 11:09:02 -05:00
Aiden Cline 98baf7eaca Merge pull request #1364 from seffhunnn/fix-openrouter-glm-5-turbo-web
fix: correct glm-5-turbo pricing and context for openrouter
2026-04-07 11:08:29 -05:00
Aiden Cline 462d7fa620 Merge pull request #1365 from dpuyosa/feat/venice-add-qwen-3-6-plus
Venice: Add Qwen 3.6 Plus model
2026-04-07 11:08:15 -05:00
cantalupo555 7eea1dec18 feat(stepfun): add step-3.5-flash-2603 model
- Add Step 3.5 Flash 2603 model optimized for agent workflows

- Released April 2, 2026, same pricing as step-3.5-flash
2026-04-07 12:01:26 -03:00
dpuyosa 10652fb8dc feat(venice): add Qwen 3.6 Plus model
- Add Qwen 3.6 Plus with 1M context window

- Support text, image, and video input modalities

- Enable reasoning, tool calling, and structured output
2026-04-07 13:41:42 +02:00
Mohd Saif 816f9bb585 fix: correct glm-5-turbo pricing and context 2026-04-07 14:45:31 +05:30
Jonathan Evans 03376e9986 Update Kimi K2.5 Turbo display name
Add (firepass) suffix to clarify this is the Firepass router endpoint.

Follow-up to #1256
2026-04-06 13:10:01 -07:00
Ruben Di Battista 91d73da942 Enable reasoning capability for Qwen3 Coder Next model 2026-04-06 21:51:16 +02:00
Ruben Di Battista db7e4ff9ba Add missing Qwen3 Coder Next model to Amazon Bedrock 2026-04-06 21:07:36 +02:00
Aiden Cline d6145d1479 Merge pull request #1354 from llc1123/chore/zenmux-updates
zenmux: remove deprecated models and add Agnes 1.5 entries
2026-04-06 08:27:09 -07:00
粒粒橙 ec314aa0f1 fix(zenmux): add image support for agnes-1.5-lite 2026-04-06 14:28:22 +08:00
粒粒橙 188c36696e zenmux: remove deprecated models and add models from sapiens-ai 2026-04-06 14:08:08 +08:00
Aiden Cline 2b5f3f961d Merge pull request #1340 from battall/patch-1
fix: google/gemma-4 -it suffixes
2026-04-05 21:10:43 -07:00
Aiden Cline bf8ce0b8f8 Merge pull request #1342 from seffhunnn/fix-deepseek-context-window
fix: correct deepseek-chat context window to 131072
2026-04-05 21:06:53 -07:00
Aiden Cline 5e3eb74da2 Merge pull request #1341 from u1630022/feat-openrouter-trinity-large-thinking
add trinity large thinking to openrouter provider
2026-04-05 21:06:19 -07:00
Aiden Cline 542620b288 Merge pull request #1343 from spyridonas/patch-1
Fix capitalization in model name
2026-04-05 21:05:15 -07:00
Aiden Cline f6576ffb0f Merge pull request #1344 from dpuyosa/venice/gemma4-trinity
Venice: Add Gemma 4 and Arcee Trinity models, enable GLM 4.6 reasoning
2026-04-05 21:05:00 -07:00
Aiden Cline 88649810a6 Merge pull request #1346 from GHagui/add-gemma-4-openrouter
feat(openrouter): add Gemma 4 26B A4B and Gemma 4 31B models
2026-04-05 21:04:42 -07:00
Aiden Cline 1367d90f32 Merge pull request #1353 from cyberofficial/vultr
[Vultr] Update Inference Models
2026-04-05 21:03:58 -07:00
Cyber Official 322b1154be Update Inference Models
Vultr Updated Inference API endpoint with different versions of models, this commit adds in new models and corrects some information
2026-04-05 17:12:13 -04:00
Gabriel Hagui 7336867f65 Apply suggestions from code review
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-04-04 21:17:55 -03:00
GHagui caaf4d8b0a Merge branch 'add-gemma-4-openrouter' of https://github.com/GHagui/models.dev into add-gemma-4-openrouter 2026-04-05 00:09:19 +00:00
GHagui 08c2b928b6 fix(openrouter) Normalize formatting in Gemma 4 26B A4B and Gemma 4 31B TOML files 2026-04-05 00:03:44 +00:00
Gabriel Hagui 3a4b5e50cb Add files via upload
Fixing CRLF to LF
2026-04-04 20:51:25 -03:00
Gabriel Hagui 3244ef835e feat(openrouter) Add Gemma 4 26B A4B and Gemma 4 31B 2026-04-04 20:43:15 -03:00
GHagui 346b12f42f feat(openrouter) Add Gemma 4 26B A4B and Gemma 4 31B 2026-04-04 23:38:56 +00:00
dpuyosa 116d91a0cc [venice] Add Gemma 4 and Arcee Trinity models, enable GLM 4.6 reasoning
- Add Google Gemma 4 26B A4B and 31B instruct models with multimodal support
- Add Arcee Trinity Large Thinking reasoning model
- Enable reasoning capability for GLM 4.6
- Reduce Qwen3 5-9B output limit to 32K
2026-04-05 00:08:47 +02:00
Spyros Sakellaropoulos 778036c53c Fix capitalization in model name 2026-04-05 00:10:17 +03:00
Mohd Saif Ansari e86cc85dd4 fix: update deepseek-chat context window 2026-04-05 01:59:40 +05:30
Eavan Pattie a6f030fe1c add trinity large thinking to openrouter provider
* fixes trinity-large-thinking erroneously marked as not open_weight in
  vercel provider
2026-04-04 22:44:25 +03:00
Aiden Cline 1eb0b8c8e1 Merge pull request #1338 from anthraxx/alibaba-qwen3.6-plus
feat(alibaba): add Qwen3.6 Plus model configuration to all regions
2026-04-04 11:55:23 -07:00
Aiden Cline 1bc0b9d81f Merge pull request #1335 from branchgrove/dev
Add google-vertex DeepSeek V3.2 model
2026-04-04 11:51:37 -07:00
Battal Doğukan Hazar eca166ed4d fix: -it suffix for google/gemma-4 2026-04-04 21:48:31 +03:00
Aiden Cline e64404b173 Merge pull request #1336 from WJQSERVER/dev
Add Google Gemma 4 31B IT to NVIDIA(NIM) provider
2026-04-04 11:48:19 -07:00
Battal Doğukan Hazar e9c8425b32 fix: google/gemma-4 -it suffix 2026-04-04 21:47:27 +03:00
Aiden Cline 8618de3429 Merge pull request #1333 from riccardogiorato/dev
Remove deprecated models from TogetherAI provider
2026-04-04 11:28:46 -07:00
Aiden Cline 6e64316225 Merge pull request #1337 from fanweixiao/vivgrd/gpt-5.4
provider(vivgrid): add GPT-5.3 Codex, GPT-5.4 Mini, and GPT-5.4 Nano models
2026-04-04 11:28:33 -07:00
Aiden Cline a36d032e93 Merge pull request #1339 from cantalupo555/remove/qwen3.6-plus-preview-free
chore(openrouter): remove discontinued Qwen3.6 Plus Preview free
2026-04-04 11:28:18 -07:00
Aiden Cline e74dce023f Merge pull request #1315 from seffhunnn/fix-pdf-modalities
fix: add missing pdf modality to supported OpenAI models
2026-04-04 11:28:07 -07:00
cantalupo555 47f9b2b910 chore(openrouter): remove discontinued Qwen3.6 Plus Preview free
- Remove qwen3.6-plus-preview:free model after Qwen3.6 Plus free replaced it
2026-04-04 15:08:11 -03:00
Levente Polyak 6ba0af61d6 feat(alibaba): add Qwen3.6 Plus model configuration to all regions
- Add missing regions
- Add coding-plan variants
- Use pricing from model info page

Link: https://bailian.console.alibabacloud.com/cn-beijing?tab=model#/model-market/detail/qwen3.6-plus
2026-04-04 19:52:15 +02:00
C.C. Fan 24d4a9b8dd provider(vivgrid): add GPT-5.3 Codex, GPT-5.4 Mini, and GPT-5.4 Nano models
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-04 23:07:49 +08:00
wjqserver d5b420768a feat: add Google Gemma 4 31B IT to NVIDIA provider 2026-04-04 22:26:39 +08:00
Riccardo Giorato 66ada85298 more deprecations 2026-04-04 14:18:08 +02:00
Elias Lundgren 2ffb1d9181 Add google-vertex DeepSeek V3.2 model 2026-04-04 13:57:42 +02:00
Riccardo Giorato 04768ff141 Merge pull request #1 from riccardogiorato/orchestrator/remove-deprecated-models-g5nx
Remove deprecated models from togetherai provider
2026-04-03 21:51:02 +02:00
orchestrator-dev[bot] 9560d51908 Remove deprecated models from togetherai provider 2026-04-03 19:49:40 +00:00
Aiden Cline 6a41e31306 Merge pull request #1326 from michaelnchin/fix/amazon-bedrock-structured-output
fix: set correct structured output values for Amazon Bedrock models
2026-04-03 14:03:05 -05:00
Aiden Cline 133c529ebf Merge pull request #1327 from llc1123/chore/zenmux-new-models
zenmux: add KAT-Coder-Pro-V2, Qwen3.6-Plus, and GLM 5V Turbo
2026-04-03 14:02:40 -05:00
Aiden Cline 0a6b828e42 Merge pull request #1331 from zhongruan0522/feat/xiaomi-token-plan
feat: add Xiaomi Token Plan providers (cn/sgp/ams)
2026-04-03 14:00:46 -05:00
Aiden Cline 406f2f66c6 Merge pull request #1323 from Pxys-io/fix-xiaomi-mimo-cache-pricing
fix(openrouter): add missing cache_read pricing for xiaomi/mimo-v2-pro and xiaomi/mimo-v2-omni
2026-04-03 13:59:51 -05:00
Aiden Cline 948ce76d8d Merge pull request #1325 from DEAN-Cherry/dev
revert: alibaba-cn MiniMax-M2.5 to MiniMax-M2.7
2026-04-03 13:47:53 -05:00
Aiden Cline e3dd89ba2e Merge pull request #1332 from vercel/update-vercel-models-20260403-1639
Update Vercel models
2026-04-03 13:47:33 -05:00
Aiden Cline 7e5ae3bb06 Merge pull request #1329 from Track07-cda/alibaba-cn-qwen3.6
feat(alibaba-cn): add Qwen3.6 Plus model configuration
2026-04-03 13:47:19 -05:00
Aiden Cline 5392c185d2 Merge pull request #1328 from sadoclaw/add-gemma-4-models
Add Gemma 4 26B and 31B models
2026-04-03 13:47:00 -05:00
github-actions[bot] 72613f5dbf chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-04-03 16:39:32 +00:00
zhongruan0522 01098f81a9 feat: add Xiaomi Token Plan providers (cn/sgp/ams) 2026-04-03 11:22:04 +00:00
Track07-cda 65e798c8f2 feat(alibaba-cn): add Qwen3.6 Plus model configuration 2026-04-03 15:58:53 +08:00
sadoclaw 28a75176c4 Add Gemma 4 26B and 31B models 2026-04-03 08:34:41 +03:00
粒粒橙 61e63db8e3 zenmux: add new models 2026-04-03 13:09:53 +08:00
Michael Chin 95cd6196fa set correct structured_output values for Amazon Bedrock models 2026-04-02 21:15:18 -07:00
Bryan 19c1f2ebe2 revert: alibaba-cn MiniMax-M2.5 to MiniMax-M2.7
Revert PR #1002 - MiniMax-M2.5 is no longer available, now using MiniMax-M2.7
2026-04-03 12:09:05 +08:00
pxys-io 4d25bb5622 fix(openrouter): add missing cache_read pricing for xiaomi/mimo-v2-pro and xiaomi/mimo-v2-omni
OpenRouter charges bash.20/M cache_read tokens for mimo-v2-pro and
bash.08/M for mimo-v2-omni, but these were missing from the cost section.

Source: https://openrouter.ai/api/v1/models

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-03 04:08:55 +02:00
Aiden Cline 8845bf3f3b Merge pull request #1321 from BlockListed/cortecs-add-glm-5
Add glm-5 to cortecs
2026-04-02 19:28:50 -05:00
Aiden Cline 9b5bcde109 Merge pull request #1322 from fhennerkes/dev
poe: add GPT-5.3-Codex-Spark and Kimi-K2.5-FW models
2026-04-02 19:28:41 -05:00
Frank fa75002f19 update zen models 2026-04-02 19:01:00 -04:00
fhennerkes 69b6f3e94a poe: add GPT-5.3-Codex-Spark and Kimi-K2.5-FW models
Add 2 new free models
2026-04-02 15:11:34 -07:00
BlockListed 26f6b602fc add glm-5 to cortecs 2026-04-02 21:45:20 +02:00
Aiden Cline 287c69acaf Merge pull request #1314 from dpark01/add-kimi-k2-thinking-vertex
feat(google-vertex): add moonshotai/kimi-k2-thinking-maas model
2026-04-02 11:30:08 -05:00
Aiden Cline 2b46c3aef2 Merge pull request #1320 from cantalupo555/feature/qwen3.6-plus-free
feat: add Qwen3.6 Plus free on OpenRouter
2026-04-02 11:29:46 -05:00
cantalupo555 a9b7faa409 feat(openrouter): add qwen3.6-plus free model configuration
- Add Qwen3.6 Plus (free) provider configuration
- $0 pricing with 1M context window
- Multimodal input support (text, image, video)
- Full capabilities: reasoning, tool calls, structured output
- Attachment enabled for vision modality
2026-04-02 13:23:09 -03:00
Jack ad3305bc08 Merge branch 'dev' of github.com:anomalyco/models.dev into dev 2026-04-03 00:12:23 +08:00
Jack 0198228bbb Add MiMo V2 Pro/Omni models and family entries
Register two new MiMo V2 models and update model family values. Added "mimo-pro" and "mimo-omni" to ModelFamilyValues in packages/core/src/family.ts, and added corresponding TOML model descriptors under providers/opencode-go/models: mimo-v2-pro.toml and mimo-v2-omni.toml. The Pro model includes very large context (1,048,576) and tiered costs for >200k context, while the Omni model exposes multimodal input (text, image, audio, pdf) and a large 262,144 context. Both files set metadata (release_date, last_updated, knowledge cutoff, open_weights) and define interleaved reasoning field, costs, limits, and modalities.
2026-04-03 00:11:58 +08:00
Aiden Cline 165bc7df94 Merge pull request #1316 from NIKU-SINGH/remove-claude-3-7-sonnet-latest
Remove invalid claude-3-7-sonnet-latest model entry
2026-04-02 10:51:44 -05:00
NIKU-SINGH 36956dc4f4 Remove invalid claude-3-7-sonnet-latest model entry
Anthropic's API does not accept claude-3-7-sonnet-latest as a model ID
(returns 404). The versioned alias claude-3-7-sonnet-20250219 should be
used instead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-02 16:27:15 +05:30
Mohd Saif Ansari 5ec371653b fix: add missing pdf modality to supported OpenAI models 2026-04-02 12:40:50 +05:30
Frank bb62fc43c1 update zen models 2026-04-01 22:59:53 -04:00
Frank c1465447ab update zen models 2026-04-01 17:53:17 -04:00
Daniel Park 471e9ec492 feat(google-vertex): add moonshotai/kimi-k2-thinking-maas model 2026-04-01 16:24:14 -04:00
Aiden Cline 57c3d38c21 Merge pull request #1313 from zhongruan0522/dev
Add GLM-5V-Turbo
2026-04-01 13:08:38 -05:00
Aiden Cline d19d2508b0 Merge pull request #1273 from Cahl-Dee/add-the-grid-ai
feat: add thegrid.ai provider and associated models
2026-04-01 12:25:35 -05:00
zhongruan0522 d0d2fffcfb Add GLM-5V-Turbo 2026-04-01 16:30:38 +00:00
Aiden Cline 07f48b1f2a Merge pull request #1311 from Moniet/feat/add-gpt-image-models
feat(openai): add openai gpt-image models
2026-04-01 10:52:12 -05:00
Moniet a33e15d095 feat(openai): add openai gpt-image models 2026-04-01 17:03:36 +05:30
Aiden Cline b64c2100f4 Merge pull request #1306 from dinhkim/feat/add-openrouter-glm-5-turbo
feat: add GLM-5-Turbo model in OpenRouter AI provider
2026-03-31 23:11:14 -05:00
Kim Truong 7ba7237633 feat: add GLM-5-Turbo model in OpenRouter AI provider 2026-03-31 23:18:02 +07:00
Aiden Cline 6e1ca23e6c Merge pull request #1305 from marcelarie/dev
Update synthetic.new model: Qwen3.5-397B
2026-03-31 10:43:23 -05:00
Aiden Cline 8ffb4ed5a7 Merge pull request #1301 from xinrui-z/fix/aihubmix-zod-validation-provider
fix(aihubmix): zod-validation-error
2026-03-31 10:43:12 -05:00
Xinrui 6b12398083 Replace @ai-sdk/openai-compatible with the official aihubmix/ai-sdk-provider package and remove the hardcoded api URL, as the dedicated package handles schema validation and endpoint configuration internally. 2026-03-31 23:29:10 +08:00
Aiden Cline 751745f200 Merge pull request #1304 from dpuyosa/add-gpt-54-mini-venice
Venice: Add GPT-5.4 Mini and remove discontinued models
2026-03-31 10:19:03 -05:00
marcelarie 593308b596 Merge branch 'dev' of github.com:marcelarie/models.dev into dev 2026-03-31 13:05:29 +02:00
marcelarie 54386f35b7 Added: Missing synthetic.new Qwen3.5-397B model 2026-03-31 13:02:19 +02:00
dpuyosa 73a83971e8 [venice] Add GPT-5.4 Mini and remove discontinued models
- Add GPT-5.4 Mini with reasoning and tool_call
- Update Aion 2.0 with reasoning capability
- Remove discontinued mistral-31-24b and qwen3-4b
2026-03-31 09:49:09 +02:00
Xinrui b5d8da29bb fix(aihubmix): switch to dedicated provider package to resolve Zod validation error
Replace @ai-sdk/openai-compatible with the official aihubmix/ai-sdk-provider
package and remove the hardcoded api URL, as the dedicated package handles
schema validation and endpoint configuration internally.
2026-03-31 12:37:56 +08:00
Aiden Cline 798538f9ae Merge pull request #1254 from llc1123/dev
feat(zenmux): route models through protocol-specific SDKs
2026-03-30 18:50:02 -05:00
Aiden Cline d4ce566f27 Merge pull request #1296 from sylviezhang37/update-vercel-models-20260330-1655
Update Vercel models
2026-03-30 18:49:47 -05:00
Aiden Cline 2042e3dd71 Merge pull request #1298 from cantalupo555/feature/qwen3.6-plus-preview-free
feat: add Qwen3.6 Plus Preview free on OpenRouter
2026-03-30 18:49:34 -05:00
Aiden Cline 08b577b6c9 Merge pull request #1299 from cyberofficial/vultr
Remove discontinued Vultr models
2026-03-30 18:49:24 -05:00
Cyber Official 01c3d44f99 Remove discontinued Vultr models
Vultr no longer supports these models on Serverless Inference:
- DeepSeek R1 Distill Llama 70B
- DeepSeek R1 Distill Qwen 32B
- GPT OSS 120B
- Llama 3.1 Nemotron Ultra 253B v1
- NVIDIA Nemotron 3 Super 120B A12B NVFP4

Remaining active models:
- MiniMax-M2.5: $0.30/M in, $1.20/M out
- DeepSeek-V3.2: $0.55/M in, $1.65/M out
- Kimi-K2.5: $0.55/M in, $2.75/M out
- GLM-5-FP8: $0.85/M in, $3.10/M out
2026-03-30 17:39:00 -04:00
cantalupo555 1695bfb958 feat: add Qwen3.6 Plus Preview free on OpenRouter
- Add free variant of Qwen3.6 Plus Preview to OpenRouter provider
- 1M context, 65K max output, /bin/bash.00 pricing
- Text-only modality (OpenRouter API reports text->text)
- Source: OpenRouter /api/v1/models API

---
Co-Authored-By: opencode https://opencode.ai
2026-03-30 18:08:54 -03:00
Frank bad8bedd25 update zen models 2026-03-30 16:50:10 -04:00
github-actions[bot] ad26e881ce chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-30 16:55:28 +00:00
Aiden Cline 348932f00c Merge pull request #1290 from zhongruan0522/dev
feat: add gpt-5.3-chat-latest model to openai
2026-03-29 22:25:52 -05:00
Aiden Cline d564c80b78 Merge pull request #1289 from pedrxd/mistral-add-mistral-small-4
Adding mistral small 4
2026-03-29 22:23:57 -05:00
Aiden Cline cba38e4707 Merge pull request #1287 from aeonzh/patch-1
Use correct name for Nemotron 3 Super (free) on OpenRouter
2026-03-29 12:35:18 -05:00
Aiden Cline 7ce9e95d62 Merge pull request #1294 from sk0x0y/add-glm-5.1-nanogpt
feat(nano-gpt): add glm-5.1 and glm-5.1:thinking models
2026-03-29 12:34:31 -05:00
sk0x0y a05b2a6be7 add glm-5.1 model to nano-gpt provider 2026-03-29 23:12:38 +09:00
zhongruan0522 17f41b72ad feat: add gpt-5.3-chat-latest model to openai 2026-03-29 11:18:44 +00:00
Pedro Ruiz 16cc382572 feat(mistral): Adding mistral small 4 2026-03-29 09:46:58 +02:00
Aiden Cline 3d456e3798 Merge pull request #1286 from khda-tech/dev
Add gemma family for google provider
2026-03-28 20:07:16 -05:00
Aiden Cline 0223ab3107 Merge pull request #1288 from cgilly2fast/dev
fix(firmware): incorrect model name for glm-5
2026-03-28 20:06:57 -05:00
Colby Gilbert 28ad50f6e9 fix(firmware): incorrect model name for glm-5 2026-03-27 22:26:19 -07:00
Zheng He Hu bf8fb378a4 Rename nemotron-3-super-120b-a12b-free.toml to nemotron-3-super-120b-a12b:free.toml 2026-03-28 02:54:35 +01:00
Aiden Cline b74242fdbf Merge pull request #1278 from fhennerkes/dev
poe: add Grok-4.20-Multi-Agent and DeepSeek-V3.2 models
2026-03-27 15:48:08 -05:00
Aiden Cline 8131cc947c Update providers/poe/models/novita/deepseek-v3.2.toml
Co-authored-by: Oleg Voronkovich <oleg-voronkovich@yandex.ru>
2026-03-27 15:21:16 -05:00
Khrulev Danil 95a73581cc Add gemma family for google provider 2026-03-27 21:39:52 +03:00
Zack Angelo 39ee133c98 mixlayer: adhere to logo standards, remove fill and size attributes 2026-03-27 09:23:09 -07:00
Aiden Cline c5e4e2c740 Merge pull request #1276 from voronkovich/feat-update-groq
feat(groq): Update Groq models
2026-03-27 10:51:40 -05:00
Aiden Cline 357c3021fb Merge pull request #1281 from zhongruan0522/dev
Added support for Zhipu AI's official CodingPlan GLM-5.1 model.
2026-03-27 09:49:49 -05:00
Aiden Cline 6afb0fea06 Merge pull request #1280 from dpuyosa/dev
Venice: Add Aion 2.0, update DeepSeek V3.2, remove Gemini 3 Pro Preview
2026-03-27 09:46:58 -05:00
dd781c4c15 feat: add glm-5.1 model to zai-coding-plan and zhipuai-coding-plan 2026-03-27 11:51:14 +00:00
dpuyosa 04e3b7c008 [venice] Add Aion 2.0, update DeepSeek V3.2, remove Gemini 3 Pro Preview
- feat(venice): add Aion 2.0 model
- fix(venice): enable tool_call and structured_output on DeepSeek V3.2
- fix(venice): remove deprecated Gemini 3 Pro Preview
2026-03-27 09:19:28 +01:00
Oleg Voronkovich ca40cb538d Updates 2026-03-27 00:37:40 +03:00
Aiden Cline f03de60559 Merge pull request #1259 from smakosh/llmgateway-models
feat: update LLM Gateway to 204 models
2026-03-26 15:25:22 -05:00
fhennerkes 0226a37a51 poe: add Grok-4.20-Multi-Agent and DeepSeek-V3.2 models 2026-03-26 12:18:13 -07:00
smakosh c2ba40d7d5 fix: logo format, remove README, minimax weights
- Normalize logo to 24x24, viewBox 0 0 40 40, currentColor
- Remove README.md (other providers don't have one)
- Mark all MiniMax models as open_weights = true

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 20:02:58 +01:00
smakosh d77bee4f29 fix: correct reasoning, vision, tools flags
The export script only checked the first active
provider for capabilities. Now checks all providers
and uses model ID patterns for reasoning detection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:55:28 +01:00
Oleg Voronkovich 5ec0ac2807 feat(groq): Update Groq models 2026-03-26 18:59:09 +03:00
Aiden Cline 62015086c6 Merge pull request #1274 from petit-blaireau/copilot/add-openrouter-mistral-small-4
Add Mistral Small 4 for OpenRouter
2026-03-25 19:47:51 -05:00
copilot-swe-agent[bot] 2d86bafb20 feat(openrouter): add Mistral Small 4 (mistral-small-2603)
Co-authored-by: petit-blaireau <1893252+petit-blaireau@users.noreply.github.com>
Agent-Logs-Url: https://github.com/petit-blaireau/models.dev/sessions/871bbf50-3ef0-4926-afd1-e95c79f6bd57
2026-03-26 00:03:38 +00:00
Cahl-Dee bf4e5aab17 remove family property and add open_weight 2026-03-25 16:57:02 -05:00
Cahl-Dee 1590791225 adding thegrid.ai provider and associated models 2026-03-25 16:09:54 -05:00
Aiden Cline 047f3356d6 Merge pull request #1265 from MiyakoMeow/add-glm-4.7-flashx
Add glm-4.7-flashx to ZAI/ZhipuAI
2026-03-25 16:09:24 -05:00
Aiden Cline 1394d2ca4d Merge pull request #1270 from NachoFLizaur/feat/bedrock-add-nemotron-super-3-120b
feat(amazon-bedrock): add NVIDIA Nemotron 3 Super 120B
2026-03-25 15:05:31 -05:00
Aiden Cline 5b73677b33 Merge pull request #1272 from NachoFLizaur/fix/bedrock-minimax-m2.5-glm-5-limits
fix(amazon-bedrock): correct MiniMax M2.5 and GLM-5 context/output limits
2026-03-25 15:05:18 -05:00
Nacho F. Lizaur 780db038c4 fix(amazon-bedrock): correct MiniMax M2.5 and GLM-5 context/output limits 2026-03-25 16:49:31 +01:00
Nacho F. Lizaur 29c1249d64 feat(amazon-bedrock): add NVIDIA Nemotron 3 Super 120B 2026-03-25 15:44:56 +01:00
lioZ129 1b0633b172 Update providers/hpc-ai/models/moonshotai/kimi-k2.5.toml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-25 17:15:16 +08:00
lioZ129 aed0ee3bb7 Update providers/hpc-ai/models/moonshotai/kimi-k2.5.toml
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-25 17:15:03 +08:00
Contributor 9fa7856fc6 feat: add HPC-AI model provider support 2026-03-25 16:55:45 +08:00
MiyakoMeow 8b80a2b34b Add glm-4.7-flashx to ZAI/ZhipuAI 2026-03-25 06:13:03 +08:00
Aiden Cline 897aa53905 Merge pull request #1257 from fhennerkes/dev
poe: add GPT-5.4-Nano and GPT-5.4-Mini models
2026-03-24 15:19:13 -05:00
Aiden Cline 5c36e54a43 Merge pull request #1260 from Happily-Coding/dev
Add MiniMax 2.5 to siliconflow
2026-03-24 15:18:39 -05:00
Aiden Cline a38f9373ab Merge pull request #1261 from cyberofficial/vultr
[Vultr] Delete Qwen2.5-Coder-32B-Instruct.toml
2026-03-24 10:14:38 -05:00
Aiden Cline fb72c181f8 Merge pull request #1263 from fanweixiao/vivgrd/gpt-5.4
provider(vivgrid): add gpt-5.4 and upgrade gemini-3 to gemini-3.1
2026-03-24 10:14:20 -05:00
C.C. Fan 601300c7e7 provider(vivgrid): add gpt-5.4 and upgrade gemini-3 to gemini-3.1 2026-03-24 21:04:59 +08:00
Cyber Official 8d9e966867 Delete Qwen2.5-Coder-32B-Instruct.toml
Model no longer offered
2026-03-24 02:48:38 -04:00
UrielS cf8f12b375 Add MiniMax 2.5 to siliconflow
Add MiniMax 2.5 to siliconflow
2026-03-24 01:14:36 -03:00
UrielS 116e35a32a Add MiniMax 2.5 to siliconflow 2026-03-24 01:13:37 -03:00
Aiden Cline 87a02b897a Merge pull request #1258 from vglafirov/feat/gitlab-gpt-5-4-models
feat(gitlab): add GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano, and GPT-5.3 Codex models
2026-03-23 22:00:07 -05:00
Vladimir Glafirov 849a529a42 fix(gitlab): use unscoped gitlab-ai-provider npm package name 2026-03-23 23:52:13 +01:00
smakosh c2f0bd08e6 feat: update LLM Gateway models to 204
Regenerated model exports from latest LLM Gateway
source. Adds 66 new models including Claude 4.6,
GPT-5.x, Gemini 3.1, Grok 4, and more. Removes
deprecated model aliases.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 22:28:46 +01:00
Vladimir Glafirov 5257d0919a feat(gitlab): add GPT-5.4, GPT-5.4 Mini, GPT-5.4 Nano, and GPT-5.3 Codex models 2026-03-23 21:41:11 +01:00
fhennerkes 379ab2757f poe: add GPT-5.4-Nano and GPT-5.4-Mini models
Add 2 new OpenAI models from Poe API:

GPT-5.4-Nano (released 2026-03-11):
- Reasoning support, 400K context, 128K output
- Cost: $0.18/M input, $1.1/M output
- Modalities: text, image

GPT-5.4-Mini (released 2026-03-12):
- Reasoning support, 400K context, 128K output
- Cost: $0.68/M input, $4/M output
- Modalities: text, image

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-23 13:13:10 -07:00
Aiden Cline 9838c55e29 Merge pull request #1256 from jonathancaevans/add-kimi-k2p5-turbo-router
Add Fireworks Kimi K2.5 Turbo router
2026-03-23 15:08:32 -05:00
Aiden Cline 4235bc6432 Merge pull request #1249 from tobwen/cleanup/openrouter-deprecated-models
chore(openrouter): remove deprecated and unavailable models
2026-03-23 15:07:27 -05:00
Jonathan Evans 29c3e9cbf4 Add Kimi K2.5 Turbo router for Fireworks
- Model ID: accounts/fireworks/routers/kimi-k2p5-turbo

- Pricing set to 0 (handled at subscription layer)

- Supports text and image input, text output

- Includes reasoning capabilities
2026-03-23 16:01:08 -04:00
Aiden Cline b0c1f37aad Merge pull request #1255 from sylviezhang37/update-vercel-models-20260323-1954
Update Vercel models
2026-03-23 15:00:14 -05:00
github-actions[bot] bd07f155f5 chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-23 19:54:44 +00:00
粒粒橙 0f95849d38 fix(zenmux): align model metadata with runtime support 2026-03-23 23:06:36 +08:00
粒粒橙 8dc90a4097 feat(zenmux): route models through protocol-specific SDKs 2026-03-23 21:48:00 +08:00
Aiden Cline 0a19559e4e Merge pull request #1252 from tarun1793/add-glm-5-fastrouter
Add GLM-5 model to fastrouter provider
2026-03-23 08:13:45 -05:00
Aiden Cline f27f83bdf9 Merge pull request #1253 from jacksonwilliamsva/add-bedrock-minimax-m2.5-glm-5
feat(amazon-bedrock): add MiniMax M2.5 and GLM-5 models
2026-03-23 08:13:35 -05:00
Aiden Cline 7b050ec719 Merge pull request #1244 from BlockListed/cortecs-add-claude-models
Add more claude models to cortecs
2026-03-23 08:13:27 -05:00
Aiden Cline 443cfd7703 Merge pull request #1247 from wojons/dev
Add Nemotron 3 Super model to OpenRouter and NVIDIA providers
2026-03-23 08:11:12 -05:00
Aiden Cline 6d648bf471 Merge pull request #1250 from dsingal0/dev
correct model name for nemotron super 3 on baseten
2026-03-23 08:10:45 -05:00
Jackson Williams e1a83a6812 feat(amazon-bedrock): add MiniMax M2.5 and GLM-5 models
Add two newly available Amazon Bedrock models:

- minimax.minimax-m2.5: 1M context, /bin/bash.30/.20 per 1M tokens
- zai.glm-5: 200K context, .00/.20 per 1M tokens

Both models were added to Amazon Bedrock on March 18, 2026.
Specs sourced from AWS Bedrock pricing page and vendor documentation.
2026-03-23 11:41:21 +11:00
Tarun b8606ed0e4 use latest price from fastrouter 2026-03-22 23:47:13 +00:00
Tarun 69c4600842 Override fastrouter glm-5 with zai glm-5 values 2026-03-22 23:43:09 +00:00
Tarun 5eb4a369f3 Add GLM-5 model to fastrouter provider 2026-03-22 23:31:53 +00:00
Dhruv Singal 17df1b49ce Update Baseten Nemotron model name 2026-03-22 13:04:40 -07:00
Dhruv Singal f18bc9b95b Update Baseten Nemotron display name 2026-03-22 13:00:49 -07:00
Dhruv Singal 485c37e862 Rename Baseten Nemotron model to match API ID 2026-03-22 12:57:10 -07:00
tobwen 0f092e3f62 chore(openrouter): remove expired/revealed/ended endpoints 2026-03-22 12:28:08 +00:00
tobwen a7bcd7e632 chore(openrouter): remove models without endpoints 2026-03-22 12:27:59 +00:00
Alexis Okuwa 6d081af472 Add Nemotron 3 Super model to OpenRouter and NVIDIA providers 2026-03-22 05:45:00 -05:00
Aiden Cline 8ee9ea1d96 Merge pull request #1243 from v1gnesh/dev
Update Grok 4.2 model names
2026-03-21 11:56:37 -05:00
Aiden Cline c71a365320 Merge pull request #1245 from Daltonganger/add-nanogpt-minimax-m2-7
Add NanoGPT MiniMax M2.7 model metadata
2026-03-21 11:55:15 -05:00
Ruben Beuker bb0e828b77 add NanoGPT MiniMax M2.7 model metadata 2026-03-21 14:58:35 +01:00
BlockListed 58cb222125 add more claude models to cortecs 2026-03-21 09:18:00 +01:00
v1gnesh 33f67289ee Rename model and remove beta status 2026-03-21 11:29:13 +05:30
v1gnesh ad34d7948c Update model name and status in TOML file 2026-03-21 11:28:22 +05:30
v1gnesh 7132293513 Add grok-4.20-0309-non-reasoning.toml file 2026-03-21 11:27:53 +05:30
Aiden Cline 495bc263e7 Merge pull request #1241 from BlockListed/add-minimax-2.5-cortecs
Add minimax M2.5 to cortecs
2026-03-20 15:55:28 -05:00
Aiden Cline 3811a45efe Merge pull request #1235 from anomalyco/github-sync
sync github copilot limits
2026-03-20 15:55:09 -05:00
BlockListed c4d04d2ed9 add minimax m2.5 to cortecs 2026-03-20 21:51:30 +01:00
Aiden Cline 20fcbbc336 Merge pull request #1240 from sylviezhang37/update-vercel-models-20260320-1642
Update Vercel models
2026-03-20 13:08:30 -05:00
github-actions[bot] 482b8ed69d chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-20 16:42:15 +00:00
Aiden Cline b77e95b84e Merge pull request #1236 from LYY/update/zenmux-sync
Sync ZenMux models with latest website data
2026-03-20 10:23:40 -05:00
Aiden Cline 463006f80c Merge pull request #1237 from vincentbernat/fix/scaleway-qwen3.5
fix(scaleway): set the correct family for Qwen 3.5 for Scaleway
2026-03-20 10:23:17 -05:00
Vincent Bernat 45b5abb875 fix(scaleway): set the correct family for Qwen 3.5 for Scaleway 2026-03-20 06:32:51 +01:00
LYY 4255e420ec Sync zenmux models with website
Add 17 new models found on zenmux.ai:
- google/gemini-3-pro-image-preview
- google/gemini-3.1-flash-lite-preview
- minimax/minimax-m2.7
- minimax/minimax-m2.7-highspeed
- openai/gpt-5.3-chat
- openai/gpt-5.3-codex
- openai/gpt-5.4
- openai/gpt-5.4-mini
- openai/gpt-5.4-nano
- openai/gpt-5.4-pro
- qwen/qwen3.5-flash
- qwen/qwen3.5-plus
- volcengine/doubao-seed-2.0-code
- x-ai/grok-4.2-fast
- x-ai/grok-4.2-fast-non-reasoning
- xiaomi/mimo-v2-omni
- xiaomi/mimo-v2-pro
- z-ai/glm-5-turbo

Mark anthropic/claude-3.5-sonnet as deprecated (not found on website)
2026-03-20 12:46:16 +08:00
Aiden Cline cda892e0d7 sync github copilot limits 2026-03-19 21:54:42 -05:00
Aiden Cline 098ff4f5bf Merge pull request #1227 from Verizane/dev
add OpenRouter models for gpt-5.4 mini and gpt-5.4 nano
2026-03-19 21:23:15 -05:00
Aiden Cline 0f70b8959f Merge pull request #1234 from mchenco/dev
Add Workers AI models: kimi-k2.5, nemotron-3-120b-a12b, glm-4.7-flash
2026-03-19 15:11:19 -05:00
mchen b8e6d58e5b add workers-ai models: kimi-k2.5, nemotron-3-120b-a12b, glm-4.7-flash 2026-03-19 14:59:17 -04:00
Roman Koslowski a855001a7e apply changes from review 2026-03-19 17:20:26 +01:00
Aiden Cline ac760b2268 Merge pull request #1230 from SamizuHM/feature/zhipuai-coding-plan-add-glm-5-turbo
zhipuai-coding-plan: Add glm-5-turbo.toml and replace symlink
2026-03-19 10:42:43 -05:00
Aiden Cline d4a5ea7ae7 Merge pull request #1226 from spiffytech/dev
Add Ollama Cloud support for Minimax M2.7
2026-03-19 10:41:47 -05:00
Aiden Cline 434ed89ba2 Merge pull request #1228 from dpuyosa/minimax_m2_7
Venice: Add MiniMax M2.7 and update DeepSeek V3.2 pricing
2026-03-19 10:41:16 -05:00
Aiden Cline 6d7719a62a Merge pull request #1229 from 0b1000/dev
Xiaomi: Add MiMo-V2-Pro and MiMo-V2-Omni
2026-03-19 10:41:06 -05:00
Aiden Cline 93637039ef Merge pull request #1231 from ariane-emory/feat/feat/add-xiaomi-mimo-v2-pro-and-omni
feat: add the Xiaomi MiMo V2 Pro and Xiaomi MiMo V2 Omni models to the OpenRouter provide
2026-03-19 10:40:44 -05:00
Ariane Emory 9c95f796c0 Merge remote-tracking branch 'upstream/dev' into feat/feat/add-xiaomi-mimo-v2-pro 2026-03-19 11:22:43 -04:00
Ariane Emory e8650b6073 feat: add xiaomi mimo-v2-pro and mimo-v2-omni models to openrouter 2026-03-19 11:18:46 -04:00
SamizuHM 23c2be6ff7 feat(zhipuai-coding-plan): add glm-5-turbo.toml and replace glm-5-turbo with symlink 2026-03-19 18:09:17 +08:00
Frank 913a63dbe6 update zen models 2026-03-19 00:33:45 -04:00
0b1000 503087e99b Merge branch 'anomalyco:dev' into dev 2026-03-19 12:28:38 +08:00
0b1000 48150f09d3 Xiaomi: Add MiMo-V2-Pro and MiMo-V2-Omni 2026-03-19 12:27:00 +08:00
Aiden Cline 5fef681657 Disable tool_call in grok model configuration 2026-03-18 23:09:30 -05:00
Frank 123054ae0c update zen models 2026-03-18 20:45:44 -04:00
Frank 03060d154b update zen models 2026-03-18 20:37:47 -04:00
dpuyosa 5c9b8108e0 Update minimax-m27.toml 2026-03-19 01:02:24 +01:00
dpuyosa c8084681f9 [venice] Add MiniMax M2.7 and update DeepSeek V3.2 pricing
- Add MiniMax M2.7 model with reasoning and tool_call support
 - Update DeepSeek V3.2 pricing (input: $0.33, output: $0.48, cache: $0.16)
2026-03-19 00:58:50 +01:00
Roman Koslowski 352ab4ae1b add gpt-5.4 mini and gpt-5.4 nano 2026-03-18 22:16:55 +01:00
spiffytech cf0b416b15 Added Ollama Cloud support for Minimax M2.7 2026-03-18 16:15:07 -04:00
Aiden Cline 38339a2a90 Merge pull request #1224 from APonce911/minimax-m2.7-openrouter
add MiniMax M2.7 to OpenRouter
2026-03-18 14:10:13 -05:00
Aiden Cline ff9040bf52 Update minimax-m2.7.toml 2026-03-18 14:09:26 -05:00
Aiden Cline 3039804af4 Delete providers/opencode/models/minimax-m2.7.toml 2026-03-18 14:08:55 -05:00
Frank 7a4ad7bec8 update go models 2026-03-18 14:40:25 -04:00
Zack Angelo 7a2ec5ab95 New provider: Mixlayer 2026-03-18 11:19:35 -07:00
airton 721cc122bc add MiniMax M2.7 to OpenRouter and OpenCode 2026-03-18 18:57:09 +01:00
Aiden Cline 0527f019af Merge pull request #1221 from sergical/fix/bedrock-claude-4-6-context-window-and-pricing
fix(amazon-bedrock): set Claude Sonnet 4.6 and Opus 4.6 context window to 1M
2026-03-18 12:17:57 -05:00
Aiden Cline c89371de50 Merge pull request #1223 from sylviezhang37/update-vercel-models-20260318-1659
Update Vercel models
2026-03-18 12:17:22 -05:00
Sylvie Zhang 6d6d4220d8 Enable open_weights in minimax-m2.7.toml 2026-03-18 10:12:37 -07:00
Sylvie Zhang 8b984eeec1 Enable open_weights in minimax-m2.7-highspeed model 2026-03-18 10:12:21 -07:00
github-actions[bot] 586027c8f1 chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-18 16:59:24 +00:00
Sergiy Dybskiy 343b5f87ef fix(amazon-bedrock): set Claude Sonnet 4.6 and Opus 4.6 context window to 1M
Both models support a 1M token context window natively on Bedrock via the
Converse API with no beta headers required. Verified empirically via the
AWS CLI (bedrock-runtime converse): 950K tokens succeeds, >1M returns
'prompt is too long: N tokens > 1000000 maximum'.

The AWS Bedrock pricing page confirms long context pricing for these two
models is identical to standard pricing (no surcharge), so the
[cost.context_over_200k] section is removed as it was incorrect.
2026-03-18 12:20:38 -04:00
Aiden Cline 955b773ee5 Merge pull request #1218 from pomidornijfrukt/azure/5.4-mini-nano
Add GPT-5.4 Mini and Nano models for Azure providers
2026-03-18 10:31:13 -05:00
Aiden Cline 98559071f0 Merge pull request #1217 from cgilly2fast/dev
chore(firmware): update base url and docs url
2026-03-18 10:30:44 -05:00
eCube-cachy 0660308816 add: GPT-5.4 Mini and Nano model configurations for Azure providers 2026-03-18 15:17:52 +02:00
Jack 380f9dd8eb Merge pull request #1216 from no1wudi/dev
Add MiniMax M2.7 and M2.7-highspeed models to 4 official providers
2026-03-18 16:29:59 +08:00
Jack 1cfdab1b18 update MiniMax-M2.7 cache_read to 0.06 2026-03-18 16:27:53 +08:00
Colby Gilbert 75a981f957 chore(firmware): update base url and docs url 2026-03-18 00:41:05 -07:00
Huang Qi 7fadbcadc8 Add MiniMax M2.7 and M2.7-highspeed models to 4 official providers 2026-03-18 15:21:06 +08:00
Frank 38f9092292 update zen models 2026-03-18 02:30:18 -04:00
Aiden Cline 92149b9eaa rm nonexistant github model 2026-03-17 21:41:51 -05:00
Aiden Cline b614f0e69c Merge pull request #1214 from luisrudge/dev
Add GPT-5.4 mini and nano to GitHub Copilot provider
2026-03-17 20:13:46 -05:00
Luís Rudge 67d6dac5c5 Add GPT-5.4 mini and nano to GitHub Copilot provider 2026-03-17 18:44:38 -06:00
Aiden Cline 7d3cc61a48 Merge pull request #1207 from PedroACosta/feat/add-dinference-provider
feat(providers): add dinference provider
2026-03-17 14:51:31 -05:00
Aiden Cline f02ea6c4d2 Merge pull request #1115 from skywalker512/feat/add-tencent-coding-plan
feat: add Tencent Coding Plan provider
2026-03-17 14:51:19 -05:00
Aiden Cline 0cb50eeece Merge pull request #1208 from scwgoire/march-update
Scaleway 26-03 model updates
2026-03-17 14:48:12 -05:00
Aiden Cline 878311d2e0 Merge pull request #1210 from dm-cohere/dm/fix-update-cohere-model-capabilities
fix(models): update cohere model capabilities
2026-03-17 14:32:27 -05:00
Aiden Cline a0e89f65d6 Merge pull request #1206 from 0b1000/dev
Rename minimax-m2.5.toml to MiniMax-M2.5.toml
2026-03-17 14:32:19 -05:00
Aiden Cline 74099b7c9c Merge pull request #1213 from smrdotgg/add-openai-gpt-5-4-mini-and-nano
Add OpenAI GPT-5.4 mini and nano
2026-03-17 14:31:24 -05:00
Aiden Cline ec522435c3 Merge pull request #1211 from sylviezhang37/update-vercel-models-20260317-1807
Update Vercel models
2026-03-17 14:30:24 -05:00
smr d839cd37d4 Add OpenAI GPT-5.4 mini and nano
Capture the newly released mini and nano model metadata so models.dev reflects OpenAI's latest GPT-5.4 lineup with current pricing, limits, and knowledge cutoff.
2026-03-17 22:09:13 +03:00
github-actions[bot] ecb6ef7f93 chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-17 18:07:06 +00:00
Deirdre Meehan 8b4d341054 fix: cohere models on non-cohere providers 2026-03-17 16:51:24 +00:00
Deirdre Meehan 62f4a28308 fix: cohere provider models 2026-03-17 16:44:55 +00:00
Pedro 2fb8ef0dc8 feat(providers): add dinference provider 2026-03-17 14:13:36 +01:00
Gregoire de Turckheim 96968e2bf8 feat: Scaleway 26-03 model updates 2026-03-17 12:15:52 +01:00
0b1000 ee9d7879ce Rename minimax-m2.5.toml to MiniMax-M2.5.toml 2026-03-17 14:50:35 +08:00
Frank 71283512a6 update zen models 2026-03-17 02:21:13 -04:00
Frank cd4afd7e7c update zen models 2026-03-17 02:19:17 -04:00
Aiden Cline 1239d0190b Merge pull request #1204 from cyberofficial/vultr
VULTR: Updated Vultr model pricing to reflect current serverless inference rates
2026-03-16 16:10:39 -05:00
Aiden Cline 491bf6ccba Merge pull request #1202 from RaviTharuma/fix/chutes-pricing-update-2026-03
fix(chutes): update pricing and limits from live API
2026-03-16 16:10:25 -05:00
Cyber Official c993d0c121 Updated Vultr model pricing to reflect current serverless inference rates
Updated Vultr model pricing to reflect current serverless inference rates

This commit updates the cost configuration for all Vultr models to align with their latest pricing tiers:

**Cost Reductions:**
- DeepSeek-R1-Distill-Qwen-32B: Input $0.55→$0.30, Output $2.75→$0.30 (73% reduction)
- NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4: Input $0.55→$0.20, Output $2.75→$0.80 (64% input, 71% output reduction)
- Qwen2.5-Coder-32B-Instruct: Input $0.55→$0.20, Output $2.75→$0.60 (64% input, 78% output reduction)
- gpt-oss-120b: Input $0.55→$0.15, Output $2.75→$0.60 (73% input, 78% output reduction)
- MiniMax-M2.5: Input $0.55→$0.30, Output $2.75→$1.20 (45% input, 56% output reduction)

**Cost Adjustments:**
- DeepSeek-R1-Distill-Llama-70B: Input $0.55→$2.00, Output $2.75→$2.00 (significant increase)
- DeepSeek-V3.2: Output $2.75→$1.65 (40% reduction)
- Llama-3.1-Nemotron-Ultra-253B-v1: Output $2.75→$1.80 (35% reduction)
- GLM-5-FP8: Input $0.55→$0.85, Output $2.75→$3.10 (55% input, 13% output increase)
2026-03-16 13:58:28 -04:00
Aiden Cline e55c39a83d Merge pull request #1141 from sk0x0y/feature/nanogpt-confirmed-suffix2-fixes
fix(nano-gpt): rename confirmed 2-suffix model ids
2026-03-16 10:57:44 -05:00
Aiden Cline 6dea000e25 Merge pull request #1148 from sk0x0y/feature/nanogpt-bundled-confirmed-suffix2-fixes
fix(nano-gpt): rename bundled confirmed 2-suffix model ids
2026-03-16 10:57:30 -05:00
Aiden Cline 3f7a757b3f Merge pull request #1142 from sk0x0y/feature/nanogpt-more-confirmed-suffix2-fixes
fix(nano-gpt): rename more confirmed 2-suffix model ids
2026-03-16 10:56:36 -05:00
Aiden Cline c693fd71e2 Merge pull request #1194 from cyberofficial/vultr
Update Vultr model list with 10 new models and updated pricing
2026-03-16 10:55:19 -05:00
Aiden Cline 54e04e288a Merge pull request #1198 from amritbanerjee/add-glm-5-turbo
Add GLM-5-Turbo model support
2026-03-16 10:47:08 -05:00
Aiden Cline 462a179eee Merge pull request #1203 from jerome-benoit/fix/sap-ai-core-model-specs
fix(sap-ai-core): align model specs with official sources
2026-03-16 10:46:40 -05:00
Aiden Cline 95db59034d Merge pull request #1201 from dpuyosa/venice-new-models
Venice: Add new provider models
2026-03-16 10:45:59 -05:00
Aiden Cline 74dcc74e32 Merge pull request #1200 from dpuyosa/venice/pricing-update
Venice: Update model pricing for 7 models
2026-03-16 10:45:47 -05:00
Jérôme Benoit 57975f5f25 fix(sap-ai-core): align model specs with official sources 2026-03-16 13:59:06 +01:00
Ravi Tharuma ad7b063747 fix(chutes): update pricing and limits from live API
Synced 6 Chutes model definitions against the live API at
https://llm.chutes.ai/v1/models (queried 2026-03-16).

Models updated:
- deepseek-ai/DeepSeek-V3.2-TEE: cost 0.25/0.38→0.28/0.42, cache 0.125→0.14, context 163840→131072
- zai-org/GLM-5-TEE: cost 0.75/2.5→0.95/3.15, added cache_read 0.475
- zai-org/GLM-4.6-TEE: cost 0.35/1.5→0.4/1.7, added cache_read 0.2
- zai-org/GLM-4.6V: added cache_read 0.15
- MiniMaxAI/MiniMax-M2.5-TEE: cost 0.15/0.6→0.3/1.1, added cache_read 0.15
- Qwen/Qwen3.5-397B-A17B-TEE: cost 0.3/1.2→0.39/2.34, cache 0.15→0.195
2026-03-16 11:42:29 +01:00
dpuyosa f76e9f0551 [venice] Add new provider models
- Add mistral-small-3.2-24b-instruct, qwen3-5-9b, venice-uncensored-role-play, zai-org-glm-4.6
2026-03-16 09:37:41 +01:00
dpuyosa d70a49b36f [venice] Update model pricing for 7 models
- Remove context_over_200k pricing from Claude models
- Update Grok cache_read pricing from 0.5 to 0.25
- Update Kimi, MiniMax input/output pricing
2026-03-16 09:05:37 +01:00
amrit 3487135f9f Add GLM-5-Turbo model support 2026-03-16 12:14:50 +11:00
Aiden Cline 458a66c766 Merge pull request #1197 from kesku/update-perplexity-agent-models
Update Perplexity Agent API models
2026-03-15 10:59:23 -05:00
Frank d3a84dc7ec update zen models 2026-03-15 10:59:52 -04:00
Kesku ae61b25583 update perplexity-agent: add gpt-5.4 & nemotron, remove gemini-3-pro 2026-03-15 03:46:50 +00:00
Aiden Cline 74be576eda Merge pull request #1178 from Sewer56/change-synthetic-endpoint
Add OpenAI and Anthropic compatible endpoints
2026-03-14 20:55:30 -05:00
Aiden Cline 164df2cda0 Merge pull request #1191 from Alcatraz-Zhang/update/kilo-models
Sync Kilo model definitions with latest gateway catalog
2026-03-14 20:54:45 -05:00
Cyber Official 2cd7908369 Update Vultr model list with 10 new models and updated pricing
- Updated pricing to $0.55/M input tokens, $2.75/M output tokens
- Updated context limits to safe floor values from official testing
- Added accurate output token limits from official model documentation
- Added 5 new models: MiniMax M2.5, DeepSeek V3.2, GLM-5 FP8, Llama 3.1 Nemotron Ultra 253B, NVIDIA Nemotron 3 Super 120B A12B NVFP4
- Updated existing models: DeepSeek R1 Distill variants, GPT OSS 120B, Kimi K2.5, Qwen2.5 Coder 32B

Model specifications:
- MiniMax M2.5: 196K context, 4,096 output
- Qwen2.5-Coder-32B: 15K context, 256 output (notable low default)
- DeepSeek R1 Distill Llama 70B: 130K context, 4,096 output
- DeepSeek R1 Distill Qwen 32B: 130K context, 4,096 output
- DeepSeek V3.2: 163K context, 4,096 output
- Kimi K2.5: 261K context, 32,768 output (high output limit)
- GPT OSS 120B: 130K context, 8,192 output
- GLM-5 FP8: 202K context, 131,072 output (exceptionally high)
- Llama 3.1 Nemotron Ultra 253B: 32K context, 4,096 output
- NVIDIA Nemotron 3 Super 120B A12B NVFP4: 260K context, 8,192 output

All models set to text-only (no vision support) as confirmed.
2026-03-14 19:47:01 -04:00
Alcatraz-Zhang cc667340f5 Sync Kilo model definitions with latest gateway catalog
Refresh the Kilo provider catalog so models.dev matches the current gateway inventory, pricing, and availability.
2026-03-15 04:35:38 +08:00
Sewer56 f2cfc1435d Changed: Synthetic to use newer openai endpoint 2026-03-14 17:09:44 +00:00
Aiden Cline 35bb8cca47 Merge pull request #1172 from bigfluffycookie/add-deepinfra-llama-models
Add deepinfra llama models
2026-03-14 10:55:13 -05:00
Aiden Cline 3468a410e1 Merge pull request #1177 from ar27111994/dev
Add Grok 4.1 Fast configurations for reasoning and non-reasoning
2026-03-14 10:54:57 -05:00
Aiden Cline b1b5e3c5cd Merge pull request #1174 from dacbd/patch-1
fix(wandb): fix k2.5 settings
2026-03-14 10:54:35 -05:00
Aiden Cline 97f03ec672 Merge pull request #1175 from dacbd/patch-2
chore(docs): add note for manual testing with opencode
2026-03-14 10:54:22 -05:00
BigFluffyCookie 9b516924aa Add limit output for llama models 2026-03-14 11:49:57 +01:00
Ahmed Rehan 929a39600b feat(models): add Grok 4.1 Fast (Reasoning and Non-Reasoning) configurations 2026-03-14 14:27:24 +05:00
Daniel Barnes a87d8bb8cc chore(docs): add note for manual testing with opencode 2026-03-14 13:42:57 +09:00
Daniel Barnes 574139eb49 fix(wandb): fix k2.5 settings 2026-03-14 13:07:16 +09:00
Aiden Cline 1e3bc38b31 Merge pull request #1137 from mcowger/mcowger/correct-gemini-flash-lite-pricing
Fix incorrect pricing for gemini-3.1-flash-lite-preview
2026-03-13 18:41:41 -05:00
Aiden Cline 8916fe9874 Merge pull request #1171 from stephenkuhn214/dev
fix(amazon-bedrock): Remove deprecated and add missing models
2026-03-13 18:26:25 -05:00
BigFluffyCookie 5d956b41a6 Rename llama models to remove "Meta" prefix 2026-03-13 23:15:27 +01:00
BigFluffyCookie 42a7a14f69 Add Meta Llama models to DeepInfra provider 2026-03-13 22:53:39 +01:00
Stephen Kuhn f24ee000d7 fix(amazon-bedrock): update and add models
- Remove 19 deprecated/EOL models
- Add 7 new models: DeepSeek V3.2, Llama 3.1 405B, Magistral Small 1.2, Ministral 3 3B, Mistral Large 3, Pixtral Large, NVIDIA Nemotron Nano 3 30B
- Fix Devstral 2 123B: correct name, family, and open_weights
- Set accurate Bedrock launch dates for all new models
2026-03-13 16:02:04 -04:00
Aiden Cline 7196b1fb2c Merge pull request #1170 from anomalyco/revert-1166-fix/update-gpt53-codex-spark-preview
Revert "fix(openai): rename gpt-5.3-codex-spark to gpt-5.3-codex-spark-preview"
2026-03-13 14:31:33 -05:00
Aiden Cline f6c0d5a29d Revert "fix(openai): rename gpt-5.3-codex-spark to gpt-5.3-codex-spark-preview" 2026-03-13 14:30:58 -05:00
Aiden Cline ee63449aa5 sonnet 4.6 and opus 4.6 1M context 2026-03-13 14:27:55 -05:00
Aiden Cline 92aa44ec00 Merge pull request #1166 from rluisr/fix/update-gpt53-codex-spark-preview
fix(openai): rename gpt-5.3-codex-spark to gpt-5.3-codex-spark-preview
2026-03-13 14:18:41 -05:00
Aiden Cline 477284535c Rename model from 'GPT-5.3 Codex Spark Preview' to 'GPT-5.3 Codex Spark' 2026-03-13 14:17:44 -05:00
Aiden Cline 304233bdda Merge pull request #1169 from mdrxy/mdrxy/anthropic-token-limits
Update Claude 4.6 context/pricing
2026-03-13 14:13:40 -05:00
Aiden Cline 25d782ee2c Reduce context limit from 1,000,000 to 200,000 2026-03-13 14:13:30 -05:00
Aiden Cline 0f63393d51 Update context limit in claude-opus-4-6.toml 2026-03-13 14:12:56 -05:00
rluisr e780eefce2 fix(openai): rename gpt-5.3-codex-spark to gpt-5.3-codex-spark-preview
The OpenAI API expects model ID 'gpt-5.3-codex-spark-preview', not
'gpt-5.3-codex-spark'. Rename model files in both openai and opencode
providers so the generated model ID matches the actual API.
2026-03-14 03:59:03 +09:00
Aiden Cline a79585fa83 Merge pull request #1163 from micuintus/feature/Kimi2.5-fast
feat(nebius): add Kimi-K2.5-fast model
2026-03-13 13:14:38 -05:00
Aiden Cline 00801f74f2 Merge pull request #1164 from butyess/dev
Openrouter models: gemini 3.1 flash lite preview, grok 4.20 beta models.
2026-03-13 13:14:22 -05:00
Aiden Cline 185f6731ee Merge pull request #1162 from dpuyosa/feature/venice-grok-4-20-beta
Venice: Add Grok 4.20 Beta models
2026-03-13 12:53:28 -05:00
Aiden Cline d291b0575c Merge pull request #1167 from sylviezhang37/update-vercel-models-20260313-1639
Update Vercel models
2026-03-13 12:53:11 -05:00
Mason Daugherty 382d9f3e7d Update Claude 4.6 context/pricing 2026-03-13 13:53:04 -04:00
Aiden Cline e64f5fe963 Merge pull request #1168 from mdrxy/mdrxy/update-baseten
Update Baseten models
2026-03-13 12:51:56 -05:00
Mason Daugherty ea57ddfe7e Update Baseten models 2026-03-13 13:48:41 -04:00
github-actions[bot] 29463d7fa8 chore(vercel): update Vercel model definitions
Auto-generated by weekly workflow from Vercel AI Gateway API.

Co-Authored-By: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-13 16:39:30 +00:00
Jack bcc8db49ee Merge pull request #1165 from anomalyco/chore/openrouter-alpha-reasoning-details-20260313
feat(openrouter): add interleaved reasoning details for alpha models
2026-03-13 22:25:25 +08:00
Jack c8521d70f3 feat(openrouter): add interleaved reasoning details for alpha models 2026-03-13 22:20:54 +08:00
Federico Masi 490cd249e4 Openrouter models: gemini 3.1 flash lite preview, grok 4.20 beta models. 2026-03-13 15:11:12 +01:00
Michael Voigt dbc636f5f3 feat(nebius): add Kimi-K2.5-fast model 2026-03-13 12:35:13 +01:00
Michael Voigt 9a32f671a1 fix(nebius): lowercase model ID for Nemotron-3-Super-120B-A12B
The filename must match the API casing (lowercase) to avoid 'model does not exist' errors.
2026-03-13 12:35:08 +01:00
dpuyosa 856d925eda [venice] Add Grok 4.20 Beta models
- Add Grok 4.20 Beta model configuration (2M context, 128K output)
- Add Grok 4.20 Multi-Agent Beta model configuration
2026-03-13 10:48:38 +01:00
Aiden Cline 066a425917 Merge pull request #1158 from micuintus/feature/Nebius_Nemotron-3-Super-120b-a12b
feat(nebius): Add support for Nemotron-3-Super-120B-A12B
2026-03-12 22:20:20 -05:00
Aiden Cline 6df7f20cdc Merge pull request #1156 from dsingal0/dev
added nemotron super on baseten
2026-03-12 22:20:06 -05:00
Aiden Cline 78bb47b90e Merge pull request #1151 from dacbd/dacbd
fix(wandb): update models
2026-03-12 22:19:43 -05:00
Aiden Cline c121d86419 Merge pull request #1160 from kreatoo/dev
feat: add zai-org/glm-4.7 and zai-org/glm-4.7-flash to NanoGPT
2026-03-12 22:11:18 -05:00
Aiden Cline ab148eeb14 Merge pull request #1161 from Grin1024/dev
Add Claude Opus 4.6 and Sonnet 4.6 models to RequestY provider
2026-03-12 22:11:07 -05:00
lihui 49d196d326 Add Claude Opus 4.6 and Sonnet 4.6 models to RequestY provider 2026-03-13 09:00:54 +08:00
Kreato 8899b390ef feat: add zai-org/glm-4.7 and zai-org/glm-4.7-flash to NanoGPT 2026-03-13 00:27:09 +03:00
Michael Voigt 5217f62ddf fix(nebius): Follow context updates for Kimi 2.5 and GLM-5 2026-03-12 20:22:48 +01:00
Michael Voigt 55eaff9af1 feat(nebius): Add support for Nemotron-3-Super-120B-A12B 2026-03-12 20:22:21 +01:00
Dhruv Singal 7557c06ac0 update output length 2026-03-12 09:41:25 -07:00
Dhruv Singal e85d820121 fix input output 2026-03-12 08:29:01 -07:00
Dhruv Singal 499d3a39ef remove cache pricing 2026-03-12 08:21:22 -07:00
Dhruv Singal b9b38d6e33 added nemotron super on baseten 2026-03-12 08:18:46 -07:00
Aiden Cline ca24ac14fa Merge pull request #1153 from dpuyosa/dev
Venice: Update model output token limits
2026-03-12 10:08:46 -05:00
Aiden Cline 822546fc67 Merge pull request #1155 from spiffytech/dev
Add Ollama Cloud support for Nemotron 3 Super
2026-03-12 10:08:31 -05:00
Aiden Cline 4555195b71 Merge pull request #1152 from v1gnesh/dev
Update grok-4.20 model defs
2026-03-12 10:08:15 -05:00
spiffytech 5eae8effc6 Added Ollama Cloud support for Nemotron 3 Super 2026-03-12 09:28:47 -04:00
dpuyosa c1801aef87 [venice] Normalize model output token limits
- Update output limits to standard values across all models
2026-03-12 10:08:39 +01:00
v1gnesh 5e6464b272 Update grok-4.20-beta-reasoning 2026-03-12 10:27:40 +05:30
v1gnesh e1a4f23332 Update grok-4.20-beta-non-reasoning 2026-03-12 10:26:03 +05:30
v1gnesh 753e1f9f0c grok-multi-agent-beta update 2026-03-12 10:23:57 +05:30
Daniel Barnes 123ecd2ba5 docs url 2026-03-12 13:27:56 +09:00
Daniel Barnes f15cda9fcb remove old 2026-03-12 13:26:08 +09:00
Daniel Barnes 0205debbd3 fix values 2026-03-12 13:22:29 +09:00
Daniel Barnes 0059766509 number formating 2026-03-12 13:17:22 +09:00
Daniel Barnes be81b02916 additional model files 2026-03-12 13:02:17 +09:00
Daniel Barnes 2dab141166 initial script & model updates 2026-03-12 13:01:35 +09:00
Aiden Cline 45aa49af25 tweak: azure kimi k2.5 2026-03-11 22:35:20 -05:00
Aiden Cline 781fad3ad4 Merge pull request #1150 from cau1k/5.4-family
feat(azure): add 5.4/pro families
2026-03-11 22:14:08 -05:00
cau1k 99d2ffcfdd feat(azure): add 5.4/pro families 2026-03-11 20:59:11 -04:00
Aiden Cline 381d7cc19d Merge pull request #1149 from ariane-emory/fear/add-march-or-stealth-models
Add OpenRouter stealth models: Hunter Alpha and Healer Alpha
2026-03-11 18:07:50 -05:00
Ariane Emory 7482e22458 Fix family field to use 'alpha' for stealth models 2026-03-11 18:49:32 -04:00
Ariane Emory f5e6a402e6 Add OpenRouter stealth models: Hunter Alpha and Healer Alpha 2026-03-11 18:41:58 -04:00
Aiden Cline 9265852852 tweak: adjust some gh limits to align better w/ api 2026-03-11 15:23:44 -05:00
Aiden Cline dc98a32996 Merge pull request #1018 from Sewer56/add-synthetic-missing-models
Update synthetic.new models: promote MiniMax-M2.5, add GLM-4.7-Flash
2026-03-11 14:55:50 -05:00
Aiden Cline 56c39ae0f6 Merge pull request #1140 from sk0x0y/feature/nanogpt-thudm-id-fixes
fix(nano-gpt): rename THUDM 2 ids to canonical THUDM ids
2026-03-11 14:55:07 -05:00
Aiden Cline b1f43a7595 Merge pull request #1147 from msadiks/fix/alibaba-coding-minimax
fix: alibaba-coding-plan MiniMax-M2.5 context window
2026-03-11 14:54:37 -05:00
Matt Cowger fed8bcae19 Merge branch 'dev' into mcowger/correct-gemini-flash-lite-pricing 2026-03-11 12:23:42 -07:00
sk0x0y fb95150d02 fix(nano-gpt): rename VongolaChouko model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:20:39 +09:00
sk0x0y a7c9a240b4 fix(nano-gpt): rename Steelskull model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:20:39 +09:00
sk0x0y 6432a4a3e6 fix(nano-gpt): rename Sao10K model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:20:38 +09:00
sk0x0y f2e4a249fe fix(nano-gpt): rename NeverSleep model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:20:38 +09:00
sk0x0y 8667a6eed8 fix(nano-gpt): rename MarinaraSpaghetti model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:56 +09:00
sk0x0y 429554397a fix(nano-gpt): rename LatitudeGames model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:56 +09:00
sk0x0y a64e6ad0ac fix(nano-gpt): rename LLM360 model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:56 +09:00
sk0x0y d68d79888c fix(nano-gpt): rename Infermatic model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:56 +09:00
sk0x0y 6c52905c6a fix(nano-gpt): rename Gryphe model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:55 +09:00
sk0x0y 62410b8f26 fix(nano-gpt): rename GalrionSoftworks model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:55 +09:00
sk0x0y 50ce68ccab fix(nano-gpt): rename Envoid model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:20 +09:00
sk0x0y d1c6a6b873 fix(nano-gpt): rename EVA-UNIT-01 model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-12 04:19:20 +09:00
Frank 7193b068a5 update zen models 2026-03-11 13:52:50 -04:00
Sadik 79a8a06bd7 fix MiniMax-M2.5 context window 2026-03-11 20:50:33 +03:00
Aiden Cline b60c03e11c Merge pull request #1139 from zainhas/dev
[Together AI] add prompt caching pricing for MiniMax m2.5
2026-03-11 12:31:56 -05:00
Aiden Cline 15cf98d57b Merge pull request #1146 from gotjoshua/patch-1
Rename step-3-5-flash.toml to step-3.5-flash.toml
2026-03-11 12:31:39 -05:00
Aiden Cline b2ee6c407b Merge pull request #1144 from micuintus/feature/update-nebius-changes
Feat: update Nebius changes
2026-03-11 12:31:29 -05:00
gotjoshua 96a14a06e7 Rename step-3-5-flash.toml to step-3.5-flash.toml
on nvidia it is 3.5 not 3-5
2026-03-11 11:41:36 +00:00
Michael Voigt adc358606d fix(nebius): update model context limits per API 2026-03-11 11:33:14 +01:00
Michael Voigt 63d52adf6f feat(nebius): add GLM-5 model 2026-03-11 11:33:14 +01:00
sk0x0y 9a31387766 fix(nano-gpt): rename Salesforce model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 18:17:41 +09:00
sk0x0y 735157b837 fix(nano-gpt): rename ReadyArt model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 18:17:41 +09:00
sk0x0y d75b46fb37 fix(nano-gpt): rename Doctor-Shotgun model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 18:17:41 +09:00
sk0x0y cc555f8482 fix(nano-gpt): rename CrucibleLab model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 18:17:13 +09:00
sk0x0y 7fbbcf2b49 fix(nano-gpt): rename MiniMaxAI model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 16:04:28 +09:00
sk0x0y 14c8ec8ca5 fix(nano-gpt): rename Tongyi-Zhiwen model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 16:04:28 +09:00
sk0x0y 72568bbdb3 fix(nano-gpt): rename Alibaba-NLP model id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 16:03:57 +09:00
sk0x0y c2225b715f fix(nano-gpt): rename THUDM GLM-Z1 rumination id
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 15:49:20 +09:00
sk0x0y 7ce25e3742 fix(nano-gpt): rename THUDM GLM-Z1 model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 15:49:20 +09:00
sk0x0y 427868604b fix(nano-gpt): rename THUDM GLM-4 model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 15:49:20 +09:00
Zain Hasan 247cd801a8 add prompt caching pricing for MiniMax m2.5 2026-03-10 22:54:42 -07:00
Aiden Cline 1aa2ee22b1 Merge pull request #1134 from sk0x0y/feature/nanogpt-catalog-fixes
fix(nano-gpt): correct TEE path ids and add missing canonical entries
2026-03-10 22:02:52 -05:00
Aiden Cline 0f57233eff Merge pull request #1105 from sylviezhang37/add-vercel-input-context-and-new-models
feat(vercel): add input context calculation + new models
2026-03-10 22:01:52 -05:00
Aiden Cline 73a78eebfc Merge pull request #1138 from mugnimaestra/feat/add-glm-5-turbo-chutes
feat: add GLM-5-Turbo to Chutes provider listings
2026-03-10 22:01:08 -05:00
Sylvie Zhang 3a6789b819 Merge branch 'dev' into add-vercel-input-context-and-new-models 2026-03-10 17:44:14 -07:00
Sylvie Zhang f7c505e140 remove context from gemini models 2026-03-10 17:43:08 -07:00
Sylvie Zhang 6bb36806d6 only calc input context for openai models 2026-03-10 17:40:46 -07:00
Sylvie Zhang 20a404eb88 revert non openai changes 2026-03-10 17:38:46 -07:00
Muhammad Mugni Hadi 65ecb5cd4a feat: add GLM-5-Turbo to Chutes provider listings 2026-03-11 05:26:11 +07:00
Matt Cowger 56062a9129 Fix incorrect pricing 2026-03-10 14:57:44 -07:00
Aiden Cline d3d9c580d4 Merge pull request #1135 from gitpush-gitpaid/fix/gpt-5-4-pdf-input-modalities
Added PDF to input modalities for GPT-5.4
2026-03-10 13:53:42 -05:00
gitpush-gitpaid ef98d8a9cb Updated GPT-5.4 PDF input modalities 2026-03-10 13:59:29 -04:00
sk0x0y 9d17752b88 fix(nano-gpt): add missing GLM 5 thinking model
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:22 +09:00
sk0x0y b5a838fe8b fix(nano-gpt): add missing TEE qwen3.5 model
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:22 +09:00
sk0x0y aa1ac39ee6 fix(nano-gpt): rename TEE gemma and minimax ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:22 +09:00
sk0x0y 4bc17ccf96 fix(nano-gpt): rename TEE oss and llama ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:22 +09:00
sk0x0y 08c1899bfe fix(nano-gpt): rename TEE deepseek model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:02 +09:00
sk0x0y ad50e4a5ed fix(nano-gpt): rename TEE qwen model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:02 +09:00
sk0x0y 730915a123 fix(nano-gpt): rename TEE kimi model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:02 +09:00
sk0x0y 6f12d18cb8 fix(nano-gpt): rename TEE glm model ids
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-11 00:56:02 +09:00
Aiden Cline bd8774db99 Merge pull request #1132 from sk0x0y/feature/nanogpt-model-sync
feat(nano-gpt): add text and image models
2026-03-10 10:31:50 -05:00
Aiden Cline 88fbea52a4 Merge pull request #1133 from anomalyco/fix-model
fix: bedrock devstral
2026-03-10 10:31:08 -05:00
sk0x0y 898b3c18b7 feat(nano-gpt): add image models
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-10 22:13:48 +09:00
sk0x0y 6316e543ef feat(nano-gpt): add text models
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-10 22:13:48 +09:00
Sewer56 7a02946620 Update synthetic models: promote MiniMax-M2.5, add GLM-4.7-Flash, remove deprecated Qwen3.5 2026-03-08 22:56:31 +00:00
skywalker512 236af40da3 feat: add Tencent Coding Plan provider
Add support for Tencent Coding Plan with 8 models:
- Auto (tc-code-latest)
- Hunyuan 2.0 Instruct
- Hunyuan 2.0 Think
- Hunyuan-T1
- Hunyuan-TurboS
- MiniMax-M2.5
- Kimi-K2.5
- GLM-5

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:34:36 +08:00
Sylvie Zhang 26465319d6 Merge branch 'dev' into add-vercel-input-context-and-new-models 2026-03-07 11:39:53 -08:00
Sylvie Zhang 7a11ef241d update more models 2026-03-06 08:24:49 -08:00
Sylvie Zhang 145862315d add input calculation + new models 2026-03-06 08:07:11 -08:00
Sewer56 0428299773 Added: Qwen3.5-397B natively supports image, MM2.5 No Image as it was a mistake. 2026-02-25 08:10:42 +00:00
Sewer56 eee3303df0 Add missing synthetic.new models
Add configuration for hf:Qwen/Qwen3.5-397B-A17B and hf:MiniMaxAI/MiniMax-M2.5
to the synthetic provider, based on API specs from synthetic.new.

Note: API reports image support but these models may not natively support
images (likely rerouted/proxied through vision-capable infrastructure).
2026-02-24 09:19:57 +00:00
Luca Steeb 92269282eb fix: use correct family for gemma and gpt-oss models
- Gemma models now use "gemma" family instead of "gemini"
- GPT OSS models now use "gpt-oss" family instead of "gpt"

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:36:29 +00:00
Luca Steeb 6b9b340fbc fix: map llmgateway family to auto
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:28:38 +00:00
Luca Steeb e8a6793654 fix: use valid models.dev family enum values
Maps internal family names to valid models.dev families:
- moonshot → kimi
- bytedance → seed
- zai → glm
- nvidia → nemotron

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:27:15 +00:00
Luca Steeb b22ff136a8 fix: add required output limit to all models
models.dev schema requires limit.output field.
Defaults to 16384 when not specified.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:25:53 +00:00
Luca Steeb e28d4e387f chore: trigger CI 2026-01-23 01:21:06 +00:00
Luca Steeb 09b5dd4d84 refactor: remove scripts/ dir, link to repo script
Removes empty generate.ts file and scripts/ directory.
README now links to llmgateway repo for regeneration.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:18:53 +00:00
Luca Steeb 24e575a86e refactor: flatten model structure to models/ directory
Removes provider subdirectories, exports all models directly
to models/ folder for simpler structure.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:15:27 +00:00
Luca Steeb 3549abec36 feat: add LLM Gateway provider with 153 models
Add LLM Gateway (llmgateway.io) as a new provider with all supported models
organized by upstream provider subdirectory.

LLM Gateway is an OpenAI-compatible API gateway that provides unified
access to 40+ LLM providers through a single API endpoint.

Directory structure:
  providers/llmgateway/
  ├── provider.toml
  ├── README.md
  ├── scripts/
  │   └── generate.ts
  └── models/
      ├── anthropic/ (16 models)
      ├── openai/ (28 models)
      ├── google/ (19 models)
      ├── zai/ (17 models - GLM, CogView)
      ├── alibaba/ (27 models - Qwen)
      ├── meta/ (12 models - Llama)
      ├── xai/ (9 models - Grok)
      ├── deepseek/ (5 models)
      ├── bytedance/ (6 models - Seed)
      ├── moonshot/ (4 models - Kimi)
      ├── mistral/ (3 models)
      ├── perplexity/ (3 models - Sonar)
      ├── minimax/ (1 model)
      ├── nvidia/ (1 model)
      └── llmgateway/ (2 models - auto, custom)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 01:10:53 +00:00
1406 changed files with 15722 additions and 5610 deletions
+19 -1
View File
@@ -31,9 +31,27 @@
## Model Configuration
- Model `id` is **auto-injected** from filename (minus `.toml`) — never put `id` in TOML files
- Same model is duplicated across provider directories with no cross-referencing
- Models may reuse another model's definition via `extends` (see below); otherwise the full definition must be present in the file
- Schema uses `.strict()` — extra fields cause validation errors
### `[extends]` (inheritance between models)
- Syntax — a table at the top of the TOML:
```toml
[extends]
from = "<provider-id>/<model-id>" # required
omit = ["experimental.modes.fast"] # optional, dot-path strings
```
Example: `from = "anthropic/claude-opus-4-6"`
- Resolved at parse time in `generate()`; the final JSON output contains **no** `extends` field — it exists only to cut duplication in the TOMLs
- Merge semantics:
- Plain objects (`[cost]`, `[limit]`, `[modalities]`, `[provider]`, `[experimental]`, …) are **deep-merged**
- Arrays (e.g. `modalities.input`) and primitives are **replaced** wholesale by the child
- Any field the child omits is inherited verbatim from the base
- `omit` runs **after** the merge and deletes each dot-path from the result (used when the child needs to *remove* something the base defines, e.g. a provider-specific experimental mode). Every listed path must exist in the merged model, else an error is thrown. Ancestor tables that become empty as a result are also pruned, so `omit = ["experimental.modes.fast"]` yields no `experimental` key in the final JSON when `fast` was the only mode.
- Chains are allowed (A extends B extends C); cycles throw
- The base model must exist; `[extends.from]` pointing at a missing provider/model is an error
- The `extends` table is stripped before schema validation, so the merged result must still satisfy the strict `Model` schema
### Bedrock Naming Patterns
- Dated models: `-v1:0` suffix (`anthropic.claude-3-5-sonnet-20241022-v1:0.toml`)
- Latest/undated models: bare `-v1` (`anthropic.claude-opus-4-6-v1.toml`)
+45 -1
View File
@@ -120,6 +120,31 @@ output = ["text"] # Supported output modalities
field = "reasoning_content" # Name of the interleaved field "reasoning_content" or "reasoning_details"
```
#### 3a. Reuse an Existing Model with `extends`
For wrapper providers that mirror a model from another provider, prefer reusing the canonical model definition instead of duplicating the whole file.
Use `extends` only for non-first-party wrappers and mirrors. Do not use it inside the actual lab provider directories that act as the canonical source for a model family, for example `providers/anthropic/`, `providers/openai/`, `providers/google/`, `providers/xai/`, `providers/minimax/`, or `providers/moonshot/`.
```toml
[extends]
from = "anthropic/claude-opus-4-6"
omit = ["experimental.modes.fast"]
[provider]
npm = "@ai-sdk/anthropic"
```
Rules:
- `from` must point to another model using `<provider>/<model-id>`.
- `omit` is optional and removes fields after the inherited model and local overrides are merged.
- You can override any top-level model field locally.
- If you override a nested table like `[cost]`, `[limit]`, or `[modalities]`, include the full values needed for that table.
- `id` still comes from the filename; do not add it to the TOML.
Use `extends` when the wrapper model is materially the same as the source model and only differs by a small set of overrides or omitted fields.
#### 4. Submit a Pull Request
1. Fork this repo
@@ -136,9 +161,17 @@ There's a GitHub Action that will automatically validate your submission against
- Values are within acceptable ranges
- TOML syntax is valid
When converting existing wrapper models to `extends`, compare generated output before and after the change:
```bash
bun run compare:migrations
```
This prints a diff for each changed model TOML so you can confirm the generated JSON only changed where you intended.
### Schema Reference
Models must conform to the following schema, as defined in `app/schemas.ts`.
Models must conform to the following schema, as defined in `packages/core/src/schema.ts`.
**Provider Schema:**
@@ -199,6 +232,17 @@ $ bun run dev
And it'll open the frontend at http://localhost:3000
### Manual testing with opencode
You can manually check provider changes with opencode by:
```bash
$ bun install
$ cd packages/web
$ bun run build
$ OPENCODE_MODELS_PATH="dist/_api.json" opencode
```
### Questions?
Open an issue if you need help or have questions about contributing.
+3
View File
@@ -13,6 +13,7 @@
"name": "models.dev",
"version": "0.0.0",
"dependencies": {
"remeda": "^2.33.7",
"zod": "catalog:",
},
"devDependencies": {
@@ -240,6 +241,8 @@
"raw-body": ["raw-body@3.0.0", "", { "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.6.3", "unpipe": "1.0.0" } }, "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g=="],
"remeda": ["remeda@2.33.7", "", {}, "sha512-cXlyjevWx5AcslOUEETG4o8XYi9UkoCXcJmj7XhPFVbla+ITuOBxv6ijBrmbeg+ZhzmDThkNdO+iXKUfrJep1w=="],
"router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="],
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
+3 -1
View File
@@ -16,9 +16,11 @@
},
"scripts": {
"validate": "bun ./packages/core/script/validate.ts",
"compare:migrations": "bun ./packages/core/script/compare-model-migrations.ts",
"helicone:generate": "bun ./packages/core/script/generate-helicone.ts",
"venice:generate": "bun ./packages/core/script/generate-venice.ts",
"vercel:generate": "bun ./packages/core/script/generate-vercel.ts"
"vercel:generate": "bun ./packages/core/script/generate-vercel.ts",
"wandb:generate": "bun ./packages/core/script/generate-wandb.ts"
},
"dependencies": {
"@cloudflare/workers-types": "^4.20250801.0",
+1
View File
@@ -4,6 +4,7 @@
"$schema": "https://json.schemastore.org/package.json",
"type": "module",
"dependencies": {
"remeda": "^2.33.7",
"zod": "catalog:"
},
"main": "./src/index.ts",
@@ -0,0 +1,89 @@
#!/usr/bin/env bun
import path from "node:path";
import { cp, mkdir, rm, writeFile } from "node:fs/promises";
import { tmpdir } from "node:os";
import { generate } from "../src/generate.js";
const root = path.join(import.meta.dirname, "..", "..", "..");
const providersPath = path.join(root, "providers");
const diffOutput = await Bun.$`git diff --name-only HEAD -- providers`.cwd(root).text();
const changedProviderPaths = diffOutput
.split("\n")
.filter(Boolean)
.filter((filePath) => /^providers\/[^/]+\/models\/.+\.toml$/.test(filePath));
if (changedProviderPaths.length === 0) {
process.exit(0);
}
const baselineRoot = path.join(tmpdir(), `models-dev-compare-${Date.now()}`);
await mkdir(baselineRoot, { recursive: true });
try {
const baselineProvidersPath = path.join(baselineRoot, "providers");
await cp(providersPath, baselineProvidersPath, { recursive: true });
for (const filePath of changedProviderPaths) {
const tempFilePath = path.join(baselineRoot, filePath);
const show = Bun.spawn(["git", "show", `HEAD:${filePath}`], {
cwd: root,
stdout: "pipe",
stderr: "pipe",
});
const exitCode = await show.exited;
if (exitCode !== 0) {
await rm(tempFilePath, { force: true });
continue;
}
const contents = await new Response(show.stdout).text();
await mkdir(path.dirname(tempFilePath), { recursive: true });
await writeFile(tempFilePath, contents);
}
const before = await generate(baselineProvidersPath);
const after = await generate(providersPath);
for (const filePath of changedProviderPaths) {
const match = /^providers\/([^/]+)\/models\/(.+)\.toml$/.exec(filePath);
if (!match) continue;
const [, providerID, modelID] = match;
const beforeModel = before[providerID]?.models[modelID];
const afterModel = after[providerID]?.models[modelID];
const beforeJson = JSON.stringify(beforeModel, null, 2);
const afterJson = JSON.stringify(afterModel, null, 2);
if (beforeJson === afterJson) {
continue;
}
const beforeFilePath = path.join(baselineRoot, "before.json");
const afterFilePath = path.join(baselineRoot, "after.json");
await writeFile(beforeFilePath, `${beforeJson}\n`);
await writeFile(afterFilePath, `${afterJson}\n`);
const diff = Bun.spawn(
[
"diff",
"-u",
"-L",
`${filePath} (before)`,
"-L",
`${filePath} (after)`,
beforeFilePath,
afterFilePath,
],
{
stdout: "pipe",
stderr: "pipe",
},
);
const output = await new Response(diff.stdout).text();
process.stdout.write(output);
}
} finally {
await rm(baselineRoot, { recursive: true, force: true });
}
+1 -3
View File
@@ -241,9 +241,7 @@ function mergeModel(
const contextTokens = spec.availableContextTokens;
const outputTokens = spec.maxCompletionTokens ?? Math.floor(contextTokens / 4);
const openWeights = spec.modelSource
? spec.modelSource.toLowerCase().includes("huggingface")
: spec.privacy === "private";
const openWeights = spec.modelSource?.toLowerCase().includes("huggingface") ?? false;
const inputModalities = buildInputModalities(caps);
+19 -2
View File
@@ -20,10 +20,12 @@ enum ModelType {
Embedding = "embedding",
Image = "image",
Video = "video",
Reranking = "reranking",
}
enum SkipZeroFields {
LimitContext = "limit.context",
LimitInput = "limit.input",
LimitOutput = "limit.output",
}
@@ -82,6 +84,7 @@ interface ExistingModel {
};
limit?: {
context?: number;
input?: number;
output?: number;
};
modalities?: {
@@ -112,6 +115,7 @@ interface MergedModel {
};
limit: {
context: number;
input?: number;
output: number;
};
modalities: {
@@ -232,6 +236,10 @@ async function loadExistingModel(filePath: string): Promise<ExistingModel | null
}
}
function isOpenAIModel(modelId: string): boolean {
return modelId.startsWith("openai/");
}
function mergeModel(
apiModel: z.infer<typeof VercelModel>,
existing: ExistingModel | null,
@@ -281,6 +289,7 @@ function mergeModel(
...(status && { status }),
limit: {
context: contextLimit,
...(isOpenAIModel(apiModel.id) && contextLimit > outputLimit && { input: contextLimit - outputLimit }),
output: outputLimit,
},
modalities: {
@@ -362,6 +371,9 @@ function formatToml(model: MergedModel): string {
lines.push("");
lines.push(`[limit]`);
lines.push(`context = ${formatNumber(model.limit.context)}`);
if (model.limit.input !== undefined) {
lines.push(`input = ${formatNumber(model.limit.input)}`);
}
lines.push(`output = ${formatNumber(model.limit.output)}`);
lines.push("");
@@ -435,6 +447,7 @@ function detectChanges(
compare("cost.cache_read", existing.cost?.cache_read, merged.cost?.cache_read);
compare("cost.cache_write", existing.cost?.cache_write, merged.cost?.cache_write);
compare("limit.context", existing.limit?.context, merged.limit.context);
compare("limit.input", existing.limit?.input, merged.limit.input);
compare("limit.output", existing.limit?.output, merged.limit.output);
compare("modalities.input", existing.modalities?.input, merged.modalities.input);
@@ -493,8 +506,12 @@ async function main() {
let unchanged = 0;
for (const apiModel of apiModels) {
// Skip these since OpenCode does not support image / video generation yet
if (apiModel.type === ModelType.Image || apiModel.type === ModelType.Video) {
// Skip these since OpenCode does not support image / video / reranking yet
if (
apiModel.type === ModelType.Image ||
apiModel.type === ModelType.Video ||
apiModel.type === ModelType.Reranking
) {
continue;
}
+525
View File
@@ -0,0 +1,525 @@
#!/usr/bin/env bun
import path from "node:path";
import { mkdir } from "node:fs/promises";
import { z } from "zod";
import { ModelFamilyValues } from "../src/family.js";
const API_ENDPOINT = "https://trace.wandb.ai/inference/analysis/artificialanalysis/models";
const Pricing = z
.object({
prompt: z.string().optional(),
completion: z.string().optional(),
image: z.string().optional(),
request: z.string().optional(),
input_cache_reads: z.string().optional(),
input_cache_writes: z.string().optional(),
})
.passthrough();
const WandbModel = z
.object({
id: z.string(),
name: z.string(),
created: z.number(),
input_modalities: z.array(z.string()),
output_modalities: z.array(z.string()),
context_length: z.number(),
max_output_length: z.number(),
pricing: Pricing.optional(),
supported_sampling_parameters: z.array(z.string()).default([]),
supported_features: z.array(z.string()).default([]),
})
.passthrough();
const WandbResponse = z
.object({
data: z.array(WandbModel),
})
.strict();
interface ExistingModel {
name?: string;
family?: string;
attachment?: boolean;
reasoning?: boolean;
tool_call?: boolean;
structured_output?: boolean;
temperature?: boolean;
knowledge?: string;
release_date?: string;
last_updated?: string;
open_weights?: boolean;
interleaved?: boolean | { field: string };
status?: string;
cost?: {
input?: number;
output?: number;
cache_read?: number;
cache_write?: number;
};
limit?: {
context?: number;
input?: number;
output?: number;
};
modalities?: {
input?: string[];
output?: string[];
};
}
interface MergedModel {
name: string;
family?: string;
attachment: boolean;
reasoning: boolean;
tool_call: boolean;
structured_output?: boolean;
temperature: boolean;
knowledge?: string;
release_date: string;
last_updated: string;
open_weights: boolean;
interleaved?: boolean | { field: string };
status?: string;
cost?: {
input: number;
output: number;
cache_read?: number;
cache_write?: number;
};
limit: {
context: number;
output: number;
};
modalities: {
input: Array<"text" | "audio" | "image" | "video" | "pdf">;
output: Array<"text" | "audio" | "image" | "video" | "pdf">;
};
}
interface Changes {
field: string;
oldValue: string;
newValue: string;
}
type SupportedModality = "text" | "audio" | "image" | "video" | "pdf";
const modalityMap: Record<string, SupportedModality | undefined> = {
text: "text",
image: "image",
audio: "audio",
video: "video",
pdf: "pdf",
file: "pdf",
files: "pdf",
};
const openWeightsPrefixes = new Set([
"deepseek-ai/",
"meta-llama/",
"microsoft/",
"MiniMaxAI/",
"moonshotai/",
"nvidia/",
"OpenPipe/",
"Qwen/",
"zai-org/",
]);
function timestampToDate(timestamp: number): string {
return new Date(timestamp * 1000).toISOString().slice(0, 10);
}
function getTodayDate(): string {
return new Date().toISOString().slice(0, 10);
}
function formatNumber(n: number): string {
if (n >= 1000) {
return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, "_");
}
return n.toString();
}
function formatDecimal(n: number): string {
return Number(n.toFixed(6)).toString();
}
function priceToPerMillion(value: string): number {
return Number((parseFloat(value) * 1_000_000).toFixed(6));
}
function isSubstring(target: string, family: string): boolean {
return target.toLowerCase().includes(family.toLowerCase());
}
function matchesFamily(target: string, family: string): boolean {
const targetLower = target.toLowerCase();
const familyLower = family.toLowerCase();
let familyIdx = 0;
for (let i = 0; i < targetLower.length && familyIdx < familyLower.length; i++) {
if (targetLower[i] === familyLower[familyIdx]) {
familyIdx++;
}
}
return familyIdx === familyLower.length;
}
function inferFamily(modelId: string, modelName: string): string | undefined {
const sortedFamilies = [...ModelFamilyValues].sort((a, b) => b.length - a.length);
for (const family of sortedFamilies) {
if (isSubstring(modelId, family) || isSubstring(modelName, family)) {
return family;
}
}
for (const family of sortedFamilies) {
if (matchesFamily(modelId, family) || matchesFamily(modelName, family)) {
return family;
}
}
return undefined;
}
function normalizeName(apiModel: z.infer<typeof WandbModel>): string {
const stripped = apiModel.name.replace(/^[^:]+:\s*/, "").trim();
return stripped || path.basename(apiModel.id);
}
function inferReasoning(apiModel: z.infer<typeof WandbModel>): boolean {
const text = `${apiModel.id} ${apiModel.name}`.toLowerCase();
return text.includes("thinking") || /\br1\b/.test(text) || text.includes("reasoning");
}
function inferOpenWeights(modelId: string): boolean {
for (const prefix of openWeightsPrefixes) {
if (modelId.startsWith(prefix)) {
return true;
}
}
return false;
}
function normalizeModalities(values: string[]): SupportedModality[] {
const normalized = values
.map((value) => modalityMap[value.toLowerCase()])
.filter((value): value is SupportedModality => value !== undefined);
return [...new Set(normalized)];
}
async function loadExistingModel(filePath: string): Promise<ExistingModel | null> {
try {
const file = Bun.file(filePath);
if (!(await file.exists())) {
return null;
}
const toml = await import(filePath, { with: { type: "toml" } }).then((mod) => mod.default);
return toml as ExistingModel;
} catch (cause) {
console.warn(`Warning: Failed to parse existing file ${filePath}:`, cause);
return null;
}
}
function mergeModel(
apiModel: z.infer<typeof WandbModel>,
existing: ExistingModel | null,
): MergedModel {
const featureSet = new Set(apiModel.supported_features);
const samplingSet = new Set(apiModel.supported_sampling_parameters);
const inputModalities = normalizeModalities(apiModel.input_modalities);
const outputModalities = normalizeModalities(apiModel.output_modalities);
const merged: MergedModel = {
name: existing?.name ?? normalizeName(apiModel),
family: existing?.family ?? inferFamily(apiModel.id, apiModel.name),
attachment: existing?.attachment ?? inputModalities.some((m) => m !== "text"),
reasoning: existing?.reasoning ?? inferReasoning(apiModel),
tool_call: existing?.tool_call ?? featureSet.has("tools"),
temperature: existing?.temperature ?? samplingSet.has("temperature"),
release_date: existing?.release_date ?? timestampToDate(apiModel.created),
last_updated: getTodayDate(),
open_weights: existing?.open_weights ?? inferOpenWeights(apiModel.id),
...(existing?.structured_output !== undefined
? { structured_output: existing.structured_output }
: featureSet.has("structured_outputs")
? { structured_output: true }
: {}),
...(existing?.knowledge ? { knowledge: existing.knowledge } : {}),
...(existing?.interleaved !== undefined ? { interleaved: existing.interleaved } : {}),
...(existing?.status ? { status: existing.status } : {}),
limit: {
context: apiModel.context_length > 0 ? apiModel.context_length : (existing?.limit?.context ?? 0),
output: apiModel.max_output_length > 0
? apiModel.max_output_length
: (existing?.limit?.output ?? 0),
},
modalities: {
input: inputModalities.length > 0
? inputModalities
: ((existing?.modalities?.input as SupportedModality[] | undefined) ?? ["text"]),
output: outputModalities.length > 0
? outputModalities
: ((existing?.modalities?.output as SupportedModality[] | undefined) ?? ["text"]),
},
};
const prompt = apiModel.pricing?.prompt;
const completion = apiModel.pricing?.completion;
const cacheRead = apiModel.pricing?.input_cache_reads;
const cacheWrite = apiModel.pricing?.input_cache_writes;
if (prompt && completion) {
merged.cost = {
input: priceToPerMillion(prompt),
output: priceToPerMillion(completion),
...(cacheRead && parseFloat(cacheRead) > 0
? { cache_read: priceToPerMillion(cacheRead) }
: {}),
...(cacheWrite && parseFloat(cacheWrite) > 0
? { cache_write: priceToPerMillion(cacheWrite) }
: {}),
};
} else if (existing?.cost?.input !== undefined && existing.cost.output !== undefined) {
merged.cost = {
input: existing.cost.input,
output: existing.cost.output,
...(existing.cost.cache_read !== undefined ? { cache_read: existing.cost.cache_read } : {}),
...(existing.cost.cache_write !== undefined ? { cache_write: existing.cost.cache_write } : {}),
};
}
return merged;
}
function formatToml(model: MergedModel): string {
const lines: string[] = [];
lines.push(`name = "${model.name.replace(/"/g, '\\"')}"`);
if (model.family) {
lines.push(`family = "${model.family}"`);
}
lines.push(`release_date = "${model.release_date}"`);
lines.push(`last_updated = "${model.last_updated}"`);
lines.push(`attachment = ${model.attachment}`);
lines.push(`reasoning = ${model.reasoning}`);
if (model.structured_output !== undefined) {
lines.push(`structured_output = ${model.structured_output}`);
}
lines.push(`temperature = ${model.temperature}`);
lines.push(`tool_call = ${model.tool_call}`);
if (model.knowledge) {
lines.push(`knowledge = "${model.knowledge}"`);
}
lines.push(`open_weights = ${model.open_weights}`);
if (model.status) {
lines.push(`status = "${model.status}"`);
}
if (model.interleaved !== undefined) {
lines.push("");
if (model.interleaved === true) {
lines.push("interleaved = true");
} else {
lines.push("[interleaved]");
lines.push(`field = "${model.interleaved.field}"`);
}
}
if (model.cost) {
lines.push("");
lines.push("[cost]");
lines.push(`input = ${formatDecimal(model.cost.input)}`);
lines.push(`output = ${formatDecimal(model.cost.output)}`);
if (model.cost.cache_read !== undefined) {
lines.push(`cache_read = ${formatDecimal(model.cost.cache_read)}`);
}
if (model.cost.cache_write !== undefined) {
lines.push(`cache_write = ${formatDecimal(model.cost.cache_write)}`);
}
}
lines.push("");
lines.push("[limit]");
lines.push(`context = ${formatNumber(model.limit.context)}`);
lines.push(`output = ${formatNumber(model.limit.output)}`);
lines.push("");
lines.push("[modalities]");
lines.push(`input = [${model.modalities.input.map((m) => `"${m}"`).join(", ")}]`);
lines.push(`output = [${model.modalities.output.map((m) => `"${m}"`).join(", ")}]`);
return `${lines.join("\n")}\n`;
}
function detectChanges(existing: ExistingModel | null, merged: MergedModel): Changes[] {
if (!existing) {
return [];
}
const changes: Changes[] = [];
const epsilon = 0.001;
const formatValue = (value: unknown): string => {
if (typeof value === "number") return formatNumber(value);
if (Array.isArray(value)) return `[${value.join(", ")}]`;
if (value === undefined) return "(none)";
return String(value);
};
const compare = (field: string, oldValue: unknown, newValue: unknown) => {
const changed = field.startsWith("cost.")
? (
oldValue === undefined && newValue === undefined
? false
: oldValue === undefined || newValue === undefined
? true
: Math.abs((oldValue as number) - (newValue as number)) > epsilon
)
: JSON.stringify(oldValue) !== JSON.stringify(newValue);
if (changed) {
changes.push({
field,
oldValue: formatValue(oldValue),
newValue: formatValue(newValue),
});
}
};
compare("name", existing.name, merged.name);
compare("family", existing.family, merged.family);
compare("release_date", existing.release_date, merged.release_date);
compare("attachment", existing.attachment, merged.attachment);
compare("reasoning", existing.reasoning, merged.reasoning);
compare("structured_output", existing.structured_output, merged.structured_output);
compare("temperature", existing.temperature, merged.temperature);
compare("tool_call", existing.tool_call, merged.tool_call);
compare("open_weights", existing.open_weights, merged.open_weights);
compare("cost.input", existing.cost?.input, merged.cost?.input);
compare("cost.output", existing.cost?.output, merged.cost?.output);
compare("cost.cache_read", existing.cost?.cache_read, merged.cost?.cache_read);
compare("cost.cache_write", existing.cost?.cache_write, merged.cost?.cache_write);
compare("limit.context", existing.limit?.context, merged.limit.context);
compare("limit.output", existing.limit?.output, merged.limit.output);
compare("modalities.input", existing.modalities?.input, merged.modalities.input);
compare("modalities.output", existing.modalities?.output, merged.modalities.output);
return changes;
}
async function main() {
const args = process.argv.slice(2);
const dryRun = args.includes("--dry-run");
const newOnly = args.includes("--new-only");
const modelsDir = path.join(import.meta.dirname, "..", "..", "..", "providers", "wandb", "models");
console.log(`${dryRun ? "[DRY RUN] " : ""}${newOnly ? "[NEW ONLY] " : ""}Fetching WandB models from API...`);
const res = await fetch(API_ENDPOINT);
if (!res.ok) {
console.error(`Failed to fetch API: ${res.status} ${res.statusText}`);
process.exit(1);
}
const json = await res.json();
const parsed = WandbResponse.safeParse(json);
if (!parsed.success) {
console.error("Invalid API response:", parsed.error.errors);
process.exit(1);
}
const apiModels = parsed.data.data;
const existingFiles = new Set<string>();
for await (const file of new Bun.Glob("**/*.toml").scan({ cwd: modelsDir, absolute: false })) {
existingFiles.add(file);
}
console.log(`Found ${apiModels.length} models in API, ${existingFiles.size} existing files\n`);
const apiModelIds = new Set<string>();
let created = 0;
let updated = 0;
let unchanged = 0;
for (const apiModel of apiModels) {
const relativePath = `${apiModel.id}.toml`;
const filePath = path.join(modelsDir, relativePath);
const dirPath = path.dirname(filePath);
apiModelIds.add(relativePath);
const existing = await loadExistingModel(filePath);
const merged = mergeModel(apiModel, existing);
const tomlContent = formatToml(merged);
if (existing === null) {
created++;
if (dryRun) {
console.log(`[DRY RUN] Would create: ${relativePath}`);
console.log(` name = "${merged.name}"`);
if (merged.family) {
console.log(` family = "${merged.family}"`);
}
console.log("");
} else {
await mkdir(dirPath, { recursive: true });
await Bun.write(filePath, tomlContent);
console.log(`Created: ${relativePath}`);
}
continue;
}
if (newOnly) {
unchanged++;
continue;
}
const changes = detectChanges(existing, merged);
if (changes.length === 0) {
unchanged++;
continue;
}
updated++;
if (dryRun) {
console.log(`[DRY RUN] Would update: ${relativePath}`);
} else {
await mkdir(dirPath, { recursive: true });
await Bun.write(filePath, tomlContent);
console.log(`Updated: ${relativePath}`);
}
for (const change of changes) {
console.log(` ${change.field}: ${change.oldValue}${change.newValue}`);
}
console.log("");
}
const orphaned = [...existingFiles].filter((file) => !apiModelIds.has(file));
for (const file of orphaned) {
console.log(`Warning: Orphaned file (not in API): ${file}`);
}
console.log("");
console.log(
dryRun
? `Summary: ${created} would be created, ${updated} would be updated, ${unchanged} unchanged, ${orphaned.length} orphaned`
: `Summary: ${created} created, ${updated} updated, ${unchanged} unchanged, ${orphaned.length} orphaned`,
);
}
await main();
+27 -3
View File
@@ -14,6 +14,7 @@ export const ModelFamilyValues = [
"gpt-mini",
"gpt-nano",
"gpt-oss",
"gpt-image",
// OpenAI o-series (reasoning models)
"o",
@@ -46,6 +47,9 @@ export const ModelFamilyValues = [
// Alibaba Qwen
"qwen",
"qwen3.5",
"qwen3.6",
"qwen-free",
// DeepSeek
"deepseek",
@@ -96,6 +100,7 @@ export const ModelFamilyValues = [
// NVIDIA Nemotron
"nemotron",
"nemotron-free",
// AWS Titan
"titan",
@@ -103,11 +108,16 @@ export const ModelFamilyValues = [
// MiniMax
"minimax",
"minimax-m2.5",
"minimax-m2.7",
"minimax-free",
// Hunyuan
"hunyuan",
// HY
"HY",
// Yi
"yi",
@@ -193,6 +203,11 @@ export const ModelFamilyValues = [
// Mimo
"mimo",
"mimo-pro",
"mimo-omni",
"mimo-pro-free",
"mimo-omni-free",
"mimo-flash-free",
// Clarifai
"mm-poly",
@@ -284,9 +299,6 @@ export const ModelFamilyValues = [
// Parakeet
"parakeet",
// MiMo
"mimo-flash-free",
// NeMo
"nemoretriever",
@@ -371,6 +383,18 @@ export const ModelFamilyValues = [
// Writer
"palmyra",
// ALLaM
"allam",
// Canopy Labs
"canopylabs",
// Groq
"groq",
// Elephant
"elephant",
] as const;
export const ModelFamily = z.enum(ModelFamilyValues);
+109 -1
View File
@@ -1,9 +1,31 @@
import path from "path";
import { mergeDeep } from "remeda";
import { z } from "zod";
import { Provider, Model } from "./schema.js";
const ExtendsModel = Model.sourceType()
.partial()
.extend({
extends: z
.object({
from: z
.string()
.regex(/^[^/]+\/[^/]+$/, "Must be in provider/model format"),
omit: z.array(z.string()).optional(),
})
.strict(),
})
.strict();
export async function generate(directory: string) {
const result = {} as Record<string, Provider>;
const result: Record<string, Provider> = {};
const extendsModels: Array<{
providerID: string;
modelID: string;
modelPath: string;
model: z.infer<typeof ExtendsModel>;
}> = [];
for await (const providerPath of new Bun.Glob("*/provider.toml").scan({
cwd: directory,
absolute: true,
@@ -35,6 +57,20 @@ export async function generate(directory: string) {
},
}).then((mod) => mod.default);
toml.id = modelID;
if (toml.extends !== undefined) {
const model = ExtendsModel.safeParse(toml);
if (!model.success) {
model.error.cause = { modelPath, toml };
throw model.error;
}
extendsModels.push({
providerID,
modelID,
modelPath,
model: model.data,
});
continue;
}
const model = Model.safeParse(toml);
if (!model.success) {
model.error.cause = { modelPath, toml };
@@ -45,5 +81,77 @@ export async function generate(directory: string) {
result[providerID] = provider.data;
}
for (const pendingModel of extendsModels) {
const [providerID, modelID] = pendingModel.model.extends.from.split("/");
const baseModel = result[providerID]?.models[modelID];
if (baseModel === undefined) {
throw new Error(`Unable to resolve extends.from: ${pendingModel.model.extends.from}`, {
cause: { modelPath: pendingModel.modelPath, toml: pendingModel.model },
});
}
const { extends: extendsConfig, ...overrides } = pendingModel.model;
const merged: Record<string, unknown> = structuredClone(
mergeDeep(baseModel, overrides),
);
for (const omit of extendsConfig.omit ?? []) {
const parts = omit.split(".");
const parents: Array<{
value: Record<string, unknown>;
key: string;
}> = [];
let current = merged;
for (const part of parts.slice(0, -1)) {
const next = current[part];
if (
next === undefined ||
next === null ||
typeof next !== "object" ||
Array.isArray(next)
) {
throw new Error(`Unable to omit missing path: ${omit}`, {
cause: { modelPath: pendingModel.modelPath, toml: pendingModel.model },
});
}
parents.push({ value: current, key: part });
current = next as Record<string, unknown>;
}
const lastPart = parts.at(-1);
if (lastPart === undefined || !(lastPart in current)) {
throw new Error(`Unable to omit missing path: ${omit}`, {
cause: { modelPath: pendingModel.modelPath, toml: pendingModel.model },
});
}
delete current[lastPart];
for (let index = parents.length - 1; index >= 0; index--) {
const parent = parents[index];
const value = parent?.value[parent.key];
if (
value === null ||
value === undefined ||
typeof value !== "object" ||
Array.isArray(value) ||
Object.keys(value).length > 0
) {
break;
}
delete parent.value[parent.key];
}
}
const model = Model.safeParse(merged);
if (!model.success) {
model.error.cause = { modelPath: pendingModel.modelPath, toml: merged };
throw model.error;
}
result[pendingModel.providerID]!.models[pendingModel.modelID] = model.data;
}
return result;
}
+38
View File
@@ -2,6 +2,25 @@ import { z } from "zod";
import { ModelFamily } from "./family";
type JsonValue =
| string
| number
| boolean
| null
| { [key: string]: JsonValue }
| JsonValue[];
const JsonValue: z.ZodType<JsonValue> = z.lazy(() =>
z.union([
z.string(),
z.number(),
z.boolean(),
z.null(),
z.array(JsonValue),
z.record(JsonValue),
]),
);
const Cost = z.object({
input: z.number().min(0, "Input price cannot be negative"),
output: z.number().min(0, "Output price cannot be negative"),
@@ -69,11 +88,30 @@ export const Model = z
output: z.number().min(0, "Output tokens must be positive"),
}),
status: z.enum(["alpha", "beta", "deprecated"]).optional(),
experimental: z
.object({
modes: z
.record(
z.object({
cost: Cost.optional(),
provider: z
.object({
body: z.record(JsonValue).optional(),
headers: z.record(z.string()).optional(),
})
.optional(),
}),
)
.optional(),
})
.optional(),
provider: z
.object({
npm: z.string().optional(),
api: z.string().optional(),
shape: z.enum(["responses", "completions"]).optional(),
body: z.record(JsonValue).optional(),
headers: z.record(z.string()).optional(),
})
.optional(),
})
+9 -2
View File
@@ -1,6 +1,7 @@
#!/usr/bin/env bun
import { Rendered, Providers } from "../src/render";
import { normalizeLogoSvg } from "../src/logo.js";
import fs from "fs/promises";
import path from "path";
import { $ } from "bun";
@@ -23,7 +24,10 @@ await fs.mkdir("./dist/logos", { recursive: true });
const defaultLogoPath = "../../providers/logo.svg";
const defaultLogo = Bun.file(defaultLogoPath);
if (await defaultLogo.exists()) {
await Bun.write("./dist/logos/default.svg", defaultLogo);
await Bun.write(
"./dist/logos/default.svg",
normalizeLogoSvg(await defaultLogo.text())
);
}
// Then copy provider-specific logos
@@ -36,7 +40,10 @@ for (const entry of entries) {
const logoFile = Bun.file(logoPath);
if (await logoFile.exists()) {
await Bun.write(`./dist/logos/${provider}.svg`, logoFile);
await Bun.write(
`./dist/logos/${provider}.svg`,
normalizeLogoSvg(await logoFile.text())
);
}
}
}
+14 -6
View File
@@ -319,15 +319,12 @@ tbody {
gap: 0.375rem;
}
.provider-cell span:first-child {
.provider-logo {
flex: 0 0 auto;
}
.provider-cell svg {
display: block;
width: 1rem;
height: 1rem;
color: var(--color-text-secondary);
object-fit: contain;
}
.model-id-cell {
@@ -416,6 +413,17 @@ tbody {
.modality-icon:hover::after {
opacity: 1;
}
tr.loading-row td,
tr.error-row td {
padding: 1rem 0.75rem;
text-align: center;
font-family: inherit;
font-size: 0.875rem;
font-weight: 400;
text-transform: none;
color: var(--color-text-secondary);
}
}
dialog::backdrop {
@@ -546,4 +554,4 @@ dialog {
}
}
}
}
+367 -65
View File
@@ -1,7 +1,248 @@
interface ApiCost {
input?: number;
output?: number;
reasoning?: number;
cache_read?: number;
cache_write?: number;
input_audio?: number;
output_audio?: number;
}
interface ApiLimit {
context: number;
input?: number;
output: number;
}
interface ApiModel {
name: string;
family?: string;
status?: string;
tool_call: boolean;
reasoning: boolean;
modalities: {
input: string[];
output: string[];
};
cost?: ApiCost;
limit: ApiLimit;
structured_output?: boolean;
temperature: boolean;
open_weights: boolean;
knowledge?: string;
release_date: string;
last_updated: string;
}
interface ApiProvider {
name: string;
models: Record<string, ApiModel>;
}
type ApiResponse = Record<string, ApiProvider>;
const COLUMN_COUNT = 25;
const modal = document.getElementById("modal") as HTMLDialogElement;
const modalClose = document.getElementById("close")!;
const help = document.getElementById("help")!;
const search = document.getElementById("search")! as HTMLInputElement;
const tableBody = document.getElementById("table-body")! as HTMLTableSectionElement;
const copyIcon = `
<svg
class="copy-icon"
xmlns="http://www.w3.org/2000/svg"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect>
<path d="m4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path>
</svg>
`;
const checkIcon = `
<svg
class="check-icon"
xmlns="http://www.w3.org/2000/svg"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
style="display: none;"
>
<polyline points="20,6 9,17 4,12"></polyline>
</svg>
`;
const modalityIcons: Record<string, { label: string; svg: string }> = {
text: {
label: "Text",
svg: `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="4,7 4,4 20,4 20,7"></polyline>
<line x1="9" y1="20" x2="15" y2="20"></line>
<line x1="12" y1="4" x2="12" y2="20"></line>
</svg>
`,
},
image: {
label: "Image",
svg: `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect>
<circle cx="9" cy="9" r="2"></circle>
<path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path>
</svg>
`,
},
audio: {
label: "Audio",
svg: `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>
<path d="m19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path>
</svg>
`,
},
video: {
label: "Video",
svg: `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="m22 8-6 4 6 4V8Z"></path>
<rect width="14" height="12" x="2" y="6" rx="2" ry="2"></rect>
</svg>
`,
},
pdf: {
label: "PDF",
svg: `
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14,2 14,8 20,8"></polyline>
<line x1="16" y1="13" x2="8" y2="13"></line>
<line x1="16" y1="17" x2="8" y2="17"></line>
<polyline points="10,9 9,9 8,9"></polyline>
</svg>
`,
},
};
function escapeHtml(value: string) {
return value
.replaceAll("&", "&amp;")
.replaceAll("<", "&lt;")
.replaceAll(">", "&gt;")
.replaceAll('"', "&quot;")
.replaceAll("'", "&#39;");
}
function renderCost(cost?: number) {
return cost === undefined ? "-" : `$${cost.toFixed(2)}`;
}
function renderModalityIcon(modality: string) {
const icon = modalityIcons[modality];
if (!icon) return "";
return `<span class="modality-icon" data-tooltip="${icon.label}">${icon.svg}</span>`;
}
function renderModalities(modalities: string[]) {
return `<div class="modalities">${modalities.map(renderModalityIcon).join("")}</div>`;
}
function renderProviderLogo(providerId: string) {
return `<img class="provider-logo" src="/logos/${encodeURIComponent(providerId)}.svg" alt="" width="16" height="16" loading="lazy" decoding="async" />`;
}
function renderRow(
providerId: string,
providerName: string,
modelId: string,
model: ApiModel
) {
const safeProviderId = escapeHtml(providerId);
const safeProviderName = escapeHtml(providerName);
const safeModelId = escapeHtml(modelId);
const safeModelName = escapeHtml(model.name);
const safeFamily = escapeHtml(model.family ?? "-");
const safeKnowledge = escapeHtml(model.knowledge?.substring(0, 7) ?? "-");
const safeReleaseDate = escapeHtml(model.release_date);
const safeLastUpdated = escapeHtml(model.last_updated);
return `
<tr data-model-row="true">
<td>
<div class="provider-cell">
${renderProviderLogo(providerId)}
<span>${safeProviderName}</span>
</div>
</td>
<td>${safeModelName}</td>
<td>${safeFamily}</td>
<td>${safeProviderId}</td>
<td>
<div class="model-id-cell">
<span class="model-id-text">${safeModelId}</span>
<button class="copy-button" type="button" data-model-id="${safeModelId}" aria-label="Copy model ID">
${copyIcon}
${checkIcon}
</button>
</div>
</td>
<td>${model.tool_call ? "Yes" : "No"}</td>
<td>${model.reasoning ? "Yes" : "No"}</td>
<td>${renderModalities(model.modalities.input)}</td>
<td>${renderModalities(model.modalities.output)}</td>
<td>${renderCost(model.cost?.input)}</td>
<td>${renderCost(model.cost?.output)}</td>
<td>${renderCost(model.cost?.reasoning)}</td>
<td>${renderCost(model.cost?.cache_read)}</td>
<td>${renderCost(model.cost?.cache_write)}</td>
<td>${renderCost(model.cost?.input_audio)}</td>
<td>${renderCost(model.cost?.output_audio)}</td>
<td>${model.limit.context.toLocaleString()}</td>
<td>${model.limit.input?.toLocaleString() ?? "-"}</td>
<td>${model.limit.output.toLocaleString()}</td>
<td>${model.structured_output === undefined ? "-" : model.structured_output ? "Yes" : "No"}</td>
<td>${model.temperature ? "Yes" : "No"}</td>
<td>${model.open_weights ? "Open" : "Closed"}</td>
<td>${safeKnowledge}</td>
<td>${safeReleaseDate}</td>
<td>${safeLastUpdated}</td>
</tr>
`;
}
function renderTableRows(providers: ApiResponse) {
return Object.entries(providers)
.sort(([, providerA], [, providerB]) =>
providerA.name.localeCompare(providerB.name)
)
.flatMap(([providerId, provider]) =>
Object.entries(provider.models)
.filter(([, model]) => model.status !== "alpha")
.sort(([, modelA], [, modelB]) => modelA.name.localeCompare(modelB.name))
.map(([modelId, model]) =>
renderRow(providerId, provider.name, modelId, model)
)
)
.join("");
}
function setStatusRow(message: string, className = "loading-row") {
tableBody.innerHTML = `<tr class="${className}"><td colspan="${COLUMN_COUNT}">${escapeHtml(message)}</td></tr>`;
}
/////////////////////////
// URL State Management
@@ -10,7 +251,10 @@ function getQueryParams() {
return new URLSearchParams(window.location.search);
}
function updateQueryParams(updates: Record<string, string | null>) {
function updateQueryParams(
updates: Record<string, string | null>,
historyMode: "push" | "replace" = "push"
) {
const params = getQueryParams();
for (const [key, value] of Object.entries(updates)) {
if (value) {
@@ -19,9 +263,18 @@ function updateQueryParams(updates: Record<string, string | null>) {
params.delete(key);
}
}
const newPath = params.toString()
? `${window.location.pathname}?${params.toString()}`
: window.location.pathname;
if (newPath === `${window.location.pathname}${window.location.search}`) return;
if (historyMode === "replace") {
window.history.replaceState({}, "", newPath);
return;
}
window.history.pushState({}, "", newPath);
}
@@ -65,66 +318,71 @@ modal.addEventListener("click", (e) => {
////////////////////
// Handle Sorting
////////////////////
let currentSort = { column: -1, direction: "asc" };
let currentSort = { column: -1, direction: "asc" as "asc" | "desc" };
function sortTable(column: number, direction: "asc" | "desc") {
function updateSortIndicators(column: number, direction: "asc" | "desc") {
const headers = document.querySelectorAll("th.sortable");
headers.forEach((header, i) => {
const indicator = header.querySelector(".sort-indicator")!;
indicator.textContent = i === column ? (direction === "asc" ? "↑" : "↓") : "";
});
}
function clearSortIndicators() {
updateSortIndicators(-1, "asc");
}
function sortTable(
column: number,
direction: "asc" | "desc",
syncUrl = true
) {
const header = document.querySelectorAll("th.sortable")[column];
const columnType = header.getAttribute("data-type");
const columnType = header?.getAttribute("data-type");
if (!columnType) return;
// update state
currentSort = { column, direction };
updateQueryParams({
sort: getColumnNameForURL(header),
order: direction,
});
if (syncUrl) {
updateQueryParams(
{
sort: getColumnNameForURL(header),
order: direction,
},
"push"
);
}
// sort rows
const tbody = document.querySelector("table tbody")!;
const rows = Array.from(
tbody.querySelectorAll("tr")
tableBody.querySelectorAll('tr[data-model-row="true"]')
) as HTMLTableRowElement[];
rows.sort((a, b) => {
const aValue = getCellValue(a.cells[column], columnType);
const bValue = getCellValue(b.cells[column], columnType);
// Handle undefined values - always sort to bottom
if (aValue === undefined && bValue === undefined) return 0;
if (aValue === undefined) return 1;
if (bValue === undefined) return -1;
let comparison = 0;
if (columnType === "number" || columnType === "modalities") {
comparison = (aValue as number) - (bValue as number);
} else if (columnType === "boolean") {
comparison = (aValue as string).localeCompare(bValue as string);
} else {
comparison = (aValue as string).localeCompare(bValue as string);
}
const comparison =
columnType === "number" || columnType === "modalities"
? (aValue as number) - (bValue as number)
: (aValue as string).localeCompare(bValue as string);
return direction === "asc" ? comparison : -comparison;
});
rows.forEach((row) => tbody.appendChild(row));
// update sort indicators
const headers = document.querySelectorAll("th.sortable");
headers.forEach((header, i) => {
const indicator = header.querySelector(".sort-indicator")!;
if (i === column) {
indicator.textContent = direction === "asc" ? "↑" : "↓";
} else {
indicator.textContent = "";
}
});
rows.forEach((row) => tableBody.appendChild(row));
updateSortIndicators(column, direction);
}
function getCellValue(
cell: HTMLTableCellElement,
type: string
): string | number | undefined {
if (type === "modalities")
if (type === "modalities") {
return cell.querySelectorAll(".modality-icon").length;
}
const text = cell.textContent?.trim() || "";
if (text === "-") return;
@@ -146,22 +404,31 @@ document.querySelectorAll("th.sortable").forEach((header) => {
///////////////////
// Handle Search
///////////////////
function filterTable(value: string) {
const lowerCaseValues = value.toLowerCase().split(",").filter(str => str.trim() !== "");
const rows = document.querySelectorAll(
"table tbody tr"
function filterTable(value: string, syncUrl = true) {
const lowerCaseValues = value
.toLowerCase()
.split(",")
.map((part) => part.trim())
.filter(Boolean);
const rows = tableBody.querySelectorAll(
'tr[data-model-row="true"]'
) as NodeListOf<HTMLTableRowElement>;
rows.forEach((row) => {
const cellTexts = Array.from(row.cells).map((cell) =>
cell.textContent!.toLowerCase()
);
const isVisible = lowerCaseValues.length === 0 ||
lowerCaseValues.some((lowerCaseValue) => cellTexts.some((text) => text.includes(lowerCaseValue)));
const isVisible =
lowerCaseValues.length === 0 ||
lowerCaseValues.some((lowerCaseValue) =>
cellTexts.some((text) => text.includes(lowerCaseValue))
);
row.style.display = isVisible ? "" : "none";
});
updateQueryParams({ search: value || null });
if (syncUrl) {
updateQueryParams({ search: value || null }, "replace");
}
}
search.addEventListener("input", () => {
@@ -185,22 +452,22 @@ search.addEventListener("keydown", (e) => {
///////////////////////////////////
// Handle Copy model ID function
///////////////////////////////////
(window as any).copyModelId = async (
button: HTMLButtonElement,
modelId: string
) => {
tableBody.addEventListener("click", async (event) => {
const target = event.target as HTMLElement;
const button = target.closest(".copy-button") as HTMLButtonElement | null;
const modelId = button?.dataset.modelId;
if (!button || !modelId) return;
try {
if (navigator.clipboard) {
await navigator.clipboard.writeText(modelId);
// Switch to check icon
const copyIcon = button.querySelector(".copy-icon") as HTMLElement;
const checkIcon = button.querySelector(".check-icon") as HTMLElement;
copyIcon.style.display = "none";
checkIcon.style.display = "block";
// Switch back after 1 second
setTimeout(() => {
copyIcon.style.display = "block";
checkIcon.style.display = "none";
@@ -209,32 +476,67 @@ search.addEventListener("keydown", (e) => {
} catch (err) {
console.error("Failed to copy text: ", err);
}
};
});
///////////////////////////////////
// Initialize State from URL
///////////////////////////////////
let tableLoaded = false;
function initializeFromURL() {
if (!tableLoaded) return;
const params = getQueryParams();
const searchQuery = params.get("search") ?? "";
search.value = searchQuery;
filterTable(searchQuery, false);
(() => {
const searchQuery = params.get("search");
if (!searchQuery) return;
search.value = searchQuery;
filterTable(searchQuery);
})();
const columnName = params.get("sort");
if (!columnName) {
currentSort = { column: -1, direction: "asc" };
clearSortIndicators();
return;
}
(() => {
const columnName = params.get("sort");
if (!columnName) return;
const columnIndex = getColumnIndexByUrlName(columnName);
if (columnIndex === -1) return;
const columnIndex = getColumnIndexByUrlName(columnName);
if (columnIndex === -1) return;
const direction = (params.get("order") as "asc" | "desc") || "asc";
sortTable(columnIndex, direction);
})();
const direction = (params.get("order") as "asc" | "desc") || "asc";
sortTable(columnIndex, direction, false);
}
document.addEventListener("DOMContentLoaded", initializeFromURL);
window.addEventListener("popstate", initializeFromURL);
async function loadTable() {
try {
const response = await fetch("/api.json");
if (!response.ok) {
throw new Error(`Failed to fetch models: ${response.status}`);
}
const providers = (await response.json()) as ApiResponse;
const rows = renderTableRows(providers);
tableBody.innerHTML = rows || "";
if (!rows) {
setStatusRow("No models found.");
return;
}
tableLoaded = true;
initializeFromURL();
window.addEventListener("popstate", initializeFromURL);
} catch (error) {
console.error("Failed to load model data:", error);
setStatusRow("Failed to load models.", "loading-row error-row");
}
}
function initializeApp() {
search.value = getQueryParams().get("search") ?? "";
void loadTable();
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initializeApp);
} else {
initializeApp();
}
+16
View File
@@ -0,0 +1,16 @@
const LOGO_THEME_MARKER = "models-dev-logo-theme";
const LOGO_THEME_STYLE = `<style id="${LOGO_THEME_MARKER}">:root{color:#666}@media (prefers-color-scheme: dark){:root{color:#AAA}}</style>`;
export function normalizeLogoSvg(svgText: string) {
if (svgText.includes(LOGO_THEME_MARKER)) {
return svgText;
}
return svgText.replace(/<svg\b[^>]*>/i, (svgTag) => {
const themedTag = svgTag.includes("fill=")
? svgTag
: svgTag.replace("<svg", '<svg fill="currentColor"');
return `${themedTag}${LOGO_THEME_STYLE}`;
});
}
+5 -282
View File
@@ -1,184 +1,15 @@
/** @jsx jsx */
/** @jsxImportSource hono/jsx */
import { generate } from "models.dev";
import { Fragment } from "hono/jsx";
import { renderToString } from "hono/jsx/dom/server";
import { existsSync } from "fs";
import { generate } from "models.dev";
import path from "path";
export const Providers = await generate(
path.join(import.meta.dir, "..", "..", "..", "providers")
);
// Function to load SVG content
const loadProviderSvg = async (providerId: string): Promise<string | null> => {
const providerLogoPath = path.join(
import.meta.dir,
"..",
"..",
"..",
"providers",
providerId,
"logo.svg"
);
const defaultLogoPath = path.join(
import.meta.dir,
"..",
"..",
"..",
"providers",
"logo.svg"
);
try {
// Try provider-specific logo first
if (existsSync(providerLogoPath)) {
const file = Bun.file(providerLogoPath);
return await file.text();
}
//
// Fall back to default logo
if (existsSync(defaultLogoPath)) {
const file = Bun.file(defaultLogoPath);
return await file.text();
}
return null;
} catch (error) {
console.warn(`Failed to load logo for provider ${providerId}:`, error);
return null;
}
};
// Create a cache of loaded SVGs at build time
const providerLogos = new Map<string, string>();
// Pre-load all provider logos
for (const [providerId] of Object.entries(Providers)) {
const svgContent = await loadProviderSvg(providerId);
if (svgContent) {
providerLogos.set(providerId, svgContent);
}
}
function renderProviderLogo(providerId: string) {
const svgContent = providerLogos.get(providerId) || "";
return <span dangerouslySetInnerHTML={{ __html: svgContent }} />;
}
const getModalityIcon = (modality: string) => {
switch (modality) {
case "text":
return (
<span class="modality-icon" data-tooltip="Text">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polyline points="4,7 4,4 20,4 20,7"></polyline>
<line x1="9" y1="20" x2="15" y2="20"></line>
<line x1="12" y1="4" x2="12" y2="20"></line>
</svg>
</span>
);
case "image":
return (
<span class="modality-icon" data-tooltip="Image">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect width="18" height="18" x="3" y="3" rx="2" ry="2"></rect>
<circle cx="9" cy="9" r="2"></circle>
<path d="m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21"></path>
</svg>
</span>
);
case "audio":
return (
<span class="modality-icon" data-tooltip="Audio">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<polygon points="11 5 6 9 2 9 2 15 6 15 11 19 11 5"></polygon>
<path d="m19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07"></path>
</svg>
</span>
);
case "video":
return (
<span class="modality-icon" data-tooltip="Video">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="m22 8-6 4 6 4V8Z"></path>
<rect width="14" height="12" x="2" y="6" rx="2" ry="2"></rect>
</svg>
</span>
);
case "pdf":
return (
<span class="modality-icon" data-tooltip="PDF">
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path>
<polyline points="14,2 14,8 20,8"></polyline>
<line x1="16" y1="13" x2="8" y2="13"></line>
<line x1="16" y1="17" x2="8" y2="17"></line>
<polyline points="10,9 9,9 8,9"></polyline>
</svg>
</span>
);
default:
return null;
}
};
const renderCost = (cost?: number) => {
return cost === undefined ? "-" : `$${cost.toFixed(2)}`;
};
export const Rendered = renderToString(
<Fragment>
<header>
@@ -342,118 +173,10 @@ export const Rendered = renderToString(
</th>
</tr>
</thead>
<tbody>
{Object.entries(Providers)
.sort(([, providerA], [, providerB]) =>
providerA.name.localeCompare(providerB.name)
)
.flatMap(([providerId, provider]) =>
Object.entries(provider.models)
.filter(([, model]) => model.status !== "alpha")
.sort(([, modelA], [, modelB]) =>
modelA.name.localeCompare(modelB.name)
)
.map(([modelId, model]) => (
<tr key={`${providerId}-${modelId}`}>
<td>
<div class="provider-cell">
{renderProviderLogo(providerId)}
<span>{provider.name}</span>
</div>
</td>
<td>{model.name}</td>
<td>{model.family ?? "-"}</td>
<td>{providerId}</td>
<td>
<div class="model-id-cell">
<span class="model-id-text">{modelId}</span>
<button
class="copy-button"
onclick={`copyModelId(this, '${modelId}')`}
>
<svg
class="copy-icon"
xmlns="http://www.w3.org/2000/svg"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
>
<rect
width="14"
height="14"
x="8"
y="8"
rx="2"
ry="2"
/>
<path d="m4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" />
</svg>
<svg
class="check-icon"
xmlns="http://www.w3.org/2000/svg"
width="14"
height="14"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
style="display: none;"
>
<polyline points="20,6 9,17 4,12" />
</svg>
</button>
</div>
</td>
<td>{model.tool_call ? "Yes" : "No"}</td>
<td>{model.reasoning ? "Yes" : "No"}</td>
<td>
<div class="modalities">
{model.modalities.input.map((modality) =>
getModalityIcon(modality)
)}
</div>
</td>
<td>
<div class="modalities">
{model.modalities.output.map((modality) =>
getModalityIcon(modality)
)}
</div>
</td>
<td>{renderCost(model.cost?.input)}</td>
<td>{renderCost(model.cost?.output)}</td>
<td>{renderCost(model.cost?.reasoning)}</td>
<td>{renderCost(model.cost?.cache_read)}</td>
<td>{renderCost(model.cost?.cache_write)}</td>
<td>{renderCost(model.cost?.input_audio)}</td>
<td>{renderCost(model.cost?.output_audio)}</td>
<td>{model.limit.context.toLocaleString()}</td>
<td>{model.limit.input?.toLocaleString() ?? "-"}</td>
<td>{model.limit.output.toLocaleString()}</td>
<td>
{model.structured_output === undefined
? "-"
: model.structured_output
? "Yes"
: "No"}
</td>
<td>{model.temperature ? "Yes" : "No"}</td>
<td>{model.open_weights ? "Open" : "Closed"}</td>
<td>
{model.knowledge ? model.knowledge.substring(0, 7) : "-"}
</td>
<td>{model.release_date}</td>
<td>{model.last_updated}</td>
</tr>
))
)}
<tbody id="table-body">
<tr class="loading-row">
<td colspan={25}>Loading models...</td>
</tr>
</tbody>
</table>
<dialog id="modal">
+10 -2
View File
@@ -1,11 +1,19 @@
import Index from "../index.html";
import { Rendered } from "./render";
import { normalizeLogoSvg } from "./logo.js";
import { Providers, Rendered } from "./render";
import path from "path";
Bun.serve({
port: 16_000,
routes: {
"/": Index,
"/api.json": () => {
return Response.json(Providers, {
headers: {
"Cache-Control": "public, max-age=3600",
},
});
},
"/assets/*": (req) => {
const file = Bun.file(
path.join(import.meta.dir, new URL(req.url).pathname)
@@ -38,7 +46,7 @@ Bun.serve({
file = Bun.file(defaultLogoPath);
}
return new Response(file, {
return new Response(normalizeLogoSvg(await file.text()), {
headers: {
"Content-Type": "image/svg+xml",
"Cache-Control": "public, max-age=3600",
@@ -0,0 +1,20 @@
name = "MiniMax-M2.7-highspeed"
release_date = "2026-03-19"
last_updated = "2026-03-19"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = false
[cost]
input = 0.600
output = 4.800
[limit]
context = 204_800
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
+20
View File
@@ -0,0 +1,20 @@
name = "MiniMax-M2.7"
release_date = "2026-03-19"
last_updated = "2026-03-19"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = false
[cost]
input = 0.300
output = 1.200
[limit]
context = 204_800
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
@@ -1,22 +1,20 @@
name = "Claude 3.5 Sonnet (Retiring Soon)"
name = "claude-3-5-haiku-20241022"
release_date = "2024-10-22"
last_updated = "2024-10-22"
attachment = true
reasoning = false
temperature = true
tool_call = true
knowledge = "2025-01-01"
open_weights = false
knowledge = "2024-07"
[cost]
input = 3.00
output = 15.00
cache_read = 0.30
cache_write = 3.75
input = 0.800
output = 4.000
[limit]
context = 200_000
output = 64_000
output = 8_192
[modalities]
input = ["text", "image", "pdf"]
@@ -1,4 +1,4 @@
name = "Anthropic: Claude 3.5 Sonnet"
name = "claude-3-5-haiku-latest"
release_date = "2024-10-22"
last_updated = "2024-10-22"
attachment = true
@@ -6,15 +6,16 @@ reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2024-07"
[cost]
input = 6.0
output = 30.0
input = 0.800
output = 4.000
[limit]
context = 200000
output = 8192
context = 200_000
output = 8_192
[modalities]
input = ["text", "image"]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -2,7 +2,7 @@ name = "claude-haiku-4-5-20251001"
release_date = "2025-10-16"
last_updated = "2025-10-16"
attachment = true
reasoning = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
@@ -17,5 +17,5 @@ context = 200_000
output = 64_000
[modalities]
input = ["text", "image"]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-haiku-4-5"
release_date = "2025-10-16"
last_updated = "2025-10-16"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-02"
[cost]
input = 1.000
output = 5.000
[limit]
context = 200_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-opus-4-20250514"
release_date = "2025-05-22"
last_updated = "2025-05-22"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-03"
[cost]
input = 15.000
output = 75.000
[limit]
context = 200_000
output = 32_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -2,7 +2,7 @@ name = "claude-opus-4-5-20251101"
release_date = "2025-11-25"
last_updated = "2025-11-25"
attachment = true
reasoning = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
@@ -17,5 +17,5 @@ context = 200_000
output = 64_000
[modalities]
input = ["text", "image"]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-opus-4-5"
release_date = "2025-11-25"
last_updated = "2025-11-25"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-03"
[cost]
input = 5.000
output = 25.000
[limit]
context = 200_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-opus-4-6-thinking"
release_date = "2026-02-06"
last_updated = "2026-03-13"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-05"
[cost]
input = 5.000
output = 25.000
[limit]
context = 1_000_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-opus-4-6"
release_date = "2026-02-06"
last_updated = "2026-03-13"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-05"
[cost]
input = 5.000
output = 25.000
[limit]
context = 1_000_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,29 @@
name = "claude-opus-4-7"
release_date = "2026-04-17"
last_updated = "2026-04-17"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-05"
[cost]
input = 5.000
output = 25.000
cache_read = 0.500
cache_write = 6.250
[cost.context_over_200k]
input = 10.000
output = 37.500
cache_read = 1.000
cache_write = 12.500
[limit]
context = 200_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-sonnet-4-20250514"
release_date = "2025-05-22"
last_updated = "2025-05-22"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-03"
[cost]
input = 3.000
output = 15.000
[limit]
context = 200_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -17,5 +17,5 @@ context = 200_000
output = 64_000
[modalities]
input = ["text", "image"]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -1,6 +1,6 @@
name = "claude-sonnet-4-5-20250929"
release_date = "2025-09-29"
last_updated = "2025-09-29"
release_date = "2025-09-30"
last_updated = "2025-09-30"
attachment = true
reasoning = false
temperature = true
@@ -17,5 +17,5 @@ context = 200_000
output = 64_000
[modalities]
input = ["text", "image"]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-sonnet-4-5"
release_date = "2025-09-30"
last_updated = "2025-09-30"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-07"
[cost]
input = 3.000
output = 15.000
[limit]
context = 200_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-sonnet-4-6-thinking"
release_date = "2026-02-18"
last_updated = "2026-03-13"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-08"
[cost]
input = 3.000
output = 15.000
[limit]
context = 1_000_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "claude-sonnet-4-6"
release_date = "2026-02-18"
last_updated = "2026-03-13"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-08"
[cost]
input = 3.000
output = 15.000
[limit]
context = 1_000_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "gemini-3.1-flash-image-preview"
release_date = "2026-02-27"
last_updated = "2026-02-27"
attachment = true
reasoning = false
temperature = true
tool_call = false
open_weights = false
knowledge = "2025-01"
[cost]
input = 0.500
output = 60.000
[limit]
context = 131_072
output = 32_768
[modalities]
input = ["text", "image", "pdf"]
output = ["text", "image"]
@@ -1,20 +1,20 @@
name = "Titan Text G1 - Express"
family = "titan"
release_date = "2024-12-01"
last_updated = "2024-12-01"
name = "glm-4.5-air"
release_date = "2025-07-29"
last_updated = "2025-07-29"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-04"
[cost]
input = 0.20
output = 0.60
input = 0.1143
output = 0.286
[limit]
context = 128_000
output = 4_096
output = 98_304
[modalities]
input = ["text"]
@@ -1,20 +1,20 @@
name = "Titan Text G1 - Express"
family = "titan"
release_date = "2024-12-01"
last_updated = "2024-12-01"
name = "glm-4.5-airx"
release_date = "2025-07-29"
last_updated = "2025-07-29"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-04"
[cost]
input = 0.20
output = 0.60
input = 0.572
output = 1.714
[limit]
context = 128_000
output = 4_096
output = 16_384
[modalities]
input = ["text"]
@@ -1,20 +1,20 @@
name = "Mistral Large (24.02)"
family = "mistral-large"
release_date = "2024-12-01"
last_updated = "2024-12-01"
name = "glm-4.5-x"
release_date = "2025-07-29"
last_updated = "2025-07-29"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-04"
[cost]
input = 0.50
output = 1.50
input = 1.143
output = 2.290
[limit]
context = 128_000
output = 4_096
output = 16_384
[modalities]
input = ["text"]
+2 -2
View File
@@ -1,6 +1,6 @@
name = "GLM-4.5V"
release_date = "2025-07-29"
last_updated = "2025-07-29"
release_date = "2025-08-12"
last_updated = "2025-08-12"
attachment = true
reasoning = false
temperature = true
+1 -1
View File
@@ -2,7 +2,7 @@ name = "glm-4.6"
release_date = "2025-09-30"
last_updated = "2025-09-30"
attachment = false
reasoning = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
@@ -0,0 +1,21 @@
name = "glm-4.7-flashx"
release_date = "2026-01-20"
last_updated = "2026-01-20"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-04"
[cost]
input = 0.0715
output = 0.429
[limit]
context = 200_000
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
+1 -1
View File
@@ -2,7 +2,7 @@ name = "glm-4.7"
release_date = "2025-12-22"
last_updated = "2025-12-22"
attachment = false
reasoning = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
+20
View File
@@ -0,0 +1,20 @@
name = "glm-5-turbo"
release_date = "2026-03-16"
last_updated = "2026-03-16"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[cost]
input = 0.720
output = 3.200
[limit]
context = 200_000
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
+20
View File
@@ -0,0 +1,20 @@
name = "glm-5.1"
release_date = "2026-04-10"
last_updated = "2026-04-10"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[cost]
input = 0.860
output = 3.500
[limit]
context = 200_000
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
@@ -1,20 +1,19 @@
name = "Z.ai: GLM 5 (free)"
name = "glm-5"
release_date = "2026-02-12"
last_updated = "2026-02-12"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
open_weights = false
[cost]
input = 0
output = 0
cache_read = 0
input = 0.600
output = 2.600
[limit]
context = 202800
output = 131072
context = 200_000
output = 131_072
[modalities]
input = ["text"]
+20
View File
@@ -0,0 +1,20 @@
name = "glm-5v-turbo"
release_date = "2026-04-02"
last_updated = "2026-04-02"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[cost]
input = 0.720
output = 3.200
[limit]
context = 200_000
output = 131_072
[modalities]
input = ["text", "image", "video", "audio", "pdf"]
output = ["text"]
@@ -1,20 +1,19 @@
name = "Z.ai: GLM 4.6 (exacto)"
name = "glm-for-coding"
release_date = "2025-09-30"
last_updated = "2025-09-30"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
open_weights = false
[cost]
input = 0.44
output = 1.76
cache_read = 0.11
input = 0.086
output = 0.343
[limit]
context = 204800
output = 131072
context = 200_000
output = 131_072
[modalities]
input = ["text"]
@@ -0,0 +1,21 @@
name = "gpt-5.4-mini-2026-03-17"
release_date = "2026-03-19"
last_updated = "2026-03-19"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-08"
[cost]
input = 0.750
output = 4.500
[limit]
context = 400_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
name = "gpt-5.4-mini"
release_date = "2026-03-19"
last_updated = "2026-03-19"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-08"
[cost]
input = 0.750
output = 4.500
[limit]
context = 400_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,21 @@
name = "gpt-5.4-nano-2026-03-17"
release_date = "2026-03-19"
last_updated = "2026-03-19"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-08"
[cost]
input = 0.200
output = 1.250
[limit]
context = 400_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
name = "gpt-5.4-nano"
release_date = "2026-03-19"
last_updated = "2026-03-19"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
knowledge = "2025-08"
[cost]
input = 0.200
output = 1.250
[limit]
context = 400_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,20 @@
name = "grok-4.20-beta-0309-non-reasoning"
release_date = "2026-03-16"
last_updated = "2026-03-16"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
[cost]
input = 2.000
output = 6.000
[limit]
context = 2_000_000
output = 30_000
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,20 @@
name = "grok-4.20-beta-0309-reasoning"
release_date = "2026-03-16"
last_updated = "2026-03-16"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[cost]
input = 2.000
output = 6.000
[limit]
context = 2_000_000
output = 30_000
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,20 @@
name = "grok-4.20-multi-agent-beta-0309"
release_date = "2026-03-16"
last_updated = "2026-03-16"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[cost]
input = 2.000
output = 6.000
[limit]
context = 2_000_000
output = 30_000
[modalities]
input = ["text", "image"]
output = ["text"]
+1 -1
View File
@@ -6,7 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-05"
knowledge = "2025-05-31"
open_weights = false
[cost]
@@ -6,7 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-08"
knowledge = "2025-08-31"
open_weights = false
[cost]
@@ -12,6 +12,8 @@ open_weights = false
[cost]
input = 0.25
output = 1.50
cache_read = 0.025
cache_write = 1.00
[limit]
context = 1_048_576
@@ -6,7 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-05"
knowledge = "2025-05-31"
open_weights = false
[cost]
@@ -6,7 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-05"
knowledge = "2025-05-31"
open_weights = false
[cost]
@@ -6,7 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-08"
knowledge = "2025-08-31"
open_weights = false
[cost]
@@ -27,4 +27,4 @@ output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
output = ["text"]
@@ -6,7 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-08"
knowledge = "2025-08-31"
open_weights = false
[cost]
@@ -13,9 +13,9 @@ open_weights = true
field = "reasoning_details"
[cost]
input = 0.27
output = 1.10
cache_read = 0.548
input = 0.06
output = 0.22
cache_read = 0.01
[limit]
context = 204800
@@ -0,0 +1,24 @@
name = "Coding-GLM-5.1"
family = "glm"
release_date = "2026-04-11"
last_updated = "2026-04-11"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[interleaved]
field = "reasoning_content"
[cost]
input = 0.06
output = 0.22
[limit]
context = 200000
output = 128000
[modalities]
input = ["text"]
output = ["text"]
+24
View File
@@ -0,0 +1,24 @@
name = "GLM-5.1"
family = "glm"
release_date = "2026-04-11"
last_updated = "2026-04-11"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[interleaved]
field = "reasoning_content"
[cost]
input = 0.84
output = 3.38
[limit]
context = 200000
output = 128000
[modalities]
input = ["text"]
output = ["text"]
@@ -4,7 +4,6 @@ release_date = "2026-01-14"
last_updated = "2026-01-14"
attachment = true
reasoning = true
temperature = true
knowledge = "2025-08-31"
tool_call = true
structured_output = true
@@ -0,0 +1,23 @@
name = "GPT-5.4-Mini"
family = "gpt-mini"
release_date = "2026-03-11"
last_updated = "2026-03-11"
attachment = true
reasoning = false
temperature = false
tool_call = true
open_weights = false
structured_output = true
[cost]
input = 0.75
output = 4.50
cache_read = 0.075
[limit]
context = 400_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
+23
View File
@@ -0,0 +1,23 @@
name = "GPT-5.4"
family = "gpt"
release_date = "2026-03-11"
last_updated = "2026-03-11"
attachment = true
reasoning = true
temperature = false
tool_call = true
open_weights = false
structured_output = true
[cost]
input = 2.50
output = 15.00
cache_read = 0.25
[limit]
context = 400_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
+1 -2
View File
@@ -1,6 +1,5 @@
name = "AIHubMix"
npm = "@ai-sdk/openai-compatible"
npm = "@aihubmix/ai-sdk-provider"
env = ["AIHUBMIX_API_KEY"]
api = "https://aihubmix.com/v1"
doc = "https://docs.aihubmix.com"
@@ -0,0 +1,23 @@
name = "MiniMax-M2.7"
family = "minimax"
release_date = "2026-03-18"
last_updated = "2026-03-18"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
[cost]
input = 0.30
output = 1.20
cache_read = 0.06
cache_write = 0.375
[limit]
context = 204_800
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
+26
View File
@@ -0,0 +1,26 @@
name = "GLM-5.1"
family = "glm"
release_date = "2026-04-14"
last_updated = "2026-04-14"
attachment = false
reasoning = true
structured_output = true
temperature = true
tool_call = true
open_weights = true
[interleaved]
field = "reasoning_content"
[cost]
input = 0.87
output = 3.48
cache_read = 0.17
[limit]
context = 202_752
output = 128_000
[modalities]
input = ["text"]
output = ["text"]
@@ -0,0 +1,24 @@
name = "Qwen3.6 Plus"
family = "qwen"
release_date = "2026-04-02"
last_updated = "2026-04-02"
attachment = false
reasoning = true
temperature = true
knowledge = "2025-04"
tool_call = true
open_weights = false
[cost]
input = 0.276
output = 1.651
cache_read = 0.028
cache_write = 0.344
[limit]
context = 1_000_000
output = 65_536
[modalities]
input = ["text", "image", "video"]
output = ["text"]
@@ -0,0 +1,24 @@
name = "Qwen3.6 Plus"
family = "qwen"
release_date = "2026-04-02"
last_updated = "2026-04-02"
attachment = false
reasoning = true
temperature = true
knowledge = "2025-04"
tool_call = true
open_weights = false
[cost]
input = 0
output = 0
cache_read = 0
cache_write = 0
[limit]
context = 1_000_000
output = 65_536
[modalities]
input = ["text", "image", "video"]
output = ["text"]
@@ -18,7 +18,8 @@ cache_read = 0
cache_write = 0
[limit]
context = 16_608
context = 196_608
input = 196_601
output = 24_576
[modalities]
@@ -0,0 +1,24 @@
name = "Qwen3.6 Plus"
family = "qwen"
release_date = "2026-04-02"
last_updated = "2026-04-02"
attachment = false
reasoning = true
temperature = true
knowledge = "2025-04"
tool_call = true
open_weights = false
[cost]
input = 0
output = 0
cache_read = 0
cache_write = 0
[limit]
context = 1_000_000
output = 65_536
[modalities]
input = ["text", "image", "video"]
output = ["text"]
@@ -0,0 +1,24 @@
name = "Qwen3.6 Plus"
family = "qwen"
release_date = "2026-04-02"
last_updated = "2026-04-02"
attachment = false
reasoning = true
temperature = true
knowledge = "2025-04"
tool_call = true
open_weights = false
[cost]
input = 0.276
output = 1.651
cache_read = 0.028
cache_write = 0.344
[limit]
context = 1_000_000
output = 65_536
[modalities]
input = ["text", "image", "video"]
output = ["text"]
@@ -1,22 +0,0 @@
name = "Jamba 1.5 Large"
family = "jamba"
release_date = "2024-08-15"
last_updated = "2024-08-15"
attachment = false
reasoning = false
temperature = true
knowledge = "2024-08"
tool_call = true
open_weights = true
[cost]
input = 2.00
output = 8.00
[limit]
context = 256_000
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
@@ -1,24 +1,2 @@
name = "Claude Haiku 3.5"
family = "claude-haiku"
release_date = "2024-10-22"
last_updated = "2024-10-22"
attachment = true
reasoning = false
temperature = true
knowledge = "2024-07"
tool_call = true
open_weights = false
[cost]
input = 0.80
output = 4.00
cache_read = 0.08
cache_write = 1.00
[limit]
context = 200_000
output = 8_192
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-3-5-haiku-20241022"
@@ -1,24 +1,2 @@
name = "Claude Sonnet 3.5"
family = "claude-sonnet"
release_date = "2024-06-20"
last_updated = "2024-06-20"
attachment = true
reasoning = false
temperature = true
knowledge = "2024-04"
tool_call = true
open_weights = false
[cost]
input = 3.00
output = 15.00
cache_read = 0.30
cache_write = 3.75
[limit]
context = 200_000
output = 8_192
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-3-5-sonnet-20240620"
@@ -6,6 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-02-28"
open_weights = false
@@ -1,22 +0,0 @@
name = "Claude Instant"
family = "claude"
release_date = "2023-03-01"
last_updated = "2023-03-01"
attachment = false
reasoning = false
temperature = true
knowledge = "2023-08"
tool_call = false
open_weights = false
[cost]
input = 0.80
output = 2.40
[limit]
context = 100_000
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
@@ -1,24 +1,2 @@
name = "Claude Opus 4.1"
family = "claude-opus"
release_date = "2025-08-05"
last_updated = "2025-08-05"
attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-03-31"
open_weights = false
[cost]
input = 15.00
output = 75.00
cache_read = 1.50
cache_write = 18.75
[limit]
context = 200_000
output = 32_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-opus-4-1-20250805"
@@ -1,24 +1,2 @@
name = "Claude Opus 4"
family = "claude-opus"
release_date = "2025-05-22"
last_updated = "2025-05-22"
attachment = true
reasoning = true
temperature = true
knowledge = "2024-04"
tool_call = true
open_weights = false
[cost]
input = 15.00
output = 75.00
cache_read = 1.50
cache_write = 18.75
[limit]
context = 200_000
output = 32_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-opus-4-20250514"
@@ -6,6 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-03-31"
open_weights = false
@@ -1,30 +1,5 @@
name = "Claude Opus 4.6"
family = "claude-opus"
release_date = "2026-02-05"
last_updated = "2026-02-05"
attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-05"
open_weights = false
structured_output = true
[cost]
input = 5.00
output = 25.00
cache_read = 0.50
cache_write = 6.25
[cost.context_over_200k]
input = 10.00
output = 37.50
cache_read = 1.00
cache_write = 12.50
[limit]
context = 200_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-opus-4-6"
omit = ["experimental.modes.fast"]
@@ -0,0 +1,25 @@
name = "Claude Opus 4.7"
family = "claude-opus"
release_date = "2026-04-16"
last_updated = "2026-04-16"
attachment = true
reasoning = true
temperature = false
tool_call = true
structured_output = true
knowledge = "2026-01-31"
open_weights = false
[cost]
input = 5.00
output = 25.00
cache_read = 0.50
cache_write = 6.25
[limit]
context = 1_000_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -1,24 +1,2 @@
name = "Claude Sonnet 4"
family = "claude-sonnet"
release_date = "2025-05-22"
last_updated = "2025-05-22"
attachment = true
reasoning = true
temperature = true
knowledge = "2024-04"
tool_call = true
open_weights = false
[cost]
input = 3.00
output = 15.00
cache_read = 0.30
cache_write = 3.75
[limit]
context = 200_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-sonnet-4-20250514"
@@ -6,6 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-07-31"
open_weights = false
@@ -1,30 +1,2 @@
name = "Claude Sonnet 4.6"
family = "claude-sonnet"
release_date = "2026-02-17"
last_updated = "2026-02-17"
attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-08"
open_weights = false
[cost]
input = 3.00
output = 15.00
cache_read = 0.30
cache_write = 3.75
[cost.context_over_200k]
input = 6.00
output = 22.50
cache_read = 0.60
cache_write = 7.50
[limit]
context = 200_000
output = 64_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-sonnet-4-6"
@@ -1,22 +0,0 @@
name = "Claude 2.1"
family = "claude"
release_date = "2023-11-21"
last_updated = "2023-11-21"
attachment = false
reasoning = false
temperature = true
knowledge = "2023-08"
tool_call = false
open_weights = false
[cost]
input = 8.00
output = 24.00
[limit]
context = 200_000
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
@@ -1,22 +0,0 @@
name = "Command Light"
family = "command-light"
release_date = "2023-11-01"
last_updated = "2023-11-01"
attachment = false
reasoning = false
temperature = true
knowledge = "2023-08"
tool_call = false
open_weights = true
[cost]
input = 0.30
output = 0.60
[limit]
context = 4_096
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
@@ -1,22 +0,0 @@
name = "Command"
family = "command"
release_date = "2023-11-01"
last_updated = "2023-11-01"
attachment = false
reasoning = false
temperature = true
knowledge = "2023-08"
tool_call = false
open_weights = true
[cost]
input = 1.50
output = 2.00
[limit]
context = 4_096
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
@@ -7,6 +7,7 @@ reasoning = true
temperature = true
knowledge = "2024-07"
tool_call = true
structured_output = true
open_weights = true
[cost]
@@ -1,7 +1,7 @@
name = "DeepSeek-V3.2"
family = "deepseek"
release_date = "2026-02-15"
last_updated = "2026-02-15"
release_date = "2026-02-06"
last_updated = "2026-02-06"
attachment = false
reasoning = true
temperature = true
@@ -6,6 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-02-28"
open_weights = false
@@ -6,6 +6,7 @@ attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-03-31"
open_weights = false
@@ -1,30 +1,6 @@
name = "Claude Opus 4.6 (EU)"
family = "claude-opus"
release_date = "2026-02-05"
last_updated = "2026-02-05"
attachment = true
reasoning = true
temperature = true
tool_call = true
knowledge = "2025-05"
open_weights = false
structured_output = true
[cost]
input = 5.00
output = 25.00
cache_read = 0.50
cache_write = 6.25
[cost.context_over_200k]
input = 10.00
output = 37.50
cache_read = 1.00
cache_write = 12.50
[limit]
context = 200_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[extends]
from = "anthropic/claude-opus-4-6"
omit = ["experimental.modes.fast"]
@@ -0,0 +1,25 @@
name = "Claude Opus 4.7 (EU)"
family = "claude-opus"
release_date = "2026-04-16"
last_updated = "2026-04-16"
attachment = true
reasoning = true
temperature = false
tool_call = true
structured_output = true
knowledge = "2026-01-31"
open_weights = false
[cost]
input = 5.00
output = 25.00
cache_read = 0.50
cache_write = 6.25
[limit]
context = 1_000_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]

Some files were not shown because too many files have changed in this diff Show More