Compare commits

...

579 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
1340 changed files with 12771 additions and 5063 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
+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"
@@ -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"
+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"]
+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"
+10 -2
View File
@@ -1,6 +1,10 @@
# Sources (accessed 2026-08-03):
# 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
@@ -9,6 +13,10 @@
# 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"
@@ -26,5 +34,5 @@ context = 1_000_000
output = 131_072
[modalities]
input = ["text", "image", "video"]
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"]
@@ -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"
+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"
+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"]
+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"
+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"]
@@ -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"
+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"]
+21
View File
@@ -0,0 +1,21 @@
name = "GPT-5.3 Codex Spark"
description = "Coding-optimized GPT model for repository edits, reviews, and agentic software work"
family = "gpt-codex-spark"
release_date = "2026-02-05"
last_updated = "2026-02-05"
attachment = true
reasoning = true
temperature = false
knowledge = "2025-08-31"
tool_call = true
structured_output = true
open_weights = false
[limit]
context = 128_000
input = 100_000
output = 32_000
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
+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"]
+1 -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"
+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"]
+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"]
+1
View File
@@ -30,6 +30,7 @@ export const ModelFamilyValues = [
"claude-sonnet",
"claude-opus",
"claude-fable",
"claude-mythos",
// Gemini style
"gemini",
+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"],
},
);
+9 -1
View File
@@ -4,7 +4,15 @@ 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(["openrouter"]);
const REVIEWED_REASONING_PROVIDERS = new Set([
"empiriolabs",
"kilo",
"llmgateway",
"merge-gateway",
"nano-gpt",
"openrouter",
"venice",
]);
export interface CatalogChange {
status: "created" | "updated" | "deleted";
+8
View File
@@ -14,10 +14,12 @@ 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";
@@ -121,10 +123,12 @@ export const providers: {
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>;
@@ -150,10 +154,12 @@ export const providers: {
crossmodel,
deepinfra,
digitalocean,
edenai,
empiriolabs,
google,
hyper,
huggingface,
inceptron,
kilo,
llmgateway,
"merge-gateway": mergeGateway,
@@ -174,8 +180,10 @@ export const providers: {
export const groups = {
aggregators: [
"crossmodel",
"edenai",
"empiriolabs",
"huggingface",
"inceptron",
"kilo",
"llmgateway",
"merge-gateway",
+1 -1
View File
@@ -101,7 +101,7 @@ export function buildCortecsModel(
return factorBaseModel(canonical, {
description: existing?.description,
attachment: input.some((value) => value !== "text"),
reasoning: undefined,
reasoning,
reasoning_options: reasoningOptions,
temperature: existing?.temperature,
tool_call: features.has("tools"),
@@ -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();
@@ -173,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) {
@@ -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",
+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-0731",
"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(
@@ -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;
}
+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"]),
@@ -165,7 +165,7 @@ export const mergeGateway = {
export function mergeGatewayReasoningOptions(
reasoning: MergeGatewayVendor["capabilities"]["reasoning"],
): NonNullable<SyncedFullModel["reasoning_options"]> | undefined {
if (reasoning === undefined) return undefined;
if (reasoning == null) return undefined;
const options: NonNullable<SyncedFullModel["reasoning_options"]> = [];
if (reasoning.disable_supported === true) {
@@ -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;
+4 -1
View File
@@ -55,8 +55,11 @@ export const ofox = {
name: "Ofox",
modelsDir: "providers/ofox/models",
skipCreates: true,
trackMissingModels: false,
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.`,
@@ -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],
+1 -3
View File
@@ -141,9 +141,7 @@ export const pioneer = {
name: "Pioneer",
modelsDir: "providers/pioneer/models",
skipCreates: true,
// Pioneer reports 2024-01-01 for every model, so its creation dates cannot
// support a meaningful age cutoff for remote-only model notifications.
trackMissingModels: false,
trackMissingModels: true,
deleteMissing: false,
async fetchModels() {
const response = await fetch(API_ENDPOINT);
+18 -3
View File
@@ -82,13 +82,28 @@ test("does not inspect deleted models", async () => {
});
test("allows reviewed providers with explicit reasoning options", async () => {
for (const provider of ["empiriolabs", "kilo", "llmgateway", "merge-gateway", "nano-gpt", "openrouter", "venice"]) {
const decision = await classifyAutoMerge(
[{ status: "updated", path: `providers/${provider}/models/reasoner.toml` }],
async () => fullModel(true, 'reasoning_options = [{ type = "toggle" }]'),
async () => fullModel(true, "reasoning_options = []"),
);
expect(decision.safe).toBe(true);
}
});
test("requires manual review for Inceptron reasoning updates", async () => {
const decision = await classifyAutoMerge(
[{ status: "updated", path: "providers/openrouter/models/reasoner.toml" }],
async () => fullModel(true, 'reasoning_options = [{ type = "toggle" }]'),
[{ status: "updated", path: "providers/inceptron/models/reasoner.toml" }],
async () => fullModel(true, 'reasoning_options = [{ type = "effort", values = ["high"] }]'),
async () => fullModel(true, "reasoning_options = []"),
);
expect(decision.safe).toBe(true);
expect(decision.safe).toBe(false);
expect(decision.reasons).toContain(
"providers/inceptron/models/reasoner.toml is a reasoning model that requires manual review",
);
});
test("resolves reasoning from base model", async () => {
+34
View File
@@ -0,0 +1,34 @@
import { expect, test } from "bun:test";
import { resolveEmpiriolabsBaseModel } from "../src/sync/providers/empiriolabs.js";
test("resolves existing lab metadata without a hardcoded map", () => {
expect(resolveEmpiriolabsBaseModel("muse-glimmer-30b")).toBe("meta/muse-glimmer-30b");
expect(resolveEmpiriolabsBaseModel("muse-spark-1-2")).toBe("meta/muse-spark-1.2");
expect(resolveEmpiriolabsBaseModel("muse-spark-1-1")).toBe("meta/muse-spark-1.1");
expect(resolveEmpiriolabsBaseModel("seed-2-1-turbo")).toBe("bytedance-seed/seed-2.1-turbo");
expect(resolveEmpiriolabsBaseModel("seed-2-0-code")).toBe("bytedance-seed/seed-2.0-code");
expect(resolveEmpiriolabsBaseModel("seed-2-0-lite")).toBe("bytedance-seed/seed-2.0-lite");
expect(resolveEmpiriolabsBaseModel("seed-2-0-mini")).toBe("bytedance-seed/seed-2.0-mini");
expect(resolveEmpiriolabsBaseModel("seed-2-0-pro")).toBe("bytedance-seed/seed-2.0-pro");
expect(resolveEmpiriolabsBaseModel("qwen3-8-max")).toBe("alibaba/qwen3.8-max");
});
test("maps versioned slugs onto the undated canonical when needed", () => {
expect(resolveEmpiriolabsBaseModel("fugu-ultra-v1-1")).toBe("sakana/fugu-ultra");
expect(resolveEmpiriolabsBaseModel("fugu-ultra-v1-0")).toBe("sakana/fugu-ultra");
});
test("keeps true filename aliases", () => {
expect(resolveEmpiriolabsBaseModel("mistral-medium-3")).toBe("mistral/mistral-medium-2505");
expect(resolveEmpiriolabsBaseModel("mistral-small-4")).toBe("mistral/mistral-small-2603");
});
test("resolves a non-alias Mistral id through the mistralai prefix", () => {
expect(resolveEmpiriolabsBaseModel("mistral-small-2603")).toBe("mistral/mistral-small-2603");
});
test("does not invent lab metadata when none exists", () => {
expect(resolveEmpiriolabsBaseModel("deepreasoning")).toBeUndefined();
expect(resolveEmpiriolabsBaseModel("nova-pro-1-0")).toBeUndefined();
});
+23 -1
View File
@@ -1,7 +1,7 @@
import { describe, expect, test } from "bun:test";
import { z } from "zod";
import { AuthoredModel } from "../src/index.js";
import { AuthoredModel, Provider } from "../src/index.js";
type AuthoredModelData = z.infer<typeof AuthoredModel>;
@@ -109,6 +109,28 @@ describe("model schema", () => {
});
});
describe("provider schema", () => {
const mergeGatewayProvider = {
id: "merge-gateway",
name: "Merge Gateway",
env: ["MERGE_GATEWAY_API_KEY"],
npm: "merge-gateway-ai-sdk-provider",
api: "https://api-gateway.merge.dev/v1/ai-sdk",
doc: "https://docs.merge.dev/merge-gateway",
models: {},
};
test("accepts Merge Gateway's native package with its OpenAI-compatible API", () => {
expect(Provider.safeParse(mergeGatewayProvider).success).toBe(true);
});
test("requires the compatibility API for the Merge Gateway package", () => {
const { api: _api, ...providerWithoutApi } = mergeGatewayProvider;
expect(Provider.safeParse(providerWithoutApi).success).toBe(false);
});
});
function baseModel(overrides: Partial<AuthoredModelData>) {
return {
id: "example/model",
+624 -5
View File
@@ -1,5 +1,5 @@
import { expect, test } from "bun:test";
import { mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
import { copyFile, mkdir, mkdtemp, readFile, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import path from "node:path";
@@ -13,9 +13,14 @@ import {
import { buildCortecsModel, type CortecsModel } from "../src/sync/providers/cortecs.js";
import {
buildCrossModel,
CrossModelResponse,
type CrossModelModel,
} from "../src/sync/providers/crossmodel.js";
import { buildDeepInfraModel, type DeepInfraModel } from "../src/sync/providers/deepinfra.js";
import {
buildDeepInfraModel,
resolveDeepInfraBaseModel,
type DeepInfraModel,
} from "../src/sync/providers/deepinfra.js";
import {
buildDigitalOceanModel,
digitalocean,
@@ -24,7 +29,21 @@ import {
resolveDigitalOceanBaseModel,
type DigitalOceanSourceModel,
} from "../src/sync/providers/digitalocean.js";
import {
buildEdenAIModel,
collectFirstPartyBaseModels,
reasoningOptionsFor,
resolveEdenAIBaseModel,
type EdenAIModel,
} from "../src/sync/providers/edenai.js";
import { buildHyperModel, type HyperModel } from "../src/sync/providers/hyper.js";
import {
buildInceptronModel,
parseInceptronModels,
perTokenToPerMillion,
type InceptronModel,
type ReadyInceptronModel,
} from "../src/sync/providers/inceptron.js";
import {
buildEmpiriolabsModel,
empiriolabs,
@@ -54,13 +73,14 @@ import {
type NanoGptModel,
} from "../src/sync/providers/nano-gpt.js";
import { openai, parseOpenAIModels } from "../src/sync/providers/openai.js";
import { ofox } from "../src/sync/providers/ofox.js";
import { pioneer } from "../src/sync/providers/pioneer.js";
import { google, shouldTrackGoogleModel } from "../src/sync/providers/google.js";
import { buildTinfoilModel, tinfoil, type TinfoilModel } from "../src/sync/providers/tinfoil.js";
import { resolveVeniceBaseModel } from "../src/sync/providers/venice.js";
import { buildVercelModel, vercel } from "../src/sync/providers/vercel.js";
import { buildWandbModel, type WandbModel } from "../src/sync/providers/wandb.js";
import { buildXAIModel } from "../src/sync/providers/xai.js";
import { buildXAIModel, xai } from "../src/sync/providers/xai.js";
function anthropicModel(overrides: Partial<AnthropicModel> = {}): AnthropicModel {
return {
@@ -145,6 +165,252 @@ function crossModelModel(overrides: Partial<CrossModelModel> = {}): CrossModelMo
};
}
function inceptronModel(overrides: Partial<InceptronModel> = {}): InceptronModel {
return {
id: "zai-org/GLM-5.2",
name: "GLM 5.2",
context_length: 1_048_576,
max_output_length: 1_048_576,
input_modalities: ["text"],
output_modalities: ["text"],
supported_features: ["chat", "tools", "reasoning", "structured_outputs"],
supported_sampling_parameters: ["temperature", "reasoning_effort"],
pricing: {
prompt: "0.00000075",
completion: "0.0000029",
input_cache_reads: "0.00000017",
input_cache_writes: "0",
},
models_dev: {
base_model: "zhipuai/glm-5.2",
reasoning_options: [{ type: "effort", values: ["high", "max"] }],
interleaved: { field: "reasoning_content" },
status: "alpha",
},
...overrides,
};
}
function readyInceptronModel(overrides: Partial<InceptronModel> = {}): ReadyInceptronModel {
return parseInceptronModels({
object: "list",
data: [inceptronModel(overrides)],
})[0]!;
}
test("builds current Inceptron models from explicit base metadata", () => {
const models = parseInceptronModels({
object: "list",
data: [
inceptronModel({
id: "MiniMaxAI/MiniMax-M2.5",
name: "MiniMax M2.5",
context_length: 196_608,
max_output_length: 196_608,
pricing: { prompt: "0.00000022", completion: "0.0000009" },
models_dev: {
base_model: "minimax/MiniMax-M2.5",
reasoning_options: [{ type: "effort", values: ["low", "medium", "high"] }],
},
}),
inceptronModel(),
inceptronModel({
id: "moonshotai/Kimi-K2.6",
name: "Kimi K2.6",
context_length: 262_144,
max_output_length: 262_144,
input_modalities: ["text", "image"],
supported_sampling_parameters: ["temperature"],
pricing: { prompt: "0.0000006", completion: "0.00000341" },
models_dev: {
base_model: "moonshotai/kimi-k2.6",
reasoning_options: [],
interleaved: { field: "reasoning_content" },
},
}),
inceptronModel({
id: "moonshotai/Kimi-K2.7-Code",
name: "Kimi K2.7 Code",
context_length: 262_144,
max_output_length: 262_144,
input_modalities: ["text", "image"],
supported_sampling_parameters: ["temperature"],
pricing: { prompt: "0.0000007", completion: "0.0000035" },
models_dev: {
base_model: "moonshotai/kimi-k2.7-code",
reasoning_options: [],
interleaved: { field: "reasoning_content" },
},
}),
inceptronModel({
id: "deepseek-ai/DeepSeek-V4-Flash-0731",
name: "DeepSeek V4 Flash 0731",
context_length: 1_048_576,
max_output_length: 1_048_576,
pricing: {
prompt: "0.00000013",
completion: "0.00000028",
input_cache_reads: "0.00000003",
input_cache_writes: "0",
},
models_dev: {
base_model: "deepseek/deepseek-v4-flash-0731",
reasoning_options: [{ type: "effort", values: ["high", "max"] }],
interleaved: { field: "reasoning_content" },
},
}),
],
});
const built = models.map(buildInceptronModel);
expect(built.map((model) => "base_model" in model ? model.base_model : undefined)).toEqual([
"minimax/MiniMax-M2.5",
"zhipuai/glm-5.2",
"moonshotai/kimi-k2.6",
"moonshotai/kimi-k2.7-code",
"deepseek/deepseek-v4-flash-0731",
]);
expect(built[0]).toMatchObject({
reasoning_options: [{ type: "effort", values: ["low", "medium", "high"] }],
cost: { input: 0.22, output: 0.9 },
});
expect(built[1]).toMatchObject({
name: "GLM 5.2",
reasoning_options: [{ type: "effort", values: ["high", "max"] }],
interleaved: { field: "reasoning_content" },
status: "alpha",
cost: { input: 0.75, output: 2.9, cache_read: 0.17, cache_write: 0 },
limit: { context: 1_048_576, output: 1_048_576 },
});
expect(built[2]).toMatchObject({
reasoning_options: [],
interleaved: { field: "reasoning_content" },
modalities: { input: ["text", "image"] },
});
expect(built[3]).toMatchObject({
reasoning_options: [],
interleaved: { field: "reasoning_content" },
});
expect(built[4]).toMatchObject({
reasoning_options: [{ type: "effort", values: ["high", "max"] }],
interleaved: { field: "reasoning_content" },
cost: { input: 0.13, output: 0.28, cache_read: 0.03, cache_write: 0 },
limit: { context: 1_048_576, output: 1_048_576 },
});
});
test("converts Inceptron per-token decimal prices exactly", () => {
expect(perTokenToPerMillion("0")).toBe(0);
expect(perTokenToPerMillion("0.00000005")).toBe(0.05);
expect(perTokenToPerMillion("0.00000341")).toBe(3.41);
expect(perTokenToPerMillion("1.25")).toBe(1_250_000);
});
test("rejects incomplete or contradictory ready Inceptron catalogs", () => {
expect(() =>
parseInceptronModels({ object: "list", data: [inceptronModel({ models_dev: undefined })] })
).toThrow("missing models_dev metadata");
expect(() =>
parseInceptronModels({
object: "list",
data: [inceptronModel(), inceptronModel()],
})
).toThrow("Duplicate ready Inceptron model ID");
expect(() =>
readyInceptronModel({
models_dev: { base_model: "zhipuai/not-a-real-model", reasoning_options: [] },
supported_sampling_parameters: [],
})
).toThrow("missing base model");
expect(() =>
readyInceptronModel({ pricing: { prompt: "1e-6", completion: "0.1" } })
).toThrow("Invalid Inceptron per-token price");
expect(() => readyInceptronModel({ input_modalities: ["text", "binary"] }))
.toThrow("unsupported input modality");
expect(() =>
readyInceptronModel({
models_dev: { base_model: "zhipuai/glm-5.2", reasoning_options: [] },
})
).toThrow("reasoning_effort exactly when effort options are exposed");
});
test("ignores not-ready Inceptron models while validating every ready model", () => {
const ready = inceptronModel();
const notReady = inceptronModel({
id: "staged/model",
is_ready: false,
models_dev: undefined,
input_modalities: ["unsupported-but-ignored"],
pricing: { prompt: "malformed", completion: "malformed" },
});
expect(parseInceptronModels({ object: "list", data: [ready, notReady] })).toHaveLength(1);
expect(() =>
parseInceptronModels({
object: "list",
data: [ready, inceptronModel({ id: "ready/model", models_dev: undefined })],
})
).toThrow("missing models_dev metadata");
});
test("syncs authoritative Inceptron additions, updates, and removals", async () => {
const root = await mkdtemp(path.join(tmpdir(), "models-dev-inceptron-"));
const modelsDir = path.join(root, "providers", "inceptron", "models");
await mkdir(modelsDir, { recursive: true });
for (const base of ["zhipuai/glm-5.2", "moonshotai/kimi-k2.6"]) {
const destination = path.join(root, "models", `${base}.toml`);
await mkdir(path.dirname(destination), { recursive: true });
await copyFile(path.join(import.meta.dirname, "..", "..", "..", "models", `${base}.toml`), destination);
}
let source: ReadyInceptronModel[] = [
readyInceptronModel(),
readyInceptronModel({
id: "moonshotai/Kimi-K2.6",
name: "Kimi K2.6",
context_length: 262_144,
max_output_length: 262_144,
input_modalities: ["text", "image"],
supported_sampling_parameters: ["temperature"],
models_dev: {
base_model: "moonshotai/kimi-k2.6",
reasoning_options: [],
interleaved: true,
},
}),
];
const provider: SyncProvider<ReadyInceptronModel> = {
id: "inceptron-test",
name: "Inceptron test",
modelsDir,
async fetchModels() {
return source;
},
parseModels(raw) {
return raw as ReadyInceptronModel[];
},
translateModel(model) {
return { id: model.id, model: buildInceptronModel(model) };
},
};
try {
const initial = await syncProvider(provider);
expect(initial).toMatchObject({ created: 2, updated: 0, deleted: 0 });
source = [readyInceptronModel({
pricing: { prompt: "0.0000008", completion: "0.0000029" },
})];
const changed = await syncProvider(provider);
expect(changed).toMatchObject({ created: 0, updated: 1, deleted: 1 });
const unchanged = await syncProvider(provider);
expect(unchanged).toMatchObject({ created: 0, updated: 0, deleted: 0, unchanged: 1 });
} finally {
await rm(root, { recursive: true, force: true });
}
});
test("syncs CrossModel's structured-output capability", () => {
const supported = buildCrossModel(crossModelModel(), undefined);
const unsupported = buildCrossModel(
@@ -176,6 +442,31 @@ test("syncs CrossModel's structured-output capability", () => {
});
});
test("parses CrossModel's nullable reasoning controls", () => {
const parsed = CrossModelResponse.parse({
data: [
{
...crossModelModel(),
capabilities: {
reasoning: {
supported: true,
toggle: null,
effort: null,
budget_tokens: null,
},
},
},
],
});
expect(parsed.data[0]?.capabilities?.reasoning).toEqual({
supported: true,
toggle: undefined,
effort: undefined,
budget_tokens: undefined,
});
});
test("syncs NanoGPT's verified reasoning, pricing, limits, and open-weight metadata", () => {
const model = buildNanoGptModel(nanoGptModel({
pricing: {
@@ -273,6 +564,8 @@ test("factors NanoGPT variants against canonical models without retaining wrong
expect(resolveNanoGptBaseModel("TEE/gpt-oss-120b")).toBe("openai/gpt-oss-120b");
expect(resolveNanoGptBaseModel("TEE/gemma-4-31b-it")).toBe("google/gemma-4-31b-it");
expect(resolveNanoGptBaseModel("cohere/north-mini-code")).toBe("cohere/north-mini-code-1-0");
expect(resolveNanoGptBaseModel("doubao-seed-2-0-code-preview-260215"))
.toBe("bytedance-seed/seed-2.0-code");
expect(resolveNanoGptBaseModel("xiaomi/mimo-v2.5-pro-ultraspeed"))
.toBe("xiaomi/mimo-v2.5-pro-ultraspeed");
expect(resolveNanoGptBaseModel("claude-haiku-4-5-20251001-thinking"))
@@ -802,13 +1095,19 @@ test("OpenAI availability sync retains models absent from a scoped response", as
}
});
test("does not track unreliable remote-only models", () => {
test("tracks missing models except for unreliable first-party inventories", () => {
expect(google.skipCreates).toBe(true);
expect(google.trackMissingModels).toBe(false);
expect(openai.skipCreates).toBe(true);
expect(openai.trackMissingModels).toBe(false);
expect(pioneer.skipCreates).toBe(true);
expect(pioneer.trackMissingModels).toBe(false);
expect(pioneer.trackMissingModels).toBe(true);
expect(ofox.skipCreates).toBe(true);
expect(ofox.trackMissingModels).toBe(true);
expect(tinfoil.skipCreates).toBe(true);
expect(tinfoil.trackMissingModels).not.toBe(false);
expect(xai.skipCreates).toBe(true);
expect(xai.trackMissingModels).not.toBe(false);
});
test("tracks public Google model families but not opaque internal IDs", () => {
@@ -1946,6 +2245,171 @@ test("factors new Hyper models against unique models/ metadata", () => {
});
});
test("factors Eden AI models onto lab metadata and prices from list_pricing", () => {
const model = edenAIModel({
id: "openai/gpt-5.6-terra",
model_name: "gpt-5.6-terra",
owned_by: "openai",
pricing: { input_cost_per_token: 0.0000013, output_cost_per_token: 0.0000078 },
list_pricing: {
input_cost_per_token: 0.000002,
output_cost_per_token: 0.000012,
cache_read_input_token_cost: 0.0000002,
},
});
expect(buildEdenAIModel(model)).toMatchObject({
base_model: "openai/gpt-5.6-terra",
cost: { input: 2, output: 12, cache_read: 0.2 },
reasoning_options: [
{ type: "effort", values: ["none", "low", "medium", "high", "xhigh", "max"] },
],
});
expect(buildEdenAIModel(model)).not.toHaveProperty("reasoning");
});
test("takes Eden AI reasoning options from the model's own lab entry", () => {
expect(reasoningOptionsFor("deepseek/deepseek-v4-pro")).toEqual([
{ type: "effort", values: ["none", "high", "max"] },
]);
expect(reasoningOptionsFor("openai/o1")).toEqual([
{ type: "effort", values: ["low", "medium", "high"] },
]);
});
test("skips Eden AI models whose reasoning control has no effort equivalent", () => {
// Lab and OpenRouter both expose these through budget_tokens, which Eden AI
// has no request field for.
expect(reasoningOptionsFor("google/gemini-2.5-pro")).toBeUndefined();
expect(
buildEdenAIModel(
edenAIModel({
id: "google/gemini-2.5-pro",
model_name: "gemini-2.5-pro",
owned_by: "google",
}),
),
).toBeUndefined();
});
test("omits Eden AI reasoning options for non-reasoning models", () => {
const model = edenAIModel({
id: "openai/gpt-4o-mini",
model_name: "gpt-4o-mini",
owned_by: "openai",
context_length: 128_000,
});
const built = buildEdenAIModel(model);
expect(built).toMatchObject({ base_model: "openai/gpt-4o-mini" });
expect(built).not.toHaveProperty("reasoning_options");
});
test("skips Eden AI models without lab metadata", () => {
expect(
buildEdenAIModel(
edenAIModel({
id: "deepinfra/acme/Not-A-Real-Model",
model_name: "acme/Not-A-Real-Model",
owned_by: "deepinfra",
}),
),
).toBeUndefined();
});
test("names Eden AI regional deployments after the canonical model", () => {
expect(
buildEdenAIModel(
edenAIModel({
id: "amazon/anthropic.claude-opus-5@eu",
model_name: "anthropic.claude-opus-5",
owned_by: "amazon",
}),
),
).toMatchObject({
base_model: "anthropic/claude-opus-5",
name: "Claude Opus 5 (EU)",
});
});
test("builds Eden AI context tiers without reading time-based cache keys", () => {
const model = edenAIModel({
id: "openai/gpt-5.6-terra",
model_name: "gpt-5.6-terra",
owned_by: "openai",
list_pricing: {
input_cost_per_token: 0.000002,
output_cost_per_token: 0.000012,
input_cost_per_token_above_272k_tokens: 0.000004,
output_cost_per_token_above_272k_tokens: 0.000018,
cache_creation_input_token_cost_above_1hr: 0.000009,
cache_creation_input_token_cost_above_1hr_above_272k_tokens: 0.00001,
},
});
expect(buildEdenAIModel(model)).toMatchObject({
cost: {
input: 2,
output: 12,
tiers: [{ tier: { type: "context", size: 272_000 }, input: 4, output: 18 }],
},
});
expect(
(buildEdenAIModel(model) as { cost: { tiers: Array<Record<string, unknown>> } }).cost.tiers[0],
).not.toHaveProperty("cache_write");
});
test("keeps only the first-party Eden AI route when the lab's own API is relayed", () => {
const bedrock = edenAIModel({
id: "amazon/anthropic.claude-opus-5",
model_name: "anthropic.claude-opus-5",
owned_by: "amazon",
});
const direct = edenAIModel({
id: "anthropic/claude-opus-5",
model_name: "claude-opus-5",
owned_by: "anthropic",
});
const firstParty = collectFirstPartyBaseModels([bedrock, direct]);
expect(firstParty).toEqual(new Set(["anthropic/claude-opus-5"]));
expect(buildEdenAIModel(bedrock, firstParty)).toBeUndefined();
expect(buildEdenAIModel(direct, firstParty)).toMatchObject({
base_model: "anthropic/claude-opus-5",
});
});
test("keeps every Eden AI route for models with no first-party relay", () => {
const models = ["deepinfra", "groq", "cerebras"].map((owner) =>
edenAIModel({
id: `${owner}/openai/gpt-oss-120b`,
model_name: "openai/gpt-oss-120b",
owned_by: owner,
}),
);
const firstParty = collectFirstPartyBaseModels(models);
expect(firstParty.size).toBe(0);
for (const model of models) {
expect(buildEdenAIModel(model, firstParty)).toMatchObject({
base_model: "openai/gpt-oss-120b",
});
}
});
test("resolves Eden AI aliases to the model they point at", () => {
expect(
resolveEdenAIBaseModel(
edenAIModel({
id: "anthropic/claude-opus-latest",
model_name: "claude-opus-latest",
owned_by: "anthropic",
alias_of: "anthropic/claude-opus-5",
}),
),
).toBe("anthropic/claude-opus-5");
});
test("formats interleaved as a root field before reasoning option tables", () => {
const content = formatToml({
id: "example/model",
@@ -2037,6 +2501,11 @@ test("formats provider overrides and experimental modes", () => {
});
});
test("resolves DeepInfra ByteDance IDs to canonical metadata", () => {
expect(resolveDeepInfraBaseModel("ByteDance/Seed-2.0-code"))
.toBe("bytedance-seed/seed-2.0-code");
});
test("DeepInfra preserves live modalities for new base models", () => {
const model = buildDeepInfraModel(
deepInfraModel("Qwen/Qwen3.5-9B", ["multimodal", "input-video"]),
@@ -2160,6 +2629,29 @@ test("preserves authored Cortecs reasoning options missing from the API", () =>
});
});
test("overrides canonical metadata with Cortecs reasoning support", () => {
const model: CortecsModel = {
id: "apertus-70b",
created: 1_775_088_000,
pricing: { currency: "EUR", input_token: 1.25, output_token: 2 },
context_size: 65_536,
input_modalities: ["text"],
output_modalities: ["text"],
supported_features: ["reasoning", "tools"],
};
const existing: ExistingModel = {
base_model: "swiss-ai/apertus-70b",
reasoning: true,
reasoning_options: [],
};
expect(buildCortecsModel(model, existing, existing)).toMatchObject({
base_model: "swiss-ai/apertus-70b",
reasoning: true,
reasoning_options: [],
});
});
test("syncs OpenRouter reasoning efforts from model metadata", () => {
const model = buildOpenRouterModel(openRouterModel({
reasoning: {
@@ -2171,6 +2663,7 @@ test("syncs OpenRouter reasoning efforts from model metadata", () => {
expect(model).toMatchObject({
base_model: "anthropic/claude-sonnet-5",
reasoning_options: [
{ type: "toggle" },
{ type: "effort", values: ["max", "xhigh", "high", "medium", "low"] },
],
});
@@ -2229,17 +2722,23 @@ test("factors OpenRouter Pro routes against canonical OpenAI metadata", () => {
// Ensures Merge Gateway namespaces reuse the matching canonical model metadata.
test("resolves Merge Gateway provider aliases to canonical metadata", () => {
expect([
resolveCanonicalBaseModel("bytedance-seed/seed-2.0-code"),
resolveCanonicalBaseModel("bytedance/dola-seed-2.0-code"),
resolveCanonicalBaseModel("moonshot/kimi-k2.5"),
resolveCanonicalBaseModel("moonshot/kimi-k2.6"),
resolveCanonicalBaseModel("moonshot/kimi-k2.7-code"),
resolveCanonicalBaseModel("moonshot/kimi-k2.7-code-highspeed"),
resolveCanonicalBaseModel("sakana/fugu-ultra"),
resolveCanonicalBaseModel("meta/muse-glimmer-30b"),
]).toEqual([
"bytedance-seed/seed-2.0-code",
"bytedance-seed/seed-2.0-code",
"moonshotai/kimi-k2.5",
"moonshotai/kimi-k2.6",
"moonshotai/kimi-k2.7-code",
"moonshotai/kimi-k2.7-code-highspeed",
"sakana/fugu-ultra",
"meta/muse-glimmer-30b",
]);
});
@@ -2282,6 +2781,7 @@ test("prefers OpenRouter API reasoning options over authored ones", () => {
expect(model).toMatchObject({
reasoning_options: [
{ type: "toggle" },
{ type: "effort", values: ["max", "xhigh", "high", "medium", "low"] },
],
});
@@ -2334,6 +2834,7 @@ test("upgrades empty OpenRouter reasoning options from model metadata", () => {
expect(model).toMatchObject({
reasoning_options: [
{ type: "toggle" },
{ type: "effort", values: ["high", "medium", "low"] },
],
});
@@ -2355,6 +2856,62 @@ test("factors new LLM Gateway models against the canonical base metadata", () =>
expect("modalities" in model).toBe(false);
});
test("syncs explicitly advertised LLM Gateway reasoning efforts", () => {
const model = buildLLMGatewayModel(llmGatewayModel({
id: "seed-2-1-turbo",
name: "Seed 2.1 Turbo",
family: "bytedance",
providers: [{
reasoning_efforts: ["high", "none", "max", "low", "xhigh", "minimal", "medium"],
}],
}), undefined);
expect(model).toMatchObject({
reasoning_options: [{
type: "effort",
values: ["none", "minimal", "low", "medium", "high", "xhigh", "max"],
}],
});
});
test("unions LLM Gateway reasoning efforts in canonical order", () => {
const model = buildLLMGatewayModel(llmGatewayModel({
id: "unreviewed-reasoner",
providers: [
{ reasoning_efforts: ["high", "low"] },
{ reasoning_efforts: ["none", "low", "xhigh"] },
],
}), undefined);
expect(model).toMatchObject({
reasoning_options: [{
type: "effort",
values: ["none", "low", "high", "xhigh"],
}],
});
});
test("keeps non-effort LLM Gateway controls when syncing efforts", () => {
const model = buildLLMGatewayModel(llmGatewayModel({
providers: [{ reasoning_efforts: ["none", "low", "high"] }],
}), {
name: "Claude Fable 5",
reasoning: true,
reasoning_options: [
{ type: "toggle" },
{ type: "budget_tokens", min: 1024 },
{ type: "effort", values: ["low"] },
],
});
expect(model).toMatchObject({
reasoning_options: [
{ type: "budget_tokens", min: 1024 },
{ type: "effort", values: ["none", "low", "high"] },
],
});
});
test("factors aliased LLM Gateway routes against canonical metadata", () => {
const model = buildLLMGatewayModel(llmGatewayModel({
id: "glm-5-2",
@@ -2381,6 +2938,29 @@ test("factors aliased LLM Gateway routes against canonical metadata", () => {
});
});
test("factors Grok LLM Gateway routes against xAI metadata", () => {
const model = buildLLMGatewayModel(llmGatewayModel({
id: "grok-4-6",
name: "Grok 4.6",
family: "grok",
context_length: 500_000,
pricing: {
prompt: "2e-6",
completion: "6e-6",
input_cache_read: "0.5e-6",
},
}), undefined);
expect(model).toEqual({
base_model: "xai/grok-4.6",
cost: {
input: 2,
output: 6,
cache_read: 0.5,
},
});
});
// Ensures catalog pagination preserves authentication and returns every page.
test("fetches every page of the Merge Gateway catalog", async () => {
const requests: string[] = [];
@@ -2559,6 +3139,23 @@ test("confirms reasoning when any available Merge Gateway route reports supports
expect(model).not.toMatchObject({ reasoning: false });
});
// The live catalog emits reasoning: null on some routes even when
// supports_reasoning is true. Treat that as unknown controls, not a crash.
test("tolerates a null Merge Gateway reasoning object when reasoning is confirmed", () => {
const selected = mergeGatewayVendor();
selected.capabilities.supports_reasoning = true;
selected.capabilities.reasoning = null;
const model = buildMergeGatewayModel(mergeGatewayModel({
vendors: { openai: selected },
}), {
base_model: "openai/gpt-5.6-sol",
cost: { input: 5, output: 30 },
});
expect(model).toMatchObject({ reasoning_options: [] });
expect(model).not.toMatchObject({ reasoning: false });
});
// Publishes a toggle only when the selected route explicitly supports disabling reasoning.
test("derives a Merge Gateway reasoning toggle when the selected route supports disabling", () => {
const selected = mergeGatewayVendor();
@@ -3139,6 +3736,7 @@ test("syncs EmpirioLabs pricing tiers and reasoning controls", () => {
test("maps EmpirioLabs aliases to canonical model metadata", () => {
expect(resolveEmpiriolabsBaseModel("fugu-ultra")).toBe("sakana/fugu-ultra");
expect(resolveEmpiriolabsBaseModel("seed-2-0-code")).toBe("bytedance-seed/seed-2.0-code");
expect(resolveEmpiriolabsBaseModel("muse-spark-1-1")).toBe("meta/muse-spark-1.1");
expect(resolveEmpiriolabsBaseModel("step-3-5-flash")).toBe("stepfun/step-3.5-flash");
});
@@ -3171,6 +3769,7 @@ function llmGatewayModel(overrides: Partial<LLMGatewayModel> = {}): LLMGatewayMo
input_cache_write: "12.5e-6",
internal_reasoning: "0",
},
providers: [{}],
context_length: 1_000_000,
supported_parameters: ["temperature", "max_tokens", "top_p", "effort", "reasoning"],
structured_outputs: true,
@@ -3216,6 +3815,26 @@ function mergeGatewayModel(overrides: Partial<MergeGatewayModel> = {}): MergeGat
};
}
function edenAIModel(overrides: Partial<EdenAIModel> = {}): EdenAIModel {
return {
id: "openai/gpt-5.6-terra",
owned_by: "openai",
model_name: "gpt-5.6-terra",
context_length: 1_050_000,
capabilities: {
input_modalities: ["text", "image"],
output_modalities: ["text"],
supports_function_calling: true,
supports_response_schema: true,
},
list_pricing: {
input_cost_per_token: 0.000002,
output_cost_per_token: 0.000012,
},
...overrides,
};
}
function hyperModel(overrides: Partial<HyperModel> = {}): HyperModel {
return {
id: "deepseek-v4-flash",
+2
View File
@@ -18,6 +18,7 @@ export type ModelFamily =
| "claude"
| "claude-fable"
| "claude-haiku"
| "claude-mythos"
| "claude-opus"
| "claude-sonnet"
| "codestral"
@@ -172,6 +173,7 @@ export type ModelFamily =
| "qwen3.6"
| "qwen3.7-max"
| "qwen3.7-plus"
| "qwen3.8-max"
| "qwerky"
| "ray"
| "recraft"
@@ -0,0 +1,18 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1000000
# RouteLLM max_completion_tokens: 128000
# RouteLLM input_token_rate: 0.000005
# RouteLLM output_token_rate: 0.000025
# RouteLLM thinking: True
base_model = "anthropic/claude-opus-5"
reasoning_options = []
[cost]
input = 5
output = 25
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,15 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image']
# RouteLLM output_modalities: ['text', 'image']
# RouteLLM context_length: 65536
# RouteLLM max_completion_tokens: 32768
# RouteLLM input_token_rate: 0.000002
# RouteLLM output_token_rate: 0.000012
# RouteLLM cached_input_token_rate: 0.0000002
base_model = "google/gemini-3-pro-image"
reasoning_options = []
[cost]
input = 2
output = 12
cache_read = 0.2
@@ -0,0 +1,20 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image']
# RouteLLM output_modalities: ['text', 'image']
# RouteLLM context_length: 1048576
# RouteLLM max_completion_tokens: 32768
# RouteLLM input_token_rate: 0.0000005
# RouteLLM output_token_rate: 0.000003
base_model = "google/gemini-3.1-flash-image"
reasoning_options = []
[cost]
input = 0.5
output = 3
[limit]
context = 1_048_576
[modalities]
input = ["text", "image"]
output = ["text", "image"]
@@ -0,0 +1,20 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'audio']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1048576
# RouteLLM max_completion_tokens: 65536
# RouteLLM input_token_rate: 0.0000003
# RouteLLM output_token_rate: 0.0000025
# RouteLLM cached_input_token_rate: 0.00000003
# RouteLLM thinking: True
base_model = "google/gemini-3.5-flash-lite"
reasoning_options = []
[cost]
input = 0.3
output = 2.5
cache_read = 0.03
[modalities]
input = ["text", "image", "audio"]
output = ["text"]
@@ -0,0 +1,20 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'audio']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1048576
# RouteLLM max_completion_tokens: 65536
# RouteLLM input_token_rate: 0.0000015
# RouteLLM output_token_rate: 0.0000075
# RouteLLM cached_input_token_rate: 0.00000015
# RouteLLM thinking: True
base_model = "google/gemini-3.6-flash"
reasoning_options = []
[cost]
input = 1.5
output = 7.5
cache_read = 0.15
[modalities]
input = ["text", "image", "audio"]
output = ["text"]
@@ -0,0 +1,20 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'audio', 'video']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1048576
# RouteLLM max_completion_tokens: 65536
# RouteLLM input_token_rate: 0.00000075
# RouteLLM output_token_rate: 0.00000375
# RouteLLM cached_input_token_rate: 0.000000075
# RouteLLM thinking: True
base_model = "google/gemini-3.7-flash"
reasoning_options = []
[cost]
input = 0.75
output = 3.75
cache_read = 0.075
[modalities]
input = ["text", "image", "audio", "video"]
output = ["text"]
+19
View File
@@ -0,0 +1,19 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 500000
# RouteLLM max_completion_tokens: 32768
# RouteLLM input_token_rate: 0.000002
# RouteLLM output_token_rate: 0.000006
# RouteLLM cached_input_token_rate: 0.0000005
# RouteLLM thinking: True
base_model = "xai/grok-4.6"
reasoning_options = []
[cost]
input = 2
output = 6
cache_read = 0.5
[limit]
output = 32_768
@@ -0,0 +1,15 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'video']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 262144
# RouteLLM max_completion_tokens: 262144
# RouteLLM input_token_rate: 0.00000095
# RouteLLM output_token_rate: 0.000004
# RouteLLM cached_input_token_rate: 0.00000019
base_model = "moonshotai/kimi-k2.7-code"
reasoning_options = []
[cost]
input = 0.95
output = 4
cache_read = 0.19
@@ -0,0 +1,15 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'video']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1048576
# RouteLLM max_completion_tokens: 131072
# RouteLLM input_token_rate: 0.000003
# RouteLLM output_token_rate: 0.000015
# RouteLLM cached_input_token_rate: 0.0000003
base_model = "moonshotai/kimi-k3"
reasoning_options = []
[cost]
input = 3
output = 15
cache_read = 0.3
@@ -0,0 +1,20 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'audio', 'video']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1048576
# RouteLLM max_completion_tokens: 131072
# RouteLLM input_token_rate: 0.00000125
# RouteLLM output_token_rate: 0.00000425
# RouteLLM cached_input_token_rate: 0.00000015
# RouteLLM thinking: True
base_model = "meta/muse-spark-1.2"
reasoning_options = []
[cost]
input = 1.25
output = 4.25
cache_read = 0.15
[modalities]
input = ["text", "image", "audio", "video"]
output = ["text"]
+17
View File
@@ -0,0 +1,17 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1000000
# RouteLLM max_completion_tokens: 64000
# RouteLLM input_token_rate: 0.0000025
# RouteLLM output_token_rate: 0.0000075
# RouteLLM thinking: True
base_model = "alibaba/qwen3.7-max"
reasoning_options = []
[cost]
input = 2.5
output = 7.5
[limit]
output = 64_000
+18
View File
@@ -0,0 +1,18 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image', 'video']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 1000000
# RouteLLM max_completion_tokens: 131072
# RouteLLM input_token_rate: 0.000002
# RouteLLM output_token_rate: 0.000006
# RouteLLM thinking: True
base_model = "alibaba/qwen3.8-max"
reasoning_options = []
[cost]
input = 2
output = 6
[modalities]
input = ["text", "image", "video"]
output = ["text"]
@@ -0,0 +1,24 @@
# Source: https://routellm.abacus.ai/v1/models
# RouteLLM input_modalities: ['text', 'image']
# RouteLLM output_modalities: ['text']
# RouteLLM context_length: 262144
# RouteLLM max_completion_tokens: 131072
# RouteLLM input_token_rate: 0.00000374
# RouteLLM output_token_rate: 0.00000936
# RouteLLM cached_input_token_rate: 0.000000748
# RouteLLM thinking: True
base_model = "thinkingmachines/inkling"
reasoning_options = []
[cost]
input = 3.74
output = 9.36
cache_read = 0.748
[limit]
context = 262_144
output = 131_072
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -17,4 +17,3 @@ output = 0.25
[limit]
context = 1_048_576
output = 384_000
@@ -11,9 +11,8 @@ type = "effort"
values = ["none", "minimal", "low", "medium", "high", "xhigh"]
[cost]
input = 1.00
output = 2.50
input = 1
output = 2.5
[limit]
context = 1_048_576
output = 384_000
@@ -14,9 +14,8 @@ type = "effort"
values = ["none", "minimal", "low", "medium", "high", "xhigh"]
[cost]
input = 0.20
output = 0.50
input = 0.2
output = 0.5
[modalities]
input = ["text", "image", "video", "pdf"]
output = ["text"]
@@ -13,8 +13,7 @@ values = ["none", "minimal", "low", "medium", "high", "xhigh"]
[cost]
input = 0.75
output = 3.50
output = 3.5
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
+11 -9
View File
@@ -6,19 +6,21 @@
# text+image+video. PDF kept: sibling aiand Moonshot entries (kimi-k2.6,
# kimi-k2.7-code) include pdf after catalog/probe evidence; aiand treats
# PDF as a provider-level Files API modality.
# reasoning_effort verified live: gateway schema accepts
# none/minimal/low/medium/high/xhigh/max, but the K3 backend only accepts
# none/low/high/max (minimal/medium/xhigh rejected). Invalid values rejected
# with 400 (negative control).
# reasoning_effort: K3 backend accepts only low/high/max per official docs
# (https://platform.kimi.ai/docs/guide/kimi-k3-quickstart). The aiand gateway
# schema lists none/minimal/low/medium/high/xhigh/max but K3 rejects
# none/minimal/medium/xhigh with 400. aiand does not expose a separate off
# toggle; K3 always reasons.
base_model = "moonshotai/kimi-k3"
reasoning_options = [{ type = "effort", values = ["none", "low", "high", "max"] }]
[[reasoning_options]]
type = "effort"
values = ["low", "high", "max"]
[cost]
input = 3.00
cache_read = 0.50
output = 12.50
input = 3
output = 12.5
cache_read = 0.5
[modalities]
input = ["text", "image", "pdf"]
output = ["text"]
@@ -0,0 +1,23 @@
name = "Motif 3"
description = "Motif 3 is a large-scale, decoder-only Mixture-of-Experts (MoE) language model with 314 billion total parameters and 13.2 billion parameters activated per token."
release_date = "2026-08-12"
last_updated = "2026-08-12"
attachment = false
reasoning = true
temperature = false
tool_call = false
structured_output = false
open_weights = false
reasoning_options = []
[cost]
input = 0.5
output = 2
[limit]
context = 262_144
output = 262_144
[modalities]
input = ["text"]
output = ["text"]
+7 -9
View File
@@ -1,6 +1,7 @@
# Source: https://docs.aiand.com/models/catalog/ (USD list prices; accessed
# 2026-07-24) and live probes against api.aiand.com on the same date.
# Listed as free ("no charges, ideal for evals") in the catalog's Quick picks.
# Source: GET https://api.aiand.com/v1/models (USD list prices; accessed
# 2026-07-28). The catalog Quick-picks section still lists this model as free,
# but the live endpoint reports input = $0.32 / output = $3.20 per 1M tokens,
# so pricing is taken from the API.
# ai&'s deployment rejects image input ("does not support image input") and
# the catalog lists no vision/video/audio capability, so modalities are
# overridden from the shared base model's text+image+video+audio to text-only,
@@ -9,16 +10,13 @@
# values accepted; invalid values rejected with 400 (negative control).
base_model = "alibaba/qwen3.6-27b"
attachment = false
[[reasoning_options]]
type = "effort"
values = ["none", "minimal", "low", "medium", "high", "xhigh"]
[cost]
input = 0
output = 0
input = 0.32
output = 3.2
[modalities]
input = ["text"]
output = ["text"]
input = ["text", "image", "video", "pdf"]
+2 -3
View File
@@ -11,9 +11,8 @@ type = "effort"
values = ["none", "minimal", "low", "medium", "high", "xhigh"]
[cost]
input = 1.00
output = 4.00
input = 1
output = 4
[limit]
context = 1_048_576
output = 131_072
@@ -0,0 +1,15 @@
# AIHubMix Anthropic-compatible /v1/messages: $.thinking.type = "disabled"|"adaptive" (toggle) and $.output_config.effort = "low"|"medium"|"high"|"xhigh"|"max"; verified live 2026-08-11. https://docs.aihubmix.com/cn/api-reference/anthropic-compatible/create-a-message
base_model = "anthropic/claude-opus-5"
structured_output = true
reasoning_options = [{ type = "toggle" }, { type = "effort", values = ["low", "medium", "high", "xhigh", "max"] }]
interleaved = true
[cost]
input = 5
output = 25
cache_read = 0.5
cache_write = 6.25
[modalities]
input = ["text", "image"]
output = ["text"]
@@ -0,0 +1,10 @@
base_model = "google/gemini-3.7-flash"
# AIHubMix unified Chat: $.reasoning_effort = low|medium|high
# https://docs.aihubmix.com/cn/api/unified-inference
reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }]
[cost]
input = 0.75
output = 3.75
cache_read = 0.075

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