Fix chat readiness for picker model override - #839
Conversation
| const provider = (override?.provider ?? mc.provider ?? "") | ||
| .trim() | ||
| .toLowerCase(); | ||
| const model = (override?.model ?? mc.model ?? "").trim(); |
There was a problem hiding this comment.
When the readiness override object contains model: "", this line keeps the empty value instead of falling back to the persisted model. The send path falls back for an empty override model, so this can show NO_ACTIVE_MODEL and block a send that would otherwise use the configured default model.
| const model = (override?.model ?? mc.model ?? "").trim(); | |
| const model = (override?.model || mc.model || "").trim(); |
|
I reproduced this while testing OAuth Remote mode from #853. The picker-override flow in this PR fixes the original
Observed end to end with an OAuth Remote connection:
Recommended minimal boundary: // IPC handler
const connection = getConnectionConfig();
return validateChatReadiness(profile, override, {
checkCredentials: connection.mode === "local",
});Then, inside if (!model && provider !== "auto") {
return { ok: false, code: "NO_ACTIVE_MODEL", /* ... */ };
}
if (options.checkCredentials === false) return OK;This preserves useful model-presence validation for every transport, preserves existing Local-mode key checks, and follows readiness's documented fail-open behavior when Desktop cannot establish remote credential absence. Regression cases I used:
Focused validation tests, full suite, typechecks, production build, and |
问题描述
在 Chat 页面底部的模型选择器中,用户已经选择了模型,例如
qwen3.7-plus,但聊天输入框上方仍然可能显示:No model selected. Pick one in Models or the Chat picker.原因是发送前的 readiness 校验只读取持久化的全局模型配置,也就是
config.yaml里的默认模型;而 Chat 底部 picker 选择的是当前会话的临时模型覆盖值。当全局默认模型为空,但当前 Chat picker 已经选中模型时,实际发送消息会使用 picker 里的模型,但 readiness 校验仍然误判为“没有选择模型”,导致界面出现错误提示。
解决方案
让发送前 readiness 校验使用当前 Chat picker 的实际选择。
具体调整:
validateChatReadiness时传入当前 picker 的provider / model / baseUrlvalidateChatReadiness支持接收模型配置 overrideNO_ACTIVE_MODEL影响范围