Spaces:
Sleeping
Sleeping
import type { IThinkingModelParams } from '@/service/modelConfig'; | |
import { updateThinkingConfig } from '@/service/modelConfig'; | |
import { useModelConfigStore } from '@/store/useModelConfigStore'; | |
import { Input, message, Modal } from 'antd'; | |
import { useEffect, useState } from 'react'; | |
interface IProps { | |
open: boolean; | |
onClose: () => void; | |
} | |
const ThinkingModelModal = (props: IProps) => { | |
const { open, onClose: handleCancel } = props; | |
const fetchModelConfig = useModelConfigStore((store) => store.fetchModelConfig); | |
const [thinkingModelParams, setThinkingModelParams] = useState<IThinkingModelParams>( | |
{} as IThinkingModelParams | |
); | |
const updateThinkingModelConfig = useModelConfigStore((store) => store.updateThinkingModelConfig); | |
const thinkingModelConfig = useModelConfigStore((store) => store.thinkingModelConfig); | |
useEffect(() => { | |
if (open) { | |
fetchModelConfig(); | |
} | |
}, [open]); | |
useEffect(() => { | |
setThinkingModelParams(thinkingModelConfig); | |
}, [thinkingModelConfig]); | |
const handleUpdate = () => { | |
const thinkingConfigComplete = | |
!!thinkingModelParams.thinking_model_name && | |
!!thinkingModelParams.thinking_api_key && | |
!!thinkingModelParams.thinking_endpoint; | |
if (!thinkingConfigComplete) { | |
message.error('Please fill in all thinking model configuration fields'); | |
return; | |
} | |
updateThinkingConfig(thinkingModelParams) | |
.then((res) => { | |
if (res.data.code == 0) { | |
updateThinkingModelConfig(thinkingModelParams); | |
handleCancel(); | |
} else { | |
throw new Error(res.data.message); | |
} | |
}) | |
.catch((error) => { | |
console.error(error.message || 'Failed to update model config'); | |
}); | |
}; | |
return ( | |
<Modal | |
centered | |
onCancel={handleCancel} | |
onOk={() => { | |
handleUpdate(); | |
}} | |
open={open} | |
> | |
<div className="flex flex-col gap-2 mb-4"> | |
<div className="text-xl leading-6 font-semibold text-gray-900">Thinking model</div> | |
<div className="text-sm font-medium text-gray-700">Currently only supports DeepSeek</div> | |
</div> | |
<div className="p-4 border rounded-lg hover:shadow-md transition-shadow"> | |
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> | |
<div> | |
<label className="block text-sm font-medium text-gray-700 mb-1">Model Name</label> | |
<Input | |
autoComplete="off" | |
className="w-full" | |
onChange={(e) => | |
setThinkingModelParams({ | |
...thinkingModelParams, | |
thinking_model_name: e.target.value | |
}) | |
} | |
value={thinkingModelParams.thinking_model_name} | |
/> | |
</div> | |
<div> | |
<label className="block text-sm font-medium text-gray-700 mb-1">API Key</label> | |
{/* form is to disable autoComplete */} | |
<form autoComplete="off"> | |
<Input.Password | |
autoComplete="off" | |
className="w-full" | |
onChange={(e) => | |
setThinkingModelParams({ | |
...thinkingModelParams, | |
thinking_api_key: e.target.value | |
}) | |
} | |
value={thinkingModelParams.thinking_api_key} | |
/> | |
</form> | |
</div> | |
</div> | |
<div className="mt-4"> | |
<label className="block text-sm font-medium text-gray-700 mb-1">API Endpoint</label> | |
<Input | |
autoComplete="off" | |
className="w-full" | |
onChange={(e) => | |
setThinkingModelParams({ | |
...thinkingModelParams, | |
thinking_endpoint: e.target.value | |
}) | |
} | |
value={thinkingModelParams.thinking_endpoint} | |
/> | |
</div> | |
</div> | |
</Modal> | |
); | |
}; | |
export default ThinkingModelModal; | |