Compare commits

...

720 Commits

Author SHA1 Message Date
github-actions[bot] 948aeb6c7b fix: Bedrock: Mantle models template api on ${AWS_REGION}, but aren't served in every region 2026-08-16 10:24:08 +00:00
opencode-agent[bot] 257686dccc chore(sync): update Kilo model catalog (#4816)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 09:25:36 +00:00
opencode-agent[bot] 5e52053633 chore(sync): update NanoGPT model catalog (#4815)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 08:25:45 +00:00
opencode-agent[bot] fe6fae037a chore(sync): update OpenRouter model catalog (#4814)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 08:25:43 +00:00
Jack 9d4b5725df fix(opencode-go): default Qwen models to OpenAI-compatible 2026-08-16 16:11:47 +08:00
opencode-agent[bot] a01b0706d4 chore(sync): update OpenRouter model catalog (#4812)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 07:26:31 +00:00
opencode-agent[bot] d60751f6c8 chore(sync): update OpenRouter model catalog (#4810)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 06:26:36 +00:00
Jack e07607be17 Merge pull request #4809 from anomalyco/deepseek-standard-price
chore(opencode-go): end DeepSeek Flash promotion
2026-08-16 14:21:40 +08:00
Jack 22f628563c chore(opencode-go): end DeepSeek Flash promotion 2026-08-16 14:17:59 +08:00
opencode-agent[bot] c4b23de112 chore(sync): update Kilo model catalog (#4808)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 05:25:46 +00:00
opencode-agent[bot] 94dd914b9b chore(sync): update OpenRouter model catalog (#4802)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 05:25:45 +00:00
opencode-agent[bot] bdd7029f3a chore(sync): update xAI model catalog (#4804)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 04:26:58 +00:00
opencode-agent[bot] fabf264da6 chore(sync): update Kilo model catalog (#4806)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 04:26:50 +00:00
opencode-agent[bot] c7516b5f79 chore(sync): update DigitalOcean model catalog (#4803)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 03:32:52 +00:00
opencode-agent[bot] 9f2c9dcd61 chore(sync): update Kilo model catalog (#4801)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 03:32:48 +00:00
opencode-agent[bot] 4a2180db0d chore(sync): update EmpirioLabs AI model catalog (#4800)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 03:32:47 +00:00
opencode-agent[bot] 2b82af1117 chore(sync): update DigitalOcean model catalog (#4753)
* chore(sync): update DigitalOcean model catalog

* fix(digitalocean): add DeepSeek reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-15 22:16:39 -05:00
opencode-agent[bot] ac5495f5a1 chore(sync): update Deep Infra model catalog (#4748)
* chore(sync): update Deep Infra model catalog

* fix(deepinfra): add DeepSeek reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-15 22:14:25 -05:00
Sun Zhigang 0f01afe13f feat: add DeepSeek V4 Pro 0813 to Alibaba plans (#4771)
* feat: add DeepSeek V4 Pro 0813 to Alibaba plans

* fix: align China DeepSeek V4 reasoning options
2026-08-15 22:14:11 -05:00
Adam Dalloul 51fdc3e24f feat(alibaba): add Qwen3.8 27B canonical metadata (#4758) 2026-08-15 22:13:48 -05:00
Adam Dalloul 8e804a4ee8 feat(sync): auto-resolve EmpirioLabs models from canonical metadata (#4757)
* feat(sync): auto-resolve EmpirioLabs models from canonical metadata

The EmpirioLabs adapter only tried a few family prefixes, so models
with existing lab TOMLs were skipped. Resolve via family prefixes,
version-dot slugs, unique filenames, and dated/version suffixes.
Treat EmpirioLabs as a reviewed reasoning provider so hourly syncs
can auto-merge factored catalog updates.

* fix(sync): use mistralai prefix for EmpirioLabs Mistral ids

* test(sync): stop asserting qwen3-8-27b has no canonical
2026-08-15 22:13:23 -05:00
opencode-agent[bot] dc99d02482 chore(sync): update Charm Hyper model catalog (#4752)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 22:12:45 -05:00
Wassel Alazhar 47c637c213 umans-ai + coding-plan: add DeepSeek V4 Pro (0813 pay-per-token release) (#4788) 2026-08-15 22:12:00 -05:00
William Varmus da60a23efa feat: add SCNet Token Plan provider (#4791) 2026-08-15 22:11:38 -05:00
opencode-agent[bot] 3ccdbbf304 chore(sync): update Kilo model catalog (#4795)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 00:27:53 +00:00
opencode-agent[bot] f8ce5b98bc chore(sync): update OpenRouter model catalog (#4794)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-16 00:27:50 +00:00
opencode-agent[bot] b73eba5ac9 chore(sync): update NanoGPT model catalog (#4792)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 21:24:28 +00:00
opencode-agent[bot] 0b919ad6be chore(sync): update NanoGPT model catalog (#4789)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 19:24:39 +00:00
opencode-agent[bot] 8456bd7dfb chore(sync): update Kilo model catalog (#4787)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 18:25:56 +00:00
opencode-agent[bot] 07def1b0d3 chore(sync): update OpenRouter model catalog (#4786)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 18:25:52 +00:00
opencode-agent[bot] 6fc7c59301 chore(sync): update OpenRouter model catalog (#4784)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 17:24:21 +00:00
opencode-agent[bot] 87e77c36c3 chore(sync): update Kilo model catalog (#4783)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 17:24:18 +00:00
opencode-agent[bot] 65db14442d chore(sync): update Kilo model catalog (#4779)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 16:25:16 +00:00
opencode-agent[bot] 9a01b01fb0 chore(sync): update NanoGPT model catalog (#4782)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 15:24:44 +00:00
opencode-agent[bot] 8ef7063be8 chore(sync): update OpenRouter model catalog (#4780)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 15:24:43 +00:00
opencode-agent[bot] c53f22b775 chore(sync): update Requesty model catalog (#4781)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 15:24:37 +00:00
opencode-agent[bot] 3f2eb4fcf7 chore(sync): update Kilo model catalog (#4779)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 14:24:42 +00:00
opencode-agent[bot] 05b0d28004 chore(sync): update OpenRouter model catalog (#4778)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 13:26:05 +00:00
opencode-agent[bot] a95407f55d chore(sync): update OpenRouter model catalog (#4777)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 12:26:18 +00:00
opencode-agent[bot] a8c294c7a4 chore(sync): update NanoGPT model catalog (#4776)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 12:26:17 +00:00
opencode-agent[bot] bff4122780 chore(sync): update NanoGPT model catalog (#4775)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 11:24:21 +00:00
opencode-agent[bot] 8e4b34255e chore(sync): update OpenRouter model catalog (#4774)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 11:24:20 +00:00
opencode-agent[bot] d7292c9992 chore(sync): update NanoGPT model catalog (#4773)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 10:24:49 +00:00
opencode-agent[bot] 75422445e5 chore(sync): update OpenRouter model catalog (#4772)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 10:24:44 +00:00
opencode-agent[bot] 8e0886e5f9 chore(sync): update Kilo model catalog (#4769)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 09:25:28 +00:00
opencode-agent[bot] 4b86b900f0 chore(sync): update OpenRouter model catalog (#4770)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 09:25:26 +00:00
opencode-agent[bot] adc8b379a8 chore(sync): update OpenRouter model catalog (#4768)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 08:25:32 +00:00
opencode-agent[bot] 1b9f7f954b chore(sync): update Kilo model catalog (#4767)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 07:26:12 +00:00
opencode-agent[bot] 12997571fc chore(sync): update OpenRouter model catalog (#4766)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 07:26:09 +00:00
opencode-agent[bot] 61168416c8 chore(sync): update OpenRouter model catalog (#4765)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 06:26:26 +00:00
opencode-agent[bot] 613423decf chore(sync): update Kilo model catalog (#4764)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 06:26:22 +00:00
opencode-agent[bot] 38b10233d0 chore(sync): update Kilo model catalog (#4763)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 05:25:15 +00:00
opencode-agent[bot] 17eb6c86e3 chore(sync): update OpenRouter model catalog (#4761)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 05:25:07 +00:00
opencode-agent[bot] fcac093772 chore(sync): update OpenRouter model catalog (#4760)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 04:26:00 +00:00
opencode-agent[bot] 978733d445 chore(sync): update Kilo model catalog (#4756)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 03:27:54 +00:00
opencode-agent[bot] 645f9dce09 chore(sync): update OpenRouter model catalog (#4759)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 03:27:44 +00:00
opencode-agent[bot] 68bde6c590 chore(sync): update OpenRouter model catalog (#4755)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 02:36:48 +00:00
opencode-agent[bot] 0302d1927e chore(sync): update OpenRouter model catalog (#4750)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 01:48:39 +00:00
opencode-agent[bot] 36ff7e7872 chore(sync): update Kilo model catalog (#4751)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 01:48:31 +00:00
opencode-agent[bot] 2fc8b60fae chore(sync): update Kilo model catalog (#4749)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-15 00:28:17 +00:00
opencode-agent[bot] 525c2507db chore(sync): update Kilo model catalog (#4747)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 23:24:50 +00:00
opencode-agent[bot] bca9a4a666 chore(sync): update Vercel AI Gateway model catalog (#4746)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 23:24:48 +00:00
opencode-agent[bot] 1f3b0475c9 chore(sync): update Cloudflare Workers AI model catalog (#4740)
* chore(sync): update Cloudflare Workers AI model catalog

* fix(cloudflare-workers-ai): factor DeepSeek models

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-14 18:03:19 -05:00
opencode-agent[bot] 91aae6c232 chore(sync): update Eden AI model catalog (#4569)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 18:01:40 -05:00
rakshith1928 f97df19af4 feat(aihubmix): add gemini-3.7-flash model configuration (#4735)
* feat(gemini): add gemini-3.7-flash model configuration

* review and address bot suggestions
2026-08-14 17:59:16 -05:00
opencode-agent[bot] 369b6abce8 chore(sync): update EmpirioLabs AI model catalog (#4741)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 17:59:07 -05:00
rakshith1928 29fb1fdaa3 feat(perplexity-agent): add grok 4.6 and deepseek-v4-flash-0731 models configuration (#4736)
* feat(perplexity-agent): add grok 4.6 model configuration

* feat(perplexity-agent): add deepseek v4 flash model configuration
2026-08-14 17:58:28 -05:00
rakshith1928 535d7b6142 feat(muse-glimmer): add initial configuration for muse-glimmer-30b model (#4734) 2026-08-14 17:58:18 -05:00
opencode-agent[bot] 3cc6ffcf31 chore(sync): update Kilo model catalog (#4745)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 22:24:57 +00:00
opencode-agent[bot] b23392aced chore(sync): update OpenRouter model catalog (#4744)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 21:25:22 +00:00
opencode-agent[bot] 430f752241 chore(sync): update Kilo model catalog (#4743)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 21:25:20 +00:00
opencode-agent[bot] e5673b096a chore(sync): update Merge Gateway model catalog (#4742)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 20:26:23 +00:00
opencode-agent[bot] d3095b9c5e chore(sync): update OpenRouter model catalog (#4739)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 20:26:14 +00:00
opencode-agent[bot] a25d0e1f35 chore(sync): update Kilo model catalog (#4738)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 19:34:55 +00:00
opencode-agent[bot] 28aac9644a chore(sync): update NanoGPT model catalog (#4737)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 19:34:52 +00:00
m3 844718cc08 fix(github-copilot): add xhigh effort for Grok 4.6 (#4726) 2026-08-14 13:37:01 -05:00
opencode-agent[bot] 559783887a chore(sync): update Charm Hyper model catalog (#4728)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 13:36:54 -05:00
opencode-agent[bot] 30ca661dce chore(sync): update Deep Infra model catalog (#4731)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 13:36:45 -05:00
opencode-agent[bot] 8537b9f27b chore(sync): update Venice model catalog (#4733)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 13:36:36 -05:00
opencode-agent[bot] 581973939e chore(sync): update Kilo model catalog (#4732)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 18:33:07 +00:00
opencode-agent[bot] 2dcd6425bc chore(sync): update Baseten model catalog (#4730)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 18:33:05 +00:00
opencode-agent[bot] 0c86e74727 chore(sync): update OpenRouter model catalog (#4724)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 18:33:04 +00:00
opencode-agent[bot] fe2c45b7fe chore(sync): update NanoGPT model catalog (#4729)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 18:33:01 +00:00
opencode-agent[bot] 994ea92a66 feat(ofox): add missing chat models (#4718)
* feat(ofox): add missing chat models

* fix(ofox): use canonical Seed metadata

---------

Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-14 12:52:11 -05:00
opencode-agent[bot] ae2c1ab9a7 chore(sync): update Kilo model catalog (#4725)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 17:35:26 +00:00
m3 f88503a06e feat(github-copilot): add Grok 4.6 (#4723) 2026-08-14 12:33:31 -05:00
Aiden Cline 108087b1a8 fix(cloudflare-ai-gateway): remove providers unusable on the unified endpoint (#4715)
* fix(cloudflare-ai-gateway): trim new providers to Cloudflare's priced model catalog

* fix(cloudflare-ai-gateway): remove google-ai-studio and grok entries unusable on the unified endpoint
2026-08-14 12:10:26 -05:00
opencode-agent[bot] 6115ddd1cc chore(sync): update Merge Gateway model catalog (#4717)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 12:10:11 -05:00
Fenil Modi a58d019a5f Fix: Remove 'none' from kimi-k3 reasoning_options (Kimi K3 doesn't support it) (#4722)
* Fix: Remove 'none' from kimi-k3 reasoning_options (Kimi K3 doesn't support it)

* Fix: Remove 'none' from kimi-k3 reasoning_options (Kimi K3 doesn't support it)

* Fix: Restore complete comments, update reasoning_effort docs (low/high/max only)
2026-08-14 12:09:49 -05:00
github-actions[bot] 5e45e7b431 fix: [missing-model] ofox: deepseek/deepseek-v4-pro-0813 (#4689)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-14 11:33:21 -05:00
opencode-agent[bot] 12c6d33b5f chore(sync): update OpenRouter model catalog (#4713)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 16:32:35 +00:00
opencode-agent[bot] 2f70bbfa2b chore(sync): update Kilo model catalog (#4716)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 16:32:32 +00:00
opencode-agent[bot] 942682f45d chore(sync): update Kilo model catalog (#4714)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 15:33:02 +00:00
opencode-agent[bot] 753fdb558d chore(sync): update Merge Gateway model catalog (#4712)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 15:33:00 +00:00
opencode-agent[bot] 3f8fa9556b chore(sync): update Cortecs model catalog (#4707)
* chore(sync): update Cortecs model catalog

* fix(cortecs): add reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-14 10:03:23 -05:00
opencode-agent[bot] d21ca41daf chore(sync): update Hugging Face model catalog (#4701)
* chore(sync): update Hugging Face model catalog

* fix(huggingface): add DeepSeek reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-14 10:01:42 -05:00
opencode-agent[bot] 9330245632 chore(sync): update Kilo model catalog (#4710)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 10:01:33 -05:00
Søren Juul 296272ee74 feat(abacus): add missing text-generation models from RouteLLM catalog (#4705)
Adds 14 Abacus RouteLLM provider entries that were present in the live https://routellm.abacus.ai/v1/models endpoint but missing from the repo.

All entries use existing lab metadata via base_model and override only provider-specific cost, context/output limits, and modalities per Abacus API values.

Validation: bun validate passes.

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-08-14 10:01:00 -05:00
Aiden Cline bd483393f6 feat(cloudflare-ai-gateway): add google-ai-studio, grok, groq, mistral, deepseek providers (#4693)
* feat(cloudflare-ai-gateway): add google-ai-studio, grok, groq, mistral, deepseek providers

* fix(cloudflare-ai-gateway): drop xai fast mode pending gateway verification
2026-08-14 09:59:33 -05:00
opencode-agent[bot] aad9bbadf0 chore(sync): update OpenRouter model catalog (#4711)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 14:35:35 +00:00
opencode-agent[bot] f8edc0654f chore(sync): update Charm Hyper model catalog (#4709)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 13:46:05 +00:00
opencode-agent[bot] d93726a81a chore(sync): update OpenRouter model catalog (#4708)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 12:30:35 +00:00
opencode-agent[bot] 66b2aa9739 chore(sync): update OpenRouter model catalog (#4706)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 11:31:04 +00:00
opencode-agent[bot] 1c5b8fa45a chore(sync): update NanoGPT model catalog (#4702)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 10:36:13 +00:00
opencode-agent[bot] dc073488de chore(sync): update Kilo model catalog (#4704)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 09:38:17 +00:00
opencode-agent[bot] b1d51322b6 chore(sync): update OpenRouter model catalog (#4703)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 09:38:06 +00:00
opencode-agent[bot] 3876740bf4 chore(sync): update Venice model catalog (#4698)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 08:41:54 +00:00
opencode-agent[bot] d31cf0a2f0 chore(sync): update NanoGPT model catalog (#4700)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 08:41:50 +00:00
opencode-agent[bot] fe5341d617 chore(sync): update OpenRouter model catalog (#4697)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 07:48:34 +00:00
opencode-agent[bot] 88793ca499 chore(sync): update NanoGPT model catalog (#4699)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 07:48:29 +00:00
opencode-agent[bot] f3c78ff719 chore(sync): update Kilo model catalog (#4696)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 06:45:39 +00:00
m3 2c355992c3 feat(github-copilot): add Gemini 3.7 Flash (#4691) 2026-08-14 01:23:22 -05:00
Ahmad Shahzad 9b5aabe4f6 feat(fireworks-ai): add DeepSeek V4 Pro 0813 (#4695) 2026-08-14 01:23:05 -05:00
Jack 94a1629610 feat(opencode go): add glm 5.3 2026-08-14 14:04:39 +08:00
opencode-agent[bot] f75b391786 chore(sync): update Deep Infra model catalog (#4686)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 01:00:11 -05:00
opencode-agent[bot] ced6f17ad3 chore(sync): update NanoGPT model catalog (#4684)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 01:00:02 -05:00
opencode-agent[bot] 74f91043e0 chore(sync): update Kilo model catalog (#4683)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:59:54 -05:00
opencode-agent[bot] 2ca3d674c2 chore(sync): update Cloudflare Workers AI model catalog (#4685)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:59:47 -05:00
opencode-agent[bot] c91dbe3786 chore(sync): update Hugging Face model catalog (#4682)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:59:37 -05:00
opencode-agent[bot] 31816fd207 chore(sync): update Weights & Biases model catalog (#4681)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:59:28 -05:00
opencode-agent[bot] 729a5dbc85 chore(sync): update Cortecs model catalog (#4680)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:59:10 -05:00
opencode-agent[bot] 740104e528 feat: add GLM-5.3 coding plan models (#4690)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-14 00:58:58 -05:00
opencode-agent[bot] f5ae5bef52 chore(sync): update OpenRouter model catalog (#4688)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 05:47:28 +00:00
opencode-agent[bot] 01b47f4d56 chore(sync): update Ofox model catalog (#4687)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 05:47:27 +00:00
opencode-agent[bot] ff80d21a08 chore(sync): update Merge Gateway model catalog (#4679)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 05:47:19 +00:00
Aiden Cline 06f44f509c chore(cloudflare-ai-gateway): refresh catalog against first-party and synced sources (#4676)
* chore(cloudflare-ai-gateway): refresh catalog against first-party and synced sources

* chore(cloudflare-ai-gateway): use base_model stubs for all catalog entries

* chore(cloudflare-ai-gateway): omit experimental fast modes pending gateway billing verification

* fix(cloudflare-ai-gateway): add missing lab metadata and enforce base_model stubs
2026-08-14 00:44:12 -05:00
Aiden Cline 041d76a7c6 fix(cloudflare-ai-gateway): align reasoning effort options with first-party catalogs (#4674)
* fix(cloudflare-ai-gateway): align reasoning effort options with first-party catalogs

* fix(cloudflare-ai-gateway): use budget_tokens for pre-effort Claude models
2026-08-14 00:01:00 -05:00
opencode-agent[bot] ca8a9a857d chore(sync): update Vercel AI Gateway model catalog (#4675)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 04:53:57 +00:00
opencode-agent[bot] 41a2b1a780 chore(sync): update CrossModel model catalog (#4673)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 23:30:10 -05:00
celeste 464b988268 feat(ofox): fill the gaps automation left — 4 models, native gemini protocol, verified reasoning fixes (#3404)
The issue-fixer pipeline brought Ofox to full listing (72 models) after
trackMissingModels was enabled — this PR is rebuilt on top of that to
cover only what automation could not author:

- 4 models the pipeline missed: gemini-3.5-flash-lite, minimax-m2.7,
  kimi-k2.7-code, gpt-5.4-pro (flat-rate comment included)
- [provider] native gemini protocol for the four Gemini models
  (@ai-sdk/google + https://api.ofox.ai/gemini/v1beta, verified
  end-to-end: listing, generateContent, SSE, x-goog-api-key auth)
- kimi-k3: replace the effort-only declaration with the behaviorally
  verified toggle (reasoning_tokens 118 vs none; adaptive rejected by
  the host; neither effort path shows graded effect)
- gemini-3.6-flash: add input_audio = 1.5 (matches live catalog and
  first-party)

Co-authored-by: celeste1900 <caojingmiao@meiqia.com>
2026-08-13 23:29:52 -05:00
Jack fa03dca90b feat(opencode): add Muse Spark 1.2 2026-08-14 12:28:49 +08:00
opencode-agent[bot] 1d88af457a chore(sync): update OpenRouter model catalog (#4670)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 03:57:03 +00:00
opencode-agent[bot] aac16b7fbf chore(sync): update Kilo model catalog (#4672)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 03:56:52 +00:00
opencode-agent[bot] 3e93feddbf chore(sync): update Kilo model catalog (#4669)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 03:08:55 +00:00
opencode-agent[bot] b7367fabdc fix(sync): allow Venice reasoning auto-merge (#4668)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-13 21:42:10 -05:00
opencode-agent[bot] 52c9831c8b chore(sync): update Venice model catalog (#4661)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 21:40:40 -05:00
opencode-agent[bot] 2bda1f4a8f chore(sync): update Baseten model catalog (#4664)
* chore(sync): update Baseten model catalog

* fix(baseten): correct DeepSeek reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-13 21:37:07 -05:00
opencode-agent[bot] c5de7d0258 chore(sync): update NanoGPT model catalog (#4659)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 01:55:21 +00:00
opencode-agent[bot] 07c57f2b4d chore(sync): update Vercel AI Gateway model catalog (#4667)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 01:55:14 +00:00
opencode-agent[bot] 482b6b08bc chore(sync): update OpenRouter model catalog (#4665)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:39:48 +00:00
opencode-agent[bot] 0bfe96459e chore(sync): update Kilo model catalog (#4657)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:39:45 +00:00
opencode-agent[bot] 8d4cab3a0c chore(sync): update Deep Infra model catalog (#4662)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-14 00:39:40 +00:00
opencode-agent[bot] 2ceaa0ee45 chore(sync): update OpenRouter model catalog (#4663)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 23:27:48 +00:00
opencode-agent[bot] b89ba777e5 chore(sync): update DigitalOcean model catalog (#4660)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 23:27:44 +00:00
opencode-agent[bot] e7ff2fb162 chore(sync): update Hugging Face model catalog (#4658)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 23:27:42 +00:00
opencode-agent[bot] 40804fdb66 chore(sync): update Kilo model catalog (#4654)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 17:59:11 -05:00
Eric W. Tramel 142715e73f feat: add Arcee AI lab and Trinity models (#4655)
* feat: add Arcee AI lab and Trinity models

* fix: correct Trinity metadata dates

* fix: align Trinity descriptions with model cards
2026-08-13 17:58:59 -05:00
Emmanuel Acheampong 9b01dfab0e Add Crusoe provider (#3769)
* Add Crusoe provider

* Remove pricing; add Nemotron-3-Ultra-550B

* Address review: declare reasoning_options, theme-adaptive logo

- Add reasoning_options = [] to the 12 reasoning-model TOMLs: Crusoe's
  OpenAI-compatible endpoint documents no caller-side reasoning controls
  (docs.crusoecloud.com defers to the generic OpenAI API reference), so
  an empty declaration is correct per the validate schema.
- logo.svg: drop fixed width/height, use fill="currentColor" so the
  wordmark adapts to light/dark themes.

bun validate passes locally.

* Move reasoning_options rationale comments above first key

* Restore trailing newlines in reasoning-model TOMLs

* fix(crusoe): set reasoning config from live endpoint probe

Probed api.inference.crusoecloud.com on 2026-08-13 with reasoning_effort
low/medium/high/none/max plus tool-call interleaving checks per model.

- gpt-oss-120b: effort low/medium/high (reasoning length scales; none/max
  return 400), interleaved with tool calls
- GLM-5.2, Kimi-K2.6, Nemotron-3-Nano-Omni-Reasoning: toggle (effort
  "none" disables reasoning; low/medium/high inert), interleaved
- GLM-5.1: reasoning always on, no working caller-side control
- Reasoning arrives in the message field named "reasoning", so the
  boolean interleaved form is used
- Drop reasoning_options = [] from non-reasoning models
- Remove six models whose IDs drifted from the live /v1/models catalog
  or whose reasoning deployment is unverified; follow-up will re-add

* fix(crusoe): gemma-4-31b-it reasoning toggle

Base model has reasoning = true so reasoning_options is required by the
schema. Probe shows reasoning_effort acts as an enable/disable toggle on
this deployment (off by default, "none" disables, other values enable).

* feat(crusoe): add per-model pricing

Source: https://www.crusoe.ai/cloud/pricing (accessed 2026-08-13).
Input, output, and cached-read rates per million tokens for all eight
models. Nemotron Omni carries a separate audio input rate (0.50) via
cost.input_audio; its text/image/video input rate is 0.30.
2026-08-13 17:58:39 -05:00
opencode-agent[bot] 6d17729e40 chore(sync): update Venice model catalog (#4653)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 22:27:35 +00:00
opencode-agent[bot] 81512c6614 chore(sync): update OpenRouter model catalog (#4651)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 21:30:26 +00:00
opencode-agent[bot] be9dd3c7ff chore(sync): update NanoGPT model catalog (#4649)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 15:54:03 -05:00
opencode-agent[bot] 09d7308b19 chore(sync): update Venice model catalog (#4650)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 15:53:54 -05:00
opencode-agent[bot] 095924b4d2 chore(sync): update OpenRouter model catalog (#4648)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 20:27:34 +00:00
opencode-agent[bot] 60f679bae2 chore(sync): update Vercel AI Gateway model catalog (#4647)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 20:27:29 +00:00
opencode-agent[bot] 86060ddadc chore(sync): update NanoGPT model catalog (#4644)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 14:47:24 -05:00
opencode-agent[bot] 5a627a355c feat(sync): trust LLM Gateway reasoning metadata (#4646)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-13 14:47:10 -05:00
opencode-agent[bot] 62bac49078 chore(sync): update LLM Gateway model catalog (#4643)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 14:45:44 -05:00
opencode-agent[bot] 2e9b3b4a02 chore(sync): update Merge Gateway model catalog (#4645)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 19:37:56 +00:00
Jack b1810e30d7 add gemini-3.7-flash to opencode 2026-08-14 03:19:00 +08:00
Ahmad Shahzad 9d486fd64a feat: add Fireworks provider models for Inkling, Muse Glimmer 30B, Nemotron 3 Ultra, Nemotron 3.5 Lightning, and Qwen3.8 Max (#4642) 2026-08-13 14:04:22 -05:00
opencode-agent[bot] d196338757 chore(sync): update Vercel AI Gateway model catalog (#4633)
* chore(sync): update Vercel AI Gateway model catalog

* fix(vercel): correct reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-13 13:45:52 -05:00
opencode-agent[bot] 02cc73eab5 chore(sync): update OpenRouter model catalog (#4641)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:44:44 -05:00
opencode-agent[bot] 10bb2bdb49 chore(sync): update LLM Gateway model catalog (#4640)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:44:22 -05:00
opencode-agent[bot] a1742a3776 chore(sync): update NanoGPT model catalog (#4639)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:44:15 -05:00
opencode-agent[bot] 58a5a4f8d8 chore(sync): update Requesty model catalog (#4634)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:44:08 -05:00
opencode-agent[bot] 3e41cf0a90 chore(sync): update Charm Hyper model catalog (#4628)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:43:42 -05:00
opencode-agent[bot] c1dc1eb5ff chore(sync): update Merge Gateway model catalog (#4638)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 18:34:43 +00:00
opencode-agent[bot] d4c88ebd50 chore(sync): update Kilo model catalog (#4637)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 18:34:41 +00:00
opencode-agent[bot] d4f9394783 chore(sync): update Kilo model catalog (#4636)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 17:35:48 +00:00
opencode-agent[bot] 057888a5da chore(sync): update OpenRouter model catalog (#4635)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 17:35:46 +00:00
opencode-agent[bot] 0012011936 feat: add Gemini 3.7 Flash (#4632)
* feat: add Gemini 3.7 Flash

* fix: use Gemini 3.7 introductory pricing

---------

Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-13 12:26:42 -05:00
opencode-agent[bot] e66f005c06 chore(sync): update Kilo model catalog (#4627)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 16:34:02 +00:00
opencode-agent[bot] 7bb5980757 chore(sync): update NanoGPT model catalog (#4630)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 15:35:19 +00:00
opencode-agent[bot] 9a8bb64540 chore(sync): update OpenRouter model catalog (#4629)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 15:35:13 +00:00
opencode-agent[bot] 2bd7da275b chore(sync): update Venice model catalog (#4598)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 10:00:33 -05:00
opencode-agent[bot] 256a3deaa5 chore(sync): update Kilo model catalog (#4623)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 10:00:01 -05:00
opencode-agent[bot] a8370c548d chore(sync): update NanoGPT model catalog (#4619)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 09:59:54 -05:00
opencode-agent[bot] f31bbbb4b0 chore(sync): update CrossModel model catalog (#4600)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 09:59:45 -05:00
opencode-agent[bot] 766597ec5f chore(sync): update LLM Gateway model catalog (#4593)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 09:59:15 -05:00
opencode-agent[bot] 7e4566d558 chore(sync): update Charm Hyper model catalog (#4622)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:47:48 +00:00
opencode-agent[bot] 8e4e561cb0 chore(sync): update OpenRouter model catalog (#4621)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 13:47:46 +00:00
Jack 0e0b204c16 chore(opencode): deprecate Ling 3.0 Tiny Free 2026-08-13 20:47:22 +08:00
opencode-agent[bot] 0e26a4eac7 chore(sync): update OpenRouter model catalog (#4618)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 12:32:53 +00:00
opencode-agent[bot] a2cdb76d54 chore(sync): update Kilo model catalog (#4617)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 12:32:45 +00:00
opencode-agent[bot] 0e63bef4d9 chore(sync): update Kilo model catalog (#4616)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 11:31:45 +00:00
opencode-agent[bot] e59ad0f299 chore(sync): update NanoGPT model catalog (#4615)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 11:31:40 +00:00
opencode-agent[bot] cf628d889e chore(sync): update NanoGPT model catalog (#4613)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 10:38:56 +00:00
opencode-agent[bot] 6ed870d749 chore(sync): update Kilo model catalog (#4614)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 10:38:54 +00:00
opencode-agent[bot] a9a26bc7a8 chore(sync): update OpenRouter model catalog (#4612)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 10:38:49 +00:00
opencode-agent[bot] d3cc567c7e chore(sync): update Kilo model catalog (#4611)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 09:40:59 +00:00
opencode-agent[bot] e3dd11feee chore(sync): update NanoGPT model catalog (#4610)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 09:40:51 +00:00
opencode-agent[bot] 3ec2000654 chore(sync): update Inceptron model catalog (#4607)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 07:49:39 +00:00
opencode-agent[bot] 4234814e1d chore(sync): update Kilo model catalog (#4606)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 07:49:35 +00:00
opencode-agent[bot] 95b26d1be3 chore(sync): update OpenRouter model catalog (#4605)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 07:49:31 +00:00
opencode-agent[bot] 0c0a323f05 chore(sync): update Kilo model catalog (#4604)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 06:46:54 +00:00
opencode-agent[bot] 46b55f8cd6 chore(sync): update OpenRouter model catalog (#4603)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 06:46:48 +00:00
opencode-agent[bot] 2c51f7070a chore(sync): update OpenRouter model catalog (#4601)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 03:57:35 +00:00
opencode-agent[bot] 7ac862dc68 chore(sync): update OpenRouter model catalog (#4599)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 00:40:08 +00:00
opencode-agent[bot] 15f33eb583 chore(sync): update Kilo model catalog (#4596)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-13 00:40:06 +00:00
opencode-agent[bot] 6fc6f35c95 chore(sync): update OpenRouter model catalog (#4597)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 23:27:47 +00:00
opencode-agent[bot] 9499c8320a fix(sync): import LLM Gateway reasoning efforts (#4595)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 18:17:17 -05:00
opencode-agent[bot] 5cae86c2ca chore(sync): update Venice model catalog (#4591)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 18:13:37 -05:00
opencode-agent[bot] 33934bc733 chore(sync): update OpenRouter model catalog (#4594)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 17:33:35 -05:00
opencode-agent[bot] 77d3ea2b0f chore(sync): update CrossModel model catalog (#4589)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 17:33:23 -05:00
opencode-agent[bot] b007f57877 chore(sync): update Kilo model catalog (#4592)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 22:27:45 +00:00
opencode-agent[bot] e78889836f chore(sync): update Merge Gateway model catalog (#4590)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 20:29:26 +00:00
opencode-agent[bot] df5b90789f chore(sync): update LLM Gateway model catalog (#4582)
* chore(sync): update LLM Gateway model catalog

* fix(llmgateway): correct Grok 4.6 reasoning options

* fix(llmgateway): factor Grok 4.6 metadata

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 15:27:38 -05:00
opencode-agent[bot] ddcf98e6e5 chore(sync): update Kilo model catalog (#4586)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 15:15:02 -05:00
opencode-agent[bot] 8221d31a14 feat(sync): trust reasoning metadata from more providers (#4588)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 15:14:49 -05:00
opencode-agent[bot] cc3ea068f5 chore(sync): update NanoGPT model catalog (#4584)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 15:14:33 -05:00
opencode-agent[bot] b9f4eb5e7e chore(sync): update Merge Gateway model catalog (#4583)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 15:07:32 -05:00
Aiden Cline ede9d97db8 fix(sync): accept nullable CrossModel reasoning controls (#4587) 2026-08-12 15:06:57 -05:00
opencode-agent[bot] 0370588c96 chore(sync): update OpenRouter model catalog (#4585)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 19:39:26 +00:00
opencode-agent[bot] 40058d7627 chore(sync): update OpenRouter model catalog (#4579)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 18:34:18 +00:00
opencode-agent[bot] 45387b38f5 chore(sync): update DigitalOcean model catalog (#4578)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 18:34:11 +00:00
opencode-agent[bot] 0974cab8a5 chore(sync): update Kilo model catalog (#4577)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 18:34:09 +00:00
opencode-agent[bot] ae1dc97681 chore(sync): update NanoGPT model catalog (#4572)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 12:51:24 -05:00
opencode-agent[bot] 00ea4a438a chore(sync): update Kilo model catalog (#4574)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 12:51:12 -05:00
opencode-agent[bot] db5537fbba chore(sync): update Merge Gateway model catalog (#4564)
* chore(sync): update Merge Gateway model catalog

* fix(merge-gateway): correct Grok reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 12:50:56 -05:00
opencode-agent[bot] 9c77a0fc7b chore(sync): update Vercel AI Gateway model catalog (#4567)
* chore(sync): update Vercel AI Gateway model catalog

* fix(vercel): correct reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 12:50:37 -05:00
opencode-agent[bot] 8bad6f1ab8 fix: add xhigh reasoning for Grok 4.6 (#4575)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 12:48:22 -05:00
opencode-agent[bot] a05fbfea10 chore(sync): update OpenRouter model catalog (#4573)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 17:36:23 +00:00
opencode-agent[bot] 8b43b2baac chore(sync): update Inceptron model catalog (#4562)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 12:23:21 -05:00
opencode-agent[bot] ef4cd907d6 chore(sync): update Venice model catalog (#4563)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 12:23:09 -05:00
opencode-agent[bot] f6e7b26986 chore(sync): update Kilo model catalog (#4566)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 12:22:51 -05:00
m3 73e0f6827b Add DeepSeek V4 Pro 0813 (#4570) 2026-08-12 12:21:32 -05:00
opencode-agent[bot] 2133bd1441 chore(sync): update CrossModel model catalog (#4568)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 16:34:22 +00:00
opencode-agent[bot] 0ccd0f642f chore(sync): update OpenRouter model catalog (#4565)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 16:34:16 +00:00
opencode-agent[bot] 57b505f777 chore(sync): update Tinfoil model catalog (#4561)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 16:34:11 +00:00
Jack 1f3c91536e Add new DS Pro in Go 2026-08-13 00:06:52 +08:00
Fenil Modi 2668ec082a chore(sync): update ai& model catalog (#4544)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-12 11:02:04 -05:00
github-actions[bot] ca042b5209 fix: [missing-model] tinfoil: deepseek-v4-flash (#4555)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-12 10:52:14 -05:00
opencode-agent[bot] 2f03855675 feat: add Grok 4.6 (#4559)
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 10:51:43 -05:00
Denis b5831ba2b9 fix(providers/azure): update gpt-5.6 sol/terra/luna pricing (#4541)
Co-authored-by: Denis Kot <denis.kot@makersite.de>
2026-08-12 10:50:53 -05:00
Frank 74789f5a02 feat(catalog): add Grok 4.6 2026-08-12 11:47:03 -04:00
Mounir Charef 0b921aaf88 feat(provider): add Eden AI (#4506) 2026-08-12 10:44:57 -05:00
Matthew Feroz 66c6a1dc69 feat(merge-gateway): expose OpenAI-compatible API endpoint (#4547) 2026-08-12 10:44:39 -05:00
opencode-agent[bot] d54d9489e2 chore(sync): update NanoGPT model catalog (#4545)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 10:44:13 -05:00
opencode-agent[bot] f38bffad7c chore(sync): update DigitalOcean model catalog (#4557)
* chore(sync): update DigitalOcean model catalog

* fix(digitalocean): add Qwen 3.8 reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-12 10:44:00 -05:00
m3 def9abba49 feat(github-copilot): add MAI-Code-1.1-Flash (#4540) 2026-08-12 10:43:05 -05:00
Oskar Gustafsson 3a30e92fe0 feat(sync): add Inceptron model catalog sync (#4548)
* Add Inceptron provider sync module

* Require review for Inceptron reasoning sync changes

Inceptron's models_dev reasoning metadata is provider-authored and is not independently constrained to reviewed lab or peer baselines. Keep it outside the reasoning auto-merge allowlist and assert that changes to its reasoning metadata require manual review.
2026-08-12 10:42:43 -05:00
opencode-agent[bot] 7f7983ec46 chore(sync): update LLM Gateway model catalog (#4550)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 10:42:05 -05:00
opencode-agent[bot] fd7a689c30 chore(sync): update OpenRouter model catalog (#4558)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 15:34:49 +00:00
opencode-agent[bot] 48faa4fcae chore(sync): update Tinfoil model catalog (#4554)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 15:34:45 +00:00
opencode-agent[bot] 5ff6ad5600 chore(sync): update OpenRouter model catalog (#4549)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 14:38:38 +00:00
opencode-agent[bot] 90c7f832fd chore(sync): update Charm Hyper model catalog (#4551)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 13:47:30 +00:00
opencode-agent[bot] 006eb78892 chore(sync): update OpenRouter model catalog (#4546)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 09:40:35 +00:00
opencode-agent[bot] 5271453b53 chore(sync): update Vercel AI Gateway model catalog (#4543)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 07:49:16 +00:00
opencode-agent[bot] fbb1e3bccd chore(sync): update NanoGPT model catalog (#4542)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 07:49:14 +00:00
opencode-agent[bot] f342c71106 chore(sync): update Kilo model catalog (#4539)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 06:45:39 +00:00
opencode-agent[bot] c6c8a2ab63 chore(sync): update OpenRouter model catalog (#4538)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 06:45:32 +00:00
Jack 5bc8e43523 fix(opencode): restore Hy3 Free 2026-08-12 13:31:50 +08:00
opencode-agent[bot] 73a7900abf chore(sync): update Venice model catalog (#4536)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 04:54:05 +00:00
Jack 210a56be88 fix(opencode): deprecate LongCat 2.0 Free 2026-08-12 11:09:11 +08:00
opencode-agent[bot] 4ec6570e9f chore(sync): update Venice model catalog (#4535)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 03:07:04 +00:00
opencode-agent[bot] 28b0185c09 chore(sync): update Kilo model catalog (#4534)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 03:07:01 +00:00
opencode-agent[bot] 8f00edbbb3 chore(sync): update Kilo model catalog (#4525)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 22:00:31 -05:00
Jack 13b14b8473 fix(opencode): temporarily deprecate Hy3 Free 2026-08-12 10:37:50 +08:00
opencode-agent[bot] 093311537e chore(sync): update OpenRouter model catalog (#4533)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 01:55:20 +00:00
opencode-agent[bot] 8907d55230 chore(sync): update OpenRouter model catalog (#4532)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 00:38:43 +00:00
opencode-agent[bot] 781078d8b0 chore(sync): update DigitalOcean model catalog (#4531)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-12 00:38:41 +00:00
opencode-agent[bot] ed50740cb0 chore(sync): update OpenRouter model catalog (#4528)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 23:27:25 +00:00
opencode-agent[bot] 91711b6230 chore(sync): update OpenRouter model catalog (#4526)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 21:30:25 +00:00
opencode-agent[bot] 02387b732b chore(sync): update OpenRouter model catalog (#4524)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 20:29:11 +00:00
opencode-agent[bot] 5d8d89a633 chore(sync): update NanoGPT model catalog (#4513)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 14:57:03 -05:00
opencode-agent[bot] 9ad1819e47 chore(sync): update Kilo model catalog (#4523)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 14:56:52 -05:00
opencode-agent[bot] e55c9ba4b0 chore(sync): update OpenRouter model catalog (#4522)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 19:38:37 +00:00
Jack 82b532650e feat(opencode): add Hy3 Free 2026-08-12 02:53:08 +08:00
Aiden Cline d702f48315 fix(sync): preserve OpenRouter reasoning toggles (#4521) 2026-08-11 13:44:26 -05:00
opencode-agent[bot] 607bfb05b4 chore(sync): update OpenRouter model catalog (#4511)
* chore(sync): update OpenRouter model catalog

* fix(openrouter): add new model reasoning controls

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-11 13:44:14 -05:00
opencode-agent[bot] b12de48dfd chore(sync): update EmpirioLabs AI model catalog (#4518)
* chore(sync): update EmpirioLabs AI model catalog

* docs(empiriolabs): cite Seed reasoning controls

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-11 13:44:06 -05:00
opencode-agent[bot] 9ae67ee1d9 chore(sync): update Deep Infra model catalog (#4519)
* chore(sync): update Deep Infra model catalog

* fix(deepinfra): add Seed reasoning efforts

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-11 13:43:53 -05:00
opencode-agent[bot] 370367fbfe chore(sync): update Kilo model catalog (#4514)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 13:35:02 -05:00
opencode-agent[bot] 012f70b22c chore(sync): update Charm Hyper model catalog (#4520)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 18:34:15 +00:00
opencode-agent[bot] 07b834c796 chore(sync): update Merge Gateway model catalog (#4517)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 18:34:06 +00:00
Aiden Cline 69aa0c788d feat(bytedance-seed): add Seed 2.0 Code metadata (#4516)
* feat(bytedance-seed): add Seed 2.0 Code metadata

* fix(sync): resolve Seed 2.0 Code aliases
2026-08-11 13:30:12 -05:00
Aiden Cline f2ad10f498 fix(nemotron): use shared Lightning model ID (#4515) 2026-08-11 13:24:07 -05:00
opencode-agent[bot] 1d0f9ba5a4 chore(sync): update Ambient model catalog (#4512)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 17:35:38 +00:00
opencode-agent[bot] 947073d5d8 chore(sync): update Vercel AI Gateway model catalog (#4510)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 17:35:35 +00:00
Aiden Cline c8c22290d9 feat: label PRs cleared by automated review (#4505)
* feat: label PRs cleared by automated review

* refactor: let reviewer explicitly mark PR ready

* fix: allow ready tool in reviewer workflow
2026-08-11 11:49:44 -05:00
opencode-agent[bot] df2d3b4566 chore(sync): update Merge Gateway model catalog (#4508)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 11:49:00 -05:00
Aiden Cline 84029a0efc feat(nvidia): add Nemotron 3.5 Lightning (#4507) 2026-08-11 11:48:44 -05:00
opencode-agent[bot] 652b312af3 chore(sync): update Cortecs model catalog (#4509)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 16:34:10 +00:00
Frank e4e9d4723f update zen models 2026-08-11 12:03:09 -04:00
github-actions[bot] 1cafaf4471 fix: [Privatemode] sync supported models (#4449)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-11 10:45:14 -05:00
opencode-agent[bot] f325d53557 chore(sync): update LLM Gateway model catalog (#4504)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 10:43:09 -05:00
Kibouo 0ee9990e13 Add Sonnet 5 to Azure Cognitive Services (#4493)
* Add Sonnet 5 to Azure Cognitive Services

* fix azure claude model catalogs

* fix azure claude review findings

---------

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-11 10:42:41 -05:00
opencode-agent[bot] 48be5c2c62 chore(sync): update OpenRouter model catalog (#4503)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 15:35:01 +00:00
Manaf941 c4d6d56afd feat: DeepSeek-V4-Flash-0731, GLM-5.2-NVFP4 and Kimi-K2.7-Code for provider Hetzner (#4498)
* feat: DeepSeek-V4-Flash-0731, GLM-5.2-NVFP4 and Kimi-K2.7-Code for provider Hetzner

* fix: reasoning_options for deepseek, glm, and remove limits for kimi k2.7

* chore: remove redundant kimi k2.7 output modality
2026-08-11 10:12:32 -05:00
opencode-agent[bot] 35e8c5547d chore(sync): update Venice model catalog (#4486)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 10:11:47 -05:00
opencode-agent[bot] aeca66036d chore(sync): update Vercel AI Gateway model catalog (#4490)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 10:10:52 -05:00
opencode-agent[bot] 2606c725df chore(sync): update Weights & Biases model catalog (#4487)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 10:10:41 -05:00
d2bz b89c75d8b9 feat(aihubmix): add Qwen3.8 Max and Claude Opus 5 (#4495)
* feat(aihubmix): add Qwen3.8 Max and Claude Opus 5

* fix(aihubmix): document reasoning control paths

* docs(aihubmix): cite Qwen3.8 Max pricing
2026-08-11 10:10:30 -05:00
opencode-agent[bot] 297a127774 chore(sync): update NanoGPT model catalog (#4496)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 10:10:10 -05:00
opencode-agent[bot] 0721d2d7a5 chore(sync): update Kilo model catalog (#4500)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 10:09:57 -05:00
Jack 425aa30b2c feat(opencode): add Nemotron 3.5 Lightning Free 2026-08-11 22:44:30 +08:00
opencode-agent[bot] 4abaeb87f8 chore(sync): update OpenRouter model catalog (#4501)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 14:38:40 +00:00
opencode-agent[bot] 8482f0c9a2 chore(sync): update OpenRouter model catalog (#4499)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 13:45:42 +00:00
Jack b0002c76a5 feat(opencode-go): default DeepSeek Flash to openai completion 2026-08-11 18:13:27 +08:00
Jack 95aaaebad1 feat(opencode-go): default DeepSeek Flash to Anthropic 2026-08-11 16:39:02 +08:00
opencode-agent[bot] 69447db9cc chore(sync): update Kilo model catalog (#4492)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 08:35:04 +00:00
opencode-agent[bot] 5fe153b372 chore(sync): update OpenRouter model catalog (#4491)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 08:34:55 +00:00
opencode-agent[bot] d7baf6afdd chore(sync): update OpenRouter model catalog (#4489)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 07:43:05 +00:00
opencode-agent[bot] 1c7606e146 chore(sync): update NanoGPT model catalog (#4488)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 06:34:10 +00:00
opencode-agent[bot] 4c18d6ec72 chore(sync): update OpenRouter model catalog (#4485)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 06:34:02 +00:00
opencode-agent[bot] 655dc7da95 chore(sync): update Kilo model catalog (#4484)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 06:33:59 +00:00
opencode-agent[bot] 0f03bafea2 chore(sync): update Kilo model catalog (#4481)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 00:41:03 -05:00
opencode-agent[bot] fc67c07ffc feat(nvidia): add Nemotron 3.5 Lightning metadata (#4468)
* feat(nvidia): add Nemotron 3.5 Lightning metadata

* chore: keep NVIDIA metadata change catalog-only

---------

Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com>
2026-08-11 00:40:53 -05:00
opencode-agent[bot] 3f98469287 chore(sync): update OpenRouter model catalog (#4483)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 05:38:05 +00:00
opencode-agent[bot] a1c9681752 chore(sync): update OpenRouter model catalog (#4482)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 04:44:34 +00:00
jeremysamuel13 431684cc45 fix(amazon-bedrock): update GPT-5.6 limits (#4473)
Inherit the expanded 1.05M context limits and add Bedrock's long-context pricing tier above 272K tokens.
2026-08-10 23:12:21 -05:00
Aiden Cline ef4eb2ac03 feat(models): add Meta Muse Glimmer 30B lab metadata (#4479)
Add the lab model so OpenRouter, Vercel, Kilo, and other hosts can
base_model onto meta/muse-glimmer-30b instead of shipping standalone
copies.
2026-08-10 23:11:53 -05:00
Aiden Cline a35c2f70e4 fix: map Muse Glimmer hosts onto the Meta lab model (#4480)
* feat(models): add Meta Muse Glimmer 30B lab metadata

Add the lab model so OpenRouter, Vercel, Kilo, and other hosts can
base_model onto meta/muse-glimmer-30b instead of shipping standalone
copies.

* fix: map Muse Glimmer hosts onto the Meta lab model

Factor OpenRouter and Vercel onto base_model = meta/muse-glimmer-30b
and keep only host cost plus the documented low/medium/high/xhigh
reasoning_effort controls.
2026-08-10 23:11:40 -05:00
opencode-agent[bot] 31846636e5 chore(sync): update Kilo model catalog (#4470)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 23:10:04 -05:00
opencode-agent[bot] 17b9a5c211 chore(sync): update OpenRouter model catalog (#4478)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 03:52:21 +00:00
Jack a2c502a245 remove north-mini-code-free from freetier 2026-08-11 11:49:02 +08:00
opencode-agent[bot] a2db899900 chore(sync): update OpenRouter model catalog (#4476)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 02:57:33 +00:00
opencode-agent[bot] cdf4cf4aa3 chore(sync): update OpenRouter model catalog (#4475)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 01:54:55 +00:00
opencode-agent[bot] 1d8a35c3b2 chore(sync): update OpenRouter model catalog (#4474)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-11 00:33:07 +00:00
opencode-agent[bot] a8b9fa0ca7 chore(sync): update OpenRouter model catalog (#4472)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 23:26:46 +00:00
opencode-agent[bot] 60348577ad chore(sync): update OpenRouter model catalog (#4469)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 22:26:56 +00:00
opencode-agent[bot] b9a60e8916 chore(sync): update Weights & Biases model catalog (#4464)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 17:23:43 -05:00
Divy dbb6e6e980 fix(coralbricks): give the logo intrinsic dimensions; drop a stale note (#4466)
The logo declared only a viewBox, so consumers that size an <img> from the
SVG's intrinsic dimensions rendered nothing and fell back to a placeholder
icon (visible in OpenCode's provider list). Adding width/height scales the
existing artwork into the same 24x24 box every other provider logo uses;
the viewBox does the scaling, so the art is unchanged.

The provider.toml comment said request-side reasoning control was not
declared because local serving rejected it. That stopped being true when
the gateway normalized the reasoning field, and the model entries have
declared reasoning_options (toggle + effort) since then, so the note now
contradicts the data next to it. Re-verified against the live API today:
reasoning {effort} and {enabled: false} both behave as declared on
glm-5.2-fp4, gpt-oss-120b and kimi-k3.
2026-08-10 17:21:31 -05:00
opencode-agent[bot] c331429bc4 fix(greenpt): classify DeepSeek V4 Flash 0731 (#4467)
Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com>
2026-08-10 17:21:05 -05:00
opencode-agent[bot] 7a9f981ce5 chore(sync): update OpenRouter model catalog (#4465)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 21:28:27 +00:00
opencode-agent[bot] 5cd81f9b40 chore(sync): update NanoGPT model catalog (#4463)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 20:27:57 +00:00
opencode-agent[bot] 486b043d76 chore(sync): update OpenRouter model catalog (#4462)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 20:27:54 +00:00
opencode-agent[bot] c619ce5f30 chore(sync): update Kilo model catalog (#4461)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 20:27:51 +00:00
github-actions[bot] 9da38e8389 fix: Automatically synchronize Privatemode model definitions (#4441)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-10 15:02:35 -05:00
Divy ff11be450c provider: add CoralBricks (#4040)
* provider: add CoralBricks (OpenAI-compatible gateway)

Adds CoralBricks (https://inference.coralbricks.ai/v1) with four hosted
models referencing existing lab entries: zhipuai/glm-5.2 (as glm-5.2-fp4,
1M ctx), moonshotai/kimi-k2.6, moonshotai/kimi-k3, openai/gpt-oss-120b.
Reasoning toggle verified against the live endpoint. bun validate passes.

* review: currentColor logo, interleaved=true, affirmative reasoning audit

- logo.svg rebuilt from brand source: currentColor, square viewBox, no
  fixed size or hardcoded colors
- interleaved = true on all four reasoning models (side channel streams
  via a 'reasoning' delta field, name not in the field enum)
- reasoning_options = []: live-tested reasoning.effort low/high — honored
  on the gateway's vendor-relay path (e.g. gpt-oss 68 vs 248 reasoning
  tokens) but rejected with 400 by its local-serving path, so no
  request-side control is declared until the gateway normalizes it

* review: omit cost during design-partner phase; name GLM FP4 variant

Costs are deliberately omitted while pricing is in a design-partner
phase and subject to change; a follow-up PR adds [cost] at GA (schema
allows omission). glm-5.2-fp4 gets a display-name override so UIs show
the FP4 serving variant.

* review: restore [cost] with published rates; cache_read = 0

Maintainer asked for cost to always be authored. Real published rates
rather than zeroes (zeroed costs render as free in consumers).
cache_read = 0 is accurate: cached input tokens are not billed.

* chore: drop kimi-k2.6 (model deprecated on CoralBricks)

* coralbricks: update published input rates (GLM $1.12, GPT-OSS $0.12)

* coralbricks: declare reasoning + effort/toggle options (glm effort verified end-to-end)
2026-08-10 15:01:45 -05:00
opencode-agent[bot] 78079f2b69 chore(sync): update OpenRouter model catalog (#4460)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 19:36:57 +00:00
opencode-agent[bot] 06c4501140 chore(sync): update Kilo model catalog (#4459)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 19:36:53 +00:00
opencode-agent[bot] b84da913d2 chore(sync): update LLM Gateway model catalog (#4458)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 19:36:48 +00:00
opencode-agent[bot] 05ff9bc78b chore(sync): update Kilo model catalog (#4457)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 18:33:33 +00:00
opencode-agent[bot] 2bb91ab1dc chore(sync): update OpenRouter model catalog (#4456)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 18:33:31 +00:00
opencode-agent[bot] b8487491bd chore(sync): update Charm Hyper model catalog (#4454)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 13:16:05 -05:00
opencode-agent[bot] a9cb8bfaf6 chore(sync): update Merge Gateway model catalog (#4455)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 17:34:21 +00:00
opencode-agent[bot] 0263641072 chore(sync): update OpenRouter model catalog (#4453)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 16:32:51 +00:00
opencode-agent[bot] efb7ac191e chore(sync): update Cloudflare Workers AI model catalog (#4452)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 14:38:59 +00:00
opencode-agent[bot] 20f3a0f6c4 chore(sync): update Kilo model catalog (#4451)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 14:38:57 +00:00
opencode-agent[bot] 830991b615 chore(sync): update OpenRouter model catalog (#4450)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 14:38:45 +00:00
asomethings 7caff8b6c4 fix(synthetic): correct Kimi-K3 reasoning efforts to low/high/max (#4429) 2026-08-10 09:11:31 -05:00
Aryan Keluskar 2c796b0b43 fix(cloudflare-workers-ai): correct GLM 5.2 token limits (#4422)
* fix(cloudflare-workers-ai): correct GLM 5.2 output limit

* fix(cloudflare-workers-ai): correct GLM 5.2 context limit
2026-08-10 09:11:00 -05:00
rognit 0542ac135a feat(snowflake-cortex): add Claude Opus 5, Sonnet 5, Opus 4.6 and Opus 4.5 (#4417)
* feat(snowflake-cortex): add Claude Opus 5, Sonnet 5, Opus 4.6 and Opus 4.5

* fix(snowflake-cortex): align Claude reasoning_options with tested chat-completions surface

Verified against POST /api/v2/cortex/v1/chat/completions:

- Opus 5 / Sonnet 5: reasoning.effort and reasoning.max_tokens return 400.
  reasoning_effort, output_config.effort and thinking.type return 200 but are
  ignored (reasoning_effort=bogus_zzz also returns 200) and never produce
  reasoning_details, so no caller control is exposed -> [].
- Opus 4.6 / 4.5: reasoning.max_tokens is the only field that actually engages
  thinking (sole case returning reasoning_details) -> budget_tokens. Effort
  values are not read (effort=bogus_zzz behaves identically), and max_tokens=100
  is accepted, so no effort enum and no min bound.
2026-08-10 09:10:38 -05:00
MassimoGirondiEvroc 016bf7dad1 evroc: reduce GLM 5.2 context window, remove Qwen3 VL (#4436) 2026-08-10 09:09:50 -05:00
xiaojie.zj 46d0daaa3b chore(zenmux): mark 15 offline models as deprecated (#4430) 2026-08-10 09:09:34 -05:00
opencode-agent[bot] eefa5f0c00 chore(sync): update Kilo model catalog (#4446)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 13:46:39 +00:00
opencode-agent[bot] 77444f0c61 chore(sync): update OpenRouter model catalog (#4445)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 13:46:31 +00:00
opencode-agent[bot] 1b7a1a3eb7 chore(sync): update Venice model catalog (#4414)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 12:32:38 +00:00
opencode-agent[bot] 4c7dd3dca0 chore(sync): update CrossModel model catalog (#4443)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 11:33:32 +00:00
opencode-agent[bot] 227f0b4130 chore(sync): update Google model catalog (#4439)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 10:41:49 +00:00
opencode-agent[bot] 84256d7508 chore(sync): update Requesty model catalog (#4437)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 09:47:54 +00:00
opencode-agent[bot] 96dd737018 chore(sync): update OpenRouter model catalog (#4435)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 08:49:25 +00:00
opencode-agent[bot] 85b9b7c947 chore(sync): update NanoGPT model catalog (#4434)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 07:53:52 +00:00
opencode-agent[bot] 1c2516ac6a chore(sync): update Deep Infra model catalog (#4433)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 07:53:50 +00:00
opencode-agent[bot] 1a4432a3a2 chore(sync): update Vercel AI Gateway model catalog (#4432)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 06:45:00 +00:00
opencode-agent[bot] cb009a5171 chore(sync): update Kilo model catalog (#4428)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 03:55:15 +00:00
opencode-agent[bot] e8dda3115f chore(sync): update OpenRouter model catalog (#4427)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 03:55:12 +00:00
opencode-agent[bot] c05dfeeac7 chore(sync): update Kilo model catalog (#4425)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 03:00:58 +00:00
opencode-agent[bot] 10fe18dd5e chore(sync): update OpenRouter model catalog (#4424)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 03:00:53 +00:00
opencode-agent[bot] 7372c46ca6 chore(sync): update LLM Gateway model catalog (#4421)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 01:55:16 +00:00
opencode-agent[bot] 736e0f5bed chore(sync): update OpenRouter model catalog (#4423)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 01:55:07 +00:00
opencode-agent[bot] b260c054ab chore(sync): update DigitalOcean model catalog (#4420)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 00:34:55 +00:00
opencode-agent[bot] f6820dda83 chore(sync): update Kilo model catalog (#4419)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-10 00:34:53 +00:00
opencode-agent[bot] 9a75caba45 chore(sync): update OpenRouter model catalog (#4416)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 22:25:55 +00:00
opencode-agent[bot] 14ad4e368e chore(sync): update Kilo model catalog (#4415)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 22:25:49 +00:00
opencode-agent[bot] 9bc16407d1 chore(sync): update Tinfoil model catalog (#4412)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 19:26:39 +00:00
opencode-agent[bot] 0ef98538c6 chore(sync): update Merge Gateway model catalog (#4410)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 11:28:04 -05:00
Aiden Cline 2512651df8 fix(vercel): add Claude Opus 5 Fast with effort options (#4409)
Copy first-party and Vercel Opus 5 reasoning_effort values instead of empty options.
2026-08-09 11:27:39 -05:00
Matt Baker 6623531ef4 Revert "fix(synthetic): cap GLM-5.2 input at real serving limit 365,178 (#4372)" (#4401)
This reverts commit 8b412cdf61.
2026-08-09 11:23:42 -05:00
Muhammad Muzammil 7f7ac845d2 fix(ofox): add GLM-5V-Turbo (#4404)
Add configuration for GLM-5V-Turbo model with pricing and options.
2026-08-09 11:23:30 -05:00
Derek Petersen ccdf24a5ed [Together AI] Increase GLM 5.2 context limit to 512K (#4339) 2026-08-09 11:23:21 -05:00
opencode-agent[bot] be80cac692 chore(sync): update NanoGPT model catalog (#4403)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 11:22:40 -05:00
Aiden Cline 289a4c2e31 fix(merge-gateway): tolerate null reasoning metadata (#4408)
The Gateway catalog emits capabilities.reasoning = null on some routes
even when supports_reasoning is true. Treat null like a missing object
so sync does not crash while deriving reasoning_options.
2026-08-09 11:22:29 -05:00
opencode-agent[bot] 0ab58eb6bc chore(sync): update OpenRouter model catalog (#4407)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 14:26:47 +00:00
opencode-agent[bot] 0aef08510c chore(sync): update Kilo model catalog (#4406)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 14:26:45 +00:00
opencode-agent[bot] cb66b68fd2 chore(sync): update OpenRouter model catalog (#4405)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 13:34:52 +00:00
opencode-agent[bot] 33efad8d60 chore(sync): update OpenRouter model catalog (#4400)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 09:27:25 +00:00
opencode-agent[bot] 834c8bca9b chore(sync): update Kilo model catalog (#4399)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 08:27:33 +00:00
opencode-agent[bot] 9dbe6fa00f chore(sync): update Kilo model catalog (#4397)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 07:37:17 +00:00
opencode-agent[bot] 976c9cc1a4 chore(sync): update OpenRouter model catalog (#4398)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 07:37:10 +00:00
opencode-agent[bot] 3eae95af39 chore(sync): update OpenRouter model catalog (#4396)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 06:30:34 +00:00
opencode-agent[bot] 4509de5f93 chore(sync): update Kilo model catalog (#4395)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 05:34:01 +00:00
opencode-agent[bot] 99470dd0d2 chore(sync): update OpenRouter model catalog (#4394)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 03:50:58 +00:00
opencode-agent[bot] 8b79d03a56 chore(sync): update Deep Infra model catalog (#4391)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 02:57:29 +00:00
cfal 51f2c91c8b feat(alibaba): add deepseek-v4-flash-0731 and glm-5.2 (#4365)
* feat(alibaba): add deepseek-v4-flash-0731 and glm-5.2

Both models are served pay-as-you-go on the international Model Studio
endpoint (dashscope-intl.aliyuncs.com/compatible-mode/v1), but until now
only existed under the plan providers, so callers using DASHSCOPE_API_KEY
directly could not resolve them.

Pricing is the Singapore list in USD/MTok:
  deepseek-v4-flash-0731  0.20 in / 0.40 out / 0.04 implicit cache
  glm-5.2                 1.40 in / 4.40 out / 0.28 implicit cache

reasoning_options follow the same-host siblings: Alibaba exposes
reasoning_effort high|max only (low/medium map to high, xhigh to max) plus
an enable_thinking toggle, and returns reasoning_content.

Sources:
https://www.alibabacloud.com/help/en/model-studio/deepseek-api
https://www.alibabacloud.com/help/en/model-studio/glm
https://www.alibabacloud.com/help/en/model-studio/model-pricing
https://www.qwencloud.com/models/deepseek-v4-flash-0731
https://www.qwencloud.com/models/glm-5.2

* fix(alibaba): expose GLM 5.2 reasoning efforts

---------

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-08 20:58:10 -05:00
opencode-agent[bot] 78d3e4e734 chore(sync): update OpenRouter model catalog (#4390)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 01:54:42 +00:00
github-actions[bot] 80d8633b83 fix: [missing-model] tinfoil: kimi-k3 (#4383)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-08 20:50:50 -05:00
opencode-agent[bot] a6393f44a2 chore(sync): update Cortecs model catalog (#4353)
* chore(sync): update Cortecs model catalog

* fix(sync): preserve Cortecs reasoning overrides

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-08 20:45:23 -05:00
Faisal 345f14a096 feat(provider): add IBM watsonx.ai catalog (#4379)
Add the native watsonx.ai provider and its active token-priced model metadata.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-08 20:45:06 -05:00
Andre Landgraf fba4bb7796 Neon: declare structured_output where it does not resolve (#4361) 2026-08-08 20:34:38 -05:00
Carlo Taleon 753b031e77 crof: mark greg-1-mini and kimi-k2.5-lightning as vision models (#4363) 2026-08-08 20:34:28 -05:00
Martin Mose Facondini fec96dd01c refactor(zeldoc): rename z-code model to zdev (#4364)
* refactor(zeldoc): rename z-code model to zdev

* fix(zeldoc): set attachment=true for zdev image input
2026-08-08 20:34:19 -05:00
Andre Landgraf 79be9f9168 Neon: correct the output-token limit on eleven models (#4370)
* Neon: correct the output-token limit on nine models

* Neon: two of the output limits were understated, not overstated
2026-08-08 20:33:35 -05:00
Sanveed Faisal 8b412cdf61 fix(synthetic): cap GLM-5.2 input at real serving limit 365,178 (#4372)
Synthetic's inference backend rejects inputs above 365,178 tokens
("Input length (369084 tokens) exceeds the maximum allowed length
(365178 tokens)") even though the docs and this TOML advertise a
524,288 context. Without an input override, opencode only compacts at
~504K and overruns the real cap, causing hard 400s on long sessions.

The 365,178 value comes from Synthetic's own error message; the
context field stays 524,288 as the nominal window advertised by the
model card.
2026-08-08 20:33:18 -05:00
opencode-agent[bot] 025b5bedb6 chore(sync): update DigitalOcean model catalog (#4388)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 20:33:03 -05:00
opencode-agent[bot] 623cf1200d chore(sync): update Vercel AI Gateway model catalog (#4387)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 20:32:55 -05:00
amrrs 76ab0ae637 feat(nebius): add DeepSeek-V4-Flash (#4377)
* feat(nebius): add DeepSeek-V4-Flash

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(nebius): author DeepSeek-V4-Flash reasoning controls from the lab entry

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(nebius): verify DeepSeek-V4-Flash reasoning controls against the live API

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* fix(nebius): set cache_read price for DeepSeek-V4-Flash

Nebius has no discounted prompt-cache tier, so cached input is billed at the
full input rate. Leaving cache_read unset makes downstream consumers treat it
as $0/M. Same reasoning as #3956 for Kimi-K3.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-08 20:32:46 -05:00
opencode-agent[bot] 921de5617d chore(sync): update Kilo model catalog (#4386)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 00:33:14 +00:00
opencode-agent[bot] 5481fc79a0 chore(sync): update OpenRouter model catalog (#4385)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-09 00:33:12 +00:00
opencode-agent[bot] ce26958879 chore(sync): update OpenRouter model catalog (#4384)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 23:25:46 +00:00
opencode-agent[bot] 8cf66e163b chore(sync): update Venice model catalog (#4381)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 21:25:52 +00:00
opencode-agent[bot] ac130151b3 chore(sync): update Charm Hyper model catalog (#4380)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 21:25:47 +00:00
opencode-agent[bot] 10f7a9a3f7 chore(sync): update Vercel AI Gateway model catalog (#4378)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 20:25:53 +00:00
opencode-agent[bot] 458519bea9 chore(sync): update OpenRouter model catalog (#4376)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 18:26:45 +00:00
opencode-agent[bot] 46bbcd0e47 chore(sync): update Kilo model catalog (#4375)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 18:26:39 +00:00
opencode-agent[bot] d1b3097de9 chore(sync): update Baseten model catalog (#4374)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 17:26:00 +00:00
opencode-agent[bot] beca303ea3 chore(sync): update OpenRouter model catalog (#4369)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 16:26:23 +00:00
opencode-agent[bot] a48b5f24d5 chore(sync): update Kilo model catalog (#4371)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 15:26:29 +00:00
opencode-agent[bot] cbea972ca5 chore(sync): update Kilo model catalog (#4367)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 14:26:10 +00:00
opencode-agent[bot] bc3b66caab chore(sync): update OpenRouter model catalog (#4368)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 13:32:42 +00:00
opencode-agent[bot] 33a05949bc chore(sync): update Deep Infra model catalog (#4366)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 12:27:01 +00:00
opencode-agent[bot] be16bde6b6 chore(sync): update OpenRouter model catalog (#4362)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 08:27:27 +00:00
opencode-agent[bot] e68645e4eb chore(sync): update OpenRouter model catalog (#4360)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 07:34:18 +00:00
opencode-agent[bot] dab85411f8 chore(sync): update OpenRouter model catalog (#4359)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 06:27:39 +00:00
opencode-agent[bot] 0f8cbb1e8d chore(sync): update Kilo model catalog (#4355)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 05:30:49 +00:00
opencode-agent[bot] b7f7845a54 chore(sync): update OpenRouter model catalog (#4358)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 05:30:44 +00:00
opencode-agent[bot] d733fc15cf chore(sync): update EmpirioLabs AI model catalog (#4357)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 05:30:39 +00:00
opencode-agent[bot] f81a5629c8 chore(sync): update OpenRouter model catalog (#4356)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 04:36:57 +00:00
opencode-agent[bot] 2c6b978f38 chore(sync): update Kilo model catalog (#4354)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 03:45:40 +00:00
opencode-agent[bot] b0839dd932 chore(sync): update OpenRouter model catalog (#4352)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 03:45:34 +00:00
Maksim ac1baca7ff Add SaladCloud AI Gateway provider (#4056)
* Add SaladCloud AI Gateway provider

* Remove beta status from SaladCloud model
2026-08-07 22:14:26 -05:00
Daniele Scasciafratte 3f9a925b18 Updated Regolo.AI models (#4074)
* feat(models): updated

* fix(regolo-ai): align reasoning_options with lab+peer controls, document free pricing

- gemma4-31b: toggle only (matches Google lab + OpenRouter peer)
- glm5.2: effort high|max (matches Zhipu lab)
- qwen3.6-27b: toggle only (matches OpenRouter peer; Regolo can't forward budget_tokens)
- deepseek-ocr-2: add free pricing comment
- faster-whisper-large-v3: add free pricing comment + name override
- Move all toggle/effort comments to leading header block (sync strips mid-file)
2026-08-07 22:14:13 -05:00
opencode-agent[bot] ea66ffc3d2 chore(sync): update OpenRouter model catalog (#4351)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 02:55:07 +00:00
opencode-agent[bot] 373f4ab181 chore(sync): update Kilo model catalog (#4350)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 02:55:01 +00:00
Andre Landgraf 96d7f403a9 Neon: correct temperature on eight models (#4329)
* Neon: gemini-3-6-flash does not accept temperature

* Neon: correct temperature on eight models
2026-08-07 21:28:28 -05:00
opencode-agent[bot] 8ef55aa5da chore(sync): update OpenRouter model catalog (#4349)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 01:54:31 +00:00
opencode-agent[bot] b1d8979af0 chore(sync): update Kilo model catalog (#4348)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 00:31:51 +00:00
opencode-agent[bot] 7c6affc36a chore(sync): update OpenRouter model catalog (#4347)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 00:31:50 +00:00
opencode-agent[bot] 8bac34666f chore(sync): update DigitalOcean model catalog (#4346)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-08 00:31:45 +00:00
opencode-agent[bot] 817f7586c9 chore(sync): update DigitalOcean model catalog (#4345)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 23:26:47 +00:00
opencode-agent[bot] 2c8ddc1d95 chore(sync): update OpenRouter model catalog (#4344)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 23:26:39 +00:00
opencode-agent[bot] 687855f15c chore(sync): update OpenRouter model catalog (#4343)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 22:26:44 +00:00
opencode-agent[bot] f4248329f9 chore(sync): update OpenRouter model catalog (#4342)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 21:27:35 +00:00
opencode-agent[bot] ac01bd9085 chore(sync): update Vercel AI Gateway model catalog (#4341)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 20:27:41 +00:00
opencode-agent[bot] 93e183d9b3 chore(sync): update OpenRouter model catalog (#4340)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 20:27:38 +00:00
opencode-agent[bot] 45d22618ee chore(sync): update Weights & Biases model catalog (#4336)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 19:36:16 +00:00
opencode-agent[bot] 42c98e9497 chore(sync): update OpenRouter model catalog (#4338)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 19:36:11 +00:00
opencode-agent[bot] ce6a5f2f7d chore(sync): update Kilo model catalog (#4337)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 18:31:42 +00:00
opencode-agent[bot] 481743e196 chore(sync): update LLM Gateway model catalog (#4335)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 18:31:36 +00:00
opencode-agent[bot] 893cbf0586 chore(sync): update OpenRouter model catalog (#4334)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 18:31:32 +00:00
opencode-agent[bot] 82f31f6849 chore(sync): update Kilo model catalog (#4333)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 17:33:18 +00:00
opencode-agent[bot] 34dfa35364 chore(sync): update OpenRouter model catalog (#4332)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 17:33:09 +00:00
opencode-agent[bot] 602c9b903c chore(sync): update OpenRouter model catalog (#4331)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 16:33:24 +00:00
opencode-agent[bot] 5261b4401a chore(sync): update OpenRouter model catalog (#4330)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 15:34:26 +00:00
opencode-agent[bot] 773af97f9b chore(sync): update Charm Hyper model catalog (#4325)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 09:59:08 -05:00
sk0x0y 511ddc2977 Update Kimi K3 reasoning options and add kimi-k3-fast to neuralwatt (#4090)
* Update Kimi K3 reasoning options and add kimi-k3-fast to neuralwatt

Neuralwatt now exposes the full K3 reasoning surface: a per-request
thinking toggle and graded reasoning effort. The previous toggle-only
entry no longer matches the live API. Verified against the live API on
2026-08-05 and aligned with the first-party moonshotai baseline plus
~19 peer relays.

- models/moonshotai/kimi-k3.toml: fix base description (toggleable ->
  configurable low/high/max effort)
- providers/neuralwatt/models/kimi-k3.toml: reasoning_options now
  toggle (chat_template_kwargs.enable_thinking) + effort(low/high/max);
  drop redundant inherited name. thinking_token_budget is documented but
  rejected by the current vLLM V2 runner, so it is not declared.
- providers/neuralwatt/models/kimi-k3-fast.toml: add non-reasoning
  variant (reasoning = false, same pricing)

* Revert unnecessary kimi-k3 lab description change

Address reviewer feedback on #4090: keep the lab model description as-is.

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 09:58:57 -05:00
opencode-agent[bot] 083d675121 chore(sync): update LLM Gateway model catalog (#4317)
* chore(sync): update LLM Gateway model catalog

* fix(llmgateway): add Muse Spark reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-07 09:53:44 -05:00
opencode-agent[bot] 8a1635b3ec chore(sync): update Cortecs model catalog (#4318)
* chore(sync): update Cortecs model catalog

* fix(cortecs): add Gemini reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-07 09:53:38 -05:00
C.C. 35938b7603 provider(vivgrid): add deepseek-v4-flash 0731 and kimi-k3 (#4313)
* provider(vivgrid): add deepseek-v4-flash 0731 and kimi-k3

* fix

* fix
2026-08-07 09:52:07 -05:00
Mathias Stearn 040b5a5486 Fix Kimi K3 prices on copilot (#4314)
Based on https://docs.github.com/en/copilot/reference/copilot-billing/models-and-pricing#moonshot-ai
2026-08-07 09:51:17 -05:00
opencode-agent[bot] 3db0161194 chore(sync): update NanoGPT model catalog (#4322)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 09:50:30 -05:00
Andre Landgraf 2f16f5e578 Neon: add kimi-k3, gemini-3-6-flash, gemini-3-5-flash-lite, and the missing gpt-5-5-pro cost (#4324)
* Neon: add kimi-k3, gemini-3-6-flash, gemini-3-5-flash-lite

* Neon: add the missing gpt-5-5-pro cost

The entry shipped without [cost] because no databricks provider entry exists for it and
the rule was to omit rather than publish an unsourceable rate. The rate is sourceable:
OpenAI's own gpt-5.5-pro entry has 30/180 with a 272k tier at 60/270, and Databricks'
published DBU rate for GPT 5.4/5.5 Pro reconciles to the same four numbers at the
$0.07/DBU rate every other neon entry already implies.
2026-08-07 09:50:23 -05:00
opencode-agent[bot] ef11de94c1 chore(sync): update Kilo model catalog (#4328)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 14:36:02 +00:00
opencode-agent[bot] 98ad9ab6e8 chore(sync): update OpenRouter model catalog (#4327)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 14:35:51 +00:00
opencode-agent[bot] 433e98fb61 chore(sync): update OpenRouter model catalog (#4323)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 11:32:25 +00:00
opencode-agent[bot] 9f9d1fd9c2 chore(sync): update Kilo model catalog (#4321)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 11:32:13 +00:00
opencode-agent[bot] f66381f91e chore(sync): update Charm Hyper model catalog (#4320)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 10:33:10 +00:00
opencode-agent[bot] 6a22fe125a chore(sync): update Kilo model catalog (#4308)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 09:36:44 +00:00
opencode-agent[bot] a9c5cd4efd chore(sync): update OpenRouter model catalog (#4319)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 09:36:43 +00:00
Jack 54579eebd7 add ling-3.0-tiny-free to opencode zen 2026-08-07 17:11:53 +08:00
opencode-agent[bot] 06433f933c chore(sync): update OpenRouter model catalog (#4316)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 08:36:41 +00:00
opencode-agent[bot] 3a1c5c769c chore(sync): update LLM Gateway model catalog (#4315)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 08:36:32 +00:00
Frank e951706c7e update zen models 2026-08-07 04:31:14 -04:00
opencode-agent[bot] 8515b0748f chore(sync): update OpenRouter model catalog (#4312)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 07:45:23 +00:00
opencode-agent[bot] b98aba27b3 chore(sync): update OpenRouter model catalog (#4311)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 06:41:45 +00:00
opencode-agent[bot] 6703defcd6 chore(sync): update Vercel AI Gateway model catalog (#4310)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 06:41:42 +00:00
Jack 92a7a4d56f ds flash x2 promo in opencode go 2026-08-07 14:32:49 +08:00
opencode-agent[bot] 43f6b2386a chore(sync): update Cortecs model catalog (#4309)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 05:49:30 +00:00
opencode-agent[bot] 3db1d5bc3f chore(sync): update OpenRouter model catalog (#4307)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 05:49:29 +00:00
m3 90aa167cda feat(github-copilot): add Kimi K3 (#4127) 2026-08-07 00:18:52 -05:00
opencode-agent[bot] bbbf28b1cd chore(sync): update Venice model catalog (#4304)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:09:51 -05:00
opencode-agent[bot] 6bf9e38755 chore(sync): update EmpirioLabs AI model catalog (#4301)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:09:44 -05:00
opencode-agent[bot] 1793e99d48 chore(sync): update DigitalOcean model catalog (#4294)
* chore(sync): update DigitalOcean model catalog

* fix(digitalocean): add DeepSeek V4 Flash reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-07 00:09:33 -05:00
opencode-agent[bot] 016be36712 chore(sync): update NanoGPT model catalog (#4305)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:09:25 -05:00
opencode-agent[bot] 50a7322b55 chore(sync): update Cortecs model catalog (#4306)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:09:15 -05:00
opencode-agent[bot] d05d097d93 chore(sync): update Chutes model catalog (#4303)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:08:53 -05:00
opencode-agent[bot] 080cd5d2b8 chore(sync): update Kilo model catalog (#4300)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:08:44 -05:00
opencode-agent[bot] 5fc7266daa chore(sync): update Vercel AI Gateway model catalog (#4299)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 00:08:33 -05:00
opencode-agent[bot] 00df4bbb21 chore(sync): update OpenRouter model catalog (#4302)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 04:56:44 +00:00
github-actions[bot] 12e1ab17ea fix: [missing-model] ofox: z-ai/glm-5.1 (#4293)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:56:33 -05:00
github-actions[bot] 209527dbc1 fix: [missing-model] ofox: deepseek/deepseek-v3.2 (#4292)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:56:04 -05:00
github-actions[bot] 3856787cc0 fix: [missing-model] ofox: openai/gpt-5-mini (#4291)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:55:35 -05:00
github-actions[bot] 126dbce8e7 fix: [missing-model] ofox: z-ai/glm-4.7 (#4290)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:55:06 -05:00
github-actions[bot] d23667c951 fix: [missing-model] ofox: z-ai/glm-4.6 (#4289)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:54:36 -05:00
github-actions[bot] 227c763879 fix: [missing-model] ofox: z-ai/glm-4.7-flashx (#4288)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:54:07 -05:00
github-actions[bot] af89437ac9 fix: [missing-model] ofox: x-ai/grok-4.20 (#4287)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:53:37 -05:00
github-actions[bot] 144a27ee4b fix: [missing-model] ofox: bailian/qwen-max (#4286)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:53:08 -05:00
github-actions[bot] 910220536d fix: [missing-model] ofox: google/gemini-3.6-flash (#4285)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:52:37 -05:00
github-actions[bot] b1a329912b fix: [missing-model] ofox: openai/gpt-4.1-mini (#4284)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:52:07 -05:00
github-actions[bot] 8742ddebd5 fix: [missing-model] ofox: x-ai/grok-4.1-fast (#4283)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:51:38 -05:00
github-actions[bot] e2d2049119 fix: [missing-model] ofox: openai/gpt-5.4-mini (#4282)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:51:09 -05:00
github-actions[bot] 3832879428 fix: [missing-model] ofox: z-ai/glm-5-turbo (#4281)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:50:39 -05:00
github-actions[bot] fbe378b12d fix: [missing-model] ofox: moonshotai/kimi-k2.5 (#4280)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:50:10 -05:00
github-actions[bot] 9df6d29df4 fix: [missing-model] ofox: openai/gpt-5 (#4279)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:49:40 -05:00
github-actions[bot] ebd0941d54 fix: [missing-model] ofox: bailian/qwen3.6-max-preview (#4278)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:49:10 -05:00
github-actions[bot] 4fbc22b09b fix: [missing-model] ofox: openai/gpt-5.4-nano (#4277)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:48:41 -05:00
github-actions[bot] 9e6a68cb44 fix: [missing-model] ofox: openai/gpt-4.1 (#4276)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:48:12 -05:00
github-actions[bot] 3add40b343 fix: [missing-model] ofox: z-ai/glm-5 (#4275)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:47:43 -05:00
github-actions[bot] 830f5f4181 fix: [missing-model] ofox: google/gemini-2.5-pro (#4274)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:47:14 -05:00
github-actions[bot] 0682058bde fix: [missing-model] ofox: moonshotai/kimi-k3 (#4273)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:46:44 -05:00
github-actions[bot] 150c6d32cb fix: [missing-model] ofox: openai/gpt-5.2-codex (#4272)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:46:15 -05:00
github-actions[bot] a3993dd382 fix: [missing-model] ofox: deepseek/deepseek-v4-flash (#4271)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:45:46 -05:00
github-actions[bot] 2ec1de4120 fix: [missing-model] ofox: openai/gpt-5.1-codex-mini (#4270)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:45:17 -05:00
github-actions[bot] d9684f7262 fix: [missing-model] ofox: moonshotai/kimi-k2.7-code-highspeed (#4269)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:44:48 -05:00
github-actions[bot] 06cdf2939e fix: [missing-model] ofox: openai/gpt-5.1 (#4268)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:44:18 -05:00
github-actions[bot] 7e412f5129 fix: [missing-model] ofox: openai/gpt-5.2 (#4267)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:43:49 -05:00
github-actions[bot] 9c1dcb9565 fix: [missing-model] ofox: openai/gpt-5.1-codex-max (#4266)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:43:19 -05:00
github-actions[bot] 0c169952a4 fix: [missing-model] ofox: google/gemini-2.5-flash-lite (#4265)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:42:50 -05:00
github-actions[bot] d5a0db202f fix: [missing-model] ofox: bailian/qwen3.6-flash (#4264)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:42:20 -05:00
github-actions[bot] 542db24841 fix: [missing-model] ofox: bailian/qwen3-max (#4263)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:41:51 -05:00
github-actions[bot] 0d40968bc2 fix: [missing-model] ofox: bailian/qwen-flash (#4262)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:41:21 -05:00
github-actions[bot] d7cf8b9325 fix: [missing-model] ofox: google/gemini-2.5-flash (#4261)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:40:52 -05:00
github-actions[bot] 82f0b81c0e fix: [missing-model] ofox: openai/gpt-4o-mini (#4260)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:40:22 -05:00
github-actions[bot] 85e2cdc7ef fix: [missing-model] ofox: bailian/qwen-turbo (#4259)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:39:53 -05:00
github-actions[bot] c7a76ddc5c fix: [missing-model] ofox: bailian/qwen3.7-plus (#4258)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:39:24 -05:00
github-actions[bot] 51342d96c9 fix: [missing-model] ofox: bailian/qwen-vl-max (#4257)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:38:55 -05:00
github-actions[bot] 713d61518d fix: [missing-model] ofox: bailian/qwen3.5-flash (#4256)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:38:25 -05:00
github-actions[bot] 54fa8a66a6 fix: [missing-model] ofox: bailian/qwen3.8-max (#4255)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:37:56 -05:00
github-actions[bot] a2911813ca fix: [missing-model] ofox: openai/gpt-4o (#4254)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:37:27 -05:00
github-actions[bot] 406e2f7b42 fix: [missing-model] ofox: google/gemini-3.1-flash-lite (#4253)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:36:58 -05:00
github-actions[bot] b8d0a7159a fix: [missing-model] ofox: google/gemini-3.5-flash (#4252)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:36:28 -05:00
github-actions[bot] 5552961c33 fix: [missing-model] ofox: google/gemini-3-flash-preview (#4251)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:35:59 -05:00
github-actions[bot] 4e678a7f32 fix: [missing-model] ofox: bailian/qwen3.5-397b-a17b (#4250)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:35:29 -05:00
github-actions[bot] a82e493c53 fix: [missing-model] ofox: bailian/qwen3-coder-plus (#4249)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:35:00 -05:00
github-actions[bot] 3f876ee3bc fix: [missing-model] ofox: bailian/qwen3.5-122b-a10b (#4248)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:34:31 -05:00
github-actions[bot] 56058fc284 fix: [missing-model] ofox: bailian/qwen3-coder-next (#4247)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:34:01 -05:00
github-actions[bot] af53260646 fix: [missing-model] ofox: bailian/qwen3.6-27b (#4246)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:33:21 -05:00
github-actions[bot] b0fdb7fe0b fix: [missing-model] ofox: bailian/qwen3.6-plus (#4245)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:32:51 -05:00
github-actions[bot] 99286d7561 fix: [missing-model] ofox: anthropic/claude-sonnet-4.6 (#4244)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:32:22 -05:00
github-actions[bot] 075fd8414d fix: [missing-model] ofox: anthropic/claude-haiku-4.5 (#4243)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:31:53 -05:00
github-actions[bot] d089bd3b04 fix: [missing-model] ofox: anthropic/claude-opus-4.5 (#4242)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:31:23 -05:00
github-actions[bot] 7ff2243f1f fix: [missing-model] ofox: bailian/qwen3.5-27b (#4241)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:30:54 -05:00
github-actions[bot] f9b4a139de fix: [missing-model] ofox: bailian/qwen3.5-plus (#4240)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:30:24 -05:00
github-actions[bot] c023f9f2fa fix: [missing-model] ofox: bailian/qwen3-coder-flash (#4239)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:29:55 -05:00
github-actions[bot] 61fa21a134 fix: [missing-model] ofox: anthropic/claude-opus-4.6 (#4238)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:29:26 -05:00
github-actions[bot] 9344a6b5ee fix: [missing-model] ofox: anthropic/claude-opus-5 (#4223)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:28:38 -05:00
opencode-agent[bot] 43379b3140 chore(sync): update Vercel AI Gateway model catalog (#4134)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:26:51 -05:00
opencode-agent[bot] ef7b1c5e97 chore(sync): update NanoGPT model catalog (#4144)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:26:40 -05:00
opencode-agent[bot] 36e3e9e22a chore(sync): update Kilo model catalog (#4154)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:26:32 -05:00
github-actions[bot] 8ab8b210e1 fix: [missing-model] ofox: anthropic/claude-opus-4.7 (#4210)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 23:26:09 -05:00
opencode-agent[bot] f4f7b97a7c chore(sync): update OpenRouter model catalog (#4298)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 04:14:00 +00:00
opencode-agent[bot] fdec1e0d67 chore(sync): update OpenRouter model catalog (#4297)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 03:16:41 +00:00
opencode-agent[bot] f37eac7075 chore(sync): update EmpirioLabs AI model catalog (#4152)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 01:27:39 +00:00
opencode-agent[bot] 51f49882bc chore(sync): update OpenRouter model catalog (#4295)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-07 01:27:38 +00:00
opencode-agent[bot] 23b7b63f06 chore(sync): update CrossModel model catalog (#4157)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:32:50 +00:00
opencode-agent[bot] 873f5d02fb chore(sync): update OpenRouter model catalog (#4150)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:32:43 +00:00
opencode-agent[bot] 46c73f5881 chore(sync): update Deep Infra model catalog (#4147)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:32:41 +00:00
opencode-agent[bot] cf294915f7 chore(sync): update Baseten model catalog (#4143)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 23:32:37 +00:00
Frank 6951484e98 update zen models 2026-08-06 19:28:31 -04:00
m3 27bcaba57a fix(baseten): correct DeepSeek V4 Flash 0731 output limit (#4126) 2026-08-06 13:15:56 -05:00
Aiden Cline 11304b3bba fix(sync): track missing Pioneer and Ofox models (#4125) 2026-08-06 13:15:34 -05:00
Lee-Si-Yoon e50ccc3922 chore(friendli): remove Qwen3-235B-A22B-Instruct-2507 (#4109)
Model no longer served by Friendli API. Sync script confirms it as orphaned; deleting to keep the catalog in sync.
2026-08-06 10:32:15 -05:00
opencode-agent[bot] 81851ecdf2 chore(sync): update NanoGPT model catalog (#4111)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 10:32:00 -05:00
opencode-agent[bot] 2cb71de15b chore(sync): update Vercel AI Gateway model catalog (#4110)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 10:31:48 -05:00
Denis 4708b65333 feat(providers/azure): add Kimi K2.7 Code (#4081)
* feat(providers/azure): add Kimi K2.7 Code

* fix(providers/azure): inherit attachment from base model for kimi-k2.7-code

---------

Co-authored-by: Denis Kot <denis.kot@makersite.de>
2026-08-06 10:31:26 -05:00
github-actions[bot] d23fad9223 fix: alibaba/qwen3.8-max appears to support pdf for modalities.input (#4116)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-06 10:31:09 -05:00
Andre Landgraf 76ad71d8dc Neon: use the provider-prefixed dialect paths (#4114)
* Neon: use the short dialect paths

* Neon: Gemini route drops its /v1 prefix
2026-08-06 10:30:54 -05:00
Ishan Chhatbar d1f203f552 Added phi-4-mini model .toml file to models/microsoft/ (#4120) 2026-08-06 10:30:29 -05:00
Andrew Avery a39260825d fix(anthropic): drop fast mode from Opus 4.6 and 4.7 (#4123)
* fix(anthropic): drop fast mode from claude-opus-4-6

* fix(anthropic): drop fast mode from claude-opus-4-7
2026-08-06 10:30:21 -05:00
Sung Kim f1f6a6efda provider(upstage): add Solar Pro 4 (#4124)
Add solar-pro4 (alias of solar-pro4-260806, released 2026-08-06):
512K context, 128K max output, reasoning on by default with
none/minimal/low/medium/high/xhigh/max effort levels, tool calling
and structured outputs. Pricing $0.30/$1.20 per 1M tokens
($0.06 cached input). Specs from console.upstage.ai model catalog.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-06 10:29:28 -05:00
opencode-agent[bot] d891e73dd5 chore(sync): update Kilo model catalog (#4112)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 10:29:19 -05:00
opencode-agent[bot] f6de50c7cb chore(sync): update Charm Hyper model catalog (#4122)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 15:00:58 +00:00
opencode-agent[bot] 48917f7313 chore(sync): update OpenRouter model catalog (#4121)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 13:56:13 +00:00
opencode-agent[bot] dd797cad76 chore(sync): update OpenRouter model catalog (#4119)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 12:55:28 +00:00
opencode-agent[bot] b7da756b73 chore(sync): update Cortecs model catalog (#4118)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 11:57:03 +00:00
opencode-agent[bot] e8fff96d51 chore(sync): update LLM Gateway model catalog (#4117)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 09:14:17 +00:00
opencode-agent[bot] 1d09b08b8c chore(sync): update Pioneer model catalog (#4099)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 23:39:48 -05:00
opencode-agent[bot] ca2962fa91 chore(sync): update Charm Hyper model catalog (#4077)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:51:26 -05:00
opencode-agent[bot] 637a504d08 chore(sync): update Kilo model catalog (#4082)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:51:14 -05:00
Andre Landgraf 683c46088f Neon: add 10 models, remove 7 (#4087) 2026-08-05 22:51:00 -05:00
opencode-agent[bot] d23fff04d9 chore(sync): update NanoGPT model catalog (#4098)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:43:37 -05:00
opencode-agent[bot] 0b3c410a01 chore(sync): update Hugging Face model catalog (#4094)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:42:54 -05:00
opencode-agent[bot] 5f0a9ea389 chore(sync): update Deep Infra model catalog (#4096)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:42:06 -05:00
opencode-agent[bot] 30fa0ece72 chore(sync): update Vercel AI Gateway model catalog (#4100)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:41:58 -05:00
Aiden Cline 27b7ee5a55 feat(meta): add Muse Spark 1.2 (#4108)
* feat(meta): add Muse Spark 1.2

* fix(meta): correct Muse Spark output limit
2026-08-05 22:41:49 -05:00
opencode-agent[bot] 17052bfcfb chore(sync): update Cortecs model catalog (#4091)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:31:17 -05:00
Santh bf760b8498 baseten: refresh reasoning_effort values from Baseten's docs (#4106)
* baseten: refresh reasoning_effort values from Baseten's docs

Baseten's reasoning page has grown a "Control reasoning depth" table since
these entries were written, and each entry's own comment cites that page. The
values there now differ from what we ship:

  GLM 5.2 / GLM 5.2 Fast  toggle  ->  none | high | max
  OpenAI GPT 120B         low | medium | high  ->  full none..max scale
  DeepSeek V4 Pro         low..xhigh           ->  full none..max scale
  Kimi K3                 no options           ->  none | low | high | max

The GLM 5.2 routes matter most: the docs state the endpoint returns a 400 for
any value outside its set, so describing them as a toggle both hides the two
depths that work and leaves a consumer no way to know the rest are rejected.

Every value above comes from the "Supported values" table on
https://docs.baseten.co/inference/model-apis/reasoning

* baseten: drop the inferred effort scale from DeepSeek V4 Flash 0731

This entry's own comment says the values were reached by "mirroring the
DeepSeek V4 Pro entry" rather than read from Baseten's docs, and the mirror
does not hold. V4 Flash is absent from the "Control reasoning depth" table,
and the reasoning page warns that models outside that table accept
reasoning_effort and ignore it, so the four values here describe a control
that does nothing.

The model matrix does list its reasoning as "Enabled by default", so it keeps
an empty reasoning_options: it reasons, with no addressable depth. Split from
the previous commit because this one drops values rather than citing them.

https://docs.baseten.co/inference/model-apis/overview
https://docs.baseten.co/inference/model-apis/reasoning
2026-08-05 22:29:06 -05:00
opencode-agent[bot] 4e6a0aab05 chore(sync): update OpenRouter model catalog (#4107)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 03:23:59 +00:00
opencode-agent[bot] a669b1f084 chore(sync): update DigitalOcean model catalog (#4103)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 00:47:15 +00:00
opencode-agent[bot] 418e9f3bb9 chore(sync): update OpenRouter model catalog (#4102)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-06 00:47:12 +00:00
opencode-agent[bot] 4ffd7a121b chore(sync): update OpenRouter model catalog (#4101)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 22:37:14 +00:00
opencode-agent[bot] 7e6450edad chore(sync): update Venice model catalog (#4093)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 21:41:49 +00:00
opencode-agent[bot] 6c97a48f12 chore(sync): update Cloudflare Workers AI model catalog (#4097)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 20:42:31 +00:00
opencode-agent[bot] cda786c3ec chore(sync): update Weights & Biases model catalog (#4095)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 20:42:30 +00:00
opencode-agent[bot] 0a92009df2 chore(sync): update OpenRouter model catalog (#4092)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 20:42:28 +00:00
Samrath 43ff4ad9b5 feat(pioneer): add 26 models (Kimi K3, Claude Opus 5, GPT-5.6) (#3814)
* fix(pioneer): filter API alias dupes, derive cost, honor base-model reasoning

Pioneer /v1/models returns each served model twice: once under its real
id and once under a duplicate "anthropic/pioneer/<id>" alias. Drop the
aliases so the sync no longer authors phantom "anthropic/pioneer/*" TOMLs.

Also derive cost from the API's per-1M-token prices for newly created
models (previously cost was only preserved from an existing file), and
trust the base model's authored reasoning flag instead of Pioneer's
boilerplate reasoning levels, which are identical for every model and
were wrongly marking non-reasoning models (e.g. Pixtral) as reasoning.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* feat(pioneer): add frontier and open models via base_model inheritance

Add 26 Pioneer models, each inheriting provider-agnostic facts through
base_model rather than duplicating them inline.

New model metadata entries:
- anthropic/claude-opus-5 (released 2026-07-24)
- alibaba/qwen2.5-coder-0.5b, alibaba/qwen3-235b-a22b-instruct-2507
- deepseek/deepseek-v3, deepseek/deepseek-v3.1
- meta/llama-3.2-1b, meta/llama-3.2-3b
- mistral/codestral-22b-v0.1, mistral/magistral-small-2506,
  mistral/ministral-8b-instruct-2410

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(qwen): set tool_call=false for Qwen2.5-Coder-0.5B base model

The served id and weights are the base (pretrained) checkpoint, not the
Instruct variant. The Qwen model card states base models are not
recommended for conversation and documents no tool/function calling, so
tool_call=true was inaccurate. Matches the Llama base entries in this PR.

---------

Co-authored-by: Samrath <samrath@Samraths-MacBook-Pro-6.local>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-05 15:19:10 -05:00
opencode-agent[bot] 22071a018b chore(sync): update Anthropic model catalog (#4089)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 19:50:44 +00:00
opencode-agent[bot] f5576c9d1f chore(sync): update OpenRouter model catalog (#4088)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 19:50:37 +00:00
opencode-agent[bot] ced6da1acd chore(sync): update LLM Gateway model catalog (#4085)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 16:50:32 +00:00
opencode-agent[bot] 2871b3b14a chore(sync): update Vercel AI Gateway model catalog (#4084)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 16:50:27 +00:00
opencode-agent[bot] 282300a0b1 chore(sync): update OpenRouter model catalog (#4083)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 16:50:21 +00:00
opencode-agent[bot] 5c2fbc0557 chore(sync): update Cortecs model catalog (#4079)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 16:50:15 +00:00
opencode-agent[bot] 6f5c54494c chore(sync): update OpenRouter model catalog (#4080)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 15:57:02 +00:00
opencode-agent[bot] 748e896f2a chore(sync): update Kilo model catalog (#4078)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 15:56:51 +00:00
opencode-agent[bot] 24ee9f1e11 chore(sync): update Ambient model catalog (#4076)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 15:56:47 +00:00
opencode-agent[bot] 0729b646c3 chore(sync): update Merge Gateway model catalog (#4061)
* chore(sync): update Merge Gateway model catalog

* fix(merge-gateway): add Gemini image reasoning options

* Revert "fix(merge-gateway): add Gemini image reasoning options"

This reverts commit 16714a758b73577f8d21bb803d0f112494d37512.

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-05 10:35:24 -05:00
opencode-agent[bot] f43a8fe306 chore(sync): update NanoGPT model catalog (#4067)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 10:21:06 -05:00
opencode-agent[bot] 5d4ddc4c21 chore(sync): update Kilo model catalog (#4075)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 10:19:07 -05:00
Asmae_ELAZRAK f6627a980c feat(sync): add Cortecs model sync (#3903)
* feat(sync): add Cortecs model sync

* fix: review bot comments

* fix: model update

* fix: output field

* fix: model update

* test(sync): preserve Cortecs reasoning options

---------

Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-05 10:06:53 -05:00
opencode-agent[bot] 47c4a91b63 chore(sync): update Charm Hyper model catalog (#4073)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 13:56:10 +00:00
opencode-agent[bot] 84013a7526 chore(sync): update OpenRouter model catalog (#4072)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 13:56:07 +00:00
opencode-agent[bot] e19e7c6719 chore(sync): update LLM Gateway model catalog (#4069)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 10:10:41 +00:00
opencode-agent[bot] 241a198438 chore(sync): update Vercel AI Gateway model catalog (#4068)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 08:06:00 +00:00
Jack 20b5a4c8c0 add qwen3.8-Max to Go 2026-08-05 13:21:22 +08:00
opencode-agent[bot] 45c6961ba4 chore(sync): update Pioneer model catalog (#4065)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 22:15:06 -05:00
Abel Debalkew 582eaaa208 fix(sync): emit toggle + effort from reasoning.effort_values (#4060)
The merge-gateway sync synthesized a bare reasoning toggle from
disable_supported and ignored reasoning.controls, so claude-opus-5 (newly
added, no curated reasoning_options) got a bare [[reasoning_options]] toggle
even though the route advertises a graded reasoning.effort control. The rest
of the Claude family carried toggle + effort because their options were
hand-authored; any future new model would regress the same way.

Map reasoning.controls into synthesized options: toggle when disable is
supported, plus effort when the route advertises effort and the API provides
effort_values. Author claude-opus-5's TOML to toggle + effort [low..max],
matching the family.
2026-08-04 20:25:07 -05:00
opencode-agent[bot] 2ba67e073f chore(sync): update DigitalOcean model catalog (#4066)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 00:49:25 +00:00
opencode-agent[bot] 533b238f7e chore(sync): update Kilo model catalog (#4064)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-05 00:49:20 +00:00
murdurn 701cc45818 feat(cortecs): add deepseek-v4-flash-0731 (#4062)
* feat(cortecs): add deepseek-v4-flash-0731

* Moved EUR→USD note to file header

Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com>

---------

Co-authored-by: murdurn <murdurn@pm.me>
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: rekram1-node <rekram1-node@users.noreply.github.com>
2026-08-04 19:16:10 -05:00
opencode-agent[bot] 6389cefe96 chore(sync): update DigitalOcean model catalog (#4063)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 22:38:28 +00:00
opencode-agent[bot] 5bd21b414b chore(sync): update Kilo model catalog (#4059)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 18:49:18 +00:00
Frank ce328e5e9d update zen models 2026-08-04 14:24:17 -04:00
bhuvankakkar 6838fe6067 feat(scx): add SCX.ai provider with gpt-oss-120b and MiniMax-M2.7 (#3085)
* feat(scx): add SCX.ai provider with coder and MiniMax-M2.7 models

* feat(scx): list gpt-oss-120b, correct MiniMax-M2.7, drop coder

Scope the SCX.ai provider to its coding models.

- add gpt-oss-120b (inherits openai/gpt-oss-120b)
- remove coder
- correct MiniMax-M2.7 limits and capabilities

Values verified against the live SCX API (/v1/models and
/v1/chat/completions) rather than documentation:

- MiniMax-M2.7 context 191_000 -> 192_000, output 8_000 -> 4_096
- both models accept reasoning_effort low/medium/high; the API
  rejects any other value with 400, so reasoning_options is
  declared as an effort enum instead of an empty list
- both return tool_calls and support json_mode, so
  structured_output is set on MiniMax-M2.7

* fix(scx): compliant logo, correct MiniMax-M2.7 output limit

Address automated review feedback on the provider.

- logo.svg: re-export the SCX mark with a square viewBox and
  currentColor, dropping the fixed width/height and the hardcoded
  #262626 fill, per the logo guidelines in AGENTS.md
- MiniMax-M2.7: max output 4_096 -> 64_000
- move the reasoning_effort provenance notes out of the TOMLs and
  into the PR description

* feat(scx): use square knockout icon for the provider logo

Replace the wordmark export with the SCX mark: a single path whose
letterforms are cut out with fill-rule="evenodd", so the glyphs read as
holes and the icon inverts correctly between light and dark themes.

- square viewBox (0 0 512 512), no fixed width/height
- fill="currentColor", no hardcoded brand colours
- letterforms taken from the official brand SVG rather than traced

* feat(scx): add USD pricing for both models

Cost is USD per 1M tokens, matching the SCX rates already carried in
theopenco/llmgateway so the two registries stay consistent.

- MiniMax-M2.7: 0.48 in / 1.79 out / 0.05 cache read
- gpt-oss-120b: 0.17 in / 0.55 out

Source citations live in a leading header block in each file, since the
daily model sync discards comments placed anywhere else.
2026-08-04 13:09:36 -05:00
abonvalle 83cdfa932c feat: add infomaniak provider with 10 models (#2893)
* feat: add infomaniak provider with 10 models

* fix: correct infomaniak reasoning options after live API testing

Verified each reasoning model against the live Infomaniak API:
- reasoning text is returned in `message.reasoning`, so use `interleaved = true`
  instead of the non-existent `field = "reasoning_content"`
- gemma-4-31B-it ignores `reasoning_effort` and never emits reasoning, so drop
  its reasoning_options/interleaved and set `reasoning = false`
- Mistral-Small only accepts `none`/`high`; documented the per-model wire format
  (reasoning_effort on/off) in comments above each reasoning_options

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: use INFOMANIAK_PRODUCT_ID env var to match Infomaniak API

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: promote infomaniak Qwen3.5 122B and Gemma 4 31B out of beta

Infomaniak announced that Qwen3.5 (122B), Gemma 4 (31B) and Mistral
Small 4 (119B) are no longer beta and are production-ready. Mistral
Small 4 already had no beta status, so drop `status = "beta"` from the
Qwen3.5 122B and Gemma 4 31B models and bump last_updated.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: add required description to standalone infomaniak models

The schema now requires a non-empty `description` on every model. The
six base_model references inherit it from their base model, but the four
standalone models (two embeddings, Ministral 3, Apertus 70B) need their
own. Add descriptions following the repo's existing conventions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* fix: refresh infomaniak pricing, reasoning support, and model identities

Corrects USD pricing to match Infomaniak's CHF-billed rates, fixes reasoning
support flags for gemma-4-31B-it and Mistral-Small (no verified toggle), and
renames models to match their actual upstream identities: MiniLM entry was
mislabeled as the multilingual 117M variant instead of the English-only 33M
one actually served, and Apertus 70B is replaced by the v1.5 release. Also
corrects Kimi-K2.6 modalities (image, no video) and MiniLM's context limit.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix: align infomaniak data with live catalog and source every claim

Verified all ten model ids case-by-case against Infomaniak's pricing page,
open-source-models catalog and GET /1/ai/models; all match exactly and are
unchanged.

Data corrections:
- gemma-4-31B-it is served text-only ("Text-to-Text" in both the EN and FR
  catalog), so override attachment=false and modalities.input=["text"] instead
  of inheriting image input from the base model
- bge_multilingual_gemma2 input cap is 8'000, not 8'192 (catalog row and the
  API's own max_token_input)
- drop the unsourced limit.output overrides on Qwen3.5-122B and gemma-4-31B-it
  so both inherit from base_model, matching the Qwen3.5-397B sibling
- Ministral-3-14B release_date 2025-12-15 -> 2025-12-02 (repo majority for this
  model); bge release_date 2024-07-30 -> 2024-07-25 (Hugging Face createdAt)
- provider.toml doc pointed at the French marketing landing page; the schema
  wants a page where models are listed

Claim corrections:
- Mistral-Small-4 claimed the live probe confirmed Infomaniak's docs. It does
  not: the docs say thinking is unsupported, the probe found thinking on by
  default and returned in message.reasoning. Only the reasoning_effort
  parameter itself is unsupported. Pin `mistral3` to the model's transformers
  model_type, which is what makes the exclusion apply.
- MiniLM identity rested on the "based on a Microsoft model" blurb, which does
  not discriminate (both candidates descend from a Microsoft MiniLM). Cite
  Infomaniak's "Parameters 33 M" spec row instead.
- label the two forced limit.output estimates (Apertus, Ministral) as estimates
- note that Nemotron's published 1M input cap exceeds its native window

Per AGENTS.md, move every comment into a single top-of-file block (five files
had reasoning notes below the first key) and add the exact reasoning_effort
wire syntax next to each toggle.

bun validate passes.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-04 13:08:56 -05:00
Dubal vedant pareshbhai 2e3048b62f Update Groq models: Add Qwen 3.6 27b and ALLaM 2 7b (#3761)
* Update Groq models

* fix(groq): add missing cost block to allam-2-7b

* fix(groq): refine ALLaM 2 7b pricing source comment

* fix(groq): verify ALLaM 2 7b free tier pricing

* fix(groq): align ALLaM comment placement and pricing link
2026-08-04 13:07:10 -05:00
opencode-agent[bot] e81b70f41d chore(sync): update Weights & Biases model catalog (#4054)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 13:06:21 -05:00
opencode-agent[bot] 511fb740a4 chore(sync): update Kilo model catalog (#4058)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 17:54:29 +00:00
opencode-agent[bot] 05acec41ff chore(sync): update OpenRouter model catalog (#4057)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 17:54:24 +00:00
opencode-agent[bot] be86b6c0dc chore(sync): update Kilo model catalog (#4055)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 16:54:51 +00:00
opencode-agent[bot] aabea444f9 chore(sync): update OpenRouter model catalog (#4053)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 16:54:47 +00:00
Stenn Kool 01a878b3a1 Add DeepSeek V4 Flash 0731 to CrofAI (#4052) 2026-08-04 11:19:45 -05:00
opencode-agent[bot] 7d9f3458d5 chore(sync): update CrossModel model catalog (#4037)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 10:27:48 -05:00
opencode-agent[bot] ca1b552628 chore(sync): update Kilo model catalog (#4050)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 10:27:36 -05:00
opencode-agent[bot] b4e1c6609c chore(sync): update Requesty model catalog (#4051)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 10:27:26 -05:00
Aiden Cline 5673d678af fix: correct Qwen3.8 Max China pricing (#4049) 2026-08-04 09:44:19 -05:00
sk0x0y f634823025 Add Kimi K3 to neuralwatt (#3870) 2026-08-04 09:23:38 -05:00
github-actions[bot] 404ddbc4d9 fix: deepseek-v4-flash reasoning_options omit low, which the API accepts and honors (#3963)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-04 09:23:13 -05:00
github-actions[bot] b9f3acd5bf fix: Is Qwen3.8-MAX available from Alibaba provider without a token/coding plan now? (#4043)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-04 09:21:35 -05:00
opencode-agent[bot] eba73e62ea chore(sync): update Chutes model catalog (#4046)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 09:06:02 -05:00
Aiden Cline 29db3a439a fix(sync): allow safe reasoning model updates (#4048)
* fix(sync): allow safe reasoning model updates

* fix(sync): keep deleted models uninspected
2026-08-04 09:03:31 -05:00
opencode-agent[bot] 40577ece37 chore(sync): update Merge Gateway model catalog (#4036)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 08:43:13 -05:00
JC f658a67277 fix(sync): map CrossModel structured output (#4038)
Co-authored-by: hujuncheng <hujuncheng@baidu.com>
2026-08-04 08:42:32 -05:00
opencode-agent[bot] ae5bd6c091 chore(sync): update Kilo model catalog (#4047)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 08:41:17 -05:00
Cas Burggraaf eb1ec4c484 Update GreenPT: cached-token rates, compression variants, kimi-k3 (#3927)
* Publish GreenPT cached-token rates and refresh prices

GreenPT now bills prompt-cache hits at a reduced input rate on these models, so
each gains cost.cache_read. Cache writes are not charged, so cost.cache_write is
omitted rather than set to zero.

  glm-5.2         cache_read 0.3135
  kimi-k2.6       cache_read 0.2508
  kimi-k2.7-code  cache_read 0.1881
  minimax-m2.5    cache_read 0.0627

The same pass also picks up list-price corrections: kimi-k2.6 moves to
0.7524 / 4.275, kimi-k2.7-code input to 0.9006, and minimax-m2.5 input to
0.1938. glm-5.2's own prices are unchanged.

Rates: https://docs.greenpt.ai/prompt-caching and https://docs.greenpt.ai/pricing

* Add kimi-k3 to GreenPT

Kimi K3 is generally available on GreenPT at 3.762 input, 18.81 output and
0.9405 for cached prompt tokens. GreenPT serves it with text and image input,
so the inherited video modality is overridden away.

https://docs.greenpt.ai/model-cards

* Add the nine GreenPT glm-5.2 compression variants

GreenPT serves nine ids that are glm-5.2 carrying a built-in output-compression
ruleset: three families (caveman compresses prose, ponytail compresses generated
code, honey compresses both) at three intensities (-lite, unsuffixed, -ultra).

They are the same upstream model at the same price per token, including the same
cached rate, and return fewer output tokens. Each is declared through base_model
so cost and limits cannot drift from glm-5.2.

https://docs.greenpt.ai/compression-models

* Mark GreenPT kimi-k2.6-fast as deprecated

The upstream provider withdrew this model and GreenPT no longer serves the id,
so requests for it now fail. Marked deprecated rather than deleted so existing
configurations still resolve against the catalog.

* Mark GreenPT glm-5.1 as deprecated

The id is still advertised by /v1/models but every request for it returns 404
from production, so it is not servable. Marked deprecated rather than deleted,
matching how kimi-k2.6-fast is handled here.

* Declare the reasoning_effort values each GreenPT model accepts

Replaces the blanket reasoning_options = [] with the values each endpoint
actually accepts, established by sending every documented value to every model
on the production API.

The sets are not uniform, which is why the previous blanket declaration was
wrong in both directions:

  none, minimal, low, medium, high   glm-5.2 and its nine compression variants,
                                     kimi-k3, kimi-k2.6, kimi-k2.7-code,
                                     minimax-m2.5, qwen3.5-397b, qwen3.6-35b,
                                     gemma4
  low, medium, high                  green-r, green-r-raw, gpt-oss-120b,
                                     holo2-30b-a3b (none and minimal return 400)
  none, high                         mistral-medium-3.5-128b (minimal, low and
                                     medium return 400)

This also corrects green-r and green-r-raw, which previously advertised none and
minimal even though both are rejected.

On glm-5.2 and its variants the control is observable, not just accepted:
reasoning_effort "none" takes the reported reasoning tokens to zero.

* Add deepseek-v4-flash-0731 to GreenPT

Generally available on GreenPT at 0.1596 input, 0.399 output and 0.0456 for
cached prompt tokens, with the 1M context inherited from the base model. It
accepts the full reasoning_effort value set.

https://docs.greenpt.ai/model-cards

* Date deepseek-v4-flash-0731 to its own snapshot

The id is the 2026-07-31 snapshot, so inheriting the base model's 2026-04-24
release and update dates would have shown the wrong dates for this endpoint.

The remaining inherited fields were checked against production: structured
output and tool calling both work, and the 1M context matches the published
model card. attachment stays false, since the model card lists no vision
capability.
2026-08-04 08:41:02 -05:00
John Costa 465d15fb33 feat(requesty): syncing script and all models added (#3856)
* feat(requesty): provider sync script to get models from /v1/models/managed

Requesty has "managed" models, which are provider agnostic.

* feat(requesty): syncing all models from requesty
2026-08-04 08:22:23 -05:00
opencode-agent[bot] 183bea88e4 chore(sync): update Kilo model catalog (#4045)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 09:15:12 +00:00
opencode-agent[bot] a2f950c798 chore(sync): update OpenRouter model catalog (#4044)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 09:14:59 +00:00
opencode-agent[bot] 980878f3f3 chore(sync): update CrossModel model catalog (#4029)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 23:42:19 -05:00
opencode-agent[bot] f4fcba2d18 chore(sync): update Venice model catalog (#4028)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 23:42:07 -05:00
opencode-agent[bot] 88a9f2fa74 chore(sync): update OpenRouter model catalog (#4031)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 03:24:01 +00:00
opencode-agent[bot] 09327a652a chore(sync): update Kilo model catalog (#4030)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 03:23:51 +00:00
opencode-agent[bot] 4b7669cbb0 chore(sync): update Deep Infra model catalog (#4024)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 21:41:09 -05:00
opencode-agent[bot] 10210a4e94 chore(sync): update Kilo model catalog (#4023)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 21:40:56 -05:00
Zain Hasan b3a9cf32c7 add deepseek v4 flash 0731 (#4025)
* add kimi k3

* add Deepseek v4 flash 0731
2026-08-03 21:40:45 -05:00
opencode-agent[bot] d5ae4dda1e chore(sync): update OpenRouter model catalog (#4026)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 01:56:37 +00:00
opencode-agent[bot] cdfb7f82c9 chore(sync): update OpenRouter model catalog (#4022)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-04 00:54:41 +00:00
opencode-agent[bot] aafc23ed6f chore(sync): update Kilo model catalog (#4021)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 17:46:35 -05:00
Wassel Alazhar 1bf5ffc96a umans-ai + coding-plan: add Kimi K3 and DeepSeek V4 Flash (#3790)
* umans-ai + coding-plan: add Kimi K3 (prerelease)

* umans-ai + coding-plan: k3 is released — drop beta status

Pay-per-token pricing ($3.00/$15.00/$0.30 per 1M) is effective on the
umans-ai provider from 2026-07-31; the coding-plan entry stays zeroed per
the flat-fee subscription convention. Stable = no status field, matching
the sibling models.

* umans-ai + coding-plan: add DeepSeek V4 Flash (pay-per-token release)

umans-deepseek-v4-flash-0731 joins the lineup at DeepSeek first-party
list pricing ($0.14 / $0.28 / $0.0028 per Mtok) — served from the
official DeepSeek-V4-Flash-0731 release on Umans AI's own GPU
infrastructure, 1M context, think-low default (levels none/low/high/max,
the 0731 vocabulary — unlike the first-party API's high|max surface).

* umans-ai + coding-plan: leading wire-path comments on reasoning toggles (AGENTS.md)

* umans-ai: deepseek v4 flash cost is the public rate ($0.14/$0.28/$0.028)

* umans-ai + coding-plan: reviewer nits — comments to file tops, drop redundant name override + zeroed-cost notes

* umans-ai + coding-plan: document the cap-1 limit.output choice on v4 flash
2026-08-03 17:45:58 -05:00
opencode-agent[bot] e3b333f39a chore(sync): update OpenRouter model catalog (#4020)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 22:36:37 +00:00
opencode-agent[bot] 141191529f chore(sync): update NanoGPT model catalog (#4015)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 15:27:49 -05:00
opencode-agent[bot] 7bb4f73880 chore(sync): update Venice model catalog (#4016)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 15:27:40 -05:00
opencode-agent[bot] 41e9083309 chore(sync): update Chutes model catalog (#4010)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 14:51:06 -05:00
Aiden Cline 42707bc9ed validate providers have models (#4014) 2026-08-03 14:46:30 -05:00
Aiden Cline e45188c568 feat(sync): auto-merge safe catalog updates (#3958)
* feat(sync): auto-merge safe catalog updates

* fix(sync): count model additions and deletions directly

* fix(sync): require review for reasoning changes

* fix(sync): disable unsafe auto-merge before push

* fix(sync): harden auto-merge check output
2026-08-03 14:34:12 -05:00
opencode-agent[bot] 35ff6e26d5 chore(sync): update Vercel AI Gateway model catalog (#4009)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 14:31:28 -05:00
opencode-agent[bot] 2b9034d7e1 chore(sync): update OpenRouter model catalog (#4008)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 14:31:14 -05:00
opencode-agent[bot] b6e8ceb477 chore(sync): update Kilo model catalog (#4007)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 14:31:04 -05:00
opencode-agent[bot] 36c4671a87 chore(sync): update Charm Hyper model catalog (#3997)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 14:30:56 -05:00
opencode-agent[bot] a266f9459c chore(sync): update Ambient model catalog (#3996)
* chore(sync): update Ambient model catalog

* fix(ambient): add DeepSeek reasoning options

* docs(ambient): document reasoning controls

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 14:30:40 -05:00
opencode-agent[bot] e3dd5f0887 chore(sync): update Merge Gateway model catalog (#3993)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 14:26:27 -05:00
Michael Gasperini d4f68b474e fix(chutes): declare reasoning toggles instead of empty options (#4005)
* fix(chutes): declare reasoning toggles instead of empty options

Every Chutes model with `reasoning = true` carried
`reasoning_options = []`, which asserts that the host exposes no
caller-facing reasoning control. That is not the case: Chutes serves
these models on vLLM and forwards `chat_template_kwargs`, so the
underlying chat templates' thinking switches are reachable over the
wire.

Ten models are switched to `[{ type = "toggle" }]`; each one is
verified twice, against the model's published chat template and
against a live request to this host. `Qwen3-235B-A22B-Thinking-2507-TEE`
keeps `[]`: its chat template exposes no thinking switch and the live
request confirms reasoning cannot be turned off.

* fix(chutes): keep authored reasoning options across sync

The toggles added in the previous commit were not durable. `buildChutesModel`
always emitted `reasoning_options: []`, and `preserveReasoningOptions` returns
early whenever the synced model defines the field at all, so the branch that
restores authored options was unreachable for this provider. The next
`bun chutes:sync` would have reset all ten models to an empty list.

Leaving the field unset in the sync restores the intended behaviour: authored
options are preserved, and reasoners with no entry yet still default to `[]`.
Verified by running `bun chutes:sync` against the live endpoint with the
toggles in place — 13 unchanged, all ten toggles intact.

The provider header and sync notes both still claimed Chutes exposes no
caller-facing reasoning control, which contradicted the model files. Both now
document the verified `chat_template_kwargs` paths and record that the control
is authored per model rather than derived from `/v1/models`.
2026-08-03 14:26:14 -05:00
opencode-agent[bot] 26e9c025cc fix: update OpenRouter logo (#4012)
* fix: update OpenRouter logo

* fix: preserve provider icon sizing

---------

Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-03 14:26:01 -05:00
Aiden Cline 3649ad841a fix(sync): inherit Hyper reasoning from base models (#4004) 2026-08-03 11:58:21 -05:00
opencode-agent[bot] c71ae55e98 chore(sync): update Deep Infra model catalog (#3998)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:29:56 -05:00
opencode-agent[bot] 5c9deb375a chore(sync): update OpenRouter model catalog (#3995)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:26:24 -05:00
opencode-agent[bot] c8f62738c5 chore(sync): update Kilo model catalog (#3994)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:26:15 -05:00
opencode-agent[bot] 72ea53597a chore(sync): update Ofox model catalog (#3999)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:15:16 -05:00
opencode-agent[bot] b4ec67772a chore(sync): update LLM Gateway model catalog (#4002)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:15:04 -05:00
opencode-agent[bot] 3e4bcbb7fa chore(sync): update EmpirioLabs AI model catalog (#4000)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:14:53 -05:00
opencode-agent[bot] 8fc2ac8b74 chore(sync): update Venice model catalog (#4003)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:12:21 -05:00
opencode-agent[bot] 771b5b3a9e chore(sync): update Vercel AI Gateway model catalog (#4001)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:12:05 -05:00
opencode-agent[bot] efad690ed2 chore(sync): update OpenRouter model catalog (#3966)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 11:03:00 -05:00
bu6n ebe19634a7 feat(tensorx): add deepseek-v4-flash-0731 and kimi-k3 provider entries (#3992) 2026-08-03 11:02:40 -05:00
opencode-agent[bot] 8b2bce72e2 chore(sync): update Venice model catalog (#3959)
* chore(sync): update Venice model catalog

* fix(venice): inherit qwen3.8 metadata

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 11:02:09 -05:00
opencode-agent[bot] 63b2780c58 chore(sync): update CrossModel model catalog (#3960)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 10:59:46 -05:00
github-actions[bot] 5151160621 fix: Update GitHub Copilot GPT-5.6 Terra and Luna pricing (#3965)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-03 10:59:21 -05:00
opencode-agent[bot] eb10bdd472 chore(sync): update Vercel AI Gateway model catalog (#3967)
* chore(sync): update Vercel AI Gateway model catalog

* fix(vercel): inherit qwen3.8 metadata

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 10:59:05 -05:00
Adán ec4da2891c fix(fireworks-ai): add low reasoning effort to deepseek-v4-flash-0731 (#3934) 2026-08-03 10:58:10 -05:00
opencode-agent[bot] af2203f64e chore(sync): update DigitalOcean model catalog (#3973)
* chore(sync): update DigitalOcean model catalog

* fix(digitalocean): add missing reasoning options

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 10:54:37 -05:00
opencode-agent[bot] 12e973628d chore(sync): update Hugging Face model catalog (#3984)
* chore(sync): update Hugging Face model catalog

* fix(huggingface): add DeepSeek V4 reasoning controls

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 10:50:53 -05:00
opencode-agent[bot] b122d7b57e chore(sync): update Kilo model catalog (#3975)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 10:48:41 -05:00
opencode-agent[bot] a9ef129fb1 chore(sync): update Charm Hyper model catalog (#3986)
* chore(sync): update Charm Hyper model catalog

* fix(hyper): inherit qwen3.8 metadata

* fix(hyper): mark qwen3.8 as uncontrolled reasoning

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 10:48:25 -05:00
github-actions[bot] 65c0c89a3c fix: Add qwen3.8-max (GA) to alibaba-token-plan / alibaba-token-plan-cn providers (#3982)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-08-03 10:47:57 -05:00
opencode-agent[bot] d384b39950 chore(sync): update LLM Gateway model catalog (#3987)
* chore(sync): update LLM Gateway model catalog

* fix(llmgateway): add qwen3.8 reasoning options

* fix(llmgateway): inherit qwen3.8 metadata

---------

Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
Co-authored-by: Aiden Cline <aidenpcline@gmail.com>
2026-08-03 10:45:04 -05:00
celeste 504dabb073 feat(ofox): add catalog sync module (#3978)
Sync existing Ofox TOMLs from the public catalog API
(https://api.ofox.ai/v1/models/catalog). Conservative scope:

- skipCreates + trackMissingModels=false: the Ofox listing here is a
  curated subset, so new models keep entering via hand-authored PRs
- deleteMissing=false with a notice: delisted models get flagged for
  manual deprecation review instead of silent removal
- catalog is treated as authoritative for cost and deprecation status
  only; base_model inheritance, reasoning_options, and per-model
  [provider] protocol overrides are preserved as authored

Co-authored-by: celeste1900 <caojingmiao@meiqia.com>
2026-08-03 10:44:51 -05:00
m3 774d80647e chore(github-models): remove retired provider (#3980)
Co-authored-by: Marvae <11957602+Marvae@users.noreply.github.com>
2026-08-03 10:44:06 -05:00
opencode-agent[bot] db3461c5be chore(sync): update Merge Gateway model catalog (#3988)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 10:39:13 -05:00
YongYuH 7a5b83395b feat(alibaba-token-plan): add DeepSeek V4 Flash 0731 (#3991)
* feat(alibaba-token-plan): add DeepSeek V4 Flash 0731

* fix(alibaba-token-plan-cn): add effort high/max to DeepSeek V4 Flash 0731 reasoning options

---------

Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com>
2026-08-03 10:38:54 -05:00
aic0d3r 708c451ea2 feat(alibaba-token-plan): add DeepSeek V4 Flash 0731 (#3990) 2026-08-03 10:37:43 -05:00
opencode-agent[bot] b0811ddf7b chore(sync): update NanoGPT model catalog (#3893)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-03 10:37:29 -05:00
opencode-agent[bot] 92d9a6d051 feat: expand benchmarks for current major models (#3989)
* feat: add Gemini 3.6 Flash and Kimi K3 benchmarks

* feat: expand current model benchmark coverage

---------

Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com>
2026-08-03 10:04:20 -05:00
Renaud Cerrato 0ccae5d09e feat(ollama-cloud): add deepseek-v4-flash:0731 model (#3985) 2026-08-03 09:44:27 -05:00
m3 d5931d97c2 chore(github-copilot): refresh model catalog (#3979)
Co-authored-by: Marvae <11957602+Marvae@users.noreply.github.com>
2026-08-03 09:44:15 -05:00
OpeOginni a4a2707bc5 feat: add Claude Opus 5 benchmarks (#3983) 2026-08-03 09:38:35 -05:00
Jack 403a7bdd43 add qwen3.8-Max to Go 2026-08-03 14:49:06 +08:00
Aiden Cline beaccbb2d5 fix(sync): harden NanoGPT reasoning metadata (#3974) 2026-08-02 22:48:07 -05:00
opencode-agent[bot] 0a375c8387 chore(sync): update Kilo model catalog (#3892)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 22:34:00 -05:00
Aiden Cline e2761846cb fix(sync): dedupe Kilo reasoning efforts (#3972) 2026-08-02 22:33:36 -05:00
Aiden Cline e1bdd2adce fix(sync): prefer Kilo reasoning metadata (#3971) 2026-08-02 22:18:29 -05:00
Asjad Abbas 6e037ccb28 fix: Claude models that removed sampling params are marked temperature = true (#3961)
Anthropic removed temperature/top_p/top_k on Opus 4.7 and later, Sonnet 5
and Fable 5 -- sending them returns a 400. Ten provider entries still
advertise temperature support for those models.

Eight of them declare base_model pointing at a lab entry that already says
temperature = false, then override it back to true; per AGENTS.md a provider
entry should carry only real overrides, so those lines are dropped and the
lab value is inherited. The two standalone entries state false explicitly.

Co-authored-by: Asjad Abbas <215788583+asjad3@users.noreply.github.com>
2026-08-02 22:05:50 -05:00
Aiden Cline a7f3d04313 feat(digitalocean): add Kimi K3 (#3969) 2026-08-02 22:03:47 -05:00
Aiden Cline 83a78948af fix(sync): harden DigitalOcean catalog translation (#3904)
* fix(sync): harden DigitalOcean catalog translation

Stop incomplete DO catalog rows from corrupting curated model data:
- map mimo-* IDs to xiaomi base metadata
- only treat thinking=true as authoritative reasoning (not bare efforts)
- merge effort lists so incomplete remote values cannot drop none/xhigh
- normalize x-high → xhigh
- union modalities with authored data; skip text-only overrides on base models
- keep beta status for Public Preview names

* fix(sync): preserve DigitalOcean modality overrides

* fix(sync): prefer DigitalOcean catalog metadata

* fix(sync): fall back on empty reasoning efforts

* fix(sync): respect DigitalOcean modality removals
2026-08-02 21:58:47 -05:00
Jonathan Feller 16354461ff feat: add Impossibl provider (#3390)
* Add Impossibl provider

Impossibl (https://impossibl.com) is an OpenAI-compatible AI gateway,
served via @ai-sdk/openai-compatible at https://api.impossibl.com/v1.

Adds provider.toml, logo, and 76 model entries generated from the live
api.impossibl.com/v1/models catalog. Each entry inherits metadata via
base_model and carries Impossibl's serving price (USD / 1M tokens); no
limit/modalities overrides (the gateway serves the base metadata's).

reasoning_options are effort-only (the OpenAI-compatible /v1/chat/completions
surface exposes only reasoning_effort), with per-model value subsets taken
from each model's canonical metadata intersected with the gateway's accepted
set, or [] where the model has no effort control on this surface.

14 served models are omitted for now — models.dev has no base metadata to
inherit from for them yet.

* Do not assert per-model reasoning_options for Impossibl

The published effort ladders were derived from which values the live gateway
accepted with HTTP 200. That measures the request validator of whichever
upstream happened to serve the probe, not the model: Fireworks validates against
a generic OpenAI-style enum, Azure Foundry ignores the field entirely, and the
gateway forwards reasoning_effort verbatim without per-model mapping. The same
GLM-5.2 therefore read as a five-rung ladder on one route and as no control at
all on another.

Replaces every asserted set with an empty one plus the reason, matching how
other gateway providers document an unverifiable control surface. Entries whose
base model has no reasoning at all keep no key.

* Give the Inkling entry its own served limits

models/thinkingmachines/inkling.toml omits limit.output because the served
output cap varies by host (16K on NVIDIA, 32K on Baseten, 256K on Vercel, 1M on
OpenRouter), so every provider entry supplies its own. This one did not, which
fails validation now that the base model has changed on dev.

Impossibl serves Inkling through Thinking Machines' own Tinker API, so their
published served limits apply verbatim: 65_536 both ways, matching the context
window the gateway itself records for this route.

* Move in-file rationale into the leading comment block

AGENTS.md: the daily model sync re-serializes provider TOMLs and discards every
comment except a leading header block, so rationale placed between keys is
silently deleted on the next sync. The reasoning_options justification sat
between base_model and reasoning_options in all 68 files, and the Inkling limit
note sat above [limit]; both would have been lost.

Also recites the Inkling limits against the gateway catalog and Tinker's own
docs rather than an in-repo path, since that path differs between this branch
and dev.

* Explain the Inkling route instead of reusing the generic rationale

Inkling is the one Impossibl entry with a fixed single upstream, so the generic
"whichever upstream serves the model" rationale did not fit it.

limit: the 64K window now cites the first-party Tinker entry in this repo, which
publishes the same 65_536/65_536 limits and the same 1.87/4.68/0.374 pricing.
Tinker's 256K window is a separately priced tier (Inkling:peft:262144, 3.74/9.36),
not this route.

reasoning_options: Tinker documents its effort control only on the
Anthropic-compatible surface (output_config.effort, thinking.type). Impossibl
reaches Tinker over the OpenAI-compatible endpoint, for which no control is
documented, so none is asserted — the same basis on which providers/nvidia
publishes an empty set.

* Match the Inkling route modalities to the first-party Tinker entry

The entry already aligns limits and cost with providers/thinkingmachines/models/
thinkingmachines/Inkling.toml on the grounds that it is the same Tinker tier, but
still inherited the base model's audio input. Tinker serves this route as
text+image, so advertising audio implied an input the route may reject.

* fix: derive reasoning_options from verified per-route behavior, correct pricing

reasoning_options was `[]` on all 68 reasoning entries; a maintainer was right that this
is wrong for essentially all of them. 59 of 68 now publish a verified control.

These are generated from our gateway's model registry rather than hand-authored, and a
`--check` mode fails on drift. A control is published only where the model's declared shape
and its verified REACH agree: reach is established by making the upstream do the rejecting,
so a 502/422 carrying its own error text proves the field was forwarded rather than dropped.
Where our enum and the upstream's coincide and no rejection is possible, reach is shown by
billed effect instead. Acceptance alone is never used as evidence.

Every verdict is taken on the route that actually serves the model, confirmed per attempt in
our request log. That distinction is load-bearing: `zai/glm-5.2` is answered by Azure Foundry
(which ignores reasoning fields) while its seven siblings are answered by Z.ai, so one GLM
entry is `[]` and seven publish a toggle. An earlier draft had this backwards, having
measured Z.ai's own API rather than the route we use.

Also corrects three classes of pricing error found by diffing every entry against the
catalog the PR cites:
- `gpt-5.6-luna` was published at 5x the billed rate; `gpt-5.6-terra` carried a copied
  `gpt-5.4` cost block.
- `gpt-5.6-sol` omitted `cache_write` entirely.
- 11 entries published flat pricing for models the catalog bills in a higher bracket above a
  per-model input threshold, understating long-context requests by up to 2x.

Provider `doc` now points at the public models-and-pricing listing rather than the site root,
and the shared rationale lives in one leading comment block on provider.toml.

* fix: fireworks/glm-5.2 has no verified effort control

Fireworks does validate `reasoning_effort` for this model id — it enumerates its own enum in
a 502 for `minimal` — so the value genuinely reaches the upstream. But validation is not a
control, and this entry was published on that basis alone while Z.ai and Qwen were held to a
stricter standard.

Measured per rung through the gateway on a short-answer prompt, where output length is the
reasoning signal: output swings 121-275 tokens WITHIN the same rung, with no ordering across
rungs and no reasoning content at any level. No rung is distinguishable, so there is nothing
meaningful to advertise.

Both `glm-5.2` entries are now `[]`, for opposite reasons: the Fireworks route validates but
has no effect, and the Z.ai-namespaced route is served by Azure Foundry, which ignores the
field entirely.

* chore: keep the provider files data-only

The generated header on provider.toml was carrying material that has no business in another
project's repository: our internal source-file and tooling names, which upstream serves which
model, raw probe transcripts, and — worst — a description of an unfixed defect in our own
product. None of that is data about the models.

Evidence for the published values belongs in the PR conversation, where a reviewer can weigh
it, not in a committed data file. The audit guide says the same: "Put citations in the PR
body, not TOML comments."

Per-option `# API:` comments stay, trimmed to the bare request payload, matching the example
AGENTS.md gives for exactly this purpose. They document the public request syntax a caller
sends, which is not obvious for the controls that are not OpenAI's `reasoning_effort`.

* chore: justify the Inkling overrides from our own catalog, not from routing

The limit and modality overrides were explained by naming the upstream that serves this
model. That is routing detail, and it does not belong in another project's repository.

Our own public catalog reports this model's served context window (65_536), its input
modalities (text+image) and its prices directly, so it justifies every overridden value on
its own terms — the base model's 1_048_576 window and audio input are simply not what is
served here. No upstream needs naming for that to be checkable.

* Revert "chore: justify the Inkling overrides from our own catalog, not from routing"

This reverts commit 71598cbd14e7622735f1c84ded3dafccaab9dc20.
2026-08-02 21:02:50 -05:00
opencode-agent[bot] f67be44f09 chore(sync): update Merge Gateway model catalog (#3888)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:32 -05:00
opencode-agent[bot] 09a5ebf85e chore(sync): update Deep Infra model catalog (#3890)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:29 -05:00
opencode-agent[bot] 28bece81fe chore(sync): update Ambient model catalog (#3912)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:26 -05:00
opencode-agent[bot] a8b3e5bf97 chore(sync): update Hugging Face model catalog (#3943)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:23 -05:00
opencode-agent[bot] 31b9f035b3 chore(sync): update Vercel AI Gateway model catalog (#3944)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:21 -05:00
opencode-agent[bot] 35bc058196 chore(sync): update Baseten model catalog (#3946)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:18 -05:00
opencode-agent[bot] 9946548c28 chore(sync): update EmpirioLabs AI model catalog (#3945)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:15 -05:00
opencode-agent[bot] f5641af76e chore(sync): update Charm Hyper model catalog (#3947)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:13 -05:00
opencode-agent[bot] c3ca757c2a chore(sync): update OpenRouter model catalog (#3948)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 11:37:10 -05:00
Nourrisse Florian 44fecad3ac feat(mistral): add Voxtral audio models (transcription, TTS, audio instruct) (#3930)
* feat(mistral): add Voxtral audio models

Mistral ships a full audio line that the catalog does not cover yet:
transcription, text-to-speech and an instruct model with native audio input.

- voxtral-mini-latest: audio to text transcription
- voxtral-mini-tts-latest: text to audio, zero-shot voice cloning, 9 languages
- voxtral-small-latest: audio+text to text, tool calling, 32k context

The two first ones intentionally omit the [cost] block: transcription bills per
MINUTE of audio (\$0.003/min) and synthesis per CHARACTER (\$16 per 1M chars),
neither of which the token-based schema models. Same treatment as the existing
Whisper entries, e.g. providers/groq/models/whisper-large-v3-turbo.toml.
Voxtral Small does carry token pricing for its text side; its audio input bills
per minute (\$0.004) and is documented in the file header.

Sources are cited as a leading comment block in each file, per AGENTS.md.

Validated with bun validate.

* fix(mistral): align Voxtral Mini entries with the live API ids

voxtral-mini-latest resolves to voxtral-mini-2602, not the 25-07
Transcribe card the entry was named and dated after. Date the entry on
the revision it points at, matching mistral-small-latest, and drop the
product word absent from the API id. Note the Bedrock Voxtral Mini 3B
entry as a distinct product surface to prevent the same confusion.

Name the TTS entry after its own id for consistency.
2026-08-02 11:08:24 -05:00
Rushil Mallarapu 6248997c25 fix: Azure GPT-5.6 Terra/Luna pricing (#3952)
Azure has not cut Terra or Luna pricing in line with OpenAI. Update
standard and long-context pricing for Azure and Azure Cognitive
Services.
2026-08-02 11:07:39 -05:00
Dowan 2a4e36cf6a feat: add qwen3.7-flash model for alibaba-cn provider (#3954)
* feat: add qwen3.7-flash model for alibaba-cn provider

* fix: add description to qwen3.7-flash model metadata
2026-08-02 11:04:07 -05:00
Aiden Cline 8851d6411c fix: factor DeepSeek V4 Flash 0731 providers (#3957)
* fix: factor DeepSeek V4 Flash 0731 providers

* fix: update DeepSeek Flash API base model

* fix: update OpenCode DeepSeek Flash base models
2026-08-02 11:03:50 -05:00
chenxiao5580-cmd 95cf7bc77c fix(modelis): declare reasoning_options per model from measurements (#3951)
* fix(modelis): declare reasoning_options per model from measurements

Follow-up to #3932. That PR landed with the same six-value effort list on
all nine models; the review bot was right that this is over-broad, and
re-measuring showed it is also incomplete.

Measured one control at a time against the live endpoint:

- effort kept only where the levels measurably change reasoning
  (Claude x3, Gemini x2). Dropped on both DeepSeek and both Qwen models,
  which accept every value and return 200 but do not change behaviour.
- toggle added where both states are caller-reachable. The mechanism
  differs by family: reasoning.enabled for Claude/Gemini/Qwen, and
  reasoning_effort "none" for DeepSeek, which ignores reasoning.enabled.
- budget_tokens added where reasoning_tokens tracks the requested budget
  (Gemini x2, Qwen x2). No min/max, since no boundary was probed.
- claude-fable-5 and gemini-2.5-pro reject disabling with a 400, so
  neither declares a toggle.

Also drops the header comment that claimed all six effort values were
reflected in reasoning_tokens: that holds for five models, not nine.

Costs are unchanged and re-verified against the live pricing endpoint.

* fix(modelis): move wire-path comments to a leading header block

Review finding: every declared control needs its exact request syntax in a
leading top-of-file comment, not an inline one next to the option.

I had put them inline because Modelis has no sync module, so nothing would
strip mid-file comments today. That was the wrong call: the sync rewrites
provider TOMLs by parsing and re-serializing them and keeps only a leading
header, so an inline comment is one sync module away from vanishing with
nobody noticing.

Each file now opens with the wire path for every control it declares.

* fix(modelis): narrow effort values to measured separable levels

Review finding: the six-value lists were the gateway's global accept-set
minus none, not per-model truth.

Re-measured at three task difficulties, asking which ADJACENT levels are
actually distinguishable (sample ranges that do not overlap):

- minimal collapses into low on every Claude model at every difficulty
  -> dropped from all three, as the lab baseline predicted.
- xhigh never rises above high on opus, sonnet or gemini-2.5-flash
  -> dropped there; kept on fable, where it does separate.
- gemini-2.5-flash keeps minimal: 37 vs 107 with zero scatter across
  three repeats.
- claude-fable-5 returns 145 reasoning tokens at reasoning_effort none,
  so it has no off switch at all and declares neither toggle nor none.

Per-file: opus/sonnet/gemini-2.5-pro low|medium|high|max, fable
low|medium|high|xhigh|max, gemini-2.5-flash minimal|low|medium|high|max.

DeepSeek and Qwen still declare no effort list: repeats at one setting
scatter up to 5x and the ordering inverts at medium on both DeepSeek
models. Numbers are in the PR discussion.

* fix(modelis): effort-none authored as effort; restore lab-baseline levels

Review findings:

1. Off via reasoning_effort "none" must be authored as effort with none
   in values, not as toggle. Both DeepSeek files had a toggle declaration
   whose own wire comment named the effort parameter -- self-contradicting.
   They now declare effort = [none, high, max] per the peer set.
   Qwen keeps toggle because there the mechanism really is a separate
   field: reasoning.enabled false -> 0, while reasoning_effort none
   leaves those models reasoning unchanged.

2. Dropping a level because adjacent reasoning_tokens ranges overlapped
   was the wrong test -- a level can differ in latency or quality without
   differing in thinking tokens. Reverted to the lab/peer baseline and
   restored xhigh on claude-opus-4-8.

minimal stays dropped on the Claude models: it is absent from the lab
baseline and returned output identical to low at every difficulty tested.
2026-08-02 10:57:31 -05:00
opencode-agent[bot] e2f44e930f chore(sync): update Chutes model catalog (#3955)
Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com>
2026-08-02 10:54:13 -05:00
Mathias Monstrey 28c964354f fix(nebius): set cache_read price for Kimi-K3 (#3956)
Nebius Token Factory does not offer a discounted prompt-cache tier for
Kimi-K3. The models_info API has no cache pricing fields, the docs
have no cache pricing for this model, and the public endpoint page
lists only "$3.00 / 1M In" and "$15.00 / 1M Out" with no cache-hit
rate.

The entry previously left cache_read unset, which downstream
consumers (e.g. opencode) treat as $0/M for cached input tokens. On a
cache-heavy agentic session that undercounts real cost by roughly
18x. Set cache_read = 3 (equal to input) so cached and fresh input
tokens are billed at their actual, identical rate.
2026-08-02 10:53:58 -05:00
2843 changed files with 28917 additions and 17845 deletions
-2
View File
@@ -18,9 +18,7 @@ jobs:
if: >-
github.repository == 'anomalyco/models.dev'
&& !contains(github.event.issue.labels.*.name, 'provider:openai')
&& !contains(github.event.issue.labels.*.name, 'provider:pioneer')
&& github.event.client_payload.provider != 'openai'
&& github.event.client_payload.provider != 'pioneer'
runs-on: ubuntu-latest
env:
GH_TOKEN: ${{ github.token }}
+26 -3
View File
@@ -7,6 +7,7 @@ on:
permissions:
contents: read
issues: write
pull-requests: write
concurrency:
@@ -22,6 +23,19 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Clear ready label
env:
GH_TOKEN: ${{ github.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
READY_LABEL: "reviewer: ready"
run: |
set -euo pipefail
gh label create "$READY_LABEL" --repo "$GITHUB_REPOSITORY" --color "0E8A16" --description "Automated review found no actionable items" --force
labels="$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json labels --jq '.labels[].name')"
if grep -Fxq "$READY_LABEL" <<< "$labels"; then
gh pr edit "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --remove-label "$READY_LABEL"
fi
- name: Checkout trusted base revision
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
@@ -53,15 +67,19 @@ jobs:
- name: Run pull request reviewer
env:
OPENCODE_API_KEY: ${{ secrets.OPENCODE_API_KEY }}
OPENCODE_PERMISSION: '{"*":"deny","read":"allow","glob":"allow","grep":"allow","external_directory":"deny"}'
OPENCODE_PERMISSION: '{"*":"deny","read":"allow","glob":"allow","grep":"allow","mark-pr-ready":"allow","external_directory":"deny"}'
run: |
set -euo pipefail
EVENTS_FILE="$RUNNER_TEMP/pr-reviewer-events.jsonl"
RESPONSE_FILE="$RUNNER_TEMP/pr-reviewer-response.md"
PR_REVIEW_READY_FILE="$RUNNER_TEMP/pr-reviewer-ready"
echo "RESPONSE_FILE=$RESPONSE_FILE" >> "$GITHUB_ENV"
echo "PR_REVIEW_READY_FILE=$PR_REVIEW_READY_FILE" >> "$GITHUB_ENV"
export PR_REVIEW_READY_FILE
rm -f "$PR_REVIEW_READY_FILE"
opencode run --agent pr-reviewer -m opencode/grok-4.5 --format json <<'EOF' | tee "$EVENTS_FILE"
Review this pull request using the trusted reviewer instructions. Start with `.pr-review/pull-request.json`, `.pr-review/diff.patch`, `AGENTS.md`, and the contributing guidance in `README.md`. Read `sync.md`, the reasoning-options audit guide, schema code, and nearby base-revision files when relevant to the changed files. Use only the read, glob, and grep tools. Return only the final review comment in the agent's required output format. Never include progress narration or passed-check summaries.
Review this pull request using the trusted reviewer instructions. Start with `.pr-review/pull-request.json`, `.pr-review/diff.patch`, `AGENTS.md`, and the contributing guidance in `README.md`. Read `sync.md`, the reasoning-options audit guide, schema code, and nearby base-revision files when relevant to the changed files. Use only the read, glob, grep, and mark-pr-ready tools. Return only the final review comment in the agent's required output format. Never include progress narration or passed-check summaries.
EOF
if ! jq -ers 'map(select(.type == "text") | .part.text) | last | select(length > 0)' "$EVENTS_FILE" > "$RESPONSE_FILE"; then
@@ -73,4 +91,9 @@ jobs:
env:
GH_TOKEN: ${{ github.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
run: gh pr comment "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --body-file "$RESPONSE_FILE"
READY_LABEL: "reviewer: ready"
run: |
gh pr comment "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --body-file "$RESPONSE_FILE"
if [[ -f "$PR_REVIEW_READY_FILE" ]]; then
gh pr edit "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --add-label "$READY_LABEL"
fi
+21 -1
View File
@@ -95,6 +95,7 @@ jobs:
run: bun validate
- name: Report changes
id: report
env:
GH_TOKEN: ${{ steps.committer.outputs.token }}
BRANCH: automation/sync-models-${{ matrix.provider }}
@@ -119,9 +120,20 @@ jobs:
git checkout -B "$BRANCH"
git add models providers
git commit -m "$TITLE"
git push --force-with-lease origin "$BRANCH"
bun sync:auto-merge HEAD^ HEAD
safe="$(sed -n 's/^safe=//p' "$GITHUB_OUTPUT" | tail -1)"
pr_number="$(gh pr list --head "$BRANCH" --base dev --json number --jq '.[0].number')"
if [ "$safe" != "true" ] && [ -n "$pr_number" ]; then
gh pr merge "$pr_number" --disable-auto || true
if [ "$(gh pr view "$pr_number" --json autoMergeRequest --jq '.autoMergeRequest == null')" != "true" ]; then
echo "Failed to disable auto-merge for unsafe sync PR #$pr_number."
exit 1
fi
fi
git push --force-with-lease origin "$BRANCH"
if [ -n "$pr_number" ]; then
gh pr edit "$pr_number" --title "$TITLE" --body-file .sync/model-sync-report.md
for label in "${labels[@]}"; do
@@ -129,4 +141,12 @@ jobs:
done
else
gh pr create --base dev --head "$BRANCH" --title "$TITLE" --body-file .sync/model-sync-report.md "${label_args[@]}"
pr_number="$(gh pr list --head "$BRANCH" --base dev --json number --jq '.[0].number')"
fi
if [ "$safe" = "true" ]; then
gh pr merge "$pr_number" --auto --squash
elif [ "$(gh pr view "$pr_number" --json autoMergeRequest --jq '.autoMergeRequest == null')" != "true" ]; then
echo "Unsafe sync PR #$pr_number still has auto-merge enabled."
exit 1
fi
+4 -1
View File
@@ -12,6 +12,7 @@ permission:
"*.env.*": deny
glob: allow
grep: allow
mark-pr-ready: allow
external_directory: deny
---
@@ -65,6 +66,8 @@ Focus only on actionable problems introduced by the pull request:
Do not report style preferences, speculative concerns, pre-existing problems, or bare schema errors that validation will identify without useful explanation. Do not invent requirements from neighboring files when provider behavior is intentionally different. Do not claim to have run commands, opened links, or performed validation. Do not edit files or attempt to post comments yourself.
Use `mark-pr-ready` only after completing the review and determining there are no action items. Never use it when returning one or more action items.
Every finding must be an action item: the author must need to change something, verify a specific fact, or provide missing evidence. Do not list checks that passed or general observations. If you find action items, list them in severity order and return exactly this structure:
```markdown
@@ -74,6 +77,6 @@ Every finding must be an action item: the author must need to change something,
Use `violation` only when the change demonstrably breaks a repository requirement or expected behavior. Use `possible mistake` when the diff provides concrete contradictory or suspicious evidence but external facts must be verified. Use `critical`, `high`, `medium`, or `low` for severity. Reference a changed line whenever possible and keep each action item concise.
If there are no action items, respond with exactly the following text and nothing else. Do not explain what you checked or why it passed:
If there are no action items, call `mark-pr-ready`, then respond with exactly the following text and nothing else. Do not explain what you checked or why it passed:
`No actionable findings.`
+6
View File
@@ -0,0 +1,6 @@
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mark-pr-ready": "deny"
}
}
+16
View File
@@ -0,0 +1,16 @@
import { writeFile } from "node:fs/promises"
import { tool } from "@opencode-ai/plugin"
export default tool({
description: "Mark the current pull request as ready after completing a review with no actionable findings.",
args: {},
async execute(_args, context) {
if (context.agent !== "pr-reviewer") throw new Error("This tool is only available to the pr-reviewer agent")
const readyFile = process.env.PR_REVIEW_READY_FILE
if (!readyFile) throw new Error("PR_REVIEW_READY_FILE is not configured")
await writeFile(readyFile, "")
return "Pull request marked ready."
},
})
+1
View File
@@ -0,0 +1 @@
description = "Arcee AI develops open-weight language models focused on efficient reasoning, tool use, and deployable intelligence."
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" fill-rule="evenodd"><path d="M13.236 2.377 2.751 20.493H0L11.863 0l1.373 2.377zm3.554 6.156-9.606 11.96H4.13L15.511 6.32l1.279 2.212zm6.908 11.96H14.05l8.406-2.151 1.242 2.15zm-3.42-5.922-7.843 5.92H8.482l10.597-7.997 1.2 2.077z"/></svg>

After

Width:  |  Height:  |  Size: 318 B

@@ -0,0 +1,22 @@
name = "Gemma-SEA-LION-v4-27B-IT"
description = "Gemma 3 27B tuned by AI Singapore for Southeast Asian languages and instruction following"
family = "gemma"
release_date = "2025-09-23"
last_updated = "2025-09-23"
attachment = false
reasoning = false
temperature = true
tool_call = false
open_weights = true
[limit]
context = 128_000
output = 128_000
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/aisingapore/Gemma-SEA-LION-v4-27B-IT"
+23
View File
@@ -0,0 +1,23 @@
name = "Qwen2.5-Coder-0.5B"
description = "Tiny open Qwen code model for lightweight completion and on-device coding"
family = "qwen"
release_date = "2024-11-12"
last_updated = "2024-11-12"
attachment = false
reasoning = false
temperature = true
tool_call = false
open_weights = true
license = "Apache 2.0"
[limit]
context = 32_768
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/Qwen2.5-Coder-0.5B"
@@ -0,0 +1,22 @@
name = "Qwen2.5-Coder-32B-Instruct"
description = "Open coding-focused Qwen model for code generation, repair, and repository reasoning"
family = "qwen"
release_date = "2024-11-12"
last_updated = "2024-11-12"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/Qwen2.5-Coder-32B-Instruct"
@@ -0,0 +1,23 @@
name = "Qwen3 235B-A22B Instruct 2507"
description = "Updated large open Qwen3 MoE instruct model for multilingual chat, coding, and tool use"
family = "qwen"
release_date = "2025-07-21"
last_updated = "2025-07-21"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
license = "Apache 2.0"
[limit]
context = 262_144
output = 16_384
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/Qwen3-235B-A22B-Instruct-2507"
+22
View File
@@ -0,0 +1,22 @@
name = "Qwen3 30B A3B"
description = "Sparse MoE Qwen model with 3B active parameters for efficient chat and reasoning"
family = "qwen"
release_date = "2025-04-28"
last_updated = "2025-04-28"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
[limit]
context = 131_072
output = 16_384
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/Qwen3-30B-A3B"
+27
View File
@@ -0,0 +1,27 @@
# https://qwen.ai/blog?id=qwen3-coder-next
# https://huggingface.co/Qwen/Qwen3-Coder-Next
# https://www.qwencloud.com/models/qwen3-coder-next
name = "Qwen3 Coder Next"
description = "Open-weight Qwen coding model for agents, repository edits, and multi-turn tool use"
family = "qwen"
release_date = "2026-02-03"
last_updated = "2026-02-03"
attachment = false
reasoning = false
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-09"
open_weights = true
[limit]
context = 262_144
output = 65_536
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/Qwen3-Coder-Next"
+22
View File
@@ -0,0 +1,22 @@
# https://help.aliyun.com/en/model-studio/qwen3-5-flash
# https://www.alibabacloud.com/help/en/model-studio/deep-thinking
name = "Qwen3.5 Flash"
description = "Qwen vision-language model for visual reasoning, documents, and agent tasks"
family = "qwen"
release_date = "2026-02-23"
last_updated = "2026-02-23"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 1_000_000
output = 65_536
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+20
View File
@@ -0,0 +1,20 @@
name = "Qwen3.7 Flash"
description = "Lightweight multimodal Qwen model for high-throughput text, image, and video tasks"
family = "qwen"
release_date = "2026-07-15"
last_updated = "2026-07-15"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 1_000_000
input = 991_000
output = 65_536
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+36
View File
@@ -0,0 +1,36 @@
# Sources (accessed 2026-08-15):
# https://huggingface.co/Qwen/Qwen3.8-27B
# https://huggingface.co/api/models/Qwen/Qwen3.8-27B
# https://qwen.ai/blog?id=qwen3.8
# Hub lastModified 2026-08-14T15:00:01Z is the open-weight drop.
# Do not use Hub createdAt 2026-08-05 (staged countdown page).
name = "Qwen3.8 27B"
description = "Dense 27B vision-language model for coding, agent tasks, and image and video understanding"
family = "qwen"
release_date = "2026-08-14"
last_updated = "2026-08-14"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = true
[limit]
context = 262_144
output = 32_768
[modalities]
input = ["text", "image", "video"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/Qwen3.8-27B"
[[benchmarks]]
name = "SWE-bench Pro"
score = 61.7
metric = "resolved"
source = "https://huggingface.co/Qwen/Qwen3.8-27B"
+128
View File
@@ -28,3 +28,131 @@ output = 131_072
[modalities]
input = ["text", "image", "video"]
output = ["text"]
[[benchmarks]]
name = "Terminal-Bench"
score = 86.6
metric = "accuracy"
variant = "xhigh"
version = "2.1"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "SWE-Bench Pro"
score = 67.7
metric = "resolve rate"
variant = "xhigh"
harness = "Claude Code"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "DeepSWE"
score = 56.6
metric = "resolve rate"
variant = "xhigh"
harness = "Claude Code"
version = "1.1"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "NL2Repo"
score = 55.9
metric = "resolve rate"
variant = "xhigh"
harness = "Claude Code"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "FrontierSWE"
score = 73.5
metric = "dominance score"
variant = "xhigh"
harness = "Claude Code"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "MLS-Bench-Lite"
score = 41.0
metric = "score"
variant = "xhigh"
harness = "Claude Code"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "AutomationBench"
score = 27.3
metric = "pass@1"
variant = "xhigh"
dataset = "600-task public subset"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "Toolathlon Verified"
score = 72.5
metric = "pass@1"
variant = "xhigh"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "WideSearch"
score = 81.9
metric = "F1"
variant = "xhigh"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 56.2
metric = "accuracy"
variant = "xhigh, with tools"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "GPQA Diamond"
score = 92.6
metric = "accuracy"
variant = "xhigh"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 43.6
metric = "accuracy"
variant = "xhigh, no tools"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "IFBench"
score = 82.8
metric = "score"
variant = "xhigh"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "OSWorld-Verified"
score = 86.1
metric = "success rate"
variant = "xhigh"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
[[benchmarks]]
name = "MMMU Pro"
score = 82.3
metric = "accuracy"
variant = "xhigh"
source = "https://www.alibabacloud.com/blog/qwen3-8-max-a-new-bar-for-coding-and-cowork_603421"
date = "2026-08-03"
+38
View File
@@ -0,0 +1,38 @@
# Sources (accessed 2026-08-06):
# https://www.qwencloud.com/models/qwen3.8-max
# https://www.qianwenai.com/models/qwen3.8-max
# https://help.aliyun.com/zh/model-studio/qwen3-8-max
# https://www.alibabacloud.com/help/en/model-studio/qwen3-8-max
# https://help.aliyun.com/zh/model-studio/pdf-understanding
# https://platform.qianwenai.com/docs/developer-guides/tool-calling/pdf-understanding
# https://docs.qwencloud.com/token-plan/personal/token-plan-personal-overview
# https://help.aliyun.com/zh/model-studio/token-plan-personal-overview
# https://help.aliyun.com/en/model-studio/token-plan-personal-overview
# https://docs.qwencloud.com/developer-guides/getting-started/text-generation-models
# https://docs.qwencloud.com/developer-guides/text-generation/thinking
# https://docs.qwencloud.com/developer-guides/clients-and-developer-tools/opencode
# https://platform.qianwenai.com/docs/developer-guides/clients-and-developer-tools/opencode
# https://qwen.ai/blog?id=qwen3.8
# PDF input: Model Studio / 千问AI docs list only qwen3.8-max under PDF理解
# (type:file / file_url|file_data). Model pages list Image/Text/Video badges
# and separately list PDF理解 as a Completions built-in tool. Beijing-region
# availability note on help.aliyun.com; lab capability still includes pdf.
name = "Qwen3.8 Max"
description = "2.4-trillion-parameter MoE flagship for coding, professional work, multimodal understanding, and long-horizon agentic workflows"
family = "qwen"
release_date = "2026-08-03"
last_updated = "2026-08-03"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 1_000_000
output = 131_072
[modalities]
input = ["text", "image", "video", "pdf"]
output = ["text"]
+23
View File
@@ -0,0 +1,23 @@
name = "QwQ 32B"
description = "Open reasoning model from the Qwen team for math, coding, and step-by-step problem solving"
family = "qwen"
release_date = "2025-03-05"
last_updated = "2025-03-05"
attachment = false
reasoning = true
temperature = true
tool_call = true
knowledge = "2024-04"
open_weights = true
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/Qwen/QwQ-32B"
+23
View File
@@ -0,0 +1,23 @@
# Sources:
# https://platform.claude.com/docs/en/about-claude/models/introducing-claude-fable-5-and-claude-mythos-5
# https://www.anthropic.com/claude/mythos
name = "Claude Mythos 5"
description = "Restricted Claude model for advanced cybersecurity and biology research workflows"
family = "claude-mythos"
release_date = "2026-06-09"
last_updated = "2026-06-09"
attachment = true
reasoning = true
temperature = false
tool_call = true
structured_output = true
knowledge = "2026-01-31"
open_weights = false
[limit]
context = 1_000_000
output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
+153
View File
@@ -17,3 +17,156 @@ output = 128_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
[[benchmarks]]
name = "SWE-Bench Verified"
score = 96.0
metric = "resolved"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "SWE-Bench Pro"
score = 79.2
metric = "resolve rate"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "SWE-Bench Multilingual"
score = 89.5
metric = "resolve rate"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "SWE-Bench Multimodal"
score = 59.4
metric = "resolve rate"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "DeepSWE"
score = 68.8
metric = "resolve rate"
version = "1.1"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "FrontierCode"
score = 53.4
metric = "mean@5"
variant = "medium effort"
dataset = "Main"
version = "1.1"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "Frontier-Bench"
score = 43.3
metric = "mean reward"
variant = "max effort"
harness = "mini-SWE-agent"
version = "v0.1"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "BrowseComp"
score = 90.8
metric = "accuracy"
variant = "single agent"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 56.3
metric = "accuracy"
variant = "no tools"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 64.7
metric = "accuracy"
variant = "with tools"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "DeepSearchQA"
score = 95.0
metric = "F1"
variant = "max effort"
source = "https://www.anthropic.com/news/claude-opus-5"
date = "2026-07-24"
[[benchmarks]]
name = "OSWorld"
score = 70.6
metric = "success rate"
version = "2.0"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "GDPval-AA"
score = 1861
metric = "Elo"
variant = "max effort"
version = "v2"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "AA-Briefcase"
score = 1720
metric = "Elo"
variant = "max effort"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "AutomationBench"
score = 26.0
metric = "success rate"
variant = "max effort"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "ARC-AGI-1"
score = 97.5
metric = "accuracy"
variant = "max effort"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "ARC-AGI-2"
score = 90.4
metric = "accuracy"
variant = "max effort"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "ARC-AGI-3"
score = 30.2
metric = "RHAE"
variant = "high effort"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
[[benchmarks]]
name = "HealthBench Professional"
score = 59.8
metric = "score"
variant = "max effort"
source = "https://www.anthropic.com/claude-opus-5-system-card"
date = "2026-07-24"
@@ -0,0 +1,40 @@
# Source: https://huggingface.co/arcee-ai/Trinity-Large-Preview
name = "Trinity Large Preview"
description = "Lightly post-trained 398B MoE chat model for creative work, long-context prompts, and tool-using agents"
family = "trinity"
release_date = "2026-01-27"
last_updated = "2026-05-28"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
license = "OpenMDW-1.1"
[limit]
context = 524_288
output = 262_144
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/arcee-ai/Trinity-Large-Preview"
format = "safetensors"
[[links]]
label = "Model card"
url = "https://huggingface.co/arcee-ai/Trinity-Large-Preview"
type = "model_card"
[[links]]
label = "Announcement"
url = "https://www.arcee.ai/blog/trinity-large"
type = "announcement"
[[links]]
label = "License"
url = "https://huggingface.co/arcee-ai/Trinity-Large-Preview/blob/main/LICENSE"
type = "license"
@@ -0,0 +1,40 @@
# Source: https://huggingface.co/arcee-ai/Trinity-Large-Thinking
name = "Trinity Large Thinking"
description = "Reasoning-optimized 398B MoE agent model with extended thinking for long-horizon and multi-turn tool use"
family = "trinity"
release_date = "2026-04-01"
last_updated = "2026-05-28"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
license = "OpenMDW-1.1"
[limit]
context = 524_288
output = 262_144
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/arcee-ai/Trinity-Large-Thinking"
format = "safetensors"
[[links]]
label = "Model card"
url = "https://huggingface.co/arcee-ai/Trinity-Large-Thinking"
type = "model_card"
[[links]]
label = "Announcement"
url = "https://www.arcee.ai/blog/trinity-large-thinking"
type = "announcement"
[[links]]
label = "License"
url = "https://huggingface.co/arcee-ai/Trinity-Large-Thinking/blob/main/LICENSE"
type = "license"
+40
View File
@@ -0,0 +1,40 @@
# Source: https://huggingface.co/arcee-ai/Trinity-Mini
name = "Trinity Mini"
description = "Reasoning-tuned 26B MoE model with 3B active parameters for agents, tools, and multi-step workloads"
family = "trinity"
release_date = "2025-12-01"
last_updated = "2026-05-28"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
license = "OpenMDW-1.1"
[limit]
context = 131_072
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/arcee-ai/Trinity-Mini"
format = "safetensors"
[[links]]
label = "Model card"
url = "https://huggingface.co/arcee-ai/Trinity-Mini"
type = "model_card"
[[links]]
label = "Announcement"
url = "https://www.arcee.ai/blog/the-trinity-manifesto"
type = "announcement"
[[links]]
label = "License"
url = "https://huggingface.co/arcee-ai/Trinity-Mini/blob/main/LICENSE"
type = "license"
+40
View File
@@ -0,0 +1,40 @@
# Source: https://huggingface.co/arcee-ai/Trinity-Nano-Preview
name = "Trinity Nano Preview"
description = "Experimental chat-tuned 6B MoE model with 1B active parameters for low-resource chat and instruction following"
family = "trinity"
release_date = "2025-12-01"
last_updated = "2026-05-28"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
license = "OpenMDW-1.1"
[limit]
context = 131_072
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/arcee-ai/Trinity-Nano-Preview"
format = "safetensors"
[[links]]
label = "Model card"
url = "https://huggingface.co/arcee-ai/Trinity-Nano-Preview"
type = "model_card"
[[links]]
label = "Announcement"
url = "https://www.arcee.ai/blog/the-trinity-manifesto"
type = "announcement"
[[links]]
label = "License"
url = "https://huggingface.co/arcee-ai/Trinity-Nano-Preview/blob/main/LICENSE"
type = "license"
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 1.6 Flash"
description = "Low-latency ByteDance Seed model for high-throughput chat, extraction, and lightweight tool use"
family = "seed"
release_date = "2025-08-28"
last_updated = "2025-08-28"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 32_000
[modalities]
input = ["text"]
output = ["text"]
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 1.6 Vision"
description = "ByteDance Seed multimodal model for image understanding, visual reasoning, and tool-assisted tasks"
family = "seed"
release_date = "2025-08-15"
last_updated = "2025-08-15"
attachment = true
reasoning = false
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 32_000
[modalities]
input = ["text", "image"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 1.6"
description = "ByteDance Seed model for long-context reasoning, instruction following, and tool-assisted tasks"
family = "seed"
release_date = "2025-10-15"
last_updated = "2025-10-15"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 64_000
[modalities]
input = ["text"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 1.8"
description = "ByteDance Seed model for multimodal reasoning, long-context analysis, and agent workflows"
family = "seed"
release_date = "2025-12-28"
last_updated = "2025-12-28"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 64_000
[modalities]
input = ["text"]
output = ["text"]
+23
View File
@@ -0,0 +1,23 @@
# Sources (accessed 2026-08-11):
# - https://seed.bytedance.com/en/blog/seed-2-0-official-launch
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 2.0 Code"
description = "ByteDance Seed coding model for multimodal software engineering and long-running agents"
family = "seed"
release_date = "2026-02-14"
last_updated = "2026-02-14"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 262_144
output = 131_072
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 2.0 Lite"
description = "Cost-efficient ByteDance Seed 2.0 model for production chat, analysis, and structured generation"
family = "seed"
release_date = "2026-02-14"
last_updated = "2026-02-14"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 32_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 2.0 Mini"
description = "Lightweight ByteDance Seed 2.0 model for low-latency multimodal reasoning and high-volume tasks"
family = "seed"
release_date = "2026-02-14"
last_updated = "2026-02-14"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 32_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 2.0 Pro"
description = "Flagship ByteDance Seed 2.0 model for complex multimodal reasoning and long-horizon agent workflows"
family = "seed"
release_date = "2026-02-14"
last_updated = "2026-02-14"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 128_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 2.1 Pro"
description = "Flagship ByteDance Seed 2.1 model for complex multimodal reasoning, coding, and agents"
family = "seed"
release_date = "2026-06-23"
last_updated = "2026-06-23"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 256_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed 2.1 Turbo"
description = "Faster ByteDance Seed 2.1 model for multimodal reasoning and latency-sensitive agent workflows"
family = "seed"
release_date = "2026-06-23"
last_updated = "2026-06-23"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 256_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed Character"
description = "ByteDance Seed model optimized for character-driven dialogue and consistent conversational behavior"
family = "seed"
release_date = "2026-06-23"
last_updated = "2026-06-23"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 256_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+21
View File
@@ -0,0 +1,21 @@
# Sources (accessed 2026-08-14):
# - https://seed.bytedance.com/en/seed2
# - https://www.volcengine.com/docs/82379/1330310
name = "Seed Evolving"
description = "Rolling ByteDance Seed model for rapidly updated reasoning, coding, and agent capabilities"
family = "seed"
release_date = "2026-06-23"
last_updated = "2026-06-23"
attachment = true
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 256_000
output = 256_000
[modalities]
input = ["text", "image", "video"]
output = ["text"]
+16
View File
@@ -0,0 +1,16 @@
name = "DeepSeek OCR 2"
description = "High-accuracy OCR model for extracting text from documents, screenshots, receipts, and natural scenes"
release_date = "2026-01-27"
last_updated = "2026-01-27"
attachment = true
reasoning = false
tool_call = false
open_weights = true
[limit]
context = 8_192
output = 8_192
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,22 @@
name = "DeepSeek-R1-Distill-Qwen-32B"
description = "R1 reasoning distilled into Qwen 2.5 32B for efficient open-weight step-by-step problem solving"
family = "deepseek-thinking"
release_date = "2025-01-20"
last_updated = "2025-01-20"
attachment = false
reasoning = true
temperature = true
tool_call = false
open_weights = true
[limit]
context = 131_072
output = 32_768
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/deepseek-ai/DeepSeek-R1-Distill-Qwen-32B"
+23
View File
@@ -0,0 +1,23 @@
name = "DeepSeek V3 0324"
description = "March 2025 checkpoint of DeepSeek-V3 with improved reasoning and coding"
family = "deepseek"
release_date = "2025-03-24"
last_updated = "2025-03-24"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
[limit]
context = 163_840
output = 163_840
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Model weights"
url = "https://huggingface.co/deepseek-ai/DeepSeek-V3-0324"
format = "safetensors"
+23
View File
@@ -0,0 +1,23 @@
name = "DeepSeek-V3.1"
description = "Hybrid-reasoning DeepSeek model with thinking and non-thinking modes"
family = "deepseek"
release_date = "2025-08-21"
last_updated = "2025-08-21"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
license = "MIT License"
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/deepseek-ai/DeepSeek-V3.1"
+27
View File
@@ -0,0 +1,27 @@
# https://api-docs.deepseek.com/news/news251201
# https://huggingface.co/deepseek-ai/DeepSeek-V3.2
name = "DeepSeek V3.2"
description = "Hybrid-reasoning DeepSeek model with thinking and non-thinking modes, sparse attention, and tool-use"
family = "deepseek"
release_date = "2025-12-01"
last_updated = "2025-12-01"
attachment = false
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2024-07"
open_weights = true
license = "MIT License"
[limit]
context = 128_000
output = 64_000
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/deepseek-ai/DeepSeek-V3.2"
+23
View File
@@ -0,0 +1,23 @@
name = "DeepSeek-V3"
description = "Open DeepSeek MoE chat model for coding, math, and general reasoning"
family = "deepseek"
release_date = "2024-12-26"
last_updated = "2024-12-26"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
license = "DeepSeek Model License"
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/deepseek-ai/DeepSeek-V3"
+105
View File
@@ -0,0 +1,105 @@
name = "DeepSeek V4 Flash 0731"
description = "Official DeepSeek V4 Flash release with enhanced agentic capabilities and integrated DSpark speculative decoding"
family = "deepseek-flash"
release_date = "2026-07-31"
last_updated = "2026-07-31"
attachment = false
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2025-05"
open_weights = true
license = "MIT"
[limit]
context = 1_000_000
output = 384_000
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-0731"
[[benchmarks]]
name = "Terminal-Bench"
score = 82.7
metric = "pass@1"
variant = "max"
version = "2.1"
source = "https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-0731"
[[benchmarks]]
name = "NL2Repo"
score = 54.2
metric = "resolve rate"
variant = "max effort"
harness = "DeepSeek Harness minimal mode"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "CyberGym"
score = 76.7
metric = "score"
variant = "max effort"
harness = "DeepSeek Harness minimal mode"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "DeepSWE"
score = 54.4
metric = "resolve rate"
variant = "max effort"
harness = "DeepSeek Harness minimal mode"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "Toolathlon-Verified"
score = 70.3
metric = "score"
variant = "max effort"
harness = "DeepSeek Harness minimal mode"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "Agents' Last Exam"
score = 25.2
metric = "score"
variant = "max effort"
harness = "DeepSeek Harness minimal mode"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "AutomationBench"
score = 25.1
metric = "success rate"
variant = "max effort"
dataset = "public"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "DSBench-FullStack"
score = 68.7
metric = "score"
variant = "max effort"
dataset = "internal"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
[[benchmarks]]
name = "DSBench-Hard"
score = 59.6
metric = "score"
variant = "max effort"
dataset = "internal"
source = "https://api-docs.deepseek.com/updates/"
date = "2026-07-31"
+19
View File
@@ -0,0 +1,19 @@
name = "DeepSeek V4 Pro 0813"
description = "DeepSeek V4 Pro snapshot with million-token context and support for thinking and non-thinking modes"
family = "deepseek-thinking"
release_date = "2026-08-12"
last_updated = "2026-08-12"
attachment = false
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 1_000_000
output = 384_000
[modalities]
input = ["text"]
output = ["text"]
+73 -1
View File
@@ -17,4 +17,76 @@ output = 65_536
[modalities]
input = ["text", "image", "video", "audio", "pdf"]
output = ["text"]
output = ["text"]
[[benchmarks]]
name = "SWE-Bench Pro"
score = 54.2
metric = "resolve rate"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "Terminal-Bench"
score = 54.0
metric = "accuracy"
harness = "Terminus 2"
version = "2.1"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "MLE-Bench"
score = 39.2
metric = "average position score"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "GDPval-AA"
score = 1140
metric = "Elo"
version = "v2"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "OSWorld-Verified"
score = 74.0
metric = "success rate"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "CharXiv Reasoning"
score = 74.5
metric = "accuracy"
variant = "no tools"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "CharXiv Reasoning"
score = 76.5
metric = "accuracy"
variant = "with tools"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "GDM-MRCR"
score = 72.2
metric = "accuracy"
variant = "128k average, 8-needle"
version = "v2"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
[[benchmarks]]
name = "GDM-MRCR"
score = 21.3
metric = "accuracy"
variant = "1M pointwise, 8-needle"
version = "v2"
source = "https://deepmind.google/models/model-cards/gemini-3-5-flash-lite/"
date = "2026-07-21"
+84 -1
View File
@@ -17,4 +17,87 @@ output = 65_536
[modalities]
input = ["text", "image", "video", "audio", "pdf"]
output = ["text"]
output = ["text"]
[[benchmarks]]
name = "SWE-Bench Pro"
score = 58.7
metric = "resolve rate"
harness = "Antigravity"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "DeepSWE"
score = 49.0
metric = "resolve rate"
variant = "high reasoning"
version = "1.1"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "Terminal-Bench"
score = 78.0
metric = "accuracy"
harness = "Terminus 2"
version = "2.1"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "MLE-Bench"
score = 63.9
metric = "average position score"
dataset = "Partial 30"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "GDPval-AA"
score = 1421
metric = "Elo"
version = "v2"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "OSWorld-Verified"
score = 83.0
metric = "success rate"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "CharXiv Reasoning"
score = 85.2
metric = "accuracy"
variant = "no tools"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "CharXiv Reasoning"
score = 89.4
metric = "accuracy"
variant = "with tools"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "GDM-MRCR"
score = 91.8
metric = "accuracy"
variant = "128k average, 8-needle"
version = "v2"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
[[benchmarks]]
name = "GDM-MRCR"
score = 54.0
metric = "accuracy"
variant = "1M pointwise, 8-needle"
version = "v2"
source = "https://deepmind.google/models/evals-methodology/gemini-3-6-flash/"
date = "2026-07-21"
+68
View File
@@ -0,0 +1,68 @@
name = "Gemini 3.7 Flash"
description = "High-efficiency Gemini model for agentic workflows, coding, and multimodal reasoning"
family = "gemini-flash"
release_date = "2026-08-13"
last_updated = "2026-08-13"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2026-03"
open_weights = false
[limit]
context = 1_048_576
output = 65_536
[modalities]
input = ["text", "image", "video", "audio", "pdf"]
output = ["text"]
[[benchmarks]]
name = "FrontierCode"
score = 43.6
metric = "score"
version = "1.1 Main"
source = "https://deepmind.google/models/model-cards/gemini-3-7-flash/"
date = "2026-08-13"
[[benchmarks]]
name = "DeepSWE"
score = 65.3
metric = "resolve rate"
version = "1.1"
source = "https://deepmind.google/models/model-cards/gemini-3-7-flash/"
date = "2026-08-13"
[[benchmarks]]
name = "Terminal-Bench"
score = 85.8
metric = "accuracy"
version = "2.1"
source = "https://deepmind.google/models/model-cards/gemini-3-7-flash/"
date = "2026-08-13"
[[benchmarks]]
name = "AutomationBench"
score = 30.4
metric = "accuracy"
dataset = "private set"
source = "https://deepmind.google/models/model-cards/gemini-3-7-flash/"
date = "2026-08-13"
[[benchmarks]]
name = "GDP.pdf"
score = 34.0
metric = "accuracy"
source = "https://deepmind.google/models/model-cards/gemini-3-7-flash/"
date = "2026-08-13"
[[benchmarks]]
name = "GDM-MRCR"
score = 97.0
metric = "accuracy"
variant = "128k average, 8-needle"
version = "v2"
source = "https://deepmind.google/models/model-cards/gemini-3-7-flash/"
date = "2026-08-13"
+23
View File
@@ -0,0 +1,23 @@
name = "Granite-4.0-H-Micro"
description = "Compact open-weight hybrid Granite model for lightweight enterprise chat and tool calling"
family = "granite"
release_date = "2025-10-02"
last_updated = "2025-10-02"
attachment = false
reasoning = false
temperature = true
tool_call = true
structured_output = true
open_weights = true
[limit]
context = 131_072
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/ibm-granite/granite-4.0-h-micro"
+23
View File
@@ -0,0 +1,23 @@
name = "Granite-4.0-H-Small"
description = "Open-weight hybrid model for enterprise chat, coding, retrieval-augmented generation, and tool-calling workloads"
family = "granite"
release_date = "2025-10-02"
last_updated = "2025-10-02"
attachment = false
reasoning = false
temperature = true
tool_call = true
structured_output = true
open_weights = true
[limit]
context = 131_072
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/ibm-granite/granite-4.0-h-small"
+23
View File
@@ -0,0 +1,23 @@
name = "Llama-3.1-8B-Instruct"
description = "Compact open Llama model for lightweight chat, drafting, and self-hosting"
family = "llama"
release_date = "2024-07-23"
last_updated = "2024-07-23"
attachment = false
reasoning = false
temperature = true
tool_call = true
knowledge = "2023-12"
open_weights = true
[limit]
context = 128_000
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct"
@@ -0,0 +1,23 @@
name = "Llama-3.2-11B-Vision-Instruct"
description = "Open multimodal Llama model for image understanding, captioning, and visual QA"
family = "llama"
release_date = "2024-09-25"
last_updated = "2024-09-25"
attachment = true
reasoning = false
temperature = true
tool_call = true
knowledge = "2023-12"
open_weights = true
[limit]
context = 128_000
output = 4_096
[modalities]
input = ["text", "image"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/meta-llama/Llama-3.2-11B-Vision-Instruct"
+24
View File
@@ -0,0 +1,24 @@
name = "Llama-3.2-1B"
description = "Compact open Llama base model for lightweight and on-device use"
family = "llama"
release_date = "2024-09-25"
last_updated = "2024-09-25"
attachment = false
reasoning = false
temperature = true
tool_call = false
knowledge = "2023-12"
open_weights = true
license = "Llama 3.2 Community License"
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/meta-llama/Llama-3.2-1B"
+24
View File
@@ -0,0 +1,24 @@
name = "Llama-3.2-3B"
description = "Small open Llama base model for lightweight text generation and self-hosting"
family = "llama"
release_date = "2024-09-25"
last_updated = "2024-09-25"
attachment = false
reasoning = false
temperature = true
tool_call = false
knowledge = "2023-12"
open_weights = true
license = "Llama 3.2 Community License"
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/meta-llama/Llama-3.2-3B"
+23
View File
@@ -0,0 +1,23 @@
name = "Llama-Guard-3-8B"
description = "Llama 3.1-based safety classifier for moderating prompts and model responses"
family = "llama"
release_date = "2024-07-23"
last_updated = "2024-07-23"
attachment = false
reasoning = false
temperature = true
tool_call = false
knowledge = "2023-12"
open_weights = true
[limit]
context = 128_000
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/meta-llama/Llama-Guard-3-8B"
+111
View File
@@ -0,0 +1,111 @@
# Sources:
# https://research.meta.ai/blog/introducing-muse-glimmer-open-agentic-model
# https://huggingface.co/meta-models/Muse-Glimmer-30B
# https://developer.meta.com/ai/models/muse-glimmer/
name = "Muse Glimmer 30B"
description = "Muse Glimmer is a 30-billion-parameter open-weight multimodal model from Meta Superintelligence Labs, distilled from Muse Spark for always-on local agents, tool use, coding, and image understanding."
family = "muse"
release_date = "2026-08-10"
last_updated = "2026-08-10"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
knowledge = "2026-01-04"
open_weights = true
license = "Apache 2.0"
[limit]
context = 131_072
output = 131_072
[modalities]
input = ["text", "image"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
[[links]]
label = "Announcement"
url = "https://research.meta.ai/blog/introducing-muse-glimmer-open-agentic-model"
type = "announcement"
[[links]]
label = "Model card"
url = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
type = "model_card"
[[links]]
label = "Developer docs"
url = "https://developer.meta.com/ai/models/muse-glimmer/"
type = "docs"
[[benchmarks]]
name = "MCP Atlas"
score = 75.5
metric = "success rate"
variant = "public"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "DeepSearch QA"
score = 74.6
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "SWE-Bench Pro"
score = 51.2
metric = "resolve rate"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "SWE-Bench Verified"
score = 76.0
metric = "resolve rate"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "Terminal-Bench"
score = 51.7
metric = "success rate"
version = "2.1"
variant = "with terminus2"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "OSWorld-Verified"
score = 65.9
metric = "success rate"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "AIME 2026"
score = 94.7
metric = "accuracy"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "GPQA Diamond"
score = 83.5
metric = "accuracy"
variant = "AA"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
[[benchmarks]]
name = "CharXiv Reasoning"
score = 78.8
metric = "accuracy"
source = "https://huggingface.co/meta-models/Muse-Glimmer-30B"
date = "2026-08-10"
+23
View File
@@ -0,0 +1,23 @@
# Sources:
# https://research.meta.ai/blog/introducing-muse-code-and-muse-spark-1-2
# https://dev.meta.ai/docs/getting-started/models
name = "Muse Spark 1.2"
description = "Muse Spark 1.2 is a coding-focused update to Muse Spark 1.1 with improvements in code generation, complex debugging, codebase understanding, and end-to-end developer workflows."
family = "muse"
release_date = "2026-08-05"
last_updated = "2026-08-05"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 1_048_576
output = 131_072
[modalities]
input = ["text", "image", "video", "pdf", "audio"]
output = ["text"]
+23
View File
@@ -0,0 +1,23 @@
name = "MAI-Code-1.1-Flash"
description = "Microsoft coding model with native vision support, optimized for fast and efficient software development"
family = "mai"
release_date = "2026-08-11"
last_updated = "2026-08-11"
attachment = true
reasoning = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 256_000
output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
[[links]]
label = "Announcement"
url = "https://microsoft.ai/news/mai-code-1-1-flash-br-better-faster-at-a-quarter-of-the-cost/"
type = "announcement"
+30
View File
@@ -0,0 +1,30 @@
name = "Phi-4-mini"
description = "Compact Microsoft instruction model tuned for efficient coding assistance, reasoning, and low-latency agent tasks"
family = "phi"
release_date = "2024-12-11"
last_updated = "2024-12-11"
attachment = false
reasoning = false
temperature = true
tool_call = true
knowledge = "2023-10"
open_weights = true
[limit]
context = 128_000
output = 4_096
[modalities]
input = ["text"]
output = ["text"]
[[links]]
label = "Weights"
url = "https://huggingface.co/microsoft/Phi-4-mini-instruct"
type = "weights"
[[benchmarks]]
name = "MMLU"
score = 67.3
metric = "accuracy"
source = "https://huggingface.co/microsoft/Phi-4-mini-instruct/resolve/main/README.md"
+19
View File
@@ -0,0 +1,19 @@
# Source: https://api.ofox.ai/v2/models/catalog?include=provider_price&limit=500
name = "MiniMax-M2 Her"
description = "MiniMax M2 variant tuned for conversational and character-driven agent interactions"
family = "minimax"
release_date = "2026-01-23"
last_updated = "2026-01-23"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = false
[limit]
context = 200_000
output = 131_000
[modalities]
input = ["text"]
output = ["text"]
+23
View File
@@ -0,0 +1,23 @@
name = "Codestral-22B-v0.1"
description = "Open Mistral code model for fill-in-the-middle and 80+ programming languages"
family = "codestral"
release_date = "2024-05-29"
last_updated = "2024-05-29"
attachment = false
reasoning = false
temperature = true
tool_call = false
open_weights = true
license = "Mistral AI Non-Production License"
[limit]
context = 32_768
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/mistralai/Codestral-22B-v0.1"
+23
View File
@@ -0,0 +1,23 @@
name = "Magistral Small"
description = "Open Mistral reasoning model for transparent step-by-step problem solving"
family = "magistral"
release_date = "2025-06-10"
last_updated = "2025-06-10"
attachment = false
reasoning = true
temperature = true
tool_call = true
open_weights = true
license = "Apache 2.0"
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/mistralai/Magistral-Small-2506"
@@ -0,0 +1,23 @@
name = "Ministral 8B Instruct"
description = "Efficient open Mistral edge model for on-device chat and function calling"
family = "ministral"
release_date = "2024-10-16"
last_updated = "2024-10-16"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
license = "Mistral Research License"
[limit]
context = 131_072
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/mistralai/Ministral-8B-Instruct-2410"
+8
View File
@@ -27,3 +27,11 @@ name = "SWE-Bench Verified"
score = 77.6
metric = "resolved"
source = "https://huggingface.co/mistralai/Mistral-Medium-3.5-128B"
[[benchmarks]]
name = "τ³-Telecom"
score = 91.4
metric = "accuracy"
variant = "public preview"
source = "https://mistral.ai/news/vibe-remote-agents-mistral-medium-3-5/"
date = "2026-05-22"
@@ -0,0 +1,24 @@
name = "Mistral Small 3.1 24B"
description = "Efficient multimodal model for instruction following, coding, reasoning, and function calling"
family = "mistral-small"
release_date = "2025-03-17"
last_updated = "2025-03-17"
attachment = true
reasoning = false
temperature = true
tool_call = true
structured_output = true
knowledge = "2024-06"
open_weights = true
[limit]
context = 128_000
output = 16_384
[modalities]
input = ["text", "image"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/mistralai/Mistral-Small-3.1-24B-Instruct-2503"
+116
View File
@@ -17,3 +17,119 @@ output = 131_072
[modalities]
input = ["text", "image", "video"]
output = ["text"]
[[benchmarks]]
name = "DeepSWE"
score = 67.5
metric = "resolve rate"
variant = "max effort"
harness = "Kimi Code"
version = "1.1"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "Terminal-Bench"
score = 88.3
metric = "accuracy"
variant = "max effort"
harness = "Kimi Code"
version = "2.1"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "FrontierSWE"
score = 81.2
metric = "dominance score"
variant = "max effort"
harness = "Kimi Code"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "Program Bench"
score = 77.8
metric = "score"
variant = "max effort"
harness = "Kimi Code"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "SWE Marathon"
score = 42.0
metric = "resolve rate"
variant = "max effort"
harness = "Claude Code"
version = "1.1"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "GDPval-AA"
score = 1668
metric = "Elo"
variant = "max effort"
version = "v2"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "AA-Briefcase"
score = 1548
metric = "Elo"
variant = "max effort"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "AutomationBench"
score = 30.8
metric = "success rate"
variant = "max effort"
dataset = "600-task public subset"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "JobBench"
score = 52.9
metric = "score"
variant = "max effort"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "SpreadsheetBench"
score = 34.8
metric = "score"
variant = "max effort"
harness = "Claude Code"
version = "2"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "BrowseComp"
score = 91.2
metric = "accuracy"
variant = "max effort, context compaction"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "CharXiv Reasoning"
score = 91.3
metric = "accuracy"
variant = "max effort, with tools"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
[[benchmarks]]
name = "ZeroBench"
score = 41.0
metric = "pass@5"
variant = "max effort, with tools"
source = "https://www.kimi.com/blog/kimi-k3"
date = "2026-07-16"
+19
View File
@@ -0,0 +1,19 @@
name = "Nemotron 3.5 Lightning 30B A3B"
description = "Fast NVIDIA Nemotron MoE for reliable agentic tasks across enterprise workloads"
family = "nemotron"
release_date = "2026-08-11"
last_updated = "2026-08-11"
attachment = false
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = true
[limit]
context = 262_144
output = 262_144
[modalities]
input = ["text"]
output = ["text"]
@@ -1,25 +1,20 @@
name = "GPT-5.3-Codex"
name = "GPT-5.3 Codex Spark"
description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work"
family = "gpt-codex"
release_date = "2026-02-24"
last_updated = "2026-02-24"
family = "gpt-codex-spark"
release_date = "2026-02-05"
last_updated = "2026-02-05"
attachment = true
reasoning = true
reasoning_options = [{ type = "effort", values = ["none", "low", "medium", "high", "max"] }, { type = "budget_tokens" }]
temperature = false
knowledge = "2025-08-31"
tool_call = true
structured_output = true
open_weights = false
[cost]
input = 1.75
output = 14.00
cache_read = 0.175
[limit]
context = 400_000
output = 128_000
context = 128_000
input = 100_000
output = 32_000
[modalities]
input = ["text", "image", "pdf"]
+132
View File
@@ -19,3 +19,135 @@ output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
[[benchmarks]]
name = "SWE-Bench Pro"
score = 54.4
metric = "resolve rate"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Terminal-Bench"
score = 60.0
metric = "accuracy"
variant = "reasoning effort xhigh"
version = "2.0"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "MCP Atlas"
score = 57.7
metric = "score"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Toolathlon"
score = 42.9
metric = "score"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "τ²-Bench Telecom"
score = 93.4
metric = "accuracy"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "GPQA Diamond"
score = 88.0
metric = "accuracy"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 41.5
metric = "accuracy"
variant = "with tools"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 28.2
metric = "accuracy"
variant = "without tools"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OSWorld-Verified"
score = 72.1
metric = "success rate"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "MMMU Pro"
score = 78.0
metric = "accuracy"
variant = "with Python"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "MMMU Pro"
score = 76.6
metric = "accuracy"
variant = "without tools"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OmniDocBench"
score = 0.1263
metric = "overall edit distance"
variant = "reasoning effort none"
version = "1.5"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OpenAI MRCR"
score = 47.7
metric = "accuracy"
variant = "8-needle, 64K-128K"
version = "v2"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OpenAI MRCR"
score = 33.6
metric = "accuracy"
variant = "8-needle, 128K-256K"
version = "v2"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Graphwalks"
score = 76.3
metric = "accuracy"
variant = "BFS, 0-128K"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Graphwalks"
score = 71.5
metric = "accuracy"
variant = "parents, 0-128K"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
+132
View File
@@ -19,3 +19,135 @@ output = 128_000
[modalities]
input = ["text", "image"]
output = ["text"]
[[benchmarks]]
name = "SWE-Bench Pro"
score = 52.4
metric = "resolve rate"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Terminal-Bench"
score = 46.3
metric = "accuracy"
variant = "reasoning effort xhigh"
version = "2.0"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "MCP Atlas"
score = 56.1
metric = "score"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Toolathlon"
score = 35.5
metric = "score"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "τ²-Bench Telecom"
score = 92.5
metric = "accuracy"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "GPQA Diamond"
score = 82.8
metric = "accuracy"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 37.7
metric = "accuracy"
variant = "with tools"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 24.3
metric = "accuracy"
variant = "without tools"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OSWorld-Verified"
score = 39.0
metric = "success rate"
variant = "reasoning effort xhigh"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "MMMU Pro"
score = 69.5
metric = "accuracy"
variant = "with Python"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "MMMU Pro"
score = 66.1
metric = "accuracy"
variant = "without tools"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OmniDocBench"
score = 0.2419
metric = "overall edit distance"
variant = "reasoning effort none"
version = "1.5"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OpenAI MRCR"
score = 44.2
metric = "accuracy"
variant = "8-needle, 64K-128K"
version = "v2"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "OpenAI MRCR"
score = 33.1
metric = "accuracy"
variant = "8-needle, 128K-256K"
version = "v2"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Graphwalks"
score = 73.4
metric = "accuracy"
variant = "BFS, 0-128K"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
[[benchmarks]]
name = "Graphwalks"
score = 50.8
metric = "accuracy"
variant = "parents, 0-128K"
source = "https://openai.com/index/introducing-gpt-5-4-mini-and-nano/"
date = "2026-03-17"
+21
View File
@@ -0,0 +1,21 @@
name = "ALLaM-2-7b"
description = "ALLaM-2-7b instruction tuned model by SDAIA"
release_date = "2025-01-23"
last_updated = "2025-01-23"
attachment = false
reasoning = false
temperature = true
tool_call = false
open_weights = true
[limit]
context = 4096
output = 4096
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/ALLaM-AI/ALLaM-2.0-7B-Instruct"
+28
View File
@@ -0,0 +1,28 @@
name = "Apertus 70B"
description = "Fully open 70B multilingual LLM supporting 1800+ languages with 65K context. Trained on 15T tokens of compliant open data. Apache 2.0, EU AI Act compliant."
release_date = "2025-09-02"
last_updated = "2025-09-02"
knowledge = "2025-09"
attachment = false
reasoning = false
temperature = true
tool_call = true
open_weights = true
license = "Apache-2.0"
[limit]
context = 65_536
output = 8_192
[modalities]
input = ["text"]
output = ["text"]
[[weights]]
label = "Hugging Face"
url = "https://huggingface.co/swiss-ai/Apertus-70B-Instruct-2509"
[[links]]
label = "Paper"
url = "https://arxiv.org/abs/2509.14233"
type = "paper"
+24
View File
@@ -0,0 +1,24 @@
# xAI Grok 4.1 Fast (non-reasoning).
# Sources:
# - https://x.ai/news/grok-4-1-fast (release 2025-11-19; variants + $0.20/$0.50/$0.05 pricing)
# - https://docs.oracle.com/en-us/iaas/Content/generative-ai/xai-grok-4-1-fast.htm (2M context, text+image, tools, structured outputs, non-reasoning mode)
# - https://api.ofox.ai/v1/models/x-ai/grok-4.1-fast (canonical_slug grok-4-1-fast-non-reasoning; context 2M; max_completion 30k)
name = "Grok 4.1 Fast"
description = "xAI's fast agentic tool-calling model with a 2M context window; non-reasoning variant for low-latency responses"
family = "grok"
release_date = "2025-11-19"
last_updated = "2025-11-19"
attachment = true
reasoning = false
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 2_000_000
output = 30_000
[modalities]
input = ["text", "image"]
output = ["text"]
+8 -1
View File
@@ -1,5 +1,5 @@
name = "Grok 4.5"
description = "xAI's latest Grok for chat, coding, agentic tools, and lower hallucination risk"
description = "xAI's Grok model for chat, coding, agentic tools, and lower hallucination risk"
family = "grok"
release_date = "2026-07-08"
last_updated = "2026-07-08"
@@ -56,3 +56,10 @@ harness = "mini-swe-agent"
version = "1.1"
source = "https://x.ai/news/grok-4-5"
date = "2026-07-08"
[[benchmarks]]
name = "SWE Marathon"
score = 29.0
metric = "pass@1"
source = "https://x.ai/news/grok-4-5"
date = "2026-07-08"
+20
View File
@@ -0,0 +1,20 @@
name = "Grok 4.6"
description = "xAI's frontier model for long-running agents, coding, knowledge work, and visual projects"
family = "grok"
knowledge = "2026-02-01"
release_date = "2026-08-12"
last_updated = "2026-08-12"
attachment = true
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 500_000
output = 500_000
[modalities]
input = ["text", "image"]
output = ["text"]
+121
View File
@@ -44,3 +44,124 @@ score = 74.4
metric = "dominance"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 40.5
metric = "accuracy"
dataset = "text-only subset"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "Humanity's Last Exam"
score = 54.7
metric = "accuracy"
variant = "with tools"
dataset = "text-only subset"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "CritPt"
score = 20.9
metric = "accuracy"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "AIME"
score = 99.2
metric = "accuracy"
version = "2026"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "HMMT"
score = 94.4
metric = "accuracy"
version = "November 2025"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "HMMT"
score = 92.5
metric = "accuracy"
version = "February 2026"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "IMOAnswerBench"
score = 91.0
metric = "accuracy"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "GPQA Diamond"
score = 91.2
metric = "accuracy"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "NL2Repo"
score = 48.9
metric = "resolve rate"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "DeepSWE"
score = 46.2
metric = "resolve rate"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "Program Bench"
score = 63.7
metric = "score"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "Terminal-Bench"
score = 81.0
metric = "success rate"
harness = "Terminus 2"
version = "2.1"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "PostTrainBench"
score = 34.3
metric = "score"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "SWE Marathon"
score = 13.0
metric = "resolve rate"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "MCP Atlas"
score = 76.8
metric = "score"
dataset = "public subset"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
[[benchmarks]]
name = "Tool-Decathlon"
score = 48.2
metric = "score"
source = "https://z.ai/blog/glm-5.2"
date = "2026-06-16"
+19
View File
@@ -0,0 +1,19 @@
name = "GLM-5.3"
description = "Flagship GLM model for long-horizon coding, agents, and complex project delivery"
family = "glm"
release_date = "2026-08-14"
last_updated = "2026-08-14"
attachment = false
reasoning = true
temperature = true
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 1_000_000
output = 131_072
[modalities]
input = ["text"]
output = ["text"]
+3 -1
View File
@@ -28,6 +28,7 @@
"huggingface:sync": "bun ./packages/core/script/sync-models.ts huggingface",
"kilo:sync": "bun ./packages/core/script/sync-models.ts kilo",
"llmgateway:sync": "bun ./packages/core/script/sync-models.ts llmgateway",
"requesty:sync": "bun ./packages/core/script/sync-models.ts requesty",
"merge-gateway:sync": "bun ./packages/core/script/sync-models.ts merge-gateway",
"nano-gpt:sync": "bun ./packages/core/script/sync-models.ts nano-gpt",
"venice:sync": "bun ./packages/core/script/sync-models.ts venice",
@@ -37,7 +38,8 @@
"digitalocean:sync": "bun ./packages/core/script/sync-models.ts digitalocean",
"ambient:sync": "bun ./packages/core/script/sync-models.ts ambient",
"models:sync": "bun ./packages/core/script/sync-models.ts",
"sync:models": "bun ./packages/core/script/sync-models.ts"
"sync:models": "bun ./packages/core/script/sync-models.ts",
"sync:auto-merge": "bun ./packages/core/script/check-sync-auto-merge.ts"
},
"dependencies": {
"@cloudflare/workers-types": "^4.20260424.1",
@@ -0,0 +1,31 @@
import { appendFile } from "node:fs/promises";
import { classifyAutoMerge, parseNameStatus } from "../src/sync/auto-merge.js";
const base = process.argv[2] ?? "HEAD^";
const head = process.argv[3] ?? "HEAD";
const diff = Bun.spawnSync(["git", "diff", "--name-status", "--no-renames", base, head], {
stdout: "pipe",
stderr: "inherit",
});
if (diff.exitCode !== 0) process.exit(diff.exitCode ?? 1);
const loadPrevious = async (path: string) => {
const file = Bun.spawnSync(["git", "show", `${base}:${path}`], {
stdout: "pipe",
stderr: "inherit",
});
if (file.exitCode !== 0) throw new Error(`Failed to read ${path} at ${base}`);
return file.stdout.toString();
};
const decision = await classifyAutoMerge(parseNameStatus(diff.stdout.toString()), undefined, loadPrevious);
const summary = decision.safe
? `Safe to auto-merge: ${decision.created} created, ${decision.updated} updated, ${decision.deleted} deleted.`
: `Manual review required: ${decision.reasons.join("; ")}.`;
console.log(summary);
if (process.env.GITHUB_OUTPUT) {
await appendFile(process.env.GITHUB_OUTPUT, `safe=${decision.safe}\nsummary=${summary}\n`);
}
+2
View File
@@ -30,6 +30,7 @@ export const ModelFamilyValues = [
"claude-sonnet",
"claude-opus",
"claude-fable",
"claude-mythos",
// Gemini style
"gemini",
@@ -58,6 +59,7 @@ export const ModelFamilyValues = [
"qwen3.6",
"qwen3.7-plus",
"qwen3.7-max",
"qwen3.8-max",
"qwen-free",
// DeepReinforce
+10
View File
@@ -89,6 +89,11 @@ async function generateProviders(
}
const modelsPath = path.join(directory, providerID, "models");
if (!existsSync(modelsPath)) {
throw new Error(`Provider "${providerID}" has no models`, {
cause: { providerPath },
});
}
for await (const modelPath of new Bun.Glob("**/*.toml").scan({
cwd: modelsPath,
absolute: true,
@@ -124,6 +129,11 @@ async function generateProviders(
}
provider.data.models[modelID] = normalizeModelCost(model.data);
}
if (Object.keys(provider.data.models).length === 0) {
throw new Error(`Provider "${providerID}" has no models`, {
cause: { providerPath },
});
}
result[providerID] = provider.data;
}
+5 -1
View File
@@ -397,6 +397,7 @@ export const Provider = z
const isOpenAI = data.npm === "@ai-sdk/openai";
const isOpenAIcompatible = data.npm === "@ai-sdk/openai-compatible";
const isOpenrouter = data.npm === "@openrouter/ai-sdk-provider";
const isMergeGateway = data.npm === "merge-gateway-ai-sdk-provider";
const isAnthropic = data.npm === "@ai-sdk/anthropic";
const isKiro = data.npm === "kiro-acp-ai-provider";
const hasApi = data.api !== undefined;
@@ -406,6 +407,8 @@ export const Provider = z
(isOpenAIcompatible && hasApi) ||
// openrouter: must have api
(isOpenrouter && hasApi) ||
// Merge Gateway: native provider with an OpenAI-compatible fallback
(isMergeGateway && hasApi) ||
// anthropic: api optional (always allowed)
isAnthropic ||
// openai: api optional (always allowed)
@@ -416,6 +419,7 @@ export const Provider = z
(!isOpenAI &&
!isOpenAIcompatible &&
!isOpenrouter &&
!isMergeGateway &&
!isAnthropic &&
!isKiro &&
!hasApi)
@@ -423,7 +427,7 @@ export const Provider = z
},
{
message:
"'api' is required for openai-compatible and openrouter, optional for anthropic, openai, and kiro, forbidden otherwise",
"'api' is required for openai-compatible, openrouter, and Merge Gateway; optional for anthropic, openai, and kiro; forbidden otherwise",
path: ["api"],
},
);
+110
View File
@@ -0,0 +1,110 @@
import { readFile } from "node:fs/promises";
import { isDeepStrictEqual } from "node:util";
export const MAX_CREATED_MODELS = 10;
export const MAX_DELETED_MODELS = 10;
export const MAX_MODEL_CHURN = 15;
const REVIEWED_REASONING_PROVIDERS = new Set([
"empiriolabs",
"kilo",
"llmgateway",
"merge-gateway",
"nano-gpt",
"openrouter",
"venice",
]);
export interface CatalogChange {
status: "created" | "updated" | "deleted";
path: string;
}
export interface AutoMergeDecision {
safe: boolean;
created: number;
updated: number;
deleted: number;
reasons: string[];
}
function isModel(path: string) {
return path.endsWith(".toml") && (path.startsWith("models/") || path.includes("/models/"));
}
function isProviderModel(path: string) {
return path.endsWith(".toml") && path.startsWith("providers/") && path.includes("/models/");
}
export async function classifyAutoMerge(
changes: CatalogChange[],
load = (path: string) => readFile(path, "utf8"),
loadPrevious = load,
): Promise<AutoMergeDecision> {
const models = changes.filter((change) => isModel(change.path));
const created = models.filter((change) => change.status === "created").length;
const updated = models.filter((change) => change.status === "updated").length;
const deleted = models.filter((change) => change.status === "deleted").length;
const reasons: string[] = [];
if (created > MAX_CREATED_MODELS) reasons.push(`${created} models created (limit ${MAX_CREATED_MODELS})`);
if (deleted > MAX_DELETED_MODELS) reasons.push(`${deleted} models deleted (limit ${MAX_DELETED_MODELS})`);
if (created + deleted > MAX_MODEL_CHURN) {
reasons.push(`${created + deleted} models created or deleted (limit ${MAX_MODEL_CHURN})`);
}
const reasoningMetadata = async (path: string, loader: typeof load) => {
const model = Bun.TOML.parse(await loader(path)) as Record<string, unknown>;
let reasoning = model.reasoning;
if (reasoning === undefined && typeof model.base_model === "string") {
const base = Bun.TOML.parse(await loader(`models/${model.base_model}.toml`)) as Record<string, unknown>;
reasoning = base.reasoning;
}
return {
reasoning,
reasoning_options: model.reasoning_options,
interleaved: model.interleaved,
base_model: model.base_model,
};
};
for (const change of models) {
if (change.status === "deleted" || !isProviderModel(change.path)) continue;
const current = await reasoningMetadata(change.path, load);
const previous = change.status === "created" ? undefined : await reasoningMetadata(change.path, loadPrevious);
const reasoningChanged = !current || !previous || !isDeepStrictEqual(current, previous);
if (!reasoningChanged) continue;
const reasoning = current?.reasoning === true || previous?.reasoning === true;
if (reasoning) {
if (current?.reasoning === true && current.reasoning_options === undefined) {
reasons.push(`${change.path} is a reasoning model without explicit reasoning_options`);
} else if (!REVIEWED_REASONING_PROVIDERS.has(change.path.split("/")[1]!)) {
reasons.push(`${change.path} is a reasoning model that requires manual review`);
}
}
}
return { safe: reasons.length === 0, created, updated, deleted, reasons };
}
export function parseNameStatus(output: string): CatalogChange[] {
return output.trim().split("\n").filter(Boolean).flatMap((line) => {
const [code, ...paths] = line.split("\t");
const path = paths.at(-1);
if (!code || !path) throw new Error(`Invalid git diff entry: ${line}`);
if (code.startsWith("R")) {
if (paths.length !== 2) throw new Error(`Invalid git rename entry: ${line}`);
return [
{ status: "deleted", path: paths[0]! },
{ status: "created", path: paths[1]! },
];
}
return {
status: code.startsWith("A") ? "created" : code.startsWith("D") ? "deleted" : "updated",
path,
};
});
}
+20 -1
View File
@@ -10,21 +10,26 @@ import { anthropic } from "./providers/anthropic.js";
import { baseten } from "./providers/baseten.js";
import { chutes } from "./providers/chutes.js";
import { cloudflareWorkersAi } from "./providers/cloudflare-workers-ai.js";
import { cortecs } from "./providers/cortecs.js";
import { crossmodel } from "./providers/crossmodel.js";
import { deepinfra } from "./providers/deepinfra.js";
import { digitalocean } from "./providers/digitalocean.js";
import { edenai } from "./providers/edenai.js";
import { empiriolabs } from "./providers/empiriolabs.js";
import { google } from "./providers/google.js";
import { hyper } from "./providers/hyper.js";
import { huggingface } from "./providers/huggingface.js";
import { inceptron } from "./providers/inceptron.js";
import { kilo } from "./providers/kilo.js";
import { llmgateway } from "./providers/llmgateway.js";
import { mergeGateway } from "./providers/merge-gateway.js";
import { nanoGpt } from "./providers/nano-gpt.js";
import { openai } from "./providers/openai.js";
import { ofox } from "./providers/ofox.js";
import { openrouter } from "./providers/openrouter.js";
import { ovhcloud } from "./providers/ovhcloud.js";
import { pioneer } from "./providers/pioneer.js";
import { requesty } from "./providers/requesty.js";
import { tinfoil } from "./providers/tinfoil.js";
import { vercel } from "./providers/vercel.js";
import { venice } from "./providers/venice.js";
@@ -114,21 +119,26 @@ export const providers: {
baseten: SyncProvider<any>;
chutes: SyncProvider<any>;
"cloudflare-workers-ai": SyncProvider<any>;
cortecs: SyncProvider<any>;
crossmodel: SyncProvider<any>;
deepinfra: SyncProvider<any>;
digitalocean: SyncProvider<any>;
edenai: SyncProvider<any>;
empiriolabs: SyncProvider<any>;
google: SyncProvider<any>;
hyper: SyncProvider<any>;
huggingface: SyncProvider<any>;
inceptron: SyncProvider<any>;
kilo: SyncProvider<any>;
llmgateway: SyncProvider<any>;
"merge-gateway": SyncProvider<any>;
"nano-gpt": SyncProvider<any>;
ofox: SyncProvider<any>;
openai: SyncProvider<any>;
openrouter: SyncProvider<any>;
ovhcloud: SyncProvider<any>;
pioneer: SyncProvider<any>;
requesty: SyncProvider<any>;
tinfoil: SyncProvider<any>;
vercel: SyncProvider<any>;
venice: SyncProvider<any>;
@@ -140,21 +150,26 @@ export const providers: {
baseten,
chutes,
"cloudflare-workers-ai": cloudflareWorkersAi,
cortecs,
crossmodel,
deepinfra,
digitalocean,
edenai,
empiriolabs,
google,
hyper,
huggingface,
inceptron,
kilo,
llmgateway,
"merge-gateway": mergeGateway,
"nano-gpt": nanoGpt,
ofox,
openai,
openrouter,
ovhcloud,
pioneer,
requesty,
tinfoil,
vercel,
venice,
@@ -165,17 +180,21 @@ export const providers: {
export const groups = {
aggregators: [
"crossmodel",
"edenai",
"empiriolabs",
"huggingface",
"inceptron",
"kilo",
"llmgateway",
"merge-gateway",
"nano-gpt",
"ofox",
"requesty",
"openrouter",
"vercel",
],
cloudflare: ["cloudflare-workers-ai"],
direct: ["ambient", "anthropic", "baseten", "chutes", "deepinfra", "digitalocean", "google", "hyper", "openai", "ovhcloud", "pioneer", "tinfoil", "venice", "wandb", "xai"],
direct: ["ambient", "anthropic", "baseten", "chutes", "cortecs", "deepinfra", "digitalocean", "google", "hyper", "openai", "ovhcloud", "pioneer", "tinfoil", "venice", "wandb", "xai"],
} as const;
type ProviderID = keyof typeof providers;
+5 -3
View File
@@ -134,9 +134,11 @@ export function buildChutesModel(
last_updated: existing?.last_updated ?? today,
attachment,
reasoning,
// Chutes' /v1/models advertises `reasoning` as a capability but exposes no parameter
// to toggle or set its effort, so there is no provider evidence for a reasoning option.
reasoning_options: [],
// Chutes' /v1/models advertises `reasoning` as a capability but lists no sampling
// parameter for it, so the endpoint alone cannot describe the control. The real
// control is `chat_template_kwargs`, which is hand-authored per model. Leaving this
// field unset lets preserveReasoningOptions keep those authored options and default
// only new, unannotated reasoners to an empty list.
temperature,
tool_call: toolCall,
structured_output: structuredOutput ? true : undefined,
+169
View File
@@ -0,0 +1,169 @@
import { z } from "zod";
import { describeModel } from "../../describe.js";
import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js";
import { factorBaseModel, resolveModelMetadataBaseModel } from "./openrouter.js";
const API_ENDPOINT = "https://api.cortecs.ai/v1/models";
const CANONICAL_BASE_MODEL_EXCEPTIONS = {
"claude-sonnet-4": "anthropic/claude-sonnet-4-0",
} as const;
// Cortecs publishes its default catalog prices in EUR per million tokens.
// Exchange rate used by the existing Cortecs entries, as of 2026-07-30.
const EUR_TO_USD = 1.114;
const CortecsModality = z.enum(["text", "audio", "image", "video", "pdf"]);
export const CortecsModel = z.object({
id: z.string().min(1),
created: z.number().int().nonnegative(),
description: z.string().optional(),
pricing: z.object({
currency: z.literal("EUR"),
input_token: z.number().nonnegative(),
output_token: z.number().nonnegative(),
cache_read_cost: z.number().nonnegative().optional(),
cache_write_cost: z.number().nonnegative().optional(),
}).passthrough(),
context_size: z.number().int().positive(),
input_modalities: z.array(CortecsModality).default(["text"]),
output_modalities: z.array(CortecsModality).default(["text"]),
supported_features: z.array(z.string()).default([]),
}).passthrough();
export const CortecsResponse = z.object({
object: z.literal("list"),
data: z.array(CortecsModel),
}).passthrough();
export type CortecsModel = z.infer<typeof CortecsModel>;
export const cortecs = {
id: "cortecs",
name: "Cortecs",
modelsDir: "providers/cortecs/models",
deleteMissing: true,
async fetchModels() {
const response = await fetch(API_ENDPOINT);
if (!response.ok) {
throw new Error(`Cortecs models request failed: ${response.status} ${response.statusText}`);
}
return response.json();
},
parseModels(raw) {
return CortecsResponse.parse(raw).data;
},
translateModel(model, context) {
return {
id: model.id,
model: buildCortecsModel(model, context.existing(model.id), context.authored(model.id)),
};
},
} satisfies SyncProvider<CortecsModel>;
function dateFromTimestamp(timestamp: number) {
return new Date(timestamp * 1_000).toISOString().slice(0, 10);
}
function usd(value: number | undefined) {
if (value === undefined) return undefined;
return Math.round(value * EUR_TO_USD * 1_000) / 1_000;
}
export function buildCortecsModel(
model: CortecsModel,
existing: ExistingModel | undefined,
authored: ExistingModel | undefined,
): SyncedModel {
const features = new Set(model.supported_features);
const input = model.input_modalities;
const output = model.output_modalities;
const canonical = existing?.base_model ?? resolveCortecsBaseModel(model.id);
const sourceReasoning = features.has("reasoning");
const reasoning = canonical === undefined ? sourceReasoning : existing?.reasoning ?? sourceReasoning;
const reasoningOptions = canonical === undefined
? (sourceReasoning ? existing?.reasoning_options ?? [] : undefined)
: (existing?.reasoning === true ? existing.reasoning_options : undefined);
const limit = {
context: model.context_size,
input: existing?.limit?.input,
output: authored?.limit?.output ?? model.context_size,
};
const cost = {
input: usd(model.pricing.input_token),
output: usd(model.pricing.output_token),
cache_read: usd(model.pricing.cache_read_cost) ?? existing?.cost?.cache_read,
cache_write: usd(model.pricing.cache_write_cost) ?? existing?.cost?.cache_write,
reasoning: existing?.cost?.reasoning,
tiers: existing?.cost?.tiers,
};
if (canonical !== undefined) {
return factorBaseModel(canonical, {
description: existing?.description,
attachment: input.some((value) => value !== "text"),
reasoning,
reasoning_options: reasoningOptions,
temperature: existing?.temperature,
tool_call: features.has("tools"),
structured_output: features.has("json_mode"),
status: existing?.status,
interleaved: existing?.interleaved,
limit,
modalities: { input, output },
cost,
}, limit, existing?.base_model_omit);
}
const family = existing?.family;
return {
name: existing?.name ?? model.id,
description: existing?.description ?? model.description ?? describeModel({
id: model.id,
name: model.id,
family,
reasoning,
tool_call: features.has("tools"),
structured_output: features.has("json_mode"),
open_weights: existing?.open_weights ?? false,
limit,
modalities: { input, output },
}),
family,
release_date: existing?.release_date ?? dateFromTimestamp(model.created),
last_updated: existing?.last_updated ?? dateFromTimestamp(model.created),
attachment: input.some((value) => value !== "text"),
reasoning,
reasoning_options: reasoningOptions,
temperature: existing?.temperature ?? false,
tool_call: features.has("tools"),
structured_output: features.has("json_mode"),
knowledge: existing?.knowledge,
open_weights: existing?.open_weights ?? false,
status: existing?.status,
interleaved: existing?.interleaved,
cost,
limit,
modalities: { input, output },
} satisfies SyncedFullModel;
}
function resolveCortecsBaseModel(modelID: string) {
const exception = CANONICAL_BASE_MODEL_EXCEPTIONS[
modelID as keyof typeof CANONICAL_BASE_MODEL_EXCEPTIONS
];
if (exception !== undefined) return resolveModelMetadataBaseModel(exception);
const trailingFamily = /^claude-(\d+)-(\d+)-(opus|sonnet|haiku)$/.exec(modelID);
if (trailingFamily !== null) {
const [, major, minor, family] = trailingFamily;
return resolveModelMetadataBaseModel(`anthropic/claude-${family}-${major}-${minor}`);
}
const compactFamily = /^claude-(opus|sonnet|haiku)(\d+)-(\d+)$/.exec(modelID);
if (compactFamily !== null) {
const [, family, major, minor] = compactFamily;
return resolveModelMetadataBaseModel(`anthropic/claude-${family}-${major}-${minor}`);
}
return resolveModelMetadataBaseModel(modelID);
}
+12 -7
View File
@@ -24,11 +24,13 @@ const API_ENDPOINT = process.env.CROSSMODEL_MODELS_URL ?? "https://www.crossmode
const ReasoningCapability = z
.object({
toggle: z.boolean().optional(),
effort: z.array(z.string()).optional(),
supported: z.boolean().optional(),
toggle: z.boolean().nullish().transform((value) => value ?? undefined),
effort: z.array(z.string()).nullish().transform((value) => value ?? undefined),
budget_tokens: z
.object({ min: z.number().optional(), max: z.number().optional() })
.optional(),
.nullish()
.transform((value) => value ?? undefined),
})
.passthrough();
@@ -55,7 +57,10 @@ export const CrossModelModel = z
.object({ input: z.array(z.string()), output: z.array(z.string()) })
.optional(),
capabilities: z
.object({ reasoning: ReasoningCapability.optional() })
.object({
json: z.boolean().optional(),
reasoning: ReasoningCapability.optional(),
})
.passthrough()
.nullable()
.optional(),
@@ -170,7 +175,7 @@ function isReasoningEffort(value: string): value is ReasoningEffort {
// otherwise -> toggle / effort / budget_tokens entries
function reasoningOptions(model: CrossModelModel): SyncedModel["reasoning_options"] {
const reasoning = model.capabilities?.reasoning;
if (reasoning === undefined) return undefined;
if (reasoning === undefined || reasoning.supported === false) return undefined;
const options: NonNullable<SyncedModel["reasoning_options"]> = [];
if (reasoning.toggle === true) options.push({ type: "toggle" });
if (reasoning.effort !== undefined) {
@@ -186,7 +191,7 @@ function reasoningOptions(model: CrossModelModel): SyncedModel["reasoning_option
return options;
}
function buildCrossModel(
export function buildCrossModel(
model: CrossModelModel,
existing: ExistingModel | undefined,
): SyncedModel | undefined {
@@ -247,7 +252,7 @@ function buildCrossModel(
reasoning: existing?.reasoning,
temperature: existing?.temperature,
tool_call: existing?.tool_call,
structured_output: existing?.structured_output,
structured_output: model.capabilities?.json ?? existing?.structured_output,
knowledge: existing?.knowledge,
modalities: modality,
reasoning_options,
@@ -372,6 +372,7 @@ export function buildDeepInfraModel(
// catalog's canonical metadata namespace so new models can inherit via
// `base_model` whenever a `models/` entry already exists.
const DEEPINFRA_PREFIXES: Record<string, string> = {
ByteDance: "bytedance-seed",
"deepseek-ai": "deepseek",
"meta-llama": "meta",
google: "google",
@@ -168,9 +168,11 @@ export const digitalocean = {
|| outputLimit <= 0
)
) return undefined;
const baseModel = existing === undefined
? resolveDigitalOceanBaseModel(model.id)
: existing.base_model;
// Only auto-resolve base_model for newly created files. Existing full
// definitions stay hand-authored unless they already declare base_model.
const baseModel = existing !== undefined
? existing.base_model
: resolveDigitalOceanBaseModel(model.id);
return {
id: model.id,
model: buildDigitalOceanModel(model, existing, baseModel),
@@ -341,6 +343,13 @@ function normalizeModalities(values: string[], fallback: Modality[]): Modality[]
return [...new Set(normalized.length > 0 ? normalized : fallback)];
}
function normalizeEffortToken(value: string): string {
const normalized = value.trim().toLowerCase().replaceAll("_", "-");
if (normalized === "x-high" || normalized === "xhigh") return "xhigh";
if (normalized === "null") return "null";
return normalized;
}
function number(value: string | number | undefined) {
if (value === undefined) return undefined;
const parsed = typeof value === "number" ? value : Number.parseInt(value, 10);
@@ -360,12 +369,23 @@ function reasoningOptionsFor(
model: DigitalOceanSourceModel,
existing: ExistingModel | undefined,
): ExistingModel["reasoning_options"] {
if (model.reasoning_efforts === undefined) return existing?.reasoning_options;
const values = model.reasoning_efforts
.map((value) => value === "null" ? null : value)
.filter(isReasoningEffort);
if (model.reasoning_efforts === undefined || model.reasoning_efforts.length === 0) {
return existing?.reasoning_options;
}
const remoteValues = reasoningEfforts(model);
const preserved = existing?.reasoning_options?.filter((option) => option.type !== "effort") ?? [];
return values.length > 0 ? [...preserved, { type: "effort", values }] : preserved;
return remoteValues.length > 0
? [...preserved, { type: "effort", values: remoteValues }]
: existing?.reasoning_options;
}
function reasoningEfforts(model: DigitalOceanSourceModel) {
return (model.reasoning_efforts ?? [])
.map((value) => {
const normalized = normalizeEffortToken(value);
return normalized === "null" ? null : normalized;
})
.filter(isReasoningEffort);
}
function isReasoningEffort(value: string | null): value is ReasoningEffort {
@@ -384,9 +404,10 @@ function status(
lifecycleStatus: string,
existing: ExistingModel["status"],
): ExistingModel["status"] {
const lifecycle = lifecycleStatus.toLowerCase().replaceAll("_", "-");
const lifecycle = lifecycleStatus.trim().toLowerCase().replaceAll("_", "-");
if (lifecycle.length === 0) return existing;
if (lifecycle === "deprecated" || lifecycle === "end-of-life") return "deprecated";
if (lifecycle === "public-preview") return "beta";
if (lifecycle === "public-preview" || lifecycle === "preview") return "beta";
return existing === "deprecated" || existing === "beta" ? undefined : existing;
}
@@ -430,16 +451,14 @@ function cost(model: DigitalOceanSourceModel, existing: ExistingModel | undefine
export function buildDigitalOceanModel(
model: DigitalOceanSourceModel,
existing: ExistingModel | undefined,
baseModel = existing === undefined ? resolveDigitalOceanBaseModel(model.id) : existing.base_model,
baseModel = existing !== undefined
? existing.base_model
: resolveDigitalOceanBaseModel(model.id),
): SyncedModel {
const input = normalizeModalities(
model.modalities?.input ?? [],
existing?.modalities?.input ?? ["text"],
);
const output = normalizeModalities(
model.modalities?.output ?? [],
existing?.modalities?.output ?? ["text"],
);
const remoteInput = normalizeModalities(model.modalities?.input ?? [], []);
const remoteOutput = normalizeModalities(model.modalities?.output ?? [], []);
const input = remoteInput.length > 0 ? remoteInput : existing?.modalities?.input ?? ["text"];
const output = remoteOutput.length > 0 ? remoteOutput : existing?.modalities?.output ?? ["text"];
const context = number(model.context_window) ?? existing?.limit?.context ?? 0;
const maxTokens = number(model.max_output_tokens ?? undefined);
const limit = {
@@ -448,13 +467,19 @@ export function buildDigitalOceanModel(
output: maxTokens ?? existing?.limit?.output ?? 0,
};
const textOutput = output.includes("text") && !output.includes("image") && !output.includes("video");
const remoteReasoning = textOutput
&& ((model.thinking ?? false) || (model.reasoning_efforts?.length ?? 0) > 0);
const providerReasoning = remoteReasoning ? true : existing?.reasoning;
const remoteEfforts = reasoningEfforts(model);
const providerReasoning = !textOutput
? existing?.reasoning
: model.thinking === true || remoteEfforts.length > 0
? true
: model.thinking === false
? false
: existing?.reasoning;
const reasoning = providerReasoning ?? false;
const reasoningOptions = reasoning ? reasoningOptionsFor(model, existing) : undefined;
const reasoningOptions = reasoning === true ? reasoningOptionsFor(model, existing) : undefined;
const modelStatus = status(model.lifecycle_status, existing?.status);
const releaseDate = existing?.release_date ?? model.created_at?.slice(0, 10) ?? new Date().toISOString().slice(0, 10);
const attachment = input.some((value) => value !== "text");
const values: Partial<SyncedFullModel> = {
name: model.name,
description: existing?.description ?? describeModel({
@@ -471,7 +496,7 @@ export function buildDigitalOceanModel(
family: existing?.family ?? inferFamily(model.id, model.name),
release_date: releaseDate,
last_updated: existing?.last_updated ?? releaseDate,
attachment: existing?.attachment ?? input.some((value) => value !== "text"),
attachment,
reasoning,
reasoning_options: reasoningOptions,
temperature: existing?.temperature ?? true,
@@ -492,7 +517,8 @@ export function buildDigitalOceanModel(
return factorBaseModel(baseModel, {
name: model.name,
description: existing?.description,
attachment: input.some((value) => value !== "text"),
attachment,
modalities: { input, output },
reasoning: providerReasoning,
reasoning_options: reasoningOptions,
temperature: existing?.temperature,
@@ -502,7 +528,6 @@ export function buildDigitalOceanModel(
interleaved: existing?.interleaved,
cost: cost(model, existing),
limit,
modalities: { input, output },
provider: existing?.provider,
experimental: existing?.experimental,
}, limit, existing?.base_model_omit);
@@ -537,15 +562,30 @@ export function resolveDigitalOceanBaseModel(id: string) {
if (id.startsWith("glm-")) candidates.push(`zai/${id}`);
if (id.startsWith("kimi-")) candidates.push(`moonshotai/${id}`);
if (id.startsWith("minimax-")) candidates.push(`minimax/${id}`);
if (id.startsWith("mimo-")) {
const normalized = id.replace(/^mimo-v(\d+)-(\d+)/, "mimo-v$1.$2");
candidates.push(`xiaomi/${id}`);
candidates.push(`xiaomi/${normalized}`);
}
if (id.startsWith("nvidia-")) candidates.push(`nvidia/${id.slice("nvidia-".length)}`);
if (id.startsWith("alibaba-")) candidates.push(`qwen/${id.slice("alibaba-".length)}`);
if (id.startsWith("qwen")) candidates.push(`qwen/${id}`);
if (id.startsWith("llama")) candidates.push(`meta/${id}`);
if (id.startsWith("mistral") || id.startsWith("ministral")) candidates.push(`mistralai/${id}`);
if (id.startsWith("gemma")) candidates.push(`google/${id}`);
const anthropic = id.match(/^anthropic-claude-(\d+(?:\.\d+)?)-(opus|sonnet|haiku)$/);
if (anthropic !== null) {
candidates.push(`anthropic/claude-${anthropic[2]}-${anthropic[1]}`);
// anthropic-claude-5-sonnet → anthropic/claude-sonnet-5
const anthropicSwapped = id.match(/^anthropic-claude-(\d+(?:\.\d+)?)-(opus|sonnet|haiku)$/);
if (anthropicSwapped !== null) {
candidates.push(`anthropic/claude-${anthropicSwapped[2]}-${anthropicSwapped[1]}`);
}
// anthropic-claude-opus-5 → anthropic/claude-opus-5
// also normalize dotted versions: anthropic-claude-opus-4.6 → anthropic/claude-opus-4-6
const anthropicFamily = id.match(/^anthropic-claude-(opus|sonnet|haiku)-(\d+(?:\.\d+)?)$/);
if (anthropicFamily !== null) {
const version = anthropicFamily[2].replaceAll(".", "-");
candidates.push(`anthropic/claude-${anthropicFamily[1]}-${anthropicFamily[2]}`);
candidates.push(`anthropic/claude-${anthropicFamily[1]}-${version}`);
}
if (id.startsWith("anthropic-")) candidates.push(`anthropic/${id.slice("anthropic-".length)}`);
+506
View File
@@ -0,0 +1,506 @@
import { existsSync, readdirSync, readFileSync } from "node:fs";
import path from "node:path";
import { z } from "zod";
import type { SyncProvider, SyncedFullModel, SyncedModel } from "../index.js";
import {
factorBaseModel,
modelMetadata,
resolveModelMetadataBaseModel,
} from "./openrouter.js";
// ========================================
// Constants
// ========================================
const API_ENDPOINT = "https://api.edenai.run/v3/models";
const MODELS_DIR = path.join(
import.meta.dirname,
"..",
"..",
"..",
"..",
"..",
"models",
);
const PROVIDERS_DIR = path.join(MODELS_DIR, "..", "providers");
const TOKENS_PER_MILLION = 1_000_000;
const PRICE_DECIMALS = 1_000_000;
// Values `reasoning_effort` accepts on POST /v3/chat/completions. Which of them
// a given model exposes comes from its lab entry, not from this list.
const ACCEPTED_EFFORTS = new Set([
"none",
"minimal",
"low",
"medium",
"high",
"xhigh",
"max",
]);
const REGION_SUFFIX = /@[a-z0-9-]+$/i;
const DOTTED_VENDOR = /^[a-z0-9-]+\./;
const VERSION_TAIL = /-v\d+:\d+$/;
const DATE_TAIL = /-\d{8}$/;
const DATABRICKS_PREFIX = "databricks-";
const TIER_KEY = /^input_cost_per_token_above_(\d+)k_tokens$/;
const MODALITY_BY_EDENAI: Record<
string,
SyncedFullModel["modalities"]["input"][number]
> = {
text: "text",
image: "image",
audio: "audio",
video: "video",
file: "pdf",
};
// Upstreams that are the lab's own API for models under that namespace.
const LAB_UPSTREAMS: Record<string, readonly string[]> = {
alibaba: ["qwen"],
amazon: ["amazon"],
anthropic: ["anthropic"],
cohere: ["cohere"],
deepseek: ["deepseek"],
google: ["google", "vertex"],
microsoft: ["microsoft"],
minimax: ["minimax"],
mistral: ["mistral"],
moonshotai: ["moonshot"],
openai: ["openai"],
perplexity: ["perplexityai"],
xai: ["xai"],
zhipuai: ["zai"],
};
type ReasoningOption = NonNullable<
SyncedFullModel["reasoning_options"]
>[number];
const canonicalNameByID = new Map<string, string>();
let firstPartyBaseModels: ReadonlySet<string> = new Set();
// ========================================
// Schemas
// ========================================
const EdenAIPricing = z
.object({
input_cost_per_token: z.number().nullish(),
output_cost_per_token: z.number().nullish(),
output_cost_per_reasoning_token: z.number().nullish(),
cache_read_input_token_cost: z.number().nullish(),
cache_creation_input_token_cost: z.number().nullish(),
input_cost_per_audio_token: z.number().nullish(),
})
.passthrough();
const EdenAICapabilities = z
.object({
input_modalities: z.array(z.string()).nullish(),
output_modalities: z.array(z.string()).nullish(),
supports_function_calling: z.boolean().optional(),
supports_response_schema: z.boolean().optional(),
})
.passthrough();
export const EdenAIModel = z
.object({
id: z.string().min(1),
owned_by: z.string().min(1),
model_name: z.string().min(1),
context_length: z.number().nullish(),
capabilities: EdenAICapabilities,
pricing: EdenAIPricing.nullish(),
list_pricing: EdenAIPricing.nullish(),
alias_of: z.string().nullish(),
})
.passthrough();
export const EdenAIResponse = z
.object({
object: z.literal("list"),
data: z.array(EdenAIModel),
})
.passthrough();
export type EdenAIModel = z.infer<typeof EdenAIModel>;
// ========================================
// Base model resolution
// ========================================
function baseModelExists(modelID: string) {
return existsSync(path.join(MODELS_DIR, `${modelID}.toml`));
}
// Ids are `<upstream>/<native id>`, so each upstream keeps its own convention.
function baseModelCandidates(modelName: string) {
const candidates = [modelName];
if (DOTTED_VENDOR.test(modelName)) {
const dotted = modelName.replace(".", "/");
candidates.push(
dotted,
dotted.replace(VERSION_TAIL, "").replace(DATE_TAIL, ""),
);
}
const last = modelName.split("/").at(-1) ?? modelName;
candidates.push(last);
if (last.startsWith(DATABRICKS_PREFIX)) {
candidates.push(last.slice(DATABRICKS_PREFIX.length));
}
candidates.push(last.replace(VERSION_TAIL, "").replace(DATE_TAIL, ""));
return [...new Set(candidates)].filter((candidate) => candidate.length > 0);
}
export function resolveEdenAIBaseModel(model: EdenAIModel) {
const names = [model.model_name.replace(REGION_SUFFIX, "")];
if (model.alias_of != null) {
const target = model.alias_of.split("/").slice(1).join("/");
if (target.length > 0) names.push(target);
}
for (const name of names) {
for (const candidate of baseModelCandidates(name)) {
const resolved = resolveModelMetadataBaseModel(candidate);
if (resolved !== undefined && baseModelExists(resolved)) return resolved;
}
}
return undefined;
}
function isFirstPartyRoute(model: EdenAIModel, baseModel: string) {
const lab = baseModel.split("/")[0] ?? "";
return (LAB_UPSTREAMS[lab] ?? []).includes(model.owned_by);
}
export function collectFirstPartyBaseModels(models: readonly EdenAIModel[]) {
const bases = new Set<string>();
for (const model of models) {
const baseModel = resolveEdenAIBaseModel(model);
if (baseModel !== undefined && isFirstPartyRoute(model, baseModel)) {
bases.add(baseModel);
}
}
return bases;
}
function canonicalModelName(baseModel: string) {
let cached = canonicalNameByID.get(baseModel);
if (cached === undefined) {
try {
const toml = Bun.TOML.parse(
readFileSync(path.join(MODELS_DIR, `${baseModel}.toml`), "utf8"),
) as { name?: unknown };
cached = typeof toml.name === "string" ? toml.name : "";
} catch {
cached = "";
}
canonicalNameByID.set(baseModel, cached);
}
return cached === "" ? undefined : cached;
}
function hasOutputLimit(baseModel: string) {
const limit = modelMetadata(baseModel).limit;
return (
typeof limit === "object" &&
limit !== null &&
typeof (limit as { output?: unknown }).output === "number"
);
}
function regionVariantName(model: EdenAIModel, baseModel: string) {
const region = REGION_SUFFIX.exec(model.id)?.[0].slice(1);
if (region === undefined) return undefined;
const canonical = canonicalModelName(baseModel);
if (canonical === undefined) return undefined;
return `${canonical} (${region.toUpperCase()})`;
}
// ========================================
// Reasoning options
// ========================================
// Eden AI's only reasoning control is `reasoning_effort`, so a model is
// published with the effort list its lab entry (or an established relay peer)
// already documents. Peers exposing only `toggle` / `budget_tokens` have no
// equivalent here, and those models are skipped rather than given a guess.
function effortValues(options: unknown): string[] | "always-on" | undefined {
if (!Array.isArray(options)) return undefined;
if (options.length === 0) return "always-on";
let toggled = false;
let accepted: string[] | undefined;
for (const option of options) {
if (typeof option !== "object" || option === null) continue;
const type = (option as { type?: unknown }).type;
if (type === "toggle") toggled = true;
if (type !== "effort") continue;
const values = (option as { values?: unknown }).values;
if (!Array.isArray(values)) continue;
const filtered = values.filter(
(value): value is string =>
typeof value === "string" && ACCEPTED_EFFORTS.has(value),
);
if (filtered.length > 0) accepted = filtered;
}
if (accepted === undefined) return undefined;
// Eden AI switches reasoning off with `reasoning_effort=none`, so a lab-side
// toggle becomes `none` in the effort list instead of a separate option.
return toggled && !accepted.includes("none")
? ["none", ...accepted]
: accepted;
}
function parseToml(filePath: string) {
try {
return Bun.TOML.parse(readFileSync(filePath, "utf8")) as Record<
string,
unknown
>;
} catch {
return undefined;
}
}
function tomlFilesIn(dir: string): string[] {
let entries;
try {
entries = readdirSync(dir, { withFileTypes: true });
} catch {
return [];
}
return entries.flatMap((entry) =>
entry.isDirectory()
? tomlFilesIn(path.join(dir, entry.name))
: entry.name.endsWith(".toml")
? [path.join(dir, entry.name)]
: [],
);
}
// OpenRouter is the established same-surface relay, so it is the one peer
// consulted when a lab entry documents no effort levels.
const PEER_PROVIDER = "openrouter";
let peerEfforts: Map<string, string[] | "always-on"> | undefined;
function peerEffortsByBaseModel() {
if (peerEfforts !== undefined) return peerEfforts;
peerEfforts = new Map();
for (const file of tomlFilesIn(
path.join(PROVIDERS_DIR, PEER_PROVIDER, "models"),
)) {
const toml = parseToml(file);
const base = toml?.base_model;
if (typeof base !== "string" || peerEfforts.has(base)) continue;
const values = effortValues(toml?.reasoning_options);
if (values !== undefined) peerEfforts.set(base, values);
}
return peerEfforts;
}
export function reasoningOptionsFor(
baseModel: string,
): SyncedFullModel["reasoning_options"] | undefined {
const [lab, ...rest] = baseModel.split("/");
const firstParty = effortValues(
parseToml(
path.join(PROVIDERS_DIR, lab ?? "", "models", `${rest.join("/")}.toml`),
)?.reasoning_options,
);
const derived = firstParty ?? peerEffortsByBaseModel().get(baseModel);
if (derived === undefined) return undefined;
if (derived === "always-on") return [];
return [{ type: "effort", values: derived } as ReasoningOption];
}
// ========================================
// Cost
// ========================================
function pricePerMillion(price: number) {
return (
Math.round(price * TOKENS_PER_MILLION * PRICE_DECIMALS) / PRICE_DECIMALS
);
}
function chargedPricePerMillion(price: unknown) {
return typeof price === "number" && price > 0
? pricePerMillion(price)
: undefined;
}
function costTiers(pricing: Record<string, unknown>) {
const thresholds = Object.keys(pricing)
.map((key) => TIER_KEY.exec(key)?.[1])
.filter((value): value is string => value !== undefined)
.map(Number)
.sort((a, b) => a - b);
return thresholds.flatMap((threshold) => {
// Built explicitly so `..._above_1hr_above_200k_tokens` is never read as a
// context tier.
const suffix = `_above_${threshold}k_tokens`;
const input = pricing[`input_cost_per_token${suffix}`];
const output = pricing[`output_cost_per_token${suffix}`];
if (typeof input !== "number" || typeof output !== "number") return [];
return [
{
tier: { type: "context" as const, size: threshold * 1_000 },
input: pricePerMillion(input),
output: pricePerMillion(output),
cache_read: chargedPricePerMillion(
pricing[`cache_read_input_token_cost${suffix}`],
),
cache_write: chargedPricePerMillion(
pricing[`cache_creation_input_token_cost${suffix}`],
),
},
];
});
}
function buildCost(
model: EdenAIModel,
reasoning: boolean,
): SyncedFullModel["cost"] {
// `pricing` carries account-level discounts; `list_pricing` is the public rate.
const pricing = model.list_pricing ?? model.pricing;
if (pricing == null) return undefined;
const input = pricing.input_cost_per_token;
const output = pricing.output_cost_per_token;
if (input == null || output == null) return undefined;
const tiers = costTiers(pricing);
return {
input: pricePerMillion(input),
output: pricePerMillion(output),
reasoning: reasoning
? chargedPricePerMillion(pricing.output_cost_per_reasoning_token)
: undefined,
cache_read: chargedPricePerMillion(pricing.cache_read_input_token_cost),
cache_write: chargedPricePerMillion(
pricing.cache_creation_input_token_cost,
),
input_audio: chargedPricePerMillion(pricing.input_cost_per_audio_token),
tiers: tiers.length > 0 ? tiers : undefined,
};
}
// ========================================
// Model translation
// ========================================
function mapModalities(values: readonly string[] | null | undefined) {
if (values == null) return undefined;
const mapped = [
...new Set(
values
.map((value) => MODALITY_BY_EDENAI[value.toLowerCase()])
.filter(
(value): value is NonNullable<typeof value> => value !== undefined,
),
),
];
return mapped.length > 0 ? mapped : undefined;
}
export function buildEdenAIModel(
model: EdenAIModel,
firstParty: ReadonlySet<string> = firstPartyBaseModels,
): SyncedModel | undefined {
const baseModel = resolveEdenAIBaseModel(model);
// Eden AI relays other labs' models only, so an entry needs its lab metadata.
if (baseModel === undefined) return undefined;
// The catalog reports no output limit, so the base has to resolve one.
if (!hasOutputLimit(baseModel)) return undefined;
// Where Eden AI relays the lab's own API, that route is the entry. Models
// with no first-party route keep every route, since their prices differ and
// there is no canonical one to pick.
if (firstParty.has(baseModel) && !isFirstPartyRoute(model, baseModel)) {
return undefined;
}
const capabilities = model.capabilities;
const input = mapModalities(capabilities.input_modalities);
const output = mapModalities(capabilities.output_modalities);
const modalities =
input !== undefined && output !== undefined ? { input, output } : undefined;
// Whether a model reasons is a property of the model, not of the relay, so
// the lab entry owns it and only the effort controls are authored here.
const reasoning = modelMetadata(baseModel).reasoning === true;
const reasoningOptions = reasoning
? reasoningOptionsFor(baseModel)
: undefined;
if (reasoning && reasoningOptions === undefined) return undefined;
const limit =
model.context_length != null && model.context_length > 0
? { context: model.context_length }
: undefined;
return factorBaseModel(
baseModel,
{
name: regionVariantName(model, baseModel),
modalities,
attachment: input?.some((value) => value !== "text"),
reasoning_options: reasoningOptions,
tool_call: capabilities.supports_function_calling,
structured_output: capabilities.supports_response_schema,
cost: buildCost(model, reasoning),
limit,
},
limit,
);
}
// ========================================
// Eden AI provider
// ========================================
export const edenai = {
id: "edenai",
name: "Eden AI",
modelsDir: "providers/edenai/models",
preserveBaseModels: false,
preserveDescriptions: false,
async fetchModels() {
const response = await fetch(API_ENDPOINT);
if (!response.ok) {
throw new Error(
`Eden AI request failed: ${response.status} ${response.statusText}`,
);
}
return response.json();
},
parseModels(raw) {
const models = EdenAIResponse.parse(raw).data;
firstPartyBaseModels = collectFirstPartyBaseModels(models);
return models;
},
translateModel(model) {
const built = buildEdenAIModel(model);
if (built === undefined) return undefined;
return { id: model.id, model: built };
},
} satisfies SyncProvider<EdenAIModel>;
+68 -56
View File
@@ -1,26 +1,18 @@
import { z } from "zod";
import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js";
import { factorBaseModel, resolveCanonicalBaseModel } from "./openrouter.js";
import { factorBaseModel, resolveCanonicalBaseModel, resolveModelMetadataBaseModel } from "./openrouter.js";
// EmpirioLabs exposes a public, unauthenticated OpenAI-compatible model
// catalog, so no API key is needed or used for this sync.
const API_ENDPOINT = "https://api.empiriolabs.ai/v1/models";
// Keep this for slugs that cannot be derived from a lab filename.
// Family prefixes, version-dot slugs, unique filenames, and dated/version
// suffixes are resolved automatically by resolveEmpiriolabsBaseModel.
const CANONICAL_BASE_MODELS: Record<string, string> = {
"fugu-ultra": "sakana/fugu-ultra",
"deepseek-v4-flash-0731": "deepseek/deepseek-v4-flash",
"gemma-4-26b-a4b": "google/gemma-4-26b-a4b-it",
"gemma-4-e4b": "google/gemma-4-E4B-it",
"mistral-medium-3": "mistral/mistral-medium-2505",
"mistral-small-4": "mistral/mistral-small-2603",
"muse-spark-1-1": "meta/muse-spark-1.1",
"qwen3-5-9b": "alibaba/qwen3.5-9b",
"qwen3-7-max": "alibaba/qwen3.7-max",
"qwen3-7-plus": "alibaba/qwen3.7-plus",
"step-3-5-flash": "stepfun/step-3.5-flash",
"step-3-5-flash-2603": "stepfun/step-3.5-flash-2603",
"step-3-7-flash": "stepfun/step-3.7-flash",
};
const EmpiriolabsParameter = z
@@ -209,55 +201,75 @@ function parameterOutputLimit(model: EmpiriolabsModel) {
return parameter?.max !== undefined && parameter.max > 0 ? parameter.max : undefined;
}
function applyVersionDots(id: string) {
return id
.replace(/^(qwen\d+)-(\d+)/, "$1.$2")
.replace(/^(seed-\d+)-(\d+)/, "$1.$2")
.replace(/^(muse-[a-z]+)-(\d+)-(\d+)$/, "$1-$2.$3")
.replace(/^(glm-\d+)-(\d+)/, "$1.$2")
.replace(/^(kimi-k\d+)-(\d+)/, "$1.$2")
.replace(/^(minimax-m\d+)-(\d+)/, "$1.$2")
.replace(/^(mimo-v\d+)-(\d+)/, "$1.$2")
.replace(/^(deepseek-v\d+)-(\d+)/, "$1.$2")
.replace(/^(step-\d+)-(\d+)/, "$1.$2");
}
function stripProductSuffixes(id: string) {
const out: string[] = [];
if (/-v\d+(-\d+)?$/.test(id)) {
const dropPatch = id.replace(/-\d+$/, "");
if (dropPatch !== id) out.push(dropPatch);
out.push(id.replace(/-v\d+(-\d+)?$/, ""));
}
if (/-\d{4}$/.test(id)) out.push(id.replace(/-\d{4}$/, ""));
return out;
}
function idVariants(id: string) {
const variants = [id];
const dotted = applyVersionDots(id);
if (dotted !== id) variants.push(dotted);
for (const stripped of stripProductSuffixes(id)) {
if (!variants.includes(stripped)) variants.push(stripped);
const strippedDotted = applyVersionDots(stripped);
if (!variants.includes(strippedDotted)) variants.push(strippedDotted);
}
return variants;
}
function prefixesFor(id: string) {
if (id.startsWith("deepseek-")) return ["deepseek"];
if (id.startsWith("glm-")) return ["z-ai"];
if (id.startsWith("kimi-")) return ["moonshotai"];
if (id.startsWith("minimax-")) return ["minimax"];
if (id.startsWith("mimo-")) return ["xiaomi"];
if (id.startsWith("qwen")) return ["qwen"];
if (id.startsWith("muse-")) return ["meta"];
if (id.startsWith("seed-")) return ["bytedance-seed"];
if (id.startsWith("fugu-")) return ["sakana"];
if (id.startsWith("gemma-")) return ["google"];
if (id.startsWith("step") && !id.startsWith("stepaudio")) return ["stepfun"];
if (id.startsWith("mistral-")) return ["mistralai"];
return [];
}
export function resolveEmpiriolabsBaseModel(id: string) {
const explicit = CANONICAL_BASE_MODELS[id];
if (explicit !== undefined) return explicit;
return canonicalCandidates(id)
.map((candidate) => resolveCanonicalBaseModel(candidate))
.find((candidate) => candidate !== undefined);
}
function canonicalCandidates(id: string) {
const candidates: string[] = [];
if (id.startsWith("deepseek-")) {
candidates.push(`deepseek/${id}`);
candidates.push(`deepseek/${id.replace(/^deepseek-v(\d+)-(\d+)/, "deepseek-v$1.$2")}`);
for (const variant of idVariants(id)) {
for (const prefix of prefixesFor(variant)) {
const resolved = resolveCanonicalBaseModel(`${prefix}/${variant}`);
if (resolved !== undefined) return resolved;
if (prefix === "google" && !variant.endsWith("-it")) {
const instruct = resolveCanonicalBaseModel(`${prefix}/${variant}-it`);
if (instruct !== undefined) return instruct;
}
}
const unique = resolveModelMetadataBaseModel(variant);
if (unique !== undefined) return unique;
}
if (id.startsWith("glm-")) {
const normalized = id
.replace(/^glm-(\d+)-(\d+)/, "glm-$1.$2")
.replace(/^glm-(\d+)-(\d+)v/, "glm-$1.$2v");
candidates.push(`z-ai/${id}`);
candidates.push(`z-ai/${normalized}`);
}
if (id.startsWith("kimi-")) {
const normalized = id.replace(/^(kimi-k\d+)-(\d+)/, "$1.$2");
candidates.push(`moonshotai/${id}`);
candidates.push(`moonshotai/${normalized}`);
}
if (id.startsWith("minimax-")) {
const normalized = id.replace(/^minimax-m(\d+)-(\d+)/, "minimax-m$1.$2");
candidates.push(`minimax/${id}`);
candidates.push(`minimax/${normalized}`);
}
if (id.startsWith("mimo-")) {
const normalized = id.replace(/^mimo-v(\d+)-(\d+)/, "mimo-v$1.$2");
candidates.push(`xiaomi/${id}`);
candidates.push(`xiaomi/${normalized}`);
}
if (id.startsWith("qwen")) {
const normalized = id.replace(/^(qwen\d+)-(\d+)/, "$1.$2");
candidates.push(`qwen/${id}`);
candidates.push(`qwen/${normalized}`);
}
return [...new Set(candidates)];
return undefined;
}
export function buildEmpiriolabsModel(
+16 -4
View File
@@ -4,7 +4,7 @@ import { z } from "zod";
import { describeModel } from "../../describe.js";
import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js";
import { factorBaseModel, resolveModelMetadataBaseModel } from "./openrouter.js";
import { factorBaseModel, modelMetadata, resolveModelMetadataBaseModel } from "./openrouter.js";
const API_ENDPOINT = "https://hyper.charm.land/v1/models";
const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models");
@@ -145,7 +145,16 @@ export function buildHyperModel(
output: model.max_output_tokens,
};
const modalities = hyperModalities(model.capabilities?.vision ?? false);
const reasoning = model.reasoning != null;
const resolvedBase = resolveHyperBaseModel(model.id, baseModel);
const advertisedReasoning = model.reasoning != null;
// An omitted reasoning object means Hyper advertises no controls, not that a
// canonical model's reasoning capability is disabled.
const reasoning = resolvedBase !== undefined && !advertisedReasoning
? undefined
: advertisedReasoning;
const inheritedReasoning = resolvedBase === undefined
? false
: modelMetadata(resolvedBase).reasoning === true;
const releaseDate = existing?.release_date ?? dateFromTimestamp(model.created);
const values: Partial<SyncedFullModel> = {
attachment: modalities.input.some((value) => value !== "text"),
@@ -157,9 +166,12 @@ export function buildHyperModel(
cost: buildCost(model, existing?.cost),
limit,
};
if (reasoning) values.reasoning_options = reasoningOptions(model);
if (advertisedReasoning) {
values.reasoning_options = reasoningOptions(model);
} else if (inheritedReasoning) {
values.reasoning_options = [];
}
const resolvedBase = resolveHyperBaseModel(model.id, baseModel);
if (resolvedBase !== undefined) {
return factorBaseModel(
resolvedBase,
@@ -0,0 +1,208 @@
import { existsSync } from "node:fs";
import path from "node:path";
import { z } from "zod";
import { ReasoningOption } from "../../schema.js";
import type { SyncProvider, SyncedModel } from "../index.js";
import { factorBaseModel } from "./openrouter.js";
const API_ENDPOINT = process.env.INCEPTRON_MODELS_URL ?? "https://api.inceptron.io/v1/models";
const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models");
const ModelsDevMetadata = z
.object({
base_model: z.string().regex(/^[^./\\][^/\\]*\/[^./\\][^/\\]*$/),
reasoning_options: z.array(ReasoningOption).optional(),
interleaved: z
.union([
z.literal(true),
z.object({ field: z.enum(["reasoning_content", "reasoning_details"]) }).strict(),
])
.optional(),
status: z.enum(["alpha", "beta", "deprecated"]).optional(),
})
.strict();
export const InceptronModel = z.object({
id: z.string().min(1),
name: z.string().min(1),
is_ready: z.boolean().optional(),
context_length: z.number().int().positive(),
max_output_length: z.number().int().positive(),
input_modalities: z.array(z.string()).min(1),
output_modalities: z.array(z.string()).min(1),
supported_features: z.array(z.string()),
supported_sampling_parameters: z.array(z.string()),
pricing: z.object({
prompt: z.string(),
completion: z.string(),
input_cache_reads: z.string().optional(),
input_cache_writes: z.string().optional(),
}),
models_dev: ModelsDevMetadata.optional(),
});
export const InceptronResponse = z
.object({
object: z.literal("list"),
data: z.array(InceptronModel),
})
.strict();
export type InceptronModel = z.infer<typeof InceptronModel>;
export type ReadyInceptronModel = InceptronModel & {
models_dev: z.infer<typeof ModelsDevMetadata>;
};
export const inceptron = {
id: "inceptron",
name: "Inceptron",
modelsDir: "providers/inceptron/models",
async fetchModels() {
const response = await fetch(API_ENDPOINT);
if (!response.ok) {
throw new Error(`Inceptron request failed: ${response.status} ${response.statusText}`);
}
return response.json();
},
parseModels: parseInceptronModels,
translateModel(model) {
return { id: model.id, model: buildInceptronModel(model) };
},
} satisfies SyncProvider<ReadyInceptronModel>;
export function parseInceptronModels(raw: unknown): ReadyInceptronModel[] {
const models = InceptronResponse.parse(raw).data.filter((model) => model.is_ready !== false);
const seen = new Set<string>();
return models.map((model) => {
if (seen.has(model.id)) throw new Error(`Duplicate ready Inceptron model ID: ${model.id}`);
seen.add(model.id);
if (model.models_dev === undefined) {
throw new Error(`Ready Inceptron model ${model.id} is missing models_dev metadata`);
}
if (!baseModelExists(model.models_dev.base_model)) {
throw new Error(
`Ready Inceptron model ${model.id} refers to missing base model ${model.models_dev.base_model}`,
);
}
validateReasoningContract(model as ReadyInceptronModel);
validatePricing(model);
validateModalities(model);
return model as ReadyInceptronModel;
});
}
export function buildInceptronModel(model: ReadyInceptronModel): SyncedModel {
const features = new Set(model.supported_features);
const samplingParameters = new Set(model.supported_sampling_parameters);
const input = validateModalities(model).input;
const output = validateModalities(model).output;
const limit = {
context: model.context_length,
output: model.max_output_length,
};
return factorBaseModel(
model.models_dev.base_model,
{
name: model.name,
attachment: input.some((modality) => modality !== "text"),
reasoning: features.has("reasoning"),
reasoning_options: model.models_dev.reasoning_options,
interleaved: model.models_dev.interleaved,
tool_call: features.has("tools"),
structured_output: features.has("structured_outputs"),
temperature: samplingParameters.has("temperature"),
status: model.models_dev.status,
cost: {
input: perTokenToPerMillion(model.pricing.prompt),
output: perTokenToPerMillion(model.pricing.completion),
cache_read: optionalPrice(model.pricing.input_cache_reads),
cache_write: optionalPrice(model.pricing.input_cache_writes),
},
limit,
modalities: { input, output },
},
limit,
);
}
function baseModelExists(modelID: string) {
return existsSync(path.join(MODELS_DIR, `${modelID}.toml`));
}
function validateReasoningContract(model: ReadyInceptronModel) {
const supportsReasoning = model.supported_features.includes("reasoning");
const options = model.models_dev.reasoning_options;
if (supportsReasoning !== (options !== undefined)) {
throw new Error(
`Inceptron model ${model.id} must expose reasoning_options exactly when reasoning is supported`,
);
}
if (model.models_dev.interleaved !== undefined && !supportsReasoning) {
throw new Error(`Inceptron model ${model.id} exposes interleaving without reasoning`);
}
const optionTypes = options?.map((option) => option.type) ?? [];
if (new Set(optionTypes).size !== optionTypes.length) {
throw new Error(`Inceptron model ${model.id} has duplicate reasoning option types`);
}
const exposesEffort = optionTypes.includes("effort");
const advertisesEffort = model.supported_sampling_parameters.includes("reasoning_effort");
if (exposesEffort !== advertisesEffort) {
throw new Error(
`Inceptron model ${model.id} must advertise reasoning_effort exactly when effort options are exposed`,
);
}
}
type Modality = "text" | "audio" | "image" | "video" | "pdf";
const MODALITIES = new Set<Modality>(["text", "audio", "image", "video", "pdf"]);
function validateModalities(model: InceptronModel): { input: Modality[]; output: Modality[] } {
const parse = (direction: "input" | "output", values: string[]) => {
const unique = [...new Set(values)];
for (const value of unique) {
if (!MODALITIES.has(value as Modality)) {
throw new Error(`Inceptron model ${model.id} has unsupported ${direction} modality: ${value}`);
}
}
return unique as Modality[];
};
return {
input: parse("input", model.input_modalities),
output: parse("output", model.output_modalities),
};
}
function validatePricing(model: InceptronModel) {
perTokenToPerMillion(model.pricing.prompt);
perTokenToPerMillion(model.pricing.completion);
optionalPrice(model.pricing.input_cache_reads);
optionalPrice(model.pricing.input_cache_writes);
}
function optionalPrice(value: string | undefined) {
return value === undefined ? undefined : perTokenToPerMillion(value);
}
/** Convert a non-negative decimal USD/token string to USD/million tokens without floating-point multiplication. */
export function perTokenToPerMillion(value: string): number {
const match = /^(0|[1-9]\d*)(?:\.(\d+))?$/.exec(value);
if (match === null) throw new Error(`Invalid Inceptron per-token price: ${value}`);
const integer = match[1] as string;
const fraction = match[2] ?? "";
const digits = `${integer}${fraction}`.replace(/^0+(?=\d)/, "");
const decimalPlaces = fraction.length - 6;
const scaled = decimalPlaces <= 0
? `${digits}${"0".repeat(-decimalPlaces)}`
: `${digits.slice(0, -decimalPlaces) || "0"}.${digits.slice(-decimalPlaces).padStart(decimalPlaces, "0")}`;
const result = Number(scaled);
if (!Number.isFinite(result) || result < 0) {
throw new Error(`Invalid Inceptron per-token price: ${value}`);
}
return result;
}
+4 -144
View File
@@ -1,17 +1,10 @@
import { z } from "zod";
import { readFileSync, readdirSync } from "node:fs";
import path from "node:path";
import { describeModel } from "../../describe.js";
import { inferKimiFamily, ModelFamilyValues } from "../../family.js";
import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js";
import { factorBaseModel, resolveCanonicalBaseModel } from "./openrouter.js";
const API_ENDPOINT = "https://api.kilo.ai/api/gateway/models";
const MODELS_DIR = path.join(import.meta.dirname, "..", "..", "..", "..", "..", "models");
const modelMetadataByID = new Map<string, Record<string, unknown>>();
const modelMetadataFilesByProvider = new Map<string, Set<string>>();
export const KiloModel = z.object({
id: z.string(),
@@ -158,9 +151,9 @@ export function buildKiloModel(
const prompt = price(model.pricing.prompt);
const completion = price(model.pricing.completion);
const reasoning = params.has("reasoning") || params.has("include_reasoning");
const reasoning_options = existing?.reasoning_options?.length
? existing.reasoning_options
: KiloReasoningOptions(model.opencode) ?? existing?.reasoning_options;
const reasoning_options = reasoning
? KiloReasoningOptions(model.opencode) ?? existing?.reasoning_options
: undefined;
const context = model.top_provider.context_length ?? model.context_length;
const family = inferFamily(model, name);
const releaseDate = dateFromTimestamp(model.created);
@@ -277,7 +270,7 @@ function KiloReasoningOptions(opencode: KiloModel["opencode"]): SyncedFullModel[
.map(([, variant]) => variant.reasoning?.effort)
.filter((effort): effort is string => effort !== undefined);
const hasNone = variants.some(([, variant]) => variant.reasoning?.enabled === false);
const allEfforts = hasNone ? [...efforts, "none"] : [...efforts];
const allEfforts = [...new Set(hasNone ? [...efforts, "none"] : efforts)];
if (allEfforts.length > 0) {
const orderedEfforts = allEfforts.sort((a, b) => {
@@ -293,136 +286,3 @@ function KiloReasoningOptions(opencode: KiloModel["opencode"]): SyncedFullModel[
return options.length > 0 ? options : undefined;
}
function modelMetadataExists(provider: string, modelID: string) {
let files = modelMetadataFilesByProvider.get(provider);
if (files === undefined) {
try {
files = new Set(readdirSync(path.join(MODELS_DIR, provider)));
} catch {
files = new Set();
}
modelMetadataFilesByProvider.set(provider, files);
}
return files.has(`${modelID}.toml`);
}
function baseModelOmit(
modelID: string,
limit: SyncedFullModel["limit"],
) {
const metadata = modelMetadata(modelID);
const omit: string[] = [];
const baseLimit = metadata.limit;
if (
isPlainObject(baseLimit) &&
baseLimit.input !== undefined &&
limit.input === undefined &&
baseLimit.context !== limit.context
) {
omit.push("limit.input");
}
return omit.length > 0 ? omit : undefined;
}
function baseModelOverrides(
modelID: string,
values: Partial<SyncedFullModel>,
) {
const metadata = modelMetadata(modelID);
const result: Record<string, unknown> = {};
for (const [key, value] of Object.entries(values)) {
const override = inheritedOverride(value, metadata[key]);
if (override !== undefined) result[key] = override;
}
return result;
}
function inheritedOverride(value: unknown, inherited: unknown): unknown {
if (value === undefined) return undefined;
if (sameInheritedValue(value, inherited)) return undefined;
if (isPlainObject(value) && isPlainObject(inherited)) {
const overrides = Object.fromEntries(
Object.entries(value)
.map(([key, item]) => [key, inheritedOverride(item, inherited[key])])
.filter(([, item]) => item !== undefined),
);
return Object.keys(overrides).length > 0 ? overrides : undefined;
}
return stripUndefined(value);
}
function stripUndefined(value: unknown): unknown {
if (Array.isArray(value)) return value.map(stripUndefined);
if (isPlainObject(value)) {
return Object.fromEntries(
Object.entries(value)
.filter(([, item]) => item !== undefined)
.map(([key, item]) => [key, stripUndefined(item)]),
);
}
return value;
}
function sameInheritedValue(value: unknown, inherited: unknown) {
return stableInheritedValue(value) === stableInheritedValue(inherited);
}
function stableInheritedValue(value: unknown): string {
if (Array.isArray(value)) {
const items = value.map(stableInheritedValue);
const ordered = value.every((item) => item === null || typeof item !== "object")
? items.sort()
: items;
return `[${ordered.join(",")}]`;
}
if (isPlainObject(value)) {
return `{${Object.entries(value)
.filter(([, item]) => item !== undefined)
.sort(([a], [b]) => a.localeCompare(b))
.map(([key, item]) => `${JSON.stringify(key)}:${stableInheritedValue(item)}`)
.join(",")}}`;
}
return JSON.stringify(value);
}
function isPlainObject(value: unknown): value is Record<string, unknown> {
return value !== null && typeof value === "object" && !Array.isArray(value);
}
function modelMetadata(modelID: string) {
let metadata = modelMetadataByID.get(modelID);
if (metadata === undefined) {
const filePath = path.join(MODELS_DIR, `${modelID}.toml`);
metadata = Bun.TOML.parse(readFileSync(filePath, "utf8")) as Record<string, unknown>;
modelMetadataByID.set(modelID, metadata);
}
return metadata;
}
function canonicalCandidates(provider: string, modelID: string) {
const candidates = [modelID];
if (provider === "anthropic") {
candidates.push(modelID.replace(/(claude-(?:opus|sonnet|haiku)-\d+)\.(\d+)/, "$1-$2"));
candidates.push(modelID.replace(/^claude-3\.5-/, "claude-3-5-"));
}
if (provider === "llama") {
candidates.push(modelID.replace(/^llama-(\d+)-(\d+)/, "llama-$1.$2"));
candidates.push(modelID.replace(/^llama-(4)-(maverick|scout)$/, "llama-$1-$2-17b"));
}
if (provider === "mistral") {
candidates.push(modelID.replace(/-latest$/, ""));
}
if (provider === "minimax") {
candidates.push(modelID.replace(/^minimax-m/, "MiniMax-M"));
}
return [...new Set(candidates)];
}
+52 -3
View File
@@ -2,6 +2,7 @@ import { z } from "zod";
import { describeModel } from "../../describe.js";
import { inferKimiFamily, ModelFamilyValues } from "../../family.js";
import { ReasoningOption } from "../../schema.js";
import type { ExistingModel, SyncProvider, SyncedFullModel, SyncedModel } from "../index.js";
import { factorBaseModel, resolveCanonicalBaseModel } from "./openrouter.js";
@@ -11,12 +12,14 @@ const API_ENDPOINT = "https://api.llmgateway.io/v1/models";
// canonical prefixes understood by resolveCanonicalBaseModel. Alias the few that
// spell the lab differently. (Mirrors huggingface's CANONICAL_ORG_PREFIXES.)
const CANONICAL_FAMILY_ALIASES: Record<string, string> = {
grok: "xai",
mistral: "mistralai",
moonshot: "moonshotai",
};
const BASE_MODEL_ALIASES: Record<string, string> = {
"glm-5-2": "zhipuai/glm-5.2",
"grok-4-6": "xai/grok-4.6",
};
const Pricing = z.object({
@@ -27,6 +30,21 @@ const Pricing = z.object({
input_cache_write: z.string().optional(),
});
const LLMGatewayProvider = z.object({
reasoning_efforts: z.array(z.string()).optional(),
}).passthrough();
const ReasoningEffortOrder = new Map([
"none",
"minimal",
"low",
"medium",
"high",
"xhigh",
"max",
"default",
].map((effort, index) => [effort, index]));
export const LLMGatewayModel = z.object({
id: z.string(),
name: z.string(),
@@ -37,6 +55,7 @@ export const LLMGatewayModel = z.object({
output_modalities: z.array(z.string()),
}),
pricing: Pricing,
providers: z.array(LLMGatewayProvider),
context_length: z.number(),
supported_parameters: z.array(z.string()),
structured_outputs: z.boolean().optional(),
@@ -138,12 +157,14 @@ export function buildLLMGatewayModel(
const completion = price(model.pricing.completion);
const reasoning = model.supported_parameters.includes("reasoning")
|| model.supported_parameters.includes("include_reasoning");
const reasoningOptions = llmGatewayReasoningOptions(model, existing);
const context = model.context_length > 0
? model.context_length
: existing?.limit?.context ?? model.context_length;
// The gateway is authoritative for the volatile, gateway-specific data — cost
// and served limits. Its supported_parameters / modalities are too noisy to
// The gateway is authoritative for the volatile, gateway-specific data — cost,
// served limits, and explicitly advertised reasoning efforts. Its
// supported_parameters / modalities are too noisy to
// drive capability fields (it omits "tools" for flagship models yet lists
// "temperature" for ones the catalog deliberately marks temperature=false),
// so those stay curated: preserved from the existing entry (which, for a
@@ -183,6 +204,7 @@ export function buildLLMGatewayModel(
modalities: existing.modalities,
}),
reasoning: existing.reasoning,
reasoning_options: reasoningOptions,
temperature: existing.temperature,
tool_call: existing.tool_call,
structured_output: existing.structured_output,
@@ -218,6 +240,7 @@ export function buildLLMGatewayModel(
last_updated: existing.last_updated ?? dateFromTimestamp(model.created),
attachment: existing.attachment ?? false,
reasoning: existing.reasoning ?? false,
reasoning_options: reasoningOptions,
temperature: existing.temperature ?? false,
tool_call: existing.tool_call ?? false,
structured_output: existing.structured_output,
@@ -240,7 +263,11 @@ export function buildLLMGatewayModel(
const canonical = resolveLLMGatewayBaseModel(model);
if (canonical !== undefined) {
const factoredLimit = { context, input: undefined, output: undefined };
return factorBaseModel(canonical, { limit: factoredLimit, cost }, factoredLimit);
return factorBaseModel(canonical, {
reasoning_options: reasoningOptions,
limit: factoredLimit,
cost,
}, factoredLimit);
}
// Brand-new model: best-effort translation from the gateway. Capability and
@@ -265,6 +292,7 @@ export function buildLLMGatewayModel(
last_updated: dateFromTimestamp(model.created),
attachment: input.some((value) => value !== "text"),
reasoning,
reasoning_options: reasoningOptions,
temperature: model.supported_parameters.includes("temperature"),
tool_call: model.supported_parameters.includes("tools")
|| model.supported_parameters.includes("tool_choice"),
@@ -276,6 +304,27 @@ export function buildLLMGatewayModel(
} satisfies SyncedFullModel;
}
function llmGatewayReasoningOptions(
model: LLMGatewayModel,
existing: ExistingModel | undefined,
): SyncedFullModel["reasoning_options"] {
const advertised = new Set(model.providers.flatMap((provider) => provider.reasoning_efforts ?? []));
if (advertised.size === 0) return undefined;
const efforts = [...advertised].sort((a, b) => {
const order = (ReasoningEffortOrder.get(a) ?? Number.MAX_SAFE_INTEGER)
- (ReasoningEffortOrder.get(b) ?? Number.MAX_SAFE_INTEGER);
return order || a.localeCompare(b);
});
const preserved = existing?.reasoning_options?.filter((option) =>
option.type !== "effort" && !(option.type === "toggle" && advertised.has("none"))
) ?? [];
return [
...preserved,
ReasoningOption.parse({ type: "effort", values: efforts }),
];
}
function defaultModalities(model: LLMGatewayModel) {
return {
input: modalities(model.architecture.input_modalities, ["text"]),
@@ -13,6 +13,7 @@ const VendorReasoning = z.object({
disable_supported: z.boolean().optional(),
default_enabled: z.boolean().optional(),
controls: z.array(z.string()).optional(),
effort_values: z.array(z.string()).optional(),
output_style: z.string().nullable().optional(),
}).passthrough();
@@ -161,6 +162,28 @@ export const mergeGateway = {
},
} satisfies SyncProvider<MergeGatewayModel>;
export function mergeGatewayReasoningOptions(
reasoning: MergeGatewayVendor["capabilities"]["reasoning"],
): NonNullable<SyncedFullModel["reasoning_options"]> | undefined {
if (reasoning == null) return undefined;
const options: NonNullable<SyncedFullModel["reasoning_options"]> = [];
if (reasoning.disable_supported === true) {
options.push({ type: "toggle" as const });
}
const controls = (reasoning.controls ?? []).map((control) => control.toLowerCase());
const effortValues = reasoning.effort_values ?? [];
if (
(controls.includes("reasoning.effort") || controls.includes("reasoning_effort"))
&& effortValues.length > 0
) {
options.push({ type: "effort" as const, values: [...effortValues] });
}
return options;
}
export function selectMergeGatewayVendor(model: MergeGatewayModel) {
const canonical = model.vendors[model.provider];
if (canonical?.availability_status === "available") {
@@ -234,8 +257,8 @@ export function buildMergeGatewayModel(
const reasoning = routeConfirmsReasoning ? true : existing?.reasoning;
const existingReasoningOptions = existing?.reasoning_options ?? [];
const reasoningOptions = reasoning === true && existingReasoningOptions.length === 0
&& selected.info.capabilities.reasoning?.disable_supported === true
? [{ type: "toggle" as const }]
? mergeGatewayReasoningOptions(selected.info.capabilities.reasoning)
?? existingReasoningOptions
: reasoning === true
? existingReasoningOptions
: existing?.reasoning_options;
+11 -5
View File
@@ -51,7 +51,7 @@ export const NanoGptModel = z.object({
}).passthrough();
export const NanoGptResponse = z.object({
data: z.array(NanoGptModel),
data: z.array(NanoGptModel).min(1),
}).passthrough();
export type NanoGptModel = z.infer<typeof NanoGptModel>;
@@ -96,6 +96,7 @@ const BASE_MODEL_ALIASES: Record<string, string | undefined> = {
"claude-opus-4": "anthropic/claude-opus-4-0",
"claude-sonnet-4": "anthropic/claude-sonnet-4-0",
"cohere/north-mini-code": "cohere/north-mini-code-1-0",
"doubao-seed-2-0-code-preview-260215": "bytedance-seed/seed-2.0-code",
};
const NANO_GPT_VARIANT_SUFFIX = /(?::(?:thinking|none|minimal|low|medium|high|xhigh|max|\d+)|-thinking)$/i;
@@ -138,8 +139,10 @@ export function buildNanoGptModel(
const inputLimit = sourceContext ?? existing?.limit?.input;
const outputLimit = sourceOutputLimit ?? existing?.limit?.output;
const releaseDate = dateFromTimestamp(model.created) ?? existing?.release_date;
const inferredSourceReasoning = capabilities.reasoning
?? (model.reasoning_efforts != null ? true : undefined);
const hasReasoningEfforts = model.reasoning_efforts != null && model.reasoning_efforts.length > 0;
const inferredSourceReasoning = hasReasoningEfforts
? true
: capabilities.reasoning ?? (model.reasoning_efforts != null ? true : undefined);
const reasoning = inferredSourceReasoning ?? existing?.reasoning ?? false;
const cost = buildCost(model.pricing, existing);
if (baseModel !== undefined) {
@@ -255,8 +258,11 @@ function reasoningOptions(
if (reasoning === false) return undefined;
if (reasoning === undefined) return existing;
if (model.reasoning_efforts == null) return existing ?? [];
if (model.reasoning_efforts.length === 0) return [];
return [{ type: "effort", values: [...model.reasoning_efforts] }];
if (model.reasoning_efforts.length === 0) return existing ?? [];
const order = ReasoningEffort.options;
const efforts = [...new Set(model.reasoning_efforts)]
.sort((a, b) => order.indexOf(a) - order.indexOf(b));
return [{ type: "effort", values: efforts }];
}
export function resolveNanoGptBaseModel(modelID: string) {
+128
View File
@@ -0,0 +1,128 @@
import { z } from "zod";
import type { ExistingModel, SyncProvider, SyncedModel } from "../index.js";
const API_ENDPOINT = "https://api.ofox.ai/v2/models/catalog?include=provider_price&limit=500";
const Pricing = z
.object({
input: z.string().optional(),
output: z.string().optional(),
input_cache_read: z.string().optional(),
input_cache_write: z.string().optional(),
input_cache_write_5m: z.string().optional(),
input_cache_write_1h: z.string().optional(),
})
.passthrough();
const ProviderPrice = z
.object({
pricing: Pricing.optional(),
is_override: z.boolean().optional(),
})
.passthrough();
export const OfoxModel = z
.object({
id: z.string().min(1),
display_name: z.string().optional(),
mode: z.string(),
context_window: z.number().optional(),
max_output_tokens: z.number().optional(),
pricing: Pricing.optional(),
provider_price: ProviderPrice.nullable().optional(),
is_deprecated: z.boolean().optional(),
})
.passthrough();
export const OfoxResponse = z
.object({
data: z.array(OfoxModel),
})
.passthrough();
export type OfoxModel = z.infer<typeof OfoxModel>;
/**
* Ofox lists a curated subset of its catalog here, so this sync only updates
* existing TOMLs (`skipCreates`) and treats the Ofox catalog API as
* authoritative for pricing and deprecation status only. Everything else in
* the authored TOMLs — `base_model` inheritance, `reasoning_options`, and the
* per-model `[provider]` protocol overrides — is preserved as hand-authored.
*/
export const ofox = {
id: "ofox",
name: "Ofox",
modelsDir: "providers/ofox/models",
skipCreates: true,
trackMissingModels: true,
deleteMissing: false,
sourceID(model) {
return model.mode === "chat" ? model.id : undefined;
},
missingNotice(paths) {
return paths.map(
(file) => `Ofox catalog no longer lists ${file}; review for manual deprecation or removal.`,
);
},
async fetchModels() {
const response = await fetch(API_ENDPOINT);
if (!response.ok) {
throw new Error(`Ofox request failed: ${response.status} ${response.statusText}`);
}
return response.json();
},
parseModels(raw) {
return OfoxResponse.parse(raw).data;
},
translateModel(model, context) {
if (model.mode !== "chat") return undefined;
const authored = context.authored(model.id);
if (authored === undefined) return undefined;
return {
id: model.id,
model: buildOfoxModel(model, authored),
};
},
} satisfies SyncProvider<OfoxModel>;
/** Ofox prices are $/token decimal strings; catalog omits zero-value fields. */
function price(value: string | undefined) {
if (value === undefined) return undefined;
const number = Number(value);
if (!Number.isFinite(number) || number <= 0) return undefined;
return Math.round(number * 1_000_000_000_000) / 1_000_000;
}
export function buildOfoxModel(model: OfoxModel, authored: ExistingModel): SyncedModel {
const { id: _authoredID, ...preserved } = authored;
// Effective customer price: when ops set a provider_price override (price
// cuts / promos), that is what users are billed; the base `pricing` keeps
// the pre-discount list price.
const pricing =
model.provider_price?.is_override === true && model.provider_price.pricing !== undefined
? model.provider_price.pricing
: model.pricing;
const input = price(pricing?.input);
const output = price(pricing?.output);
const cacheRead = price(pricing?.input_cache_read);
const cacheWrite = price(pricing?.input_cache_write) ?? price(pricing?.input_cache_write_5m);
const cost =
input !== undefined || output !== undefined
? {
...authored.cost,
input: input ?? 0,
output: output ?? 0,
cache_read: cacheRead,
cache_write: cacheWrite,
}
: authored.cost;
const status = model.is_deprecated === true ? ("deprecated" as const) : authored.status;
return {
...preserved,
cost,
status,
} as SyncedModel;
}
@@ -13,6 +13,7 @@ const modelMetadataFilesByProvider = new Map<string, Set<string>>();
let allModelMetadataIDs: string[] | undefined;
const CANONICAL_BASE_MODEL_OVERRIDES = {
"bytedance/dola-seed-2.0-code": "bytedance-seed/seed-2.0-code",
"openai/gpt-5.6-luna-pro": "openai/gpt-5.6-luna",
"openai/gpt-5.6-sol-pro": "openai/gpt-5.6-sol",
"openai/gpt-5.6-terra-pro": "openai/gpt-5.6-terra",
@@ -23,6 +24,7 @@ const CANONICAL_BASE_MODEL_OVERRIDES = {
const CANONICAL_PROVIDER_PREFIXES = {
alibaba: { provider: "alibaba", metadata: "alibaba" },
anthropic: { provider: "anthropic", metadata: "anthropic" },
"bytedance-seed": { provider: "bytedance-seed", metadata: "bytedance-seed" },
cohere: { provider: "cohere", metadata: "cohere" },
deepseek: { provider: "deepseek", metadata: "deepseek" },
google: { provider: "google", metadata: "google" },
@@ -319,6 +321,9 @@ function openRouterReasoningOptions(reasoning: OpenRouterModel["reasoning"]): Sy
: reasoning.supported_efforts;
if (efforts !== undefined) {
if (!reasoning.mandatory && !efforts.includes("none")) {
options.push({ type: "toggle" });
}
options.push({
type: "effort",
values: reasoning.mandatory ? efforts.filter((value) => value !== "none") : [...efforts],
@@ -541,7 +546,7 @@ function isPlainObject(value: unknown): value is Record<string, unknown> {
return value !== null && typeof value === "object" && !Array.isArray(value);
}
function modelMetadata(modelID: string) {
export function modelMetadata(modelID: string) {
let metadata = modelMetadataByID.get(modelID);
if (metadata === undefined) {
const filePath = path.join(MODELS_DIR, `${modelID}.toml`);

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