Skip to content

desktop: model picker tooltip shows "No reasoning" for every model (reasoning capability hardcoded to false) #54195

Closed as duplicate

Description

@junhuwh

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

  1. Open OpenCode Desktop 2.0.26 with any model provider connected (reproduced with the built-in opencode and nvidia/amd providers).
  2. Open the model picker and hover a model to show its capability tooltip.
  3. 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.

  1. The adapter that maps server Model.Info to 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
  },
  // ...
};
  1. The tooltip logic then trusts capabilities.reasoning whenever capabilities exists (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-free shows "reasoning": 49 in token stats; an extended coding session on the same model accumulated "reasoning": 256662 tokens. The nvidia deepseek 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/model output for these models includes compatibility.reasoningField: "reasoning_content" and (for nvidia) the effort variants, confirming the server-side data is correct.
  • The Model.Info schema (@opencode/schema) no longer carries a top-level reasoning field — capabilities are { tools, input, output } — so the adapter has no runtime flag to read; deriving it (e.g. from variants/compatibility/provider catalog data) or surfacing the catalog reasoning value through the API would fix the tooltip.
  • Reproducible every time, 100%.

Activity

  1. opencode-agent commented on Oct 9, 2026

    @opencode-agent
    Contributor

    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:

    You also found that temperature and interleaved are hardcoded to false in 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.

  2. opencode-agent commented on Oct 10, 2026

    @opencode-agent
    Contributor

    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 about temperature and interleaved being 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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions