You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Settings → Models: per-model reasoningEfforts missing from the editor; Fetch available models never consults the live endpoint for catalog routes
#4071
Title: Settings → Models: hand-added models get no Effort picker (reasoningEfforts not settable in the UI), and "Fetch available models" never consults the live endpoint for known providers
Environment
DeepSeek Harness @deepseek-ai/dsh@0.1.1-rc.2 (installed via npx), web GUI
macOS 14 (Apple Silicon), OpenRouter route with API key
Steps to reproduce
Find an OpenRouter model that is not in your build's shipped catalog — e.g. any newly listed or stealth/* model. At 0.1.1-rc.2 the bundled catalog (@earendil-works/pi-ai@0.82.1, dist/providers/data/openrouter.json) has 276 OpenRouter models while the live /api/v1/models lists 421+, including stealth/ox-alpha.
In Settings → Models → OpenRouter → Customized settings, add the model (id, name, context window, max tokens). It works — requests succeed.
Look at the composer's model picker: there is no Effort control for this model, even though the model reasons by default (OpenRouter metadata: reasoning.mandatory = true).
Observed behavior / root cause
A hand-added entry has no installed-catalog twin, so resolveModelReasoning() in @deepseek-ai/dsh-llm-pi-ai resolves it as { reasoning: false } unless the entry declares reasoningEfforts.
The Models page deliberately offers no effort field — its source comments explain that effort is a per-model capability and a per-provider control would be wrong. Agreed — but that argues for a per-model field, which is exactly what's missing.
The only workaround is hand-editing ~/.dsh/settings.yaml:
- id: stealth/ox-alphaname: Ox AlphareasoningEfforts:
low: low # key = selectable level, value = wire spellinghigh: high # dispatched as reasoning.effort on openrouter-format routesmax: max
After adding that block the Effort menu renders Low/High/Max correctly. The schema rules (allowed keys, omitted ⇒ unsupported, only off: may be empty) exist only in source docstrings, not user-facing docs.
Separately, "Fetch available models" cannot help: discoverModels() returns catalogModels(provider) whenever the provider ships a catalog, so for known providers it re-lists the same bundled entries and never hits the network. Live listing only happens for custom providers where the user typed a base URL.
Requests
Expose reasoningEfforts as a per-model field in the Settings → Models editor (the models grid already edits id/name/contextWindow/maxTokens).
Give "Fetch available models" a live option for catalog routes — or fall back to {baseURL}/models when the user explicitly asks to fetch — so models newer than the package build can be discovered from the GUI. The live-fetch code path already exists and parses OpenAI-style { data: [...] } responses fine.
Consider surfacing a hint when a hand-added model is silently treated as non-reasoning ("no effort levels declared").
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
Title: Settings → Models: hand-added models get no Effort picker (
reasoningEffortsnot settable in the UI), and "Fetch available models" never consults the live endpoint for known providersEnvironment
@deepseek-ai/dsh@0.1.1-rc.2(installed vianpx), web GUISteps to reproduce
stealth/*model. At0.1.1-rc.2the bundled catalog (@earendil-works/pi-ai@0.82.1,dist/providers/data/openrouter.json) has 276 OpenRouter models while the live/api/v1/modelslists 421+, includingstealth/ox-alpha.reasoning.mandatory = true).Observed behavior / root cause
A hand-added entry has no installed-catalog twin, so
resolveModelReasoning()in@deepseek-ai/dsh-llm-pi-airesolves it as{ reasoning: false }unless the entry declaresreasoningEfforts.The Models page deliberately offers no effort field — its source comments explain that effort is a per-model capability and a per-provider control would be wrong. Agreed — but that argues for a per-model field, which is exactly what's missing.
The only workaround is hand-editing
~/.dsh/settings.yaml:After adding that block the Effort menu renders Low/High/Max correctly. The schema rules (allowed keys, omitted ⇒ unsupported, only
off:may be empty) exist only in source docstrings, not user-facing docs.Separately, "Fetch available models" cannot help:
discoverModels()returnscatalogModels(provider)whenever the provider ships a catalog, so for known providers it re-lists the same bundled entries and never hits the network. Live listing only happens for custom providers where the user typed a base URL.Requests
reasoningEffortsas a per-model field in the Settings → Models editor (the models grid already edits id/name/contextWindow/maxTokens).{baseURL}/modelswhen the user explicitly asks to fetch — so models newer than the package build can be discovered from the GUI. The live-fetch code path already exists and parses OpenAI-style{ data: [...] }responses fine.Happy to split into separate issues if you prefer. A community writeup of the full workaround lives here: https://github.com/Ali0600/dsh-openrouter-models.
All reactions