web: model tooltip always shows "No reasoning" because capabilities.reasoning is hard-coded false
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 68/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- typescript
- Ambito
- frontend
Direzione di ricerca
Individua il codice della UI Web che converte i modelli del server nella struttura dei modelli lato client; l’issue indica l’assegnazione di capabilities.reasoning e il modello variants come dati pertinenti. Leggi come vengono rappresentate variants e come il tooltip legge la capability, poi verifica se esistono già test sulla mappatura dei modelli o sul selettore dei modelli. Il lavoro è completato quando i modelli con varianti di reasoning mostrano «Allows reasoning» e quelli senza mostrano «No reasoning», mantenendo disponibili le varianti corrispondenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
In the Web UI, the model picker tooltip reports "No reasoning" for every model, even ones that clearly expose reasoning. Reasoning detection is driven by capabilities.reasoning, which the client hard-codes to false (and which the V2 model payload never populates) instead of being derived from the model's variants (thinking / effort). Result: users believe no model supports reasoning.
Environment
- opencode version: 2.0.26
- OS: Linux VM-0-3-ubuntu 7.0.0-38-generic #38-Ubuntu SMP PREEMPT_DYNAMIC Fri Sep 4 09:10:14 UTC 2026 x86_64 GNU/Linux
- Terminal: Web UI in a browser (client served by
opencode serve --serviceon:port); shell TERM=xterm-256color - Shell: /bin/bash
- Install/channel: latest installer,
/home/ubuntu/.opencode/bin/opencode - Active plugins: none found in config
Reproduction
/connect→ select the built-in OpenCode Console provider and enter an API key (provider idopencode).- Start/serve the Web UI (
opencode serve; in our case the shared background service athttp://<host>:<port>). - Open the model picker and hover/inspect a model that supports reasoning, e.g. Claude Haiku 5.5 (
opencode/claude-haiku-5-5). - The tooltip's Reasoning row shows "No reasoning".
The same happens for every model in the provider, e.g. opencode/gpt-5.5, opencode/claude-opus-5-5, opencode/glm-5.3.
Expected Behavior
A model that exposes reasoning variants should show "Allows reasoning" (and offer the corresponding variants).
Actual Behavior
Every model shows "No reasoning", regardless of its actual capabilities. No error is raised.
Additional Context
Server truth contradicts the tooltip. opencode api get /api/model returns reasoning variants for opencode/claude-haiku-5-5:
{
"id": "claude-haiku-5-5",
"providerID": "opencode",
"package": "@opencode/ai/providers/anthropic",
"capabilities": { "tools": true, "input": ["text","image","pdf"], "output": ["text"] },
"variants": [
{ "id": "none", "settings": { "thinking": { "type": "disabled" } } },
{ "id": "low", "settings": { "thinking": { "type": "adaptive", "display": "summarized" }, "effort": "low" } },
{ "id": "medium", "settings": { "thinking": { "type": "adaptive", "display": "summarized" }, "effort": "medium" } },
{ "id": "high", "settings": { "thinking": { "type": "adaptive", "display": "summarized" }, "effort": "high" } },
{ "id": "xhigh", "settings": { "thinking": { "type": "adaptive", "display": "summarized" }, "effort": "xhigh" } },
{ "id": "max", "settings": { "thinking": { "type": "adaptive", "display": "summarized" }, "effort": "max" } }
]
}
The V2 OpenAPI Model.Capabilities schema only defines { tools, input, output } — there is no reasoning field. Reasoning is expressed through variants (settings.thinking / settings.effort) and compatibility.reasoningField.
Client hard-codes the flag. In the served client bundle (_assets/runtime-*.js), server models are mapped into a models.dev-shaped object with reasoning forced to false:
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: false,
reasoning: false, // <-- hard-coded; never derived from e.variants
attachment: e.capabilities.input.some(x => x !== `text`),
toolcall: e.capabilities.tools,
input: { text: ..., audio: ..., image: ..., video: ..., pdf: ... },
output: { text: ..., audio: ..., image: ..., video: ..., pdf: ... },
interleaved: false,
},
...
variants: Object.fromEntries(e.variants.map(e => [e.id, e.settings ?? {}])),
}
The tooltip then chooses its label from this flag (i18n keys in the client bundle):
"model.tooltip.reasoning": "Reasoning"
"model.tooltip.reasoning.allowed": "Allows reasoning"
"model.tooltip.reasoning.none": "No reasoning"
Because capabilities.reasoning is always false, the none label is always selected.
Impact: display-only. Selecting a reasoning variant (e.g. #high) still works, but the UI misleads users into thinking reasoning is unsupported. Suggested fix: derive reasoning from whether the model exposes reasoning variants (e.g. any variant carrying settings.thinking), or from a dedicated capability on the model payload.
Frequency: reproducible consistently on every load.
- Lingua principale
- TypeScript
- Stelle
- 213k
- Fork
- 28.4k
- Merge medio
- 7h 50m
- PR unite (30g)
- 295
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di anomalyco/opencode
-
reproduced
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
anomalyco/opencode#54769 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
TUI crash: undefined is not an object (evaluating 'r.text.feedback[t.toast.variant].base')Forse già presa Una pull request collegata a questa issue è aperta o già unita. Apertareproduced
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
anomalyco/opencode#54762 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
anomalyco/opencode#54757 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
anomalyco/opencode#54714 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
bug(ui): V2 AnimatedNumber exposes animation digits and reversed reading order to screen readersForse già presa @argszero l’ha presa oggi. Apertareproduced
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
anomalyco/opencode#54653 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di anomalyco/opencode
Issue simili
-
cleanName keeps a state code that's joined to the word before it (SavannahGa → "Savannah Ga")Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
openwatersio/slackwater-database#281 ·
I maintainer di solito rispondono entro 1 giorno
-
accepted bug via-triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
pingdotgg/t3code#18690 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Bayern feature:Application ready web
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
digitalfabrik/entitlementcard#3176 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
NanmiCoder/cc-haha#1533 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
I maintainer di solito rispondono entro 1 giorno