From cf3b225d3ec3157c10b1687f17257da693b0e6d1 Mon Sep 17 00:00:00 2001 From: jialin Date: Tue, 3 Feb 2026 15:35:49 +0800 Subject: [PATCH] fix: edit community backend --- src/pages/backends/components/add-modal.tsx | 46 ++++++++++++------- src/pages/backends/components/import-yaml.tsx | 12 ++--- src/pages/backends/config/form-context.ts | 1 + src/pages/backends/forms/index.tsx | 22 +++++++-- src/pages/backends/forms/versions-config.tsx | 4 +- .../backends/hooks/use-create-backend.tsx | 2 +- src/pages/resources/config/gpu-driver.ts | 17 ++++++- 7 files changed, 72 insertions(+), 32 deletions(-) diff --git a/src/pages/backends/components/add-modal.tsx b/src/pages/backends/components/add-modal.tsx index 91e82f02..05155ed7 100644 --- a/src/pages/backends/components/add-modal.tsx +++ b/src/pages/backends/components/add-modal.tsx @@ -7,7 +7,7 @@ import { PageActionType } from '@/config/types'; import { useIntl } from '@umijs/max'; import { Tabs } from 'antd'; import _ from 'lodash'; -import React, { useEffect, useId, useRef, useState } from 'react'; +import React, { useEffect, useId, useMemo, useRef, useState } from 'react'; import styled from 'styled-components'; import ColumnWrapper from '../../_components/column-wrapper'; import { @@ -41,6 +41,14 @@ interface AddModalProps { title?: string; } +const versionFields = [ + 'image_name', + 'run_command', + 'custom_framework', + 'entrypoint', + 'env' +]; + const AddModal: React.FC = (props) => { const { action, currentData, onClose, onSubmit, onSubmitYaml, open, title } = props; @@ -52,25 +60,29 @@ const AddModal: React.FC = (props) => { const [yamlContent, setYamlContent] = useState(''); const [formContent, setFormContent] = useState({} as FormData); - const versionFields = [ - 'image_name', - 'run_command', - 'custom_framework', - 'entrypoint', - 'env' - ]; + const showVersionCustomSuffix = + currentData?.backend_source === BackendSourceValueMap.BUILTIN || + currentData?.backend_source === BackendSourceValueMap.COMMUNITY; + + const backendSource = useMemo( + () => currentData?.backend_source || BackendSourceValueMap.CUSTOM, + [currentData] + ); // remove '-custom' suffix from version_no in currentData, when action is EDIT const genertateCurrentVersionData = (values: ListItem): ListItem => { const data = { ...values }; - data.version_configs = Object.entries(data.version_configs || {}).reduce( - (acc, [key, value]) => { - const version = key.replace(/-custom$/, ''); - acc[version] = { ...value, backend_source: data.backend_source }; - return acc; - }, - {} as any - ); + + if (showVersionCustomSuffix) { + data.version_configs = Object.entries(data.version_configs || {}).reduce( + (acc, [key, value]) => { + const version = key.replace(/-custom$/, ''); + acc[version] = { ...value, backend_source: data.backend_source }; + return acc; + }, + {} as any + ); + } return data; }; @@ -267,7 +279,7 @@ const AddModal: React.FC = (props) => { void; @@ -53,7 +53,7 @@ const ImportYAML: React.FC = forwardRef( console.log('exsistingVersions', jsonData); // Check backend version rules if ( - actionStatus.isBuiltIn && + actionStatus.backendSource === BackendSourceValueMap.BUILTIN && exsistingVersions.find((v) => !v?.endsWith('-custom')) ) { setError(intl.formatMessage({ id: 'backend.version.no.tips' })); @@ -62,7 +62,7 @@ const ImportYAML: React.FC = forwardRef( // Check custom backend name rule if ( - !actionStatus.isBuiltIn && + actionStatus.backendSource === BackendSourceValueMap.CUSTOM && actionStatus.action === PageAction.CREATE && !jsonData.backend_name?.endsWith('-custom') ) { @@ -74,7 +74,7 @@ const ImportYAML: React.FC = forwardRef( if ( jsonData.default_version && !exsistingVersions.includes(jsonData.default_version) && - !actionStatus.isBuiltIn + actionStatus.backendSource === BackendSourceValueMap.CUSTOM ) { // the default_version must be in [existingVersions] setError( @@ -118,7 +118,7 @@ const ImportYAML: React.FC = forwardRef( schema={ actionStatus.action === PageAction.CREATE ? createSchema - : actionStatus.isBuiltIn + : actionStatus.backendSource === BackendSourceValueMap.BUILTIN ? updateBuiltinSchema : udpateCustomSchema } diff --git a/src/pages/backends/config/form-context.ts b/src/pages/backends/config/form-context.ts index 72de2ac0..91dc0e7b 100644 --- a/src/pages/backends/config/form-context.ts +++ b/src/pages/backends/config/form-context.ts @@ -4,6 +4,7 @@ import { createContext, useContext } from 'react'; interface FormContextProps { action: PageActionType; backendSource: string; + showCustomSuffix: boolean; } export const FormContext = createContext( diff --git a/src/pages/backends/forms/index.tsx b/src/pages/backends/forms/index.tsx index 240c2e93..283756e5 100644 --- a/src/pages/backends/forms/index.tsx +++ b/src/pages/backends/forms/index.tsx @@ -22,6 +22,10 @@ const BackendForm: React.FC = forwardRef( const [activeKey, setActiveKey] = React.useState([]); const backendSource = Form.useWatch('backend_source', form); + const showCustomSuffix = + currentData?.backend_source === BackendSourceValueMap.BUILTIN || + currentData?.backend_source === BackendSourceValueMap.COMMUNITY; + const onFinishFailed = (errorInfo: any) => { const errorFields = errorInfo.errorFields || []; if (errorFields.length > 0) { @@ -44,14 +48,18 @@ const BackendForm: React.FC = forwardRef( ? `${values.backend_name}-custom` : values.backend_name }; + + // add '-custom' suffix to version_no in version_configs when backendSource is BUILTIN or COMMUNITY data.version_configs = data.version_configs?.map((item) => { if (item.version_no) { return { ...item, - version_no: - backendSource === BackendSourceValueMap.BUILTIN - ? `${item.version_no}-custom` - : item.version_no + version_no: [ + BackendSourceValueMap.BUILTIN, + BackendSourceValueMap.COMMUNITY + ].includes(backendSource) + ? `${item.version_no}-custom` + : item.version_no }; } return item; @@ -85,7 +93,11 @@ const BackendForm: React.FC = forwardRef( return (
= ({ const defaultCollapseKey = action === 'edit' ? new Set() : new Set([0]); const form = Form.useFormInstance(); - const { backendSource } = useFormContext(); + const { backendSource, showCustomSuffix } = useFormContext(); const version_configs = Form.useWatch('version_configs', form); const [collapseKey, setCollapseKey] = React.useState>(defaultCollapseKey); @@ -329,7 +329,7 @@ const VersionsForm: React.FC = ({ > { closeBackendModal: handleCloseModal, addBackend: handleAddBackend, editBackend: handleEditBackend, - openBackendModalStatus: openCustomModalStatus, // for create custom backend and edit + openBackendModalStatus: openCustomModalStatus, // for create custom backend and edit custom/builtin/community backend openCommunityModalStatus: openCommunityModalStatus, // for create community backend addActions: addItems }; diff --git a/src/pages/resources/config/gpu-driver.ts b/src/pages/resources/config/gpu-driver.ts index 79de8ebf..2f2400d9 100644 --- a/src/pages/resources/config/gpu-driver.ts +++ b/src/pages/resources/config/gpu-driver.ts @@ -175,6 +175,20 @@ const generateEnvArgs = (params: any) => { return envArgs; }; +// concat the args, the args is a key-value +const generateExtraArgs = (params: any) => { + const args = params.registrationInfo?.args || {}; + const argsList = Object.entries(args); + if (argsList.length === 0) { + return ''; + } + let argsStr = ''; + argsList.forEach(([key, value]) => { + argsStr += `${key} ${value} \\\n `; + }); + return argsStr; +}; + const generateExtraModelDirArg = (modelDir: string) => { const pathList = modelDir ?.split(',') @@ -208,7 +222,8 @@ const setWorkerIPArg = (params: any) => { const setImageArgs = (params: any) => { return `${params.image} \\ - --server-url ${params.server} \\`; + --server-url ${params.server} \\ + ${generateExtraArgs(params)}`; }; // avaliable for NVIDIA、MThreads