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 { useIntl } from '@umijs/max'; import { Form } from 'antd'; import _ from 'lodash'; import { useCallback } from 'react'; import { modelCategories, placementStrategyOptions, ScheduleValueMap } from '../config'; import { 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 ScheduleTypeForm from '../forms/schedule-type'; 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 { onValuesChange } = useFormContext(); const handleWorkerLabelsChange = useCallback( (labels: Record) => { form.setFieldValue('worker_selector', labels); }, [] ); const handleEnviromentVarsChange = useCallback( (labels: Record) => { form.setFieldValue('env', labels); }, [] ); 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()); }; return ( <> 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 >
); }; export default AdvanceConfig;