diff --git a/src/pages/gpu-service/instances/components/instance-type-cell.tsx b/src/pages/gpu-service/instances/components/instance-type-cell.tsx
index 135a63f5..cc7dd231 100644
--- a/src/pages/gpu-service/instances/components/instance-type-cell.tsx
+++ b/src/pages/gpu-service/instances/components/instance-type-cell.tsx
@@ -24,7 +24,6 @@ const InstanceTypeCell: React.FC<{
}> = ({ title, name, sections }) => {
const specInfo = (
- {name &&
{name}
}
{sections.map((sec) => {
const rows = sec.rows.filter(([, v]) => v && v !== '-');
if (!rows.length) return null;
diff --git a/src/pages/gpu-service/instances/config/index.ts b/src/pages/gpu-service/instances/config/index.ts
index 5c76182d..de968623 100644
--- a/src/pages/gpu-service/instances/config/index.ts
+++ b/src/pages/gpu-service/instances/config/index.ts
@@ -153,11 +153,7 @@ export const rowActionList: InstanceRowAction[] = [
icon: icons.DeleteOutlined,
show: (record: ListItem) => {
const phase = record.status?.phase;
- return [
- ...GPUStackFailedStatuses,
- InstanceStatusValueMap.Ready,
- InstanceStatusValueMap.Unknown
- ].includes(phase as string);
+ return true;
},
props: {
danger: true
diff --git a/src/pages/llmodels/components/deployment/deploy-builtin-modal.tsx b/src/pages/llmodels/components/deployment/deploy-builtin-modal.tsx
index 9349a525..575bc215 100644
--- a/src/pages/llmodels/components/deployment/deploy-builtin-modal.tsx
+++ b/src/pages/llmodels/components/deployment/deploy-builtin-modal.tsx
@@ -8,7 +8,11 @@ import _ from 'lodash';
import React, { useEffect, useMemo, useRef, useState } from 'react';
import styled from 'styled-components';
import { queryCatalogItemSpec } from '../../apis';
-import { DeployFormKeyMap, sourceOptions } from '../../config';
+import {
+ DeployFormKeyMap,
+ mergeBackendParameters,
+ sourceOptions
+} from '../../config';
import { CatalogFormContext } from '../../config/form-context';
import {
CatalogSpec,
@@ -280,10 +284,10 @@ const AddModal: React.FC
= (props) => {
setSourceList(sources);
initFormDataBySource({
...defaultSpec,
- backend_parameters: [
- ...defaultBackendParams,
- ...(defaultSpec.backend_parameters || [])
- ],
+ backend_parameters: mergeBackendParameters(
+ defaultBackendParams,
+ defaultSpec.backend_parameters || []
+ ),
cluster_id: clusterId
});
diff --git a/src/pages/llmodels/components/deployment/deploy-modal.tsx b/src/pages/llmodels/components/deployment/deploy-modal.tsx
index 820ee692..aebd9804 100644
--- a/src/pages/llmodels/components/deployment/deploy-modal.tsx
+++ b/src/pages/llmodels/components/deployment/deploy-modal.tsx
@@ -13,6 +13,7 @@ import ColumnWrapper from '../../../_components/column-wrapper';
import {
defaultFormValues,
DeployFormKeyMap,
+ mergeBackendParameters,
modelSourceMap
} from '../../config';
import { FormData, SourceType } from '../../config/types';
@@ -406,10 +407,10 @@ const AddModal: FC = (props) => {
...modelInfo.env,
...defaultSpec.env
},
- backend_parameters: [
- ...modelInfo.backend_parameters,
- ...(defaultSpec.backend_parameters || [])
- ],
+ backend_parameters: mergeBackendParameters(
+ modelInfo.backend_parameters,
+ defaultSpec.backend_parameters
+ ),
name: generateNameValue(item, modelInfo.name, manual),
categories: getCategory(item)
};
diff --git a/src/pages/llmodels/config/index.ts b/src/pages/llmodels/config/index.ts
index 3f993f50..61263eeb 100644
--- a/src/pages/llmodels/config/index.ts
+++ b/src/pages/llmodels/config/index.ts
@@ -340,6 +340,31 @@ export const setbackendParameters = (data: any) => {
return result;
};
+// extract the key of a backend parameter.
+// supported formats: '--key', '--key=value', '--key value'
+export const getBackendParameterKey = (param: string): string => {
+ const trimmed = String(param).trim();
+ const matched = trimmed.match(/^([^=\s]+)/);
+ return matched ? matched[1] : trimmed;
+};
+
+// merge two backend_parameters lists and dedupe by key.
+// params from `priorityParams` (e.g. defaultSpec) win over `baseParams`.
+export const mergeBackendParameters = (
+ baseParams: string[] = [],
+ priorityParams: string[] = []
+): string[] => {
+ const priorityKeys = new Set(
+ priorityParams.map((param) => getBackendParameterKey(param))
+ );
+
+ const filteredBase = baseParams.filter(
+ (param) => !priorityKeys.has(getBackendParameterKey(param))
+ );
+
+ return [...filteredBase, ...priorityParams];
+};
+
export const modelLabels = [
{ label: 'Image', value: 'image_only' },
{ label: 'Text-to-speech', value: 'text_to_speech' },