Repository navigation
Replies: 2 comments 2 replies
|
Everything you observed happens, but it is a recorded decision rather than a leak in the picker. Line 20: " Line 10 gives the reason: if the picker affected only its addressed session, "the next blank session can select a different model with no user-facing way to align the default". The trade you are objecting to is the one the note chose deliberately. The dropped So what is left that is genuinely reportable is discoverability, not logic:
If you file it, I would file it as those two UI statements rather than as "silently rewrites the global default", because the rewrite is the feature and a maintainer will close the report by quoting line 20. The code side, for reference: |
|
Related data point, from the other direction: the same coupling is reachable by integrations, not just by the picker. A third-party plugin can only give a session a model through Filed separately with reproduction and a patch that keeps the picker as the default's editor and makes programmatic callers session-local: #10784 Upvoted this one too — the "absence clears an effort" surprise is the same trap from the effort side. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Switching the model of the current session in the UI model picker also rewrites the global default model (
agent-default-model) in bothcordis.ymlandcordis.patch.yml. The rewrite additionally drops thereasoningEffortfield, leaving the default with onlyprovider+model.Because every session that does not pin its own model inherits this default (heartbeat / autonomous sessions, task-board cron jobs, newly opened sessions), a user who merely tries a more expensive model in one session silently moves all background work onto that model.
Environment
@deepseek-ai/dsh0.2.1-rc.2,desktopprofile@deepseek-ai/dsh-agent-default-model(lib/index.js),@deepseek-ai/dsh-client-ui-model-selection(locale/zh.json)Steps to reproduce
deepseek-flashto another model (e.g.gpt-5.6-luna).agent-default-modelsection in both config files:~/.dsh/profiles/desktop/cordis.yml~/.dsh/profiles/desktop/cordis.patch.ymlThe previously present
reasoningEffort: highline is gone.Why it matters
The picker's own hint says:
So the documented behaviour is session-scoped, while the implementation also mutates the global default.
Real cost incident
On 2026-10-19 a single session-level model switch changed the default to a high-priced model (
gpt-6-astra). A heartbeat session — which has nomodelfield in its plugin schema and therefore can only inherit the default — had accumulated roughly 400k tokens of context, then issued two requests of 394,322 and 414,009 input tokens. That is about ¥60 for one call (~¥145 per 1M input tokens) and ¥153.47 over one day, without the user touching that session at all.Secondary issue:
reasoningEffortlossAfter the rewrite
reasoningEffortis missing, so the value falls back to whatever the model negotiates. The effective reasoning level then becomes invisible in the UI and unpredictable in cost.Suggestions
provider/model/reasoningEffort, and let the picker only affect the active session.agent-default-modelwhen switching a session model, or (b) preservereasoningEfforton write instead of replacing the whole block.lock: trueflag onagent-default-model, so the UI picker cannot rewrite it.Note on the two save paths
The three fields of
agent-default-modelarevolatile(), and the existing comments in the config say a UI edit fails becausedesktop-hosthas not registered a rootIncludeentry, so the write has to go through the patch file. Yet the model picker does succeed in rewriting both files, i.e. it uses a different save path. Reconciling those two paths would probably remove a whole class of surprises.中文摘要:在 UI 里切换「当前会话」的模型时,会同时改写全局默认模型(
cordis.yml与cordis.patch.yml的agent-default-model段),并且丢掉reasoningEffort字段。所有未单独指定模型的会话(心跳、任务看板定时任务、新建会话)都会跟着变,导致后台任务静默改用高价模型——实测一次误切造成单次 414,009 输入 token(约 ¥60)、当天共 ¥153.47。建议把「会话模型」与「默认模型」拆成两个独立设置项;若保持现状,至少切换会话模型时不要改写默认段,并在写入时保留reasoningEffort;另外建议后台/系统会话支持单独钉死模型。All reactions