Repository navigation
Description
Summary
Desktop 2.0.26: the model picker tooltip shows "No reasoning" for every model, even for models whose models.dev catalog entry has reasoning: true. The cause is an adapter in the desktop renderer that hardcodes reasoning: false (and temperature: false) when converting server model info into the internal catalog format, so the tooltip logic always reads the hardcoded false instead of real capability data.
Environment
- opencode version: 2.0.26
- OS: Windows_NT 10.0.26300 (win32 x64)
- Terminal: Unavailable: desktop app (renderer), terminal env vars not set
- Shell: C:\WINDOWS\system32\cmd.exe
- Install/channel: release (Desktop installer,
@opencode-aidesktop) - Active plugins: ./plugins-src/rate-limit-fallback (unrelated to this bug)
Reproduction
- Open OpenCode Desktop 2.0.26 with any model provider connected (reproduced with the built-in
opencodeandnvidia/amdproviders). - Open the model picker and hover a model to show its capability tooltip.
- Observe the "Reasoning" row.
Expected Behavior
The tooltip should show "Allows reasoning" for models whose catalog entry has reasoning: true — e.g. opencode/mimo-v2.6-flash-free, nvidia/deepseek-ai/deepseek-v4.1-flash (which also exposes effort variants none/low/high/max), and amd/DeepSeek-V4.1-Flash. Local models.json cache confirms all three have "reasoning": true.
Actual Behavior
Every model shows "No reasoning" in the tooltip.
Two code sites in the bundled renderer (out/renderer/assets/main-*.js) are involved.
- The adapter that maps server
Model.Infoto the internal catalog format hardcodes the flags:
t.models[e.id] = {
id: e.id,
providerID: e.providerID,
api: { id: e.modelID, url: ``, npm: e.package ?? t.id },
name: e.name,
family: e.family,
capabilities: {
temperature: !1, // hardcoded false
reasoning: !1, // hardcoded false — never reads catalog reasoning
attachment: e.capabilities.input.some((e) => e !== `text`), // derived correctly
toolcall: e.capabilities.tools, // derived correctly
input: { /* derived from e.capabilities.input */ },
output: { /* derived from e.capabilities.output */ },
interleaved: !1, // hardcoded false
},
// ...
};- The tooltip logic then trusts
capabilities.reasoningwhenevercapabilitiesexists (which it always does, since the adapter always sets it):
s = () =>
e.model.capabilities
? e.model.capabilities.reasoning
? t.t(`model.tooltip.reasoning.allowed`) // "Allows reasoning"
: t.t(`model.tooltip.reasoning.none`) // "No reasoning"
: e.model.reasoning
? t.t(`model.tooltip.reasoning.allowed`)
: t.t(`model.tooltip.reasoning.none`)Because the adapter always attaches capabilities with reasoning: false, the fallback branch (e.model.reasoning, which would be correct for catalog data) is never reached.
Note that the same adapter also hardcodes temperature: !1 and interleaved: !1, so those indicators are wrong for all models as well.
Additional Context
- Runtime verification: reasoning works fine despite the tooltip. A session with
opencode/mimo-v2.6-flash-freeshows"reasoning": 49in token stats; an extended coding session on the same model accumulated"reasoning": 256662tokens. Thenvidiadeepseek model exposes effort variants (none/low/high/max) that are passed through separately and remain switchable via "Cycle thinking effort", so this is purely a display bug in the tooltip path. - Server
/api/modeloutput for these models includescompatibility.reasoningField: "reasoning_content"and (for nvidia) the effort variants, confirming the server-side data is correct. - The
Model.Infoschema (@opencode/schema) no longer carries a top-levelreasoningfield — capabilities are{ tools, input, output }— so the adapter has no runtime flag to read; deriving it (e.g. fromvariants/compatibility/provider catalog data) or surfacing the catalogreasoningvalue through the API would fix the tooltip. - Reproducible every time, 100%.
Activity
opencode-agent commentedon Oct 9, 2026
Thanks for the detailed write-up and root-cause analysis! I think this is a duplicate of #50257, which reports the same "No reasoning" tooltip for every V2 model. It has the same cause: the reasoning flag never reaches the app's model capabilities, and the desktop mapper hardcodes
reasoning: false. A fix for it is in review in #50283.Possible duplicates and related issues, ordered by likelihood:
capabilities.reasoningis never set, so the tooltip always shows "No reasoning"); PR fix(core): expose model reasoning capability #50283 targets itreasoning: trueYou also found that
temperatureandinterleavedare hardcoded tofalsein the same adapter. That would be a useful note to add on #50257.The bot will close this issue as a duplicate in 1 day unless you reply explaining how your problem is different.
opencode-agent commentedon Oct 10, 2026
We haven't heard back, so I'm closing this as a duplicate of #50257. That issue has the same bug: the desktop model tooltip shows "No reasoning" for every V2 model because the app's model mapper hardcodes
reasoning: false. A fix for it is in review in #50283. You can follow progress there, and adding your note abouttemperatureandinterleavedbeing hardcoded too would be useful.If your problem turns out to be different, reply here and we can reopen this. Thanks for the detailed report!