import { DatasetType, DatasetStatus, type Dataset, DatasetSubType, DataSource, } from "@/pages/DataManagement/dataset.model"; import { formatBytes, formatDateTime } from "@/utils/unit"; import { CheckCircleOutlined, ClockCircleOutlined, CloseCircleOutlined, FileOutlined, } from "@ant-design/icons"; import { AnyObject } from "antd/es/_util/type"; import { FileImage, FileText, Video, Film, FileCode, MessageCircleMore, ImagePlus, FileMusic, Music, Videotape, Database, Image, ScanText, } from "lucide-react"; export const datasetTypeMap: Record< string, { value: DatasetType; label: string; order: number; description: string; icon?: any; iconColor?: string; children: DatasetSubType[]; } > = { [DatasetType.TEXT]: { value: DatasetType.TEXT, label: "文本", order: 1, icon: ScanText, iconColor: "#A78BFA", children: [ DatasetSubType.TEXT_DOCUMENT, DatasetSubType.TEXT_WEB, DatasetSubType.TEXT_DIALOG, ], description: "用于处理和分析文本数据的数据集", }, [DatasetType.IMAGE]: { value: DatasetType.IMAGE, label: "图像", order: 2, icon: Image, iconColor: "#38BDF8", children: [DatasetSubType.IMAGE_IMAGE, DatasetSubType.IMAGE_CAPTION], description: "用于处理和分析图像数据的数据集", }, [DatasetType.AUDIO]: { value: DatasetType.AUDIO, label: "音频", order: 3, icon: Music, iconColor: "#F59E0B", children: [DatasetSubType.AUDIO_AUDIO, DatasetSubType.AUDIO_JSONL], description: "用于处理和分析音频数据的数据集", }, [DatasetType.VIDEO]: { value: DatasetType.VIDEO, label: "视频", order: 3, icon: Film, iconColor: "#22D3EE", children: [DatasetSubType.VIDEO_VIDEO, DatasetSubType.VIDEO_JSONL], description: "用于处理和分析视频数据的数据集", }, }; export const datasetSubTypeMap: Record< string, { value: DatasetSubType; label: string; order?: number; description?: string; icon?: any; color?: string; } > = { [DatasetSubType.TEXT_DOCUMENT]: { value: DatasetSubType.TEXT_DOCUMENT, label: "文档", color: "blue", icon: FileText, description: "用于存储和处理各种文档格式的文本数据集", }, [DatasetSubType.TEXT_WEB]: { value: DatasetSubType.TEXT_WEB, label: "网页", color: "cyan", icon: FileCode, description: "用于存储和处理网页数据集", }, [DatasetSubType.TEXT_DIALOG]: { value: DatasetSubType.TEXT_DIALOG, label: "对话", color: "teal", icon: MessageCircleMore, description: "用于存储和处理对话数据的数据集", }, [DatasetSubType.IMAGE_IMAGE]: { value: DatasetSubType.IMAGE_IMAGE, label: "图像", color: "green", icon: FileImage, description: "用于大规模图像预训练模型的数据集", }, [DatasetSubType.IMAGE_CAPTION]: { value: DatasetSubType.IMAGE_CAPTION, label: "图像+caption", color: "lightgreen", icon: ImagePlus, description: "用于图像标题生成的数据集", }, [DatasetSubType.AUDIO_AUDIO]: { value: DatasetSubType.AUDIO_AUDIO, label: "音频", color: "purple", icon: Music, description: "用于大规模音频预训练模型的数据集", }, [DatasetSubType.AUDIO_JSONL]: { value: DatasetSubType.AUDIO_JSONL, label: "音频+JSONL", color: "purple", icon: FileMusic, description: "用于大规模音频预训练模型的数据集", }, [DatasetSubType.VIDEO_VIDEO]: { value: DatasetSubType.VIDEO_VIDEO, label: "视频", color: "orange", icon: Video, description: "用于大规模视频预训练模型的数据集", }, [DatasetSubType.VIDEO_JSONL]: { value: DatasetSubType.VIDEO_JSONL, label: "视频+JSONL", color: "orange", icon: Videotape, description: "用于大规模视频预训练模型的数据集", }, }; export const datasetStatusMap = { [DatasetStatus.ACTIVE]: { label: "活跃", value: DatasetStatus.ACTIVE, color: "#409f17ff", icon: , }, [DatasetStatus.PROCESSING]: { label: "处理中", value: DatasetStatus.PROCESSING, color: "#2673e5", icon: , }, [DatasetStatus.INACTIVE]: { label: "未激活", value: DatasetStatus.INACTIVE, color: "#4f4444ff", icon: , }, [DatasetStatus.DRAFT]: { label: "草稿", value: DatasetStatus.DRAFT, color: "#a1a1a1ff", icon: , }, }; export const dataSourceMap: Record = { [DataSource.UPLOAD]: { label: "本地上传", value: DataSource.UPLOAD }, [DataSource.COLLECTION]: { label: "归集任务导入 ", value: DataSource.COLLECTION }, // [DataSource.DATABASE]: { label: "数据库导入", value: DataSource.DATABASE }, // [DataSource.NAS]: { label: "NAS导入", value: DataSource.NAS }, // [DataSource.OBS]: { label: "OBS导入", value: DataSource.OBS }, }; export const dataSourceOptions = Object.values(dataSourceMap); export function mapDataset(dataset: AnyObject): Dataset { const { icon: IconComponent, iconColor } = datasetTypeMap[dataset?.datasetType] || {}; return { ...dataset, key: dataset.id, type: datasetTypeMap[dataset.datasetType]?.label || "未知", size: formatBytes(dataset.totalSize || 0), createdAt: formatDateTime(dataset.createdAt) || "--", updatedAt: formatDateTime(dataset?.updatedAt) || "--", icon: IconComponent ? : , iconColor: iconColor, status: datasetStatusMap[dataset.status], statistics: [ { label: "文件数", value: dataset.fileCount || 0 }, { label: "大小", value: formatBytes(dataset.totalSize || 0) }, ], lastModified: dataset.updatedAt, }; } export const datasetTypes = Object.values(datasetTypeMap).map((type) => ({ ...type, options: type.children?.map( (subType) => datasetSubTypeMap[subType as keyof typeof datasetSubTypeMap] ), }));