From 45a2e25fe756eb4b0230fd19e662687714c1c25b Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Sun, 29 Sep 2024 13:49:11 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/ResourceIntro/index.tsx | 2 +- react-ui/src/pages/Dataset/config.tsx | 14 +-- .../components/ExperimentResult/index.tsx | 41 ++++--- .../components/ExportModelModal/index.tsx | 102 +++++++++--------- 4 files changed, 84 insertions(+), 75 deletions(-) diff --git a/react-ui/src/pages/Dataset/components/ResourceIntro/index.tsx b/react-ui/src/pages/Dataset/components/ResourceIntro/index.tsx index 7489666b..06b7237f 100644 --- a/react-ui/src/pages/Dataset/components/ResourceIntro/index.tsx +++ b/react-ui/src/pages/Dataset/components/ResourceIntro/index.tsx @@ -85,7 +85,7 @@ const formatSource = (source?: string) => { } else if (source === DataSource.HandExport) { return '手动导入'; } else if (source === DataSource.AtuoExport) { - return '自动导入'; + return '实验自动导入'; } return source; }; diff --git a/react-ui/src/pages/Dataset/config.tsx b/react-ui/src/pages/Dataset/config.tsx index 9c4d6e47..8e066049 100644 --- a/react-ui/src/pages/Dataset/config.tsx +++ b/react-ui/src/pages/Dataset/config.tsx @@ -199,15 +199,15 @@ export type ResourceFileData = { // 训练任务 export type TrainTask = { - ins_id: number; - name: string; - experiment_id: number; - workflow_id: number; + ins_id: number; // 实例id + name: string; // 实验名称 + experiment_id: number; //实验 id + workflow_id: number; // 流水线 id }; // 项目依赖 export type ProjectDependency = { - url: string; - name: string; - branch: string; + url: string; // 项目地址 + name: string; // 项目名称 + branch: string; // 分支 }; diff --git a/react-ui/src/pages/Experiment/components/ExperimentResult/index.tsx b/react-ui/src/pages/Experiment/components/ExperimentResult/index.tsx index 6c770618..37e6a9df 100644 --- a/react-ui/src/pages/Experiment/components/ExperimentResult/index.tsx +++ b/react-ui/src/pages/Experiment/components/ExperimentResult/index.tsx @@ -1,3 +1,4 @@ +import { ResourceType } from '@/pages/Dataset/config'; import { getNodeResult } from '@/services/experiment/index.js'; import { downLoadZip } from '@/utils/downloadfile'; import { openAntdModal } from '@/utils/modal'; @@ -34,6 +35,12 @@ function ExperimentResult({ }: ExperimentResultProps) { const { message } = App.useApp(); const [experimentResults, setExperimentResults] = useState([]); + const resourceType: ResourceType | undefined = pipelineNodeId.startsWith('general-data-process') + ? ResourceType.Dataset + : pipelineNodeId.startsWith('model-train') || + pipelineNodeId.startsWith('distributed-model-train') + ? ResourceType.Model + : undefined; useEffect(() => { getExperimentResult({ id: `${experimentInsId}`, node_id: pipelineNodeId }); @@ -42,8 +49,11 @@ function ExperimentResult({ // 获取实验结果 const getExperimentResult = async (params: any) => { const [res] = await to(getNodeResult(params)); - if (res && res.data) { - setExperimentResults(res.data); + if (res && res.data && Array.isArray(res.data)) { + const data = res.data.filter((item: ExperimentResultData) => item.value.length > 0); + setExperimentResults(data); + } else { + setExperimentResults([]); } }; @@ -52,9 +62,10 @@ function ExperimentResult({ downLoadZip(`/api/mmp/minioStorage/download`, { path }); }; - // 导出到模型库 - const exportToModel = (path: string) => { + // 导出到数据集、模型 + const exportToResource = (path: string) => { const { close } = openAntdModal(ExportModelModal, { + resourceType: resourceType!, pipelineId, experimentId, experimentName, @@ -86,17 +97,17 @@ function ExperimentResult({ > 下载 - - {/* 导出到模型库 - 导出到数据集 */} + {resourceType && ( + + )}
文件名称 diff --git a/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx b/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx index 5667a388..9b73a553 100644 --- a/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx +++ b/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx @@ -1,7 +1,12 @@ import editExperimentIcon from '@/assets/img/edit-experiment.png'; import KFModal from '@/components/KFModal'; -import { DataSource, ResourceVersionData, type ResourceData } from '@/pages/Dataset/config'; -import { addModelVersion, getModelList, getModelVersionList } from '@/services/dataset'; +import { + DataSource, + ResourceType, + ResourceVersionData, + resourceConfig, + type ResourceData, +} from '@/pages/Dataset/config'; import { to } from '@/utils/promise'; import { InfoCircleOutlined } from '@ant-design/icons'; import { Form, Input, ModalProps, Select } from 'antd'; @@ -15,20 +20,8 @@ type FormData = { version_desc: string; }; -// type ExportModelResponce = { -// fileName: string; -// fileSize: string; -// url: string; -// }; - -// type CreateModelVersionParams = FormData & { -// file_name: string; -// file_size: string; -// url: string; -// // name: string; -// }; - interface ExportModelModalProps extends Omit { + resourceType: ResourceType; pipelineId: number; // 流水线 id experimentId: number; // 实验 id experimentName: string; // 实验 name @@ -39,6 +32,7 @@ interface ExportModelModalProps extends Omit { } function ExportModelModal({ + resourceType, pipelineId, experimentId, experimentName, @@ -49,9 +43,9 @@ function ExportModelModal({ ...rest }: ExportModelModalProps) { const [form] = Form.useForm(); - const [models, setModels] = useState([]); + const [resources, setResources] = useState([]); const [versions, setVersions] = useState([]); - // const [uuid] = useState(Date.now()); + const config = resourceConfig[resourceType]; const layout = { labelCol: { span: 24 }, @@ -59,57 +53,57 @@ function ExportModelModal({ }; useEffect(() => { - requestModelList(); + requestResourceList(); }, []); - // 获取选中的模型 - const getSelectedModel = (id: number | undefined) => { + // 获取选中的数据集、模型 + const getSelectedResource = (id: number | undefined) => { if (id) { - return models.find((item) => item.id === id); + return resources.find((item) => item.id === id); } return undefined; }; - // 模型版本 tooltip + // 版本 tooltip const getTooltip = () => { const id = form.getFieldValue('id'); - const model = getSelectedModel(id); - const name = model?.name ?? ''; + const resource = getSelectedResource(id); + const name = resource?.name ?? ''; const versionNames = versions.map((item: ResourceVersionData) => item.name).join('、'); const tooltip = versions.length > 0 ? `${name}有以下版本:\n${versionNames}\n注意不能重复` : undefined; return tooltip; }; - // 处理模型名称变化 - const handleModelChange = (id: number | undefined) => { + // 处理数据集、模型选择变化 + const handleResourceChange = (id: number | undefined) => { if (id) { - getModelVersions(id); + getRecourceVersions(id); } else { setVersions([]); } }; - // 获取模型列表 - const requestModelList = async () => { + // 获取数据集、模型列表 + const requestResourceList = async () => { const params = { page: 0, size: 1000, is_public: false, // 个人 }; - const [res] = await to(getModelList(params)); + const [res] = await to(config.getList(params)); if (res && res.data) { - setModels(res.data.content || []); + setResources(res.data.content || []); } }; - // 获取模型版本列表 - const getModelVersions = async (id: number) => { - const model = getSelectedModel(id); - if (!model) { + // 获取数据集、模型版本列表 + const getRecourceVersions = async (id: number) => { + const resource = getSelectedResource(id); + if (!resource) { return; } - const [res] = await to(getModelVersionList(pick(model, ['identifier', 'owner']))); + const [res] = await to(config.getVersions(pick(resource, ['identifier', 'owner']))); if (res && res.data) { setVersions(res.data); } @@ -117,17 +111,17 @@ function ExportModelModal({ // 提交 const hanldeFinish = (formData: FormData) => { - exportToModel(formData); + exportToResource(formData); }; - // 导出到模型 - const exportToModel = async (formData: FormData) => { + // 导出到数据集、模型 + const exportToResource = async (formData: FormData) => { const id = form.getFieldValue('id'); - const model = getSelectedModel(id); + const resource = getSelectedResource(id); const params = { ...formData, - identifier: model?.identifier, - name: model?.name, + identifier: resource?.identifier, + name: resource?.name, model_source: DataSource.HandExport, train_task: { workflow_id: pipelineId, @@ -142,7 +136,7 @@ function ExportModelModal({ }, ], }; - const [res] = await to(addModelVersion(params)); + const [res] = await to(config.addVersion(params)); if (res) { onOk(); } @@ -151,7 +145,7 @@ function ExportModelModal({ return ( - + { if (value && versions.map((item) => item.name).includes(value)) { - return Promise.reject('模型版本已存在'); + return Promise.reject(`${config.name}版本已存在`); } else { return Promise.resolve(); } @@ -204,7 +202,7 @@ function ExportModelModal({ }, ]} > - +