import _ from 'lodash'; import { FormikErrors } from 'formik'; import { useState } from 'react'; import { useIsStandAlone } from '@/react/docker/proxy/queries/useInfo'; import { useEnvironmentId } from '@/react/hooks/useEnvironmentId'; import { useCurrentEnvironment } from '@/react/hooks/useCurrentEnvironment'; import { FormControl } from '@@/form-components/FormControl'; import { Input } from '@@/form-components/Input'; import { GpuFieldset, GpuFieldsetValues } from './GpuFieldset'; import { Values as RuntimeValues, RuntimeSection } from './RuntimeSection'; import { DevicesField, Values as Devices } from './DevicesField'; import { SysctlsField, Values as Sysctls } from './SysctlsField'; import { ResourceFieldset, Values as ResourcesValues, } from './ResourcesFieldset'; import { EditResourcesForm } from './EditResourceForm'; export interface Values { runtime: RuntimeValues; devices: Devices; sysctls: Sysctls; sharedMemorySize: number; gpu: GpuFieldsetValues; resources: ResourcesValues; } export function ResourcesTab({ values: initialValues, onChange, allowPrivilegedMode, isInitFieldVisible, isDevicesFieldVisible, isSysctlFieldVisible, errors, isDuplicate, redeploy, isImageInvalid, }: { values: Values; onChange: (values: Values) => void; allowPrivilegedMode: boolean; isInitFieldVisible: boolean; isDevicesFieldVisible: boolean; isSysctlFieldVisible: boolean; errors?: FormikErrors; isDuplicate?: boolean; redeploy: (values: Values) => Promise; isImageInvalid: boolean; }) { const [values, setControlledValues] = useState(initialValues); const environmentId = useEnvironmentId(); const environmentQuery = useCurrentEnvironment(); const isStandalone = useIsStandAlone(environmentId); if (!environmentQuery.data) { return null; } const environment = environmentQuery.data; const gpuUseAll = _.get(environment, 'Snapshots[0].GpuUseAll', false); const gpuUseList = _.get(environment, 'Snapshots[0].GpuUseList', []); return (
handleChange({ runtime })} allowPrivilegedMode={allowPrivilegedMode} isInitFieldVisible={isInitFieldVisible} /> {isDevicesFieldVisible && ( handleChange({ devices })} /> )} {isSysctlFieldVisible && ( handleChange({ sysctls })} /> )}
handleChange({ sharedMemorySize: e.target.valueAsNumber }) } className="w-32" />
Size of /dev/shm (MB)
{isStandalone && ( handleChange({ gpu })} gpus={environment.Gpus} enableGpuManagement={environment.EnableGPUManagement} usedGpus={gpuUseList} usedAllGpus={gpuUseAll} /> )} {isDuplicate ? ( redeploy({ ...values, resources: newValues }) } isImageInvalid={isImageInvalid} /> ) : ( handleChange({ resources })} errors={errors?.resources} /> )}
); function handleChange(newValues: Partial) { onChange({ ...values, ...newValues }); setControlledValues({ ...values, ...newValues }); } }