From 3843d1bd3ec6b2dfa616e08d5eb907013efd5988 Mon Sep 17 00:00:00 2001 From: jialin Date: Mon, 7 Apr 2025 19:48:45 +0800 Subject: [PATCH] fix: ollama model change trigger check action --- .../llmodels/components/advance-config.tsx | 15 +++++++++++ src/pages/llmodels/components/data-form.tsx | 1 + .../llmodels/components/deploy-modal.tsx | 13 ++++++++-- src/pages/llmodels/config/index.ts | 3 ++- src/pages/llmodels/forms/ollama_library.tsx | 16 +++++++++++- src/pages/llmodels/hooks/index.ts | 25 +++++++++++++++---- 6 files changed, 64 insertions(+), 9 deletions(-) diff --git a/src/pages/llmodels/components/advance-config.tsx b/src/pages/llmodels/components/advance-config.tsx index 4d2e730a..a2ef1b4b 100644 --- a/src/pages/llmodels/components/advance-config.tsx +++ b/src/pages/llmodels/components/advance-config.tsx @@ -184,6 +184,19 @@ const AdvanceConfig: React.FC = (props) => { onValuesChange?.({}, form.getFieldsValue()); }; + const handleScheduleTypeChange = (value: string) => { + if (value === 'auto') { + onValuesChange?.({}, form.getFieldsValue()); + } + }; + + const handleGpuSelectorChange = (value: any[] | string) => { + if (!value?.length || !value) { + return; + } + onValuesChange?.({}, form.getFieldsValue()); + }; + const collapseItems = useMemo(() => { const children = ( <> @@ -198,6 +211,7 @@ const AdvanceConfig: React.FC = (props) => { } options={[ @@ -301,6 +315,7 @@ const AdvanceConfig: React.FC = (props) => { value={form.getFieldValue(['gpu_selector', 'gpu_ids'])} optionNode={GPUCard} getPopupContainer={(triggerNode) => triggerNode.parentNode} + onChange={handleGpuSelectorChange} > diff --git a/src/pages/llmodels/components/data-form.tsx b/src/pages/llmodels/components/data-form.tsx index ac51442c..9e3828c0 100644 --- a/src/pages/llmodels/components/data-form.tsx +++ b/src/pages/llmodels/components/data-form.tsx @@ -146,6 +146,7 @@ const DataForm: React.FC = forwardRef((props, ref) => { const handleOnValuesChange = async (changedValues: any, allValues: any) => { const fieldName = Object.keys(changedValues)[0]; + console.log('handleOnValuesChange', fieldName, changedValues, allValues); if (excludeFields.includes(fieldName)) { return; } diff --git a/src/pages/llmodels/components/deploy-modal.tsx b/src/pages/llmodels/components/deploy-modal.tsx index 0482df56..4869bc8e 100644 --- a/src/pages/llmodels/components/deploy-modal.tsx +++ b/src/pages/llmodels/components/deploy-modal.tsx @@ -99,13 +99,21 @@ const AddModal: FC = (props) => { const [isGGUF, setIsGGUF] = useState(props.isGGUF || false); const modelFileRef = useRef(null); + const getCategory = (item: any) => { + const categories = item.evaluateResult?.default_spec?.categories || []; + if (Array.isArray(categories)) { + return categories?.[0] || null; + } + return categories || null; + }; const handleSelectModelFile = (item: any) => { form.current?.form?.resetFields(resetFields); const modelInfo = onSelectModel(selectedModel, props.source); form.current?.setFieldsValue?.({ file_name: item.fakeName, ...item.evaluateResult?.default_spec, - ...modelInfo + ...modelInfo, + categories: getCategory(item) }); if (item.fakeName) { @@ -122,7 +130,8 @@ const AddModal: FC = (props) => { handleShowCompatibleAlert(item.evaluateResult); form.current?.setFieldsValue?.({ ...item.evaluateResult?.default_spec, - ...modelInfo + ...modelInfo, + categories: getCategory(item) }); } }; diff --git a/src/pages/llmodels/config/index.ts b/src/pages/llmodels/config/index.ts index fa8f2833..73f3b123 100644 --- a/src/pages/llmodels/config/index.ts +++ b/src/pages/llmodels/config/index.ts @@ -469,5 +469,6 @@ export const excludeFields = [ 'ollama_library_model_name', 'scheduleType', 'placement_strategy', - 'backend' + 'backend', + 'gpu_selector' ]; diff --git a/src/pages/llmodels/forms/ollama_library.tsx b/src/pages/llmodels/forms/ollama_library.tsx index 3e2e5cf2..6d4524fe 100644 --- a/src/pages/llmodels/forms/ollama_library.tsx +++ b/src/pages/llmodels/forms/ollama_library.tsx @@ -11,7 +11,7 @@ import { FormData } from '../config/types'; const OllamaForm: React.FC = () => { const formCtx = useFormContext(); const formInnerCtx = useFormInnerContext(); - const { byBuiltIn } = formCtx; + const { byBuiltIn, onValuesChange } = formCtx; const { getRuleMessage } = useAppUtils(); const intl = useIntl(); const source = Form.useWatch('source'); @@ -20,6 +20,18 @@ const OllamaForm: React.FC = () => { if (![modelSourceMap.ollama_library_value].includes(source) || byBuiltIn) { return null; } + const handleModelNameChange = (value: string) => { + if (value) { + onValuesChange?.({}, formInstance.getFieldsValue()); + } + }; + + const handleOnBlur = (e: any) => { + if (!e.target.value) { + return; + } + onValuesChange?.({}, formInstance.getFieldsValue()); + }; return ( <> @@ -38,6 +50,8 @@ const OllamaForm: React.FC = () => { defaultActiveFirstOption disabled={false} options={ollamaModelOptions} + onSelect={handleModelNameChange} + onBlur={handleOnBlur} description={ diff --git a/src/pages/llmodels/hooks/index.ts b/src/pages/llmodels/hooks/index.ts index ed4da803..7c4a0544 100644 --- a/src/pages/llmodels/hooks/index.ts +++ b/src/pages/llmodels/hooks/index.ts @@ -427,17 +427,32 @@ export const useCheckCompatibility = () => { return evalutionData; }; + const checkRequiredValue = (allValues: any) => { + const noLocalValue = + allValues.source === modelSourceMap.local_path_value && + !allValues.local_path; + + const noOllamaValue = + allValues.source === modelSourceMap.ollama_library_value && + !allValues.ollama_library_model_name; + return noLocalValue || noOllamaValue; + }; + const handleOnValuesChange = async (params: { changedValues: any; allValues: any; source: string; }) => { const { allValues, source } = params; - if ( - _.isEqual(cacheFormValuesRef.current, allValues) || - (allValues.source === modelSourceMap.local_path_value && - !allValues.local_path) - ) { + if (_.isEqual(cacheFormValuesRef.current, allValues)) { + return; + } + if (checkRequiredValue(allValues)) { + setWarningStatus({ + show: false, + title: '', + message: '' + }); return; } cacheFormValuesRef.current = allValues;