import PluginExtraFields from '@/components/plugin-extra-fields'; import { validateLabelNameRegxFor63 } from '@/config'; import { PageActionType } from '@/config/types'; import { Input as CInput, InputNumber, Select as SealSelect, Textarea, useAppUtils } from '@gpustack/core-ui'; import { useIntl } from '@umijs/max'; import { Flex, Form } from 'antd'; import { useMemo } from 'react'; import { GPUsConfigs } from '../../../resources/config/gpu-driver'; import formStyles from '../../instances/styles/instances.module.less'; import { ImagePullPolicyOptions, normalizeCommand, stringifyCommand } from '../config'; import { FormData } from '../config/types'; import Env from './env'; import Ports from './ports'; export interface BasicResourceMax { cpu?: number | null; memory?: number | null; localStorage?: number | null; } interface BasicProps { page?: 'template' | 'instance'; action?: PageActionType; disabled?: boolean; onceMaxRequest?: BasicResourceMax; } const Basic: React.FC = ({ page = 'template', action, onceMaxRequest, disabled }) => { const { getRuleMessage } = useAppUtils(); const intl = useIntl(); const manufacturerOptions = useMemo( () => Object.values(GPUsConfigs).map((item) => ({ label: item.label, value: item.gpuVendor })), [] ); const renderStorageLabel = (): React.ReactNode => { if (page === 'instance' && onceMaxRequest?.localStorage != null) { return intl.formatMessage( { id: 'gpuservice.instance.containerDisk.remaining' }, { count: onceMaxRequest.localStorage } ); } return intl.formatMessage({ id: 'gpuservice.template.containerDisk' }); }; return ( <>
{page === 'template' && ( <> name="name" rules={[ { required: true, message: getRuleMessage('input', 'common.table.name') }, { pattern: validateLabelNameRegxFor63, message: intl.formatMessage({ id: 'gpuservice.form.rule.name' }) } ]} > name="displayName" rules={[ { max: 63, message: intl.formatMessage({ id: 'gpuservice.template.displayName.max' }) } ]} > name="manufacturer" rules={[ { required: true, message: getRuleMessage('select', 'resources.table.vendor') } ]} > )} name={['spec', 'image']} rules={[ { required: true, message: getRuleMessage('input', 'gpuservice.template.image') } ]} > name={['spec', 'imagePullPolicy']}> ({ label: intl.formatMessage({ id: item.label }), value: item.value }))} />
name={['spec', 'command']} normalize={normalizeCommand} getValueProps={(value) => ({ value: stringifyCommand(value) })} >