Repository navigation
[Bug] Adding a model through the catalog picker drops hand-declared fields (reasoningEfforts gone, no effort levels for custom providers) #11097
GnaneshKunal
started this conversation in
General
Replies: 1 comment
|
Follow-up from the reporter: a plugin-side workaround now ships, and the upstream fix is still the right one. I hit this while building
The exact drop I traced, for whoever picks this up: Source for the workaround (MIT-ish, reference only, no obligation to look): https://github.com/GnaneshKunal/dsh-openrouter-plus |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Environment:
dsh0.2.1-rc.3, macOS 15.7 (Apple Silicon). Affected package:@deepseek-ai/dsh-client-ui-settings-models@0.2.1-rc.3.What happens
Adding a model to a provider route through the catalog picker in Settings → Models creates that row with only the fields the catalog knows about. Anything the operator had declared on that model —
reasoningEffortsin particular — is not part of the new row, and nothing reports it.For a provider key whose model capability no catalog entry covers (a custom endpoint, a self-hosted gateway, a relay such as
http://127.0.0.1:8791/…, or any provider added through the "Add provider" card),reasoningEffortsis the only way the model gets effort levels. Without it the model materializes asreasoning: false, and the composer shows "This model provides no reasoning effort levels." — no selector, no error, nothing in the log. The route still works, so the first sign of the problem is a missing control in the composer.Why
lib/client.js(shipped bundle line ~862):and its only caller (~line 988,
adoptPicked):Rows already in the draft are preserved (
byId.get(candidate.id) ?? adopt(...)), so simply adding another model keeps everything. The loss happens whenever the row is new: adding a model to a route for the first time, or removing a row and adding the same id back. A fixed field list is then the only source, andreasoningEffortsis not in it.Reproduction
{ id, name, contextWindow, maxTokens }.reasoningEffortsis gone and the composer offers no effort levels for it.Recovery means re-declaring the levels by hand — either one level at a time in the per-model "reasoning efforts" editor, or by editing the profile patch YAML.
What would fix it
Either of these would remove the class of bug; I don't have the layout of the client internals to pick:
adopt(candidate)could merge a matching saved row (or the row captured at mount) instead of starting from the field list, so a remove-and-re-add round-trip is lossless.reasoningEffortsunder any other provider key in the profile — or as a variant sibling (google/gemini-4-argon:flex→google/gemini-4-argon) — could adopt that map, the same evidence ruledsh-llm-pi-aiuses for a model's own declaration. For a custom provider the catalog cannot supply it, but the profile usually can.A cheaper interim step would be to keep the operator aware: the row could show a warning like the existing
modelReasoningNeedsLevelnotice when its provider key has no catalog entry and it declares no levels.Workaround being used today
I wrote a plugin (
dsh-openrouter-plus) that watches the profile forapp-boot/config-reload/settings/document-updated/llm/adapters-updatedand re-fillsreasoningEffortson the routes it owns from exactly the evidence in option 2. It works, and it is what made the disappearance visible to me in the first place — but a plugin should not have to reconcile a config that its own editor just rewrote, and hand-written routes belonging to no plugin have no such safety net.All reactions