From b1d7bb9fd7f32028ebfb2195edbd6a6da5280c01 Mon Sep 17 00:00:00 2001 From: jialin Date: Wed, 2 Apr 2025 11:23:30 +0800 Subject: [PATCH] fix: backend is not updated after changing model --- src/pages/llmodels/components/data-form.tsx | 8 ++++++-- src/pages/llmodels/components/deploy-modal.tsx | 13 +++++++------ src/pages/llmodels/components/search-model.tsx | 12 ++++++++---- src/pages/llmodels/components/update-modal.tsx | 4 ++-- src/pages/llmodels/hooks/index.ts | 14 +++++++++++++- src/pages/resources/components/model-files.tsx | 7 ++++--- 6 files changed, 40 insertions(+), 18 deletions(-) diff --git a/src/pages/llmodels/components/data-form.tsx b/src/pages/llmodels/components/data-form.tsx index 290e94d6..3c71b4ea 100644 --- a/src/pages/llmodels/components/data-form.tsx +++ b/src/pages/llmodels/components/data-form.tsx @@ -102,6 +102,7 @@ const DataForm: React.FC = forwardRef((props, ref) => { return modelTaskData; }; + // just for setting the model name or repo_id, and the backend, Since the model type is fixed. const handleOnSelectModel = (selectModel: any) => { let name = _.split(selectModel.name, '/').slice(-1)[0]; const reg = /(-gguf)$/i; @@ -117,12 +118,15 @@ const DataForm: React.FC = forwardRef((props, ref) => { backend: modelTaskData.type === modelTaskMap.audio ? backendOptionsMap.voxBox - : form.getFieldValue('backend') + : selectModel.isGGUF + ? backendOptionsMap.llamaBox + : backendOptionsMap.vllm }); } else { form.setFieldsValue({ ollama_library_model_name: selectModel.name, - name: name + name: name, + backend: backendOptionsMap.llamaBox }); } }; diff --git a/src/pages/llmodels/components/deploy-modal.tsx b/src/pages/llmodels/components/deploy-modal.tsx index ac7a527c..98cdf455 100644 --- a/src/pages/llmodels/components/deploy-modal.tsx +++ b/src/pages/llmodels/components/deploy-modal.tsx @@ -82,7 +82,8 @@ const AddModal: FC = (props) => { handleEvaluate, handleOnValuesChange, checkTokenRef, - warningStatus + warningStatus, + submitAnyway } = useCheckCompatibility(); const form = useRef({}); const intl = useIntl(); @@ -90,7 +91,6 @@ const AddModal: FC = (props) => { const [collapsed, setCollapsed] = useState(false); const [isGGUF, setIsGGUF] = useState(props.isGGUF || false); const modelFileRef = useRef(null); - const submitAnyway = useRef(false); const handleSelectModelFile = useCallback((item: any) => { form.current?.setFieldsValue?.({ @@ -103,10 +103,11 @@ const AddModal: FC = (props) => { } }, []); - const handleOnSelectModel = (item: any, isgguf?: boolean) => { + const handleOnSelectModel = (item: any) => { setSelectedModel(item); form.current?.handleOnSelectModel?.(item); - if (!isgguf) { + if (!item.isGGUF) { + setIsGGUF(false); handleShowCompatibleAlert(item.evaluateResult); form.current?.setFieldsValue?.({ ...item.evaluateResult?.default_spec @@ -149,7 +150,7 @@ const AddModal: FC = (props) => { }; // trigger from local_path change or backend change - const handleBackendChangeHook = async () => { + const handleBackendChangeBefore = async () => { const localPath = form.current.form.getFieldValue?.('local_path'); const backend = form.current.form.getFieldValue?.('backend'); @@ -175,7 +176,7 @@ const AddModal: FC = (props) => { }; const handleBackendChange = async (backend: string) => { - handleBackendChangeHook(); + handleBackendChangeBefore(); if (backend === backendOptionsMap.vllm) { setIsGGUF(false); } diff --git a/src/pages/llmodels/components/search-model.tsx b/src/pages/llmodels/components/search-model.tsx index cf89d680..cf5574a9 100644 --- a/src/pages/llmodels/components/search-model.tsx +++ b/src/pages/llmodels/components/search-model.tsx @@ -32,7 +32,7 @@ interface SearchInputProps { isDownload?: boolean; setLoadingModel?: (flag: boolean) => void; onSourceChange?: (source: string) => void; - onSelectModel: (model: any, isGGUF?: boolean) => void; + onSelectModel: (model: any) => void; } const SearchModel: React.FC = (props) => { @@ -98,7 +98,7 @@ const SearchModel: React.FC = (props) => { }; const handleOnSelectModel = (item: any) => { - onSelectModel(item, checkIsGGUF(item)); + onSelectModel(item); setCurrent(item.id); }; @@ -121,7 +121,9 @@ const SearchModel: React.FC = (props) => { return { ...item, value: item.name, - label: item.name + label: item.name, + isGGUF: checkIsGGUF(item), + source: modelSourceMap.modelscope_value }; }); return list; @@ -157,7 +159,9 @@ const SearchModel: React.FC = (props) => { revision: item.Revision, task: item.Tasks?.map((sItem: any) => sItem.Name).join(','), tags: item.Tags, - libraries: item.Libraries + libraries: item.Libraries, + isGGUF: checkIsGGUF({ tags: item.Tags, libraries: item.Libraries }), + source: modelSourceMap.modelscope_value }; }); diff --git a/src/pages/llmodels/components/update-modal.tsx b/src/pages/llmodels/components/update-modal.tsx index ba985132..dac0c027 100644 --- a/src/pages/llmodels/components/update-modal.tsx +++ b/src/pages/llmodels/components/update-modal.tsx @@ -84,7 +84,7 @@ const UpdateModal: React.FC = (props) => { }; // trigger from local_path change or backend change - const handleBackendChangeHook = async () => { + const handleBackendChangeBefore = async () => { const localPath = form.getFieldValue?.('local_path'); const backend = form.getFieldValue?.('backend'); @@ -118,7 +118,7 @@ const UpdateModal: React.FC = (props) => { } form.setFieldValue('backend_version', ''); handleSetGPUIds(val); - handleBackendChangeHook(); + handleBackendChangeBefore(); }; const handleOnFocus = () => { diff --git a/src/pages/llmodels/hooks/index.ts b/src/pages/llmodels/hooks/index.ts index a073df00..8b81c094 100644 --- a/src/pages/llmodels/hooks/index.ts +++ b/src/pages/llmodels/hooks/index.ts @@ -214,6 +214,8 @@ export const useCheckCompatibility = () => { const intl = useIntl(); const checkTokenRef = useRef(null); + const submitAnyway = useRef(false); + const requestIdRef = useRef(0); const [warningStatus, setWarningStatus] = useState<{ show: boolean; title?: string; @@ -225,6 +227,11 @@ export const useCheckCompatibility = () => { message: [] }); + const updateRequestId = () => { + requestIdRef.current += 1; + return requestIdRef.current; + }; + const handleEvaluate = async (data: any) => { try { checkTokenRef.current?.cancel(); @@ -392,11 +399,15 @@ export const useCheckCompatibility = () => { const data = getSourceRepoConfigValue(source, allValues); const gpuSelector = generateGPUIds(data.values); + const currentRequestId = updateRequestId(); const evalutionData = await handleEvaluate({ ...data.values, ...gpuSelector }); - handleShowCompatibleAlert?.(evalutionData); + + if (currentRequestId === requestIdRef.current) { + handleShowCompatibleAlert?.(evalutionData); + } } }; @@ -415,6 +426,7 @@ export const useCheckCompatibility = () => { handleOnValuesChange: debounceHandleValuesChange, warningStatus, checkTokenRef, + submitAnyway, generateGPUIds, handleEvaluate, setWarningStatus diff --git a/src/pages/resources/components/model-files.tsx b/src/pages/resources/components/model-files.tsx index 1a1fbc94..d35f8c00 100644 --- a/src/pages/resources/components/model-files.tsx +++ b/src/pages/resources/components/model-files.tsx @@ -18,7 +18,6 @@ import { } from '@/pages/llmodels/config'; import { identifyModelTask } from '@/pages/llmodels/config/audio-catalog'; import { - generateSource, modalConfig, modelFileActions, onLineSourceOptions @@ -422,7 +421,9 @@ const ModelFiles = () => { {intl.formatMessage({ id: 'models.form.localPath' })} ) : ( - {generateSource(record)} + + {_.get(modelSourceMap, record.source, '')} + )} ) @@ -467,7 +468,7 @@ const ModelFiles = () => { record.resolved_paths?.length > 0 && ( - {record.resolved_paths?.[0]} + {getResolvedPath(record.resolved_paths)}