import IconFont from '@/components/icon-font'; import LabelSelector from '@/components/label-selector'; import CheckboxField from '@/components/seal-form/checkbox-field'; import SealSelect from '@/components/seal-form/seal-select'; import TooltipList from '@/components/tooltip-list'; import { PageActionType } from '@/config/types'; import { useIntl } from '@umijs/max'; import { Collapse, Form, FormInstance } from 'antd'; import _ from 'lodash'; import { useCallback, useMemo } from 'react'; import { getBackendParamsTips, modelCategories, placementStrategyOptions, ScheduleValueMap } from '../config'; import BackendParameters, { backendOptionsMap } from '../config/backend-parameters'; import { useFormContext } from '../config/form-context'; import { FormData } from '../config/types'; import Backend from '../forms/backend'; import BackendParametersList from '../forms/backend-parameters-list'; import Performance from '../forms/performance'; import dataformStyles from '../style/data-form.less'; interface AdvanceConfigProps { isGGUF: boolean; form: FormInstance; gpuOptions: Array; action: PageActionType; source: string; } const placementStrategyTips = [ { title: 'Spread', tips: 'resources.form.spread.tips' }, { title: 'Binpack', tips: 'resources.form.binpack.tips' } ]; const AdvanceConfig = () => { const intl = useIntl(); const form = Form.useFormInstance(); const wokerSelector = Form.useWatch('worker_selector', form); const EnviromentVars = Form.useWatch('env', form); const scheduleType = Form.useWatch('scheduleType', form); const backend = Form.useWatch('backend', form); const backend_parameters = Form.useWatch('backend_parameters', form); const categories = Form.useWatch('categories', form); const backend_version = Form.useWatch('backend_version', form); const placement_strategy = Form.useWatch('placement_strategy', form); const gpuSelectorIds = Form.useWatch(['gpu_selector', 'gpu_ids'], form); const worker_selector = Form.useWatch('worker_selector', form); const { onValuesChange, gpuOptions, source, isGGUF } = useFormContext(); const paramsConfig = useMemo(() => { return _.get(BackendParameters, backend, []); }, [backend]); const backendParamsTips = useMemo(() => { return getBackendParamsTips(backend); }, [backend]); const handleWorkerLabelsChange = useCallback( (labels: Record) => { form.setFieldValue('worker_selector', labels); }, [] ); const handleEnviromentVarsChange = useCallback( (labels: Record) => { form.setFieldValue('env', labels); }, [] ); const handleBackendParametersChange = useCallback((list: string[]) => { form.setFieldValue('backend_parameters', list); }, []); const handleBackendParametersOnBlur = () => { onValuesChange?.({}, form.getFieldsValue()); }; const handleDeleteBackendParameters = (index: number) => { onValuesChange?.({}, form.getFieldsValue()); }; const onSelectorChange = (field: string, allowEmpty?: boolean) => { const workerSelector = form.getFieldValue(field); // check if all keys have values const hasEmptyValue = _.some(_.keys(workerSelector), (k: string) => { return !workerSelector[k]; }); if (!hasEmptyValue || allowEmpty) { onValuesChange?.({}, form.getFieldsValue()); } }; const handleSelectorOnBlur = () => { onSelectorChange('worker_selector'); }; const handleDeleteWorkerSelector = (index: number) => { onValuesChange?.({}, form.getFieldsValue()); }; const handleEnvSelectorOnBlur = () => { onSelectorChange('env', true); }; const handleDeleteEnvSelector = (index: number) => { onValuesChange?.({}, form.getFieldsValue()); }; const collapseItems = useMemo(() => { const children = ( <> name="categories"> {scheduleType === ScheduleValueMap.Auto && ( <> name="placement_strategy"> } > name="worker_selector" rules={[ ({ getFieldValue }) => ({ validator(rule, value) { if ( getFieldValue('scheduleType') === ScheduleValueMap.Auto && _.keys(value).length > 0 ) { if (_.some(_.keys(value), (k: string) => !value[k])) { return Promise.reject( intl.formatMessage( { id: 'common.validate.value' }, { name: intl.formatMessage({ id: 'models.form.selector' }) } ) ); } } return Promise.resolve(); } }) ]} > {intl.formatMessage({ id: 'resources.form.workerSelector.description' })} } > )} name="env"> {scheduleType === ScheduleValueMap.Auto && [backendOptionsMap.vllm, backendOptionsMap.ascendMindie].includes( backend ) && (
name="distributed_inference_across_workers" valuePropName="checked" style={{ padding: '0 10px', marginBottom: 0 }} noStyle >
)}
name="restart_on_error" valuePropName="checked" style={{ padding: '0 10px', marginBottom: 0 }} noStyle >
); return [ { key: '2', label: ( Performance ), forceRender: true, children: }, { key: '1', label: ( {intl.formatMessage({ id: 'resources.form.advanced' })} ), forceRender: true, children } ]; }, [ form, source, intl, gpuOptions, paramsConfig, scheduleType, wokerSelector, backend, backend_parameters, isGGUF, categories, backend_version, placement_strategy, gpuSelectorIds, EnviromentVars, worker_selector ]); return ( ( )} items={collapseItems} > ); }; export default AdvanceConfig;