import ConfigInfo, { type BasicInfoData } from '@/components/ConfigInfo'; import { AutoMLTaskType, autoMLTaskTypeOptions } from '@/enums'; import { useComputingResource } from '@/hooks/useComputingResource'; import { classifierAlgorithms, FrameworkType, frameworkTypeOptions, queryStrategies, regressorAlgorithms, } from '@/pages/ActiveLearn/components/CreateForm/utils'; import { ActiveLearnData } from '@/pages/ActiveLearn/types'; import { experimentStatusInfo } from '@/pages/Experiment/status'; import { type NodeStatus } from '@/types'; import { elapsedTime } from '@/utils/date'; import { formatBoolean, formatCodeConfig, formatDataset, formatDate, formatEnum, formatMirror, formatModel, } from '@/utils/format'; import { Flex } from 'antd'; import classNames from 'classnames'; import { useMemo } from 'react'; import styles from './index.less'; type BasicInfoProps = { info?: ActiveLearnData; className?: string; isInstance?: boolean; runStatus?: NodeStatus; }; function BasicInfo({ info, className, runStatus, isInstance = false }: BasicInfoProps) { 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 []; } const modelInfo = [ { label: '预训练模型', value: info.model, format: formatModel, }, { label: '模型文件路径', value: info.model_py, }, { label: '模型类名称', value: info.model_class_name, }, { label: 'epochs', value: info.epochs, }, { label: 'batch_size', value: info.batch_size, }, ]; const lossInfo = [ { label: '学习率', value: info.lr, }, { label: 'loss文件路径', value: info.loss_py, }, { label: 'loss类名', value: info.loss_class_name, }, ]; const algorithmInfo = [ { label: info.task_type === AutoMLTaskType.Regression ? '回归算法' : '分类算法', value: info.task_type === AutoMLTaskType.Regression ? info.regressor_alg : info.classifier_alg, format: formatEnum( info.task_type === AutoMLTaskType.Regression ? regressorAlgorithms : classifierAlgorithms, ), }, ]; const diffInfo = info.framework_type === FrameworkType.Pytorch ? [...modelInfo, ...lossInfo] : info.framework_type === FrameworkType.Keras ? modelInfo : algorithmInfo; return [ { label: '任务类型', value: info.task_type, format: formatEnum(autoMLTaskTypeOptions), }, { label: '代码配置', value: info.code_config, format: formatCodeConfig, }, { label: '数据集', value: info.dataset, format: formatDataset, }, { label: '数据集处理文件路径', value: info.dataset_py, }, { label: '数据集类名', value: info.dataset_class_name, }, { label: '镜像', value: info.image, format: formatMirror, }, { label: '资源规格', value: info.computing_resource_id, format: getResourceDescription, }, { label: '框架类型', value: info.framework_type, format: formatEnum(frameworkTypeOptions), }, ...diffInfo, { label: '是否打乱', value: info.shuffle, format: formatBoolean, }, { label: '数据量', value: info.data_size, }, { label: '训练集数据量', value: info.train_size, }, { label: '初始训练数据量', value: info.initial_num, }, { label: '查询次数', value: info.queries_num, }, { label: '每次查询数据量', value: info.instances_num, }, { label: '查询策略', value: info.query_strategy, format: formatEnum(queryStrategies), }, { label: '检查点轮数', value: info.checkpoint_num, }, ]; }, [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 && ( )}
); } export default BasicInfo;