Repository navigation
Conversation
Contributor
Action items
|
Copy each model's lab effort levels, add the DeepSeek and Qwen toggles and the Qwen/Claude budgets that AtmoRouter forwards (verified live), and scope provider.toml to Chat Completions only.
Contributor
Action items
|
Contributor
|
No actionable findings. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds AtmoRouter (https://atmorouter.dev) as provider
atmorouter. AtmoRouter is a multi-model relay. This entry models only its OpenAI-compatible Chat Completions API; no[api.messages]tables are added.https://atmorouter.dev/v1. Authentication:ATMOROUTER_API_KEY. npm:@ai-sdk/openai-compatible.base_model(schema 2).logo.svgis AtmoRouter's bolt mark:currentColor, square0 0 32 32viewBox, no fixed dimensions.OpenCode consumes this registry, so no OpenCode source change is needed.
Sources and scope
Model IDs, context/output limits and input kinds come from AtmoRouter's public catalog at
GET https://atmorouter.dev/v1/models, fetched on 2026-10-25. The authenticated list had 167 entries. Lab facts and release dates are inherited throughbase_model, not guessed.costwould understate what users pay. The reason is recorded inprovider.tomland in each model's header comment.limit.inputwould then exceed the new context,base_model_omit = ["limit.input"]drops it.reasoning_effort. Each model copies the reasoning controls of its lab entry (effort levels, toggle, budget). A toggle or budget is kept only when a live call showed AtmoRouter forwards that field (see "Reasoning controls" below); no universal ladder is invented.kimi-k2.7-codeissupported = truewith no effort list, like its lab entry.minimax-m3copies the lab's toggle. Through AtmoRouter, thinking is on whenthinkingis omitted and off withthinking.type = disabled, so the default is recorded as on.claude-sonnet-5leaves out the lab's toggle becausethinking.type = disabledstill returned reasoning through AtmoRouter.system_updates,effort_updatesandtools.updatesare left unset, because AtmoRouter does not document them.moon/kimi-k3returned HTTP 502 in testing and was left out in favour ofcb/kimi-k3, which passed.Docs: AtmoRouter, docs, models.
Validation
On Linux with Bun 1.4.2, against
devat7cd0423:bun install --frozen-lockfile: passed.bun validate: passed.cd packages/sdk && bun run test: passed, 25 tests, 0 failures.git diff --cached --check: passed.bun run v1:check: exits 1, and every reported change is an addition.atmorouter/*models as "Added to v1" and the new provider's fields (id,env,npm,api,name,doc) as added. It reports "v1 output changed in 3 of 22 views".v2_only, I'm happy to change that.Live test
Run on 25 Oct 2026, about 16:50–17:10 WIB (UTC+7), against
https://atmorouter.dev/v1with a real AtmoRouter key. The key is not in this PR or its logs.GET /v1/modelsreturned HTTP 200 in 1.14s with 167 models. All 27 IDs below are listed.Reply with exactly: pongat temperature 0.2 and max_tokens 256, once non-streaming and once streaming.pong, and every stream ended with[DONE].cb/gemini-3.1-pronon-streaming call was slow in this single sample; its stream finished in about 5s.reasoning_effortset to the lowest and the highest value in each model's effort list. Every call returned HTTP 200 (the lists were revised after review; the changed boundaries were re-sent at about 17:25 WIB).cc/claude-sonnet-4-6anthropic/claude-sonnet-4-6low200,max200cc/claude-opus-4-7anthropic/claude-opus-4-7low200,max200cc/claude-opus-4-6anthropic/claude-opus-4-6low200,max200cc/claude-opus-4-8anthropic/claude-opus-4-8low200,max200cc/claude-haiku-4-5anthropic/claude-haiku-4-5cc/claude-sonnet-5anthropic/claude-sonnet-5low200,max200cc/claude-opus-5anthropic/claude-opus-5low200,max200cc/claude-sonnet-5-5anthropic/claude-sonnet-5-5low200,max200cc/claude-opus-5-5anthropic/claude-opus-5-5low200,max200cx/gpt-5.6-solopenai/gpt-5.6-solnone200,max200cx/gpt-5.6-lunaopenai/gpt-5.6-lunanone200,max200cx/gpt-5.6-terraopenai/gpt-5.6-terranone200,max200cx/gpt-6-solopenai/gpt-6-solnone200,max200cx/gpt-6.1-solopenai/gpt-6.1-sollow200,max200cb/gpt-5.3-codexopenai/gpt-5.3-codexnone200,xhigh200cb/gemini-3.1-progoogle/gemini-3.1-pro-previewlow200,high200cbcn/glm-5.3zhipuai/glm-5.3low200,max200cbcn/glm-5.3-flashzhipuai/glm-5.3-flashlow200,max200ali/kimi-k2.7-codemoonshotai/kimi-k2.7-codecb/kimi-k3moonshotai/kimi-k3low200,max200cb/kimi-k3.1-promoonshotai/kimi-k3.1-prolow200,max200ali/qwen3.8-maxalibaba/qwen3.8-maxlow200,xhigh200ali/qwen3.8-flashalibaba/qwen3.8-flashlow200,xhigh200ali/deepseek-v4.1-flashdeepseek/deepseek-v4.1-flashlow200,max200cbcn/deepseek-v4-prodeepseek/deepseek-v4-prolow200,max200cb/minimax-m3minimax/MiniMax-M3grok/grok-4.7xai/grok-4.7low200,xhigh200Reasoning controls (live, about 17:25–17:30 WIB)
A multi-step arithmetic prompt was sent to check which lab controls AtmoRouter actually forwards.
reasoning_tokenscomes fromusage.completion_tokens_details.cbcn/deepseek-v4-prothinking.type = disabledali/deepseek-v4.1-flashthinking.type = disabledali/qwen3.8-maxenable_thinking = false/thinking_budget = 200ali/qwen3.8-flashenable_thinking = false/thinking_budget = 200cb/gpt-5.3-codexreasoning_effort = nonecb/kimi-k3,cb/kimi-k3.1-proreasoning_effort = nonenonewas droppedcb/minimax-m3thinking.type = disabled/adaptive/enabledcc/claude-sonnet-5thinking.type = disabledcc/claude-haiku-4-5,cc/claude-sonnet-4-6thinking.budget_tokens = 1024/12000