import KFIcon from '@/components/KFIcon'; import { CommonTabKeys } from '@/enums'; import { addDatasetVersion, addModelVersion, compareDatasetVersion, compareModelVersion, deleteDataset, deleteDatasetVersion, deleteModel, deleteModelVersion, editDatasetVersion, editModelVersion, getDatasetInfo, getDatasetList, getDatasetNextVersionReq, getDatasetVersionList, getModelInfo, getModelList, getModelNextVersionReq, getModelVersionList, publishDatasetReq, publishModelReq, } from '@/services/dataset/index.js'; import { limitUploadFileType } from '@/utils/ui'; import type { TabsProps, UploadFile } from 'antd'; export enum ResourceType { Model = 'Model', // 模型 Dataset = 'Dataset', // 数据集 } export enum DataSource { AutoExport = 'auto_export', // 自动导出 HandExport = 'hand_export', // 手动导出 Create = 'add', // 新增 LabelStudioExport = 'label_studio_export', // LabelStudio 导出 } type ResourceTypeInfo = { getList: (params: any) => Promise; // 获取资源列表 getVersions: (params: any) => Promise; // 获取版本列表 deleteRecord: (params: any) => Promise; // 删除 addVersion: (params: any) => Promise; // 新增版本 editVersion: (params: any) => Promise; // 编辑版本 deleteVersion: (params: any) => Promise; // 删除版本 getInfo: (params: any) => Promise; // 获取详情 compareVersion: (params: any) => Promise; // 版本对比 getNextVersion: (params: any) => Promise; // 获取下一个版本 publish: (params: any) => Promise; // 发布 name: string; // 名称 typeParamKey: 'data_type' | 'model_type'; // 类型参数名称,获取资源列表接口使用 tagParamKey: 'data_tag' | 'model_tag'; // 标签参数名称,获取资源列表接口使用 filePropKey: 'dataset_version_vos' | 'model_version_vos'; // 文件列表属性 sourceParamKey: 'dataset_source' | 'model_source'; // 来源参数名称 tabItems: TabsProps['items']; // tab 列表 typeTitle: string; // 类型标题 tagTitle: string; // 标签标题 typeValue: number; // 从 getAssetIcon 接口获取特定值的数据为 type 分类 (category_id === typeValue) tagValue: number; // 从 getAssetIcon 接口获取特定值的数据为 tag 分类(category_id === tagValue) prefix: string; // 图片资源、详情 url 的前缀 deleteModalTitle: string; // 删除弹框的title addBtnTitle: string; // 新增按钮的title uploadAction: string; // 上传接口 url uploadAccept?: string; // 上传文件类型 beforeUpload?: (file: UploadFile) => boolean | string; downloadAllAction: string; // 批量下载接口 url downloadSingleAction: string; // 单个下载接口 url }; export const resourceConfig: Record = { [ResourceType.Dataset]: { getList: getDatasetList, getVersions: getDatasetVersionList, deleteRecord: deleteDataset, addVersion: addDatasetVersion, editVersion: editDatasetVersion, deleteVersion: deleteDatasetVersion, getInfo: getDatasetInfo, compareVersion: compareDatasetVersion, getNextVersion: getDatasetNextVersionReq, publish: publishDatasetReq, name: '数据集', typeParamKey: 'data_type', tagParamKey: 'data_tag', filePropKey: 'dataset_version_vos', sourceParamKey: 'dataset_source', tabItems: [ { key: CommonTabKeys.Public, label: '数据广场', icon: , }, { key: CommonTabKeys.Private, label: '个人数据', icon: , }, ], typeTitle: '分类', tagTitle: '研究方向/应用领域', typeValue: 1, tagValue: 2, prefix: 'dataset', deleteModalTitle: '确定删除该条数据集实例吗?', addBtnTitle: '新建数据集', uploadAction: '/api/mmp/newdataset/upload', uploadAccept: '.zip,.tgz', beforeUpload: limitUploadFileType('zip,tgz'), downloadAllAction: '/api/mmp/newdataset/downloadAllFiles', downloadSingleAction: '/api/mmp/newdataset/downloadSingleFile', }, [ResourceType.Model]: { getList: getModelList, getVersions: getModelVersionList, deleteRecord: deleteModel, addVersion: addModelVersion, editVersion: editModelVersion, deleteVersion: deleteModelVersion, getInfo: getModelInfo, compareVersion: compareModelVersion, getNextVersion: getModelNextVersionReq, publish: publishModelReq, name: '模型', typeParamKey: 'model_type', tagParamKey: 'model_tag', filePropKey: 'model_version_vos', sourceParamKey: 'model_source', tabItems: [ { key: CommonTabKeys.Public, label: '模型广场', icon: , }, { key: CommonTabKeys.Private, label: '个人模型', icon: , }, ], typeTitle: '模型框架', tagTitle: '模型能力', typeValue: 3, tagValue: 4, prefix: 'model', deleteModalTitle: '确定删除该条模型实例吗?', addBtnTitle: '新建模型', uploadAction: '/api/mmp/newmodel/upload', uploadAccept: undefined, downloadAllAction: '/api/mmp/newmodel/downloadAllFiles', downloadSingleAction: '/api/mmp/newmodel/downloadSingleFile', }, }; // 分类数据 export type CategoryData = { id: number; category_id: number; name: string; path: string; }; // 数据集、模型列表数据 export interface ResourceData { resourceType: ResourceType.Dataset | ResourceType.Model; // 用于 ts 类型判断 id: number; name: string; identifier: string; owner: string; version: string; is_public: boolean; description?: string; create_by?: string; update_time?: string; time_ago?: string; version_desc?: string; usage?: string; relative_paths?: string; train_task?: TrainTask; // 训练任务 praises_count: number; // 点赞数 praised: boolean; // 是否点赞 full_last_update_time: string; // 完整的更新时间 } // 数据集数据 export interface DatasetData extends ResourceData { resourceType: ResourceType.Dataset; // 用于区别类型 data_type?: string; // 数据集分类 data_tag?: string; // 研究方向 processing_code?: ProjectDependency; // 处理代码 dataset_source?: string; // 数据来源 dataset_version_vos?: ResourceFileData[]; } // 模型数据 export interface ModelData extends ResourceData { resourceType: ResourceType.Model; // 用于区别类型 model_type?: string; // 模型框架 model_tag?: string; // 模型能力 image?: string; // 训练镜像 code?: string; // 训练镜像 train_datasets?: DatasetData[]; // 训练数据集 test_datasets?: DatasetData[]; // 测试数据集 params?: Record; // 参数 metrics?: Record; // 指标 project_depency?: ProjectDependency; // 项目依赖 model_source?: string; // 模型来源 model_version_vos?: ResourceFileData[]; } // 版本数据 export type ResourceVersionData = { name: string; http_url: string; tar_url: string; zip_url: string; }; // 版本文件数据 export type ResourceFileData = { file_name: string; file_size: string; url: string; update_time?: string; }; // 训练任务 export type TrainTask = { ins_id: number; // 实例id name: string; // 实验名称 experiment_id: number; //实验 id workflow_id: number; // 流水线 id }; // 项目依赖 export type ProjectDependency = { url: string; // 项目地址 name: string; // 项目名称 branch: string; // 分支 };