diff --git a/src/components/providers/forms/ClaudeFormFields.tsx b/src/components/providers/forms/ClaudeFormFields.tsx index d0df92bb7..61a0f88e2 100644 --- a/src/components/providers/forms/ClaudeFormFields.tsx +++ b/src/components/providers/forms/ClaudeFormFields.tsx @@ -39,12 +39,14 @@ interface ClaudeFormFieldsProps { // Model Selector shouldShowModelSelector: boolean; claudeModel: string; + reasoningModel: string; defaultHaikuModel: string; defaultSonnetModel: string; defaultOpusModel: string; onModelChange: ( field: | "ANTHROPIC_MODEL" + | "ANTHROPIC_REASONING_MODEL" | "ANTHROPIC_DEFAULT_HAIKU_MODEL" | "ANTHROPIC_DEFAULT_SONNET_MODEL" | "ANTHROPIC_DEFAULT_OPUS_MODEL", @@ -77,6 +79,7 @@ export function ClaudeFormFields({ onCustomEndpointsChange, shouldShowModelSelector, claudeModel, + reasoningModel, defaultHaikuModel, defaultSonnetModel, defaultOpusModel, @@ -185,6 +188,27 @@ export function ClaudeFormFields({ /> + {/* 推理模型 */} +
+ + {t("providerForm.anthropicReasoningModel", { + defaultValue: "推理模型 (Thinking)", + })} + + + onModelChange("ANTHROPIC_REASONING_MODEL", e.target.value) + } + placeholder={t("providerForm.reasoningModelPlaceholder", { + defaultValue: "", + })} + autoComplete="off" + /> +
+ {/* 默认 Haiku */}
diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index 81b530e29..107917090 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -187,9 +187,10 @@ export function ProviderForm({ }, }); - // 使用 Model hook(新:主模型 + Haiku/Sonnet/Opus 默认模型) + // 使用 Model hook(新:主模型 + 推理模型 + Haiku/Sonnet/Opus 默认模型) const { claudeModel, + reasoningModel, defaultHaikuModel, defaultSonnetModel, defaultOpusModel, @@ -789,6 +790,7 @@ export function ProviderForm({ } shouldShowModelSelector={category !== "official"} claudeModel={claudeModel} + reasoningModel={reasoningModel} defaultHaikuModel={defaultHaikuModel} defaultSonnetModel={defaultSonnetModel} defaultOpusModel={defaultOpusModel} diff --git a/src/components/providers/forms/hooks/useModelState.ts b/src/components/providers/forms/hooks/useModelState.ts index 6e2fe4b60..07d7122dc 100644 --- a/src/components/providers/forms/hooks/useModelState.ts +++ b/src/components/providers/forms/hooks/useModelState.ts @@ -7,13 +7,14 @@ interface UseModelStateProps { /** * 管理模型选择状态 - * 支持 ANTHROPIC_MODEL 和 ANTHROPIC_SMALL_FAST_MODEL + * 支持 ANTHROPIC_MODEL, ANTHROPIC_REASONING_MODEL 和各类型默认模型 */ export function useModelState({ settingsConfig, onConfigChange, }: UseModelStateProps) { const [claudeModel, setClaudeModel] = useState(""); + const [reasoningModel, setReasoningModel] = useState(""); const [defaultHaikuModel, setDefaultHaikuModel] = useState(""); const [defaultSonnetModel, setDefaultSonnetModel] = useState(""); const [defaultOpusModel, setDefaultOpusModel] = useState(""); @@ -29,6 +30,10 @@ export function useModelState({ const env = cfg?.env || {}; const model = typeof env.ANTHROPIC_MODEL === "string" ? env.ANTHROPIC_MODEL : ""; + const reasoning = + typeof env.ANTHROPIC_REASONING_MODEL === "string" + ? env.ANTHROPIC_REASONING_MODEL + : ""; const small = typeof env.ANTHROPIC_SMALL_FAST_MODEL === "string" ? env.ANTHROPIC_SMALL_FAST_MODEL @@ -47,6 +52,7 @@ export function useModelState({ : model || small; setClaudeModel(model || ""); + setReasoningModel(reasoning || ""); setDefaultHaikuModel(haiku || ""); setDefaultSonnetModel(sonnet || ""); setDefaultOpusModel(opus || ""); @@ -59,12 +65,14 @@ export function useModelState({ ( field: | "ANTHROPIC_MODEL" + | "ANTHROPIC_REASONING_MODEL" | "ANTHROPIC_DEFAULT_HAIKU_MODEL" | "ANTHROPIC_DEFAULT_SONNET_MODEL" | "ANTHROPIC_DEFAULT_OPUS_MODEL", value: string, ) => { if (field === "ANTHROPIC_MODEL") setClaudeModel(value); + if (field === "ANTHROPIC_REASONING_MODEL") setReasoningModel(value); if (field === "ANTHROPIC_DEFAULT_HAIKU_MODEL") setDefaultHaikuModel(value); if (field === "ANTHROPIC_DEFAULT_SONNET_MODEL") @@ -98,6 +106,8 @@ export function useModelState({ return { claudeModel, setClaudeModel, + reasoningModel, + setReasoningModel, defaultHaikuModel, setDefaultHaikuModel, defaultSonnetModel,