import ConfigInfo, { type BasicInfoData } from '@/components/ConfigInfo'; import { hyperParameterOptimizedMode } from '@/enums'; import { useComputingResource } from '@/hooks/useComputingResource'; import { experimentStatusInfo } from '@/pages/Experiment/status'; import { schedulerAlgorithms, searchAlgorithms, } from '@/pages/HyperParameter/components/CreateForm/utils'; import { HyperParameterData } from '@/pages/HyperParameter/types'; import { type NodeStatus } from '@/types'; import { elapsedTime } from '@/utils/date'; import { formatCodeConfig, formatDataset, formatDate, formatEnum, formatMirror, formatModel, } from '@/utils/format'; import { Flex } from 'antd'; import classNames from 'classnames'; import { useMemo } from 'react'; import ParameterInfo from '../ParameterInfo'; import styles from './index.less'; // 格式化优化方向 const formatOptimizeMode = (value: string) => { return value === hyperParameterOptimizedMode.Max ? '越大越好' : '越小越好'; }; type HyperParameterBasicProps = { info?: HyperParameterData; className?: string; isInstance?: boolean; runStatus?: NodeStatus; }; function HyperParameterBasic({ info, className, runStatus, isInstance = false, }: HyperParameterBasicProps) { const getResourceDescription = useComputingResource()[1]; const basicDatas: BasicInfoData[] = useMemo(() => { if (!info) { return []; } return [ { label: '实验名称', value: info.name, }, { label: '实验描述', value: info.description, }, { label: '创建人', value: info.create_by, }, { label: '创建时间', value: info.create_time, format: formatDate, }, { label: '更新时间', value: info.update_time, format: formatDate, }, ]; }, [info]); const configDatas: BasicInfoData[] = useMemo(() => { if (!info) { return []; } return [ { label: '代码', value: info.code_config, format: formatCodeConfig, }, { label: '主函数代码文件', value: info.main_py, }, { label: '镜像', value: info.image, format: formatMirror, }, { label: '数据集', value: info.dataset, format: formatDataset, }, { label: '模型', value: info.model, format: formatModel, }, { label: '总试验次数', value: info.num_samples, }, { label: '搜索算法', value: info.search_alg, format: formatEnum(searchAlgorithms), }, { label: '调度算法', value: info.scheduler, format: formatEnum(schedulerAlgorithms), }, { label: '单次试验最大时间', value: info.max_t, }, { label: '最小试验数', value: info.min_samples_required, }, { label: '指标优化方向', value: info.mode, format: formatOptimizeMode, }, { label: '指标', value: info.metric, }, { label: '资源规格', value: info.computing_resource_id, format: getResourceDescription, }, ]; }, [info, getResourceDescription]); const instanceDatas = useMemo(() => { if (!info || !runStatus) { return []; } return [ { label: '启动时间', value: formatDate(info.create_time), ellipsis: true, }, { label: '执行时长', value: elapsedTime(info.create_time, runStatus.finishedAt), ellipsis: true, }, { label: '状态', value: (
{experimentStatusInfo[runStatus?.phase]?.label}
), ellipsis: true, }, ]; }, [runStatus, info]); return (
{isInstance && runStatus && ( )} {!isInstance && ( )} {info && }
); } export default HyperParameterBasic;