fix: pick backend_parameter, env, backend_version from spec in catalog
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ const MixLineBarChart: React.FC<
|
|||||||
},
|
},
|
||||||
grid: {
|
grid: {
|
||||||
...grid,
|
...grid,
|
||||||
|
right: 0,
|
||||||
top: 20,
|
top: 20,
|
||||||
bottom: 10
|
bottom: 10
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -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)
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user