fix: gpu instance always show delete, dedupe params
This commit is contained in:
@@ -24,7 +24,6 @@ const InstanceTypeCell: React.FC<{
|
|||||||
}> = ({ title, name, sections }) => {
|
}> = ({ title, name, sections }) => {
|
||||||
const specInfo = (
|
const specInfo = (
|
||||||
<div style={{ minWidth: 200 }}>
|
<div style={{ minWidth: 200 }}>
|
||||||
{name && <div style={{ fontWeight: 600, marginBottom: 8 }}>{name}</div>}
|
|
||||||
{sections.map((sec) => {
|
{sections.map((sec) => {
|
||||||
const rows = sec.rows.filter(([, v]) => v && v !== '-');
|
const rows = sec.rows.filter(([, v]) => v && v !== '-');
|
||||||
if (!rows.length) return null;
|
if (!rows.length) return null;
|
||||||
|
|||||||
@@ -153,11 +153,7 @@ export const rowActionList: InstanceRowAction[] = [
|
|||||||
icon: icons.DeleteOutlined,
|
icon: icons.DeleteOutlined,
|
||||||
show: (record: ListItem) => {
|
show: (record: ListItem) => {
|
||||||
const phase = record.status?.phase;
|
const phase = record.status?.phase;
|
||||||
return [
|
return true;
|
||||||
...GPUStackFailedStatuses,
|
|
||||||
InstanceStatusValueMap.Ready,
|
|
||||||
InstanceStatusValueMap.Unknown
|
|
||||||
].includes(phase as string);
|
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
danger: true
|
danger: true
|
||||||
|
|||||||
@@ -8,7 +8,11 @@ import _ from 'lodash';
|
|||||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { queryCatalogItemSpec } from '../../apis';
|
import { queryCatalogItemSpec } from '../../apis';
|
||||||
import { DeployFormKeyMap, sourceOptions } from '../../config';
|
import {
|
||||||
|
DeployFormKeyMap,
|
||||||
|
mergeBackendParameters,
|
||||||
|
sourceOptions
|
||||||
|
} from '../../config';
|
||||||
import { CatalogFormContext } from '../../config/form-context';
|
import { CatalogFormContext } from '../../config/form-context';
|
||||||
import {
|
import {
|
||||||
CatalogSpec,
|
CatalogSpec,
|
||||||
@@ -280,10 +284,10 @@ const AddModal: React.FC<AddModalProps> = (props) => {
|
|||||||
setSourceList(sources);
|
setSourceList(sources);
|
||||||
initFormDataBySource({
|
initFormDataBySource({
|
||||||
...defaultSpec,
|
...defaultSpec,
|
||||||
backend_parameters: [
|
backend_parameters: mergeBackendParameters(
|
||||||
...defaultBackendParams,
|
defaultBackendParams,
|
||||||
...(defaultSpec.backend_parameters || [])
|
defaultSpec.backend_parameters || []
|
||||||
],
|
),
|
||||||
cluster_id: clusterId
|
cluster_id: clusterId
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import ColumnWrapper from '../../../_components/column-wrapper';
|
|||||||
import {
|
import {
|
||||||
defaultFormValues,
|
defaultFormValues,
|
||||||
DeployFormKeyMap,
|
DeployFormKeyMap,
|
||||||
|
mergeBackendParameters,
|
||||||
modelSourceMap
|
modelSourceMap
|
||||||
} from '../../config';
|
} from '../../config';
|
||||||
import { FormData, SourceType } from '../../config/types';
|
import { FormData, SourceType } from '../../config/types';
|
||||||
@@ -406,10 +407,10 @@ const AddModal: FC<AddModalProps> = (props) => {
|
|||||||
...modelInfo.env,
|
...modelInfo.env,
|
||||||
...defaultSpec.env
|
...defaultSpec.env
|
||||||
},
|
},
|
||||||
backend_parameters: [
|
backend_parameters: mergeBackendParameters(
|
||||||
...modelInfo.backend_parameters,
|
modelInfo.backend_parameters,
|
||||||
...(defaultSpec.backend_parameters || [])
|
defaultSpec.backend_parameters
|
||||||
],
|
),
|
||||||
name: generateNameValue(item, modelInfo.name, manual),
|
name: generateNameValue(item, modelInfo.name, manual),
|
||||||
categories: getCategory(item)
|
categories: getCategory(item)
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -340,6 +340,31 @@ export const setbackendParameters = (data: any) => {
|
|||||||
return result;
|
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 = [
|
export const modelLabels = [
|
||||||
{ label: 'Image', value: 'image_only' },
|
{ label: 'Image', value: 'image_only' },
|
||||||
{ label: 'Text-to-speech', value: 'text_to_speech' },
|
{ label: 'Text-to-speech', value: 'text_to_speech' },
|
||||||
|
|||||||
Reference in New Issue
Block a user