56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
|
|
import { useState, useCallback } from "react";
|
||
|
|
|
||
|
|
interface UseModelStateProps {
|
||
|
|
settingsConfig: string;
|
||
|
|
onConfigChange: (config: string) => void;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 管理模型选择状态
|
||
|
|
* 支持 ANTHROPIC_MODEL 和 ANTHROPIC_SMALL_FAST_MODEL
|
||
|
|
*/
|
||
|
|
export function useModelState({
|
||
|
|
settingsConfig,
|
||
|
|
onConfigChange,
|
||
|
|
}: UseModelStateProps) {
|
||
|
|
const [claudeModel, setClaudeModel] = useState("");
|
||
|
|
const [claudeSmallFastModel, setClaudeSmallFastModel] = useState("");
|
||
|
|
|
||
|
|
const handleModelChange = useCallback(
|
||
|
|
(field: "ANTHROPIC_MODEL" | "ANTHROPIC_SMALL_FAST_MODEL", value: string) => {
|
||
|
|
if (field === "ANTHROPIC_MODEL") {
|
||
|
|
setClaudeModel(value);
|
||
|
|
} else {
|
||
|
|
setClaudeSmallFastModel(value);
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
const currentConfig = settingsConfig
|
||
|
|
? JSON.parse(settingsConfig)
|
||
|
|
: { env: {} };
|
||
|
|
if (!currentConfig.env) currentConfig.env = {};
|
||
|
|
|
||
|
|
if (value.trim()) {
|
||
|
|
currentConfig.env[field] = value.trim();
|
||
|
|
} else {
|
||
|
|
delete currentConfig.env[field];
|
||
|
|
}
|
||
|
|
|
||
|
|
onConfigChange(JSON.stringify(currentConfig, null, 2));
|
||
|
|
} catch (err) {
|
||
|
|
// 如果 JSON 解析失败,不做处理
|
||
|
|
console.error("Failed to update model config:", err);
|
||
|
|
}
|
||
|
|
},
|
||
|
|
[settingsConfig, onConfigChange],
|
||
|
|
);
|
||
|
|
|
||
|
|
return {
|
||
|
|
claudeModel,
|
||
|
|
setClaudeModel,
|
||
|
|
claudeSmallFastModel,
|
||
|
|
setClaudeSmallFastModel,
|
||
|
|
handleModelChange,
|
||
|
|
};
|
||
|
|
}
|