Compare commits

..

1 Commits

Author SHA1 Message Date
YoVinchen 1b22a89572 Align Thinking fallback with main-model-only Claude mappings
The Claude provider form reopened with an empty Thinking model after users saved only a main model. This updates model-state hydration to mirror the existing Haiku-style fallback semantics: read ANTHROPIC_REASONING_MODEL when present, otherwise display ANTHROPIC_MODEL, without writing a synthetic reasoning field back into config.

Constraint: Existing Haiku, Sonnet, and Opus selectors already rely on read-time fallback behavior
Rejected: Persist ANTHROPIC_REASONING_MODEL from ANTHROPIC_MODEL automatically | would diverge from Haiku behavior and silently rewrite saved config
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Keep Thinking fallback read-only unless all model-mapping fields are intentionally migrated to write-through semantics
Tested: pnpm typecheck
Tested: pnpm test:unit (1 unrelated pre-existing failure in tests/components/UnifiedSkillsPanel.test.tsx mock setup)
Not-tested: Manual add-provider reopen flow in the desktop UI
2026-04-10 11:31:39 +08:00
4 changed files with 8 additions and 8 deletions
@@ -14,10 +14,11 @@ function parseModelsFromConfig(settingsConfig: string) {
const env = cfg?.env || {};
const model =
typeof env.ANTHROPIC_MODEL === "string" ? env.ANTHROPIC_MODEL : "";
const reasoning =
const explicitReasoning =
typeof env.ANTHROPIC_REASONING_MODEL === "string"
? env.ANTHROPIC_REASONING_MODEL
: "";
const reasoning = explicitReasoning || model;
const small =
typeof env.ANTHROPIC_SMALL_FAST_MODEL === "string"
? env.ANTHROPIC_SMALL_FAST_MODEL
@@ -92,10 +93,11 @@ export function useModelState({
const env = cfg?.env || {};
const model =
typeof env.ANTHROPIC_MODEL === "string" ? env.ANTHROPIC_MODEL : "";
const reasoning =
const explicitReasoning =
typeof env.ANTHROPIC_REASONING_MODEL === "string"
? env.ANTHROPIC_REASONING_MODEL
: "";
const reasoning = explicitReasoning || model;
const small =
typeof env.ANTHROPIC_SMALL_FAST_MODEL === "string"
? env.ANTHROPIC_SMALL_FAST_MODEL
@@ -148,16 +150,17 @@ export function useModelState({
? JSON.parse(settingsConfig)
: { env: {} };
if (!currentConfig.env) currentConfig.env = {};
const env = currentConfig.env as Record<string, unknown>;
// 新键仅写入;旧键不再写入
const trimmed = value.trim();
if (trimmed) {
currentConfig.env[field] = trimmed;
env[field] = trimmed;
} else {
delete currentConfig.env[field];
delete env[field];
}
// 删除旧键
delete currentConfig.env["ANTHROPIC_SMALL_FAST_MODEL"];
delete env["ANTHROPIC_SMALL_FAST_MODEL"];
onConfigChange(JSON.stringify(currentConfig, null, 2));
} catch (err) {
-1
View File
@@ -243,7 +243,6 @@
"title": "Settings",
"general": "General",
"tabGeneral": "General",
"tabAuth": "Auth",
"tabAdvanced": "Advanced",
"tabProxy": "Proxy",
"authCenter": {
-1
View File
@@ -243,7 +243,6 @@
"title": "設定",
"general": "一般",
"tabGeneral": "一般",
"tabAuth": "認証",
"tabAdvanced": "詳細",
"tabProxy": "プロキシ",
"authCenter": {
-1
View File
@@ -243,7 +243,6 @@
"title": "设置",
"general": "通用",
"tabGeneral": "通用",
"tabAuth": "认证",
"tabAdvanced": "高级",
"tabProxy": "代理",
"authCenter": {