fix: pick backend_parameter, env, backend_version from spec in catalog

This commit is contained in:
jialin
2025-06-27 16:38:19 +08:00
parent 5861508153
commit 47a5ef915b
9 changed files with 70 additions and 41 deletions
+11 -1
View File
@@ -28,6 +28,16 @@ const LineChart: React.FC<ChartProps> = (props) => {
yAxis yAxis
} = useChartConfig(); } = useChartConfig();
const axisLabelFormatter = (value: string, index: number) => {
if (labelFormatter) {
return labelFormatter(value, index);
}
if (index === xAxisData.length - 1) {
return '';
}
return value;
};
const options = { const options = {
title: { title: {
text: '' text: ''
@@ -45,7 +55,7 @@ const LineChart: React.FC<ChartProps> = (props) => {
...xAxis, ...xAxis,
axisLabel: { axisLabel: {
...xAxis.axisLabel, ...xAxis.axisLabel,
formatter: labelFormatter formatter: axisLabelFormatter
} }
}, },
yAxis, yAxis,
+1
View File
@@ -45,6 +45,7 @@ const MixLineBarChart: React.FC<
}, },
grid: { grid: {
...grid, ...grid,
right: 0,
top: 20, top: 20,
bottom: 10 bottom: 10
}, },
+1 -1
View File
@@ -4,7 +4,7 @@ export interface ChartProps {
showEmpty?: boolean; showEmpty?: boolean;
xAxisData: string[]; xAxisData: string[];
legendData?: LegendComponentOption['data']; legendData?: LegendComponentOption['data'];
labelFormatter?: (val?: any) => string; labelFormatter?: (val?: any, index?: number) => string;
tooltipValueFormatter?: (val: any) => string; tooltipValueFormatter?: (val: any) => string;
height: string | number; height: string | number;
width?: string | number; width?: string | number;
@@ -41,6 +41,7 @@ const UtilizationOvertime: React.FC = () => {
const tooltipValueFormatter = (value: any) => { const tooltipValueFormatter = (value: any) => {
return !value ? value : `${value}%`; return !value ? value : `${value}%`;
}; };
const generateData = useMemo(() => { const generateData = useMemo(() => {
const legendData: string[] = []; const legendData: string[] = [];
const xAxisData: string[] = []; const xAxisData: string[] = [];
@@ -21,7 +21,6 @@ import { FormData, SourceType } from '../config/types';
import CatalogFrom from '../forms/catalog'; import CatalogFrom from '../forms/catalog';
import HuggingFaceForm from '../forms/hugging-face'; import HuggingFaceForm from '../forms/hugging-face';
import LocalPathForm from '../forms/local-path'; import LocalPathForm from '../forms/local-path';
import OllamaForm from '../forms/ollama_library';
import AdvanceConfig from './advance-config'; import AdvanceConfig from './advance-config';
interface DataFormProps { interface DataFormProps {
@@ -253,7 +252,6 @@ const DataForm: React.FC<DataFormProps> = forwardRef((props, ref) => {
}} }}
> >
<HuggingFaceForm></HuggingFaceForm> <HuggingFaceForm></HuggingFaceForm>
<OllamaForm></OllamaForm>
<LocalPathForm></LocalPathForm> <LocalPathForm></LocalPathForm>
</FormInnerContext.Provider> </FormInnerContext.Provider>
<Form.Item name="backend" rules={[{ required: true }]}> <Form.Item name="backend" rules={[{ required: true }]}>
@@ -25,6 +25,8 @@ import ColumnWrapper from './column-wrapper';
import CompatibilityAlert from './compatible-alert'; import CompatibilityAlert from './compatible-alert';
import DataForm from './data-form'; import DataForm from './data-form';
const pickFieldsFromSpec = ['backend_version', 'backend_parameters', 'env'];
type AddModalProps = { type AddModalProps = {
title: string; title: string;
action: PageActionType; action: PageActionType;
@@ -202,7 +204,7 @@ const AddModal: React.FC<AddModalProps> = (props) => {
}); });
selectSpecRef.current = spec; selectSpecRef.current = spec;
return { return {
..._.omit(spec, ['name']), ..._.pick(spec, pickFieldsFromSpec),
categories: _.get(current, 'categories.0', null) categories: _.get(current, 'categories.0', null)
}; };
}; };
+38 -29
View File
@@ -33,13 +33,9 @@ import SearchModel from './search-model';
import Separator from './separator'; import Separator from './separator';
import TitleWrapper from './title-wrapper'; import TitleWrapper from './title-wrapper';
const resetFieldsByModel = [ const resetFieldsByModel = ['backend_version', 'backend_parameters', 'env'];
'cpu_offloading', const pickFieldsFromSpec = ['backend_version', 'backend_parameters', 'env'];
'distributed_inference_across_workers', const dropFieldsFromForm = ['name', 'file_name', 'repo_id', 'backend'];
'backend_version',
'backend_parameters',
'env'
];
const resetFieldsByFile = [ const resetFieldsByFile = [
'cpu_offloading', 'cpu_offloading',
@@ -187,11 +183,10 @@ const AddModal: FC<AddModalProps> = (props) => {
}; };
const getDefaultSpec = (item: any) => { const getDefaultSpec = (item: any) => {
const defaultSpec = _.get(item.evaluateResult?.default_spec, [ const defaultSpec = _.pick(
'backend_version', item.evaluateResult?.default_spec,
'backend_parameters', pickFieldsFromSpec
'env' );
]);
return defaultSpec; return defaultSpec;
}; };
@@ -205,7 +200,7 @@ const AddModal: FC<AddModalProps> = (props) => {
}; };
const { run: onSelectFile } = useDeferredRequest( const { run: onSelectFile } = useDeferredRequest(
async (item: any, modelInfo: any) => { async (item: any, modelInfo: any, manual?: boolean) => {
unlockWarningStatus(); unlockWarningStatus();
const evaluateRes = await handleOnValuesChangeBefore?.({ const evaluateRes = await handleOnValuesChangeBefore?.({
@@ -227,29 +222,34 @@ const AddModal: FC<AddModalProps> = (props) => {
/** /**
* do not reset backend_parameters when select a model file * do not reset backend_parameters when select a model file
*/ */
const formBackendParameters = const formValues = form.current?.getFieldsValue?.(pickFieldsFromSpec);
form.current?.getFieldValue?.('backend_parameters') || [];
form.current?.setFieldsValue?.({ form.current?.setFieldsValue?.({
...defaultSpec,
..._.omit(modelInfo, ['name']), ..._.omit(modelInfo, ['name']),
file_name: item.fakeName, file_name: item.fakeName,
backend_parameters: backend_parameters:
formBackendParameters.length > 0 formValues.backend_parameters?.length > 0
? formBackendParameters ? formValues.backend_parameters
: defaultSpec.backend_parameters || [], : defaultSpec.backend_parameters || [],
backend_version:
formValues.backend_version || defaultSpec.backend_version,
env: formValues.env || defaultSpec.env,
categories: getCategory(item) categories: getCategory(item)
}); });
}, },
100 100
); );
const handleSelectModelFile = async (item: any, requestModelId: number) => { const handleSelectModelFile = async (
item: any,
options: { requestModelId: number; manual?: boolean }
) => {
const { requestModelId, manual } = options || {};
if (requestModelId !== getRequestId()) { if (requestModelId !== getRequestId()) {
return; return;
} }
console.log('handleSelectModelFile:', item, selectedModel); console.log('handleSelectModelFile:', item, selectedModel);
form.current?.form?.resetFields(resetFieldsByFile);
const modelInfo = onSelectModel(selectedModel, props.source); const modelInfo = onSelectModel(selectedModel, props.source);
form.current?.setFieldsValue?.({ form.current?.setFieldsValue?.({
@@ -260,7 +260,7 @@ const AddModal: FC<AddModalProps> = (props) => {
// evaluate the form data when select a model file // evaluate the form data when select a model file
if (item.fakeName) { if (item.fakeName) {
onSelectFile(item, modelInfo); onSelectFile(item, modelInfo, manual);
} }
}; };
@@ -304,6 +304,10 @@ const AddModal: FC<AddModalProps> = (props) => {
const modelInfo = onSelectModel(item, props.source); const modelInfo = onSelectModel(item, props.source);
form.current?.setFieldsValue?.({ form.current?.setFieldsValue?.({
...modelInfo, ...modelInfo,
..._.omit(form.current?.form?.getFieldsValue?.(), [
...dropFieldsFromForm,
...pickFieldsFromSpec
]),
categories: getCategory(item) categories: getCategory(item)
}); });
@@ -332,13 +336,6 @@ const AddModal: FC<AddModalProps> = (props) => {
}; };
const handleOnSelectModelAfterEvaluate = (item: any, manual?: boolean) => { const handleOnSelectModelAfterEvaluate = (item: any, manual?: boolean) => {
console.log(
'handleOnSelectModelAfterEvaluate:',
item.name,
currentSelectedModel.current.name,
warningStatus.type,
currentModelDuringEvaluate(item)
);
if (currentModelDuringEvaluate(item)) { if (currentModelDuringEvaluate(item)) {
return; return;
} }
@@ -357,11 +354,23 @@ const AddModal: FC<AddModalProps> = (props) => {
item.evaluated item.evaluated
) { ) {
handleShowCompatibleAlert(item.evaluateResult); handleShowCompatibleAlert(item.evaluateResult);
form.current?.setFieldsValue?.({ const newFormValues = {
...getDefaultSpec(item), ...getDefaultSpec(item),
...modelInfo, ...modelInfo,
..._.omit(form.current?.form?.getFieldsValue?.(), [
...dropFieldsFromForm,
...pickFieldsFromSpec
]),
name: generateNameValue(item, modelInfo.name, manual), name: generateNameValue(item, modelInfo.name, manual),
categories: getCategory(item) categories: getCategory(item)
};
form.current?.setFieldsValue?.(newFormValues);
handleOnValuesChangeBefore({
changedValues: {},
allValues: newFormValues,
source: props.source
}); });
} }
}; };
@@ -42,7 +42,10 @@ interface HFModelFileProps {
modelSource: string; modelSource: string;
ref: any; ref: any;
gpuOptions?: any[]; gpuOptions?: any[];
onSelectFile?: (file: any, flagId: number) => void; onSelectFile?: (
file: any,
options: { requestModelId: number; manual?: boolean }
) => void;
updateEvaluteState: (state: 'model' | 'form' | 'file') => number; updateEvaluteState: (state: 'model' | 'form' | 'file') => number;
onSelectFileAfterEvaluate?: (file: any) => void; onSelectFileAfterEvaluate?: (file: any) => void;
} }
@@ -85,8 +88,11 @@ const HFModelFile: React.FC<HFModelFileProps> = forwardRef((props, ref) => {
const timer = useRef<any>(null); const timer = useRef<any>(null);
const parentRequestModelId = useRef<number>(0); const parentRequestModelId = useRef<number>(0);
const handleSelectModelFile = (item: any) => { const handleSelectModelFile = (item: any, manual?: boolean) => {
props.onSelectFile?.(item, parentRequestModelId.current); props.onSelectFile?.(item, {
requestModelId: parentRequestModelId.current,
manual: manual
});
setCurrent(item.path); setCurrent(item.path);
currentPathRef.current = item.path; currentPathRef.current = item.path;
}; };
@@ -397,7 +403,9 @@ const HFModelFile: React.FC<HFModelFileProps> = forwardRef((props, ref) => {
data={item} data={item}
isEvaluating={isEvaluating} isEvaluating={isEvaluating}
active={item.path === current} active={item.path === current}
handleSelectModelFile={handleSelectModelFile} handleSelectModelFile={(data) =>
handleSelectModelFile(data, true)
}
></ModelFileItem> ></ModelFileItem>
); );
})} })}
@@ -142,10 +142,10 @@ const SearchModel: React.FC<SearchInputProps> = (props) => {
const handleOnSelectModel = (model: any, manual?: boolean) => { const handleOnSelectModel = (model: any, manual?: boolean) => {
const item = model || {}; const item = model || {};
if (item.evaluated && !item.isGGUF) { if (!item.evaluated || item.isGGUF) {
onSelectModelAfterEvaluate(item, manual);
} else {
onSelectModel(item, manual); onSelectModel(item, manual);
} else {
onSelectModelAfterEvaluate(item, manual);
} }
setCurrent(item.id); setCurrent(item.id);
currentRef.current = item.id; currentRef.current = item.id;