import LabelSelector from '@/components/label-selector'; import SealSelect from '@/components/seal-form/seal-select'; import { InfoCircleOutlined, RightOutlined } from '@ant-design/icons'; import { useIntl } from '@umijs/max'; import { Checkbox, Collapse, Form, FormInstance, Select, Tooltip, Typography } from 'antd'; import React, { useCallback, useMemo } from 'react'; import { placementStrategyOptions } from '../config'; import { FormData } from '../config/types'; import dataformStyles from '../style/data-form.less'; import GPUCard from './gpu-card'; interface AdvanceConfigProps { form: FormInstance; gpuOptions: Array; } const AdvanceConfig: React.FC = (props) => { const { form, gpuOptions } = props; const intl = useIntl(); const wokerSelector = Form.useWatch('worker_selector', form); const scheduleType = Form.useWatch('scheduleType', form); const placementStrategyTips = [ { title: 'Spread', tips: intl.formatMessage({ id: 'resources.form.spread.tips' }) }, { title: 'Binpack', tips: intl.formatMessage({ id: 'resources.form.binpack.tips' }) } ]; const scheduleTypeTips = [ { title: intl.formatMessage({ id: 'models.form.scheduletype.auto' }), tips: intl.formatMessage({ id: 'models.form.scheduletype.auto.tips' }) }, { title: intl.formatMessage({ id: 'models.form.scheduletype.manual' }), tips: intl.formatMessage({ id: 'models.form.scheduletype.manual.tips' }) } ]; const renderSelectTips = (list: Array<{ title: string; tips: string }>) => { return (
{list.map((item, index) => { return (
{item.title}: {item.tips}
); })}
); }; const handleWorkerLabelsChange = useCallback( (labels: Record) => { form.setFieldValue('worker_selector', labels); }, [] ); const collapseItems = useMemo(() => { const children = ( <> {scheduleType === 'auto' && ( <> name="placement_strategy"> name="worker_selector"> {intl.formatMessage({ id: 'resources.form.workerSelector.description' })} } > )} {scheduleType === 'manual' && ( name="gpu_selector" rules={[ { required: true, message: intl.formatMessage( { id: 'common.form.rule.select' }, { name: 'gpu_selector' } ) } ]} > {gpuOptions.map((item) => ( ))} )}
name="cpu_offloading" valuePropName="checked" style={{ padding: '0 10px', marginBottom: 0 }} noStyle > {intl.formatMessage({ id: 'resources.form.enablePartialOffload' })}
{scheduleType === 'auto' && (
name="distributed_inference_across_workers" valuePropName="checked" style={{ padding: '0 10px', marginBottom: 0 }} noStyle > {intl.formatMessage({ id: 'resources.form.enableDistributedInferenceAcrossWorkers' })}
)} ); return [ { key: '1', label: ( {intl.formatMessage({ id: 'resources.form.advanced' })} ), children } ]; }, [form, intl, gpuOptions, scheduleType, wokerSelector]); return ( ( )} items={collapseItems} > ); }; export default AdvanceConfig;