| @@ -42,37 +42,43 @@ export const regressorAlgorithms = [ | |||
| // 特征预处理算法 | |||
| export const featureAlgorithms = [ | |||
| { label: 'densifier (数据增稠)', value: 'densifier' }, | |||
| { label: 'densifier (缺失值填充)', value: 'densifier' }, | |||
| { | |||
| label: 'extra_trees_preproc_for_classification (分类任务极端随机树)', | |||
| label: 'extra_trees_preproc_for_classification (特征选择-分类任务极端随机树)', | |||
| value: 'extra_trees_preproc_for_classification', | |||
| }, | |||
| { | |||
| label: 'extra_trees_preproc_for_regression (回归任务极端随机树)', | |||
| label: 'extra_trees_preproc_for_regression (特征选择-回归任务极端随机树)', | |||
| value: 'extra_trees_preproc_for_regression', | |||
| }, | |||
| { label: 'fast_ica (快速独立成分分析)', value: 'fast_ica' }, | |||
| { label: 'feature_agglomeration (特征聚合)', value: 'feature_agglomeration' }, | |||
| { label: 'kernel_pca (核主成分分析)', value: 'kernel_pca' }, | |||
| { label: 'kitchen_sinks (随机特征映射)', value: 'kitchen_sinks' }, | |||
| { label: 'liblinear_svc_preprocessor (线性svc预处理器)', value: 'liblinear_svc_preprocessor' }, | |||
| { label: 'fast_ica (特征选择-快速独立成分分析)', value: 'fast_ica' }, | |||
| { label: 'feature_agglomeration (特征变换-特征聚合)', value: 'feature_agglomeration' }, | |||
| { label: 'kernel_pca (特征选择-核主成分分析)', value: 'kernel_pca' }, | |||
| { label: 'kitchen_sinks (特征变换-随机特征映射)', value: 'kitchen_sinks' }, | |||
| { | |||
| label: 'liblinear_svc_preprocessor (特征选择-线性svc预处理器)', | |||
| value: 'liblinear_svc_preprocessor', | |||
| }, | |||
| { label: 'no_preprocessing (无预处理)', value: 'no_preprocessing' }, | |||
| { label: 'nystroem_sampler (尼斯特罗姆采样器)', value: 'nystroem_sampler' }, | |||
| { label: 'pca (主成分分析)', value: 'pca' }, | |||
| { label: 'polynomial (多项式特征扩展)', value: 'polynomial' }, | |||
| { label: 'random_trees_embedding (随机森林特征嵌入)', value: 'random_trees_embedding' }, | |||
| { label: 'nystroem_sampler (特征变换-尼斯特罗姆采样器)', value: 'nystroem_sampler' }, | |||
| { label: 'pca (特征选择-主成分分析)', value: 'pca' }, | |||
| { label: 'polynomial (特征变换-多项式特征扩展)', value: 'polynomial' }, | |||
| { label: 'random_trees_embedding (特征变换-随机森林特征嵌入)', value: 'random_trees_embedding' }, | |||
| { | |||
| label: 'select_percentile_classification (基于百分位的分类特征选择)', | |||
| label: 'select_percentile_classification 特征选择-基于百分位的分类特征选择)', | |||
| value: 'select_percentile_classification', | |||
| }, | |||
| { | |||
| label: 'select_percentile_regression (基于百分位的回归特征选择)', | |||
| label: 'select_percentile_regression (特征选择-基于百分位的回归特征选择)', | |||
| value: 'select_percentile_regression', | |||
| }, | |||
| { | |||
| label: 'select_rates_classification (基于比率的分类特征选择)', | |||
| label: 'select_rates_classification (特征选择-基于比率的分类特征选择)', | |||
| value: 'select_rates_classification', | |||
| }, | |||
| { label: 'select_rates_regression (基于比率的回归特征选择)', value: 'select_rates_regression' }, | |||
| { label: 'truncatedSVD (截断奇异值分解)', value: 'truncatedSVD' }, | |||
| { | |||
| label: 'select_rates_regression (特征选择-基于比率的回归特征选择)', | |||
| value: 'select_rates_regression', | |||
| }, | |||
| { label: 'truncatedSVD (特征变换-截断奇异值分解)', value: 'truncatedSVD' }, | |||
| ]; | |||
| @@ -0,0 +1,121 @@ | |||
| import KFModal from '@/components/KFModal'; | |||
| import { DataSource, ResourceData, ResourceType, resourceConfig } from '@/pages/Dataset/config'; | |||
| import { to } from '@/utils/promise'; | |||
| import { Form, Input, message, type ModalProps } from 'antd'; | |||
| interface EditVersionModalProps extends Omit<ModalProps, 'onOk'> { | |||
| resourceType: ResourceType; | |||
| resourceVersion: ResourceData; | |||
| onOk: () => void; | |||
| } | |||
| function EditVersionModal({ resourceType, resourceVersion, onOk, ...rest }: EditVersionModalProps) { | |||
| const config = resourceConfig[resourceType]; | |||
| const { name: resoureName, version, version_desc } = resourceVersion; | |||
| // 修改请求 | |||
| const editDatasetVersion = async (params: any) => { | |||
| const request = config.editVersion; | |||
| const [res] = await to(request(params)); | |||
| if (res) { | |||
| message.success('编辑成功'); | |||
| onOk?.(); | |||
| } | |||
| }; | |||
| // 提交 | |||
| const onFinish = (formData: any) => { | |||
| const params = { | |||
| ...resourceVersion, | |||
| ...formData, | |||
| [config.sourceParamKey]: DataSource.Create, | |||
| }; | |||
| editDatasetVersion(params); | |||
| }; | |||
| const name = config.name; | |||
| return ( | |||
| <KFModal | |||
| {...rest} | |||
| title="编辑版本" | |||
| image={require('@/assets/img/create-experiment.png')} | |||
| width={825} | |||
| okButtonProps={{ | |||
| htmlType: 'submit', | |||
| form: 'form', | |||
| }} | |||
| > | |||
| <Form | |||
| name="form" | |||
| layout="vertical" | |||
| initialValues={{ | |||
| name: resoureName, | |||
| version: version, | |||
| version_desc: version_desc, | |||
| }} | |||
| onFinish={onFinish} | |||
| autoComplete="off" | |||
| > | |||
| <Form.Item | |||
| label={`${name}名称`} | |||
| name="name" | |||
| rules={[ | |||
| { | |||
| required: true, | |||
| message: `请输入${name}名称`, | |||
| }, | |||
| ]} | |||
| > | |||
| <Input disabled placeholder={`请输入${name}名称`} /> | |||
| </Form.Item> | |||
| <Form.Item | |||
| label={`${name}版本`} | |||
| name="version" | |||
| rules={[ | |||
| { | |||
| required: true, | |||
| message: `请输入${name}版本`, | |||
| }, | |||
| { | |||
| pattern: /^[a-zA-Z0-9._-]+$/, | |||
| message: `${name}版本只支持字母、数字、点(.)、下划线(_)、中横线(-)`, | |||
| }, | |||
| { | |||
| validator: (_rule, value) => { | |||
| if (value === 'master') { | |||
| return Promise.reject(`${name}版本不能为 master`); | |||
| } else if (value === 'origin') { | |||
| return Promise.reject(`${name}版本不能为 origin`); | |||
| } | |||
| return Promise.resolve(); | |||
| }, | |||
| }, | |||
| ]} | |||
| > | |||
| <Input placeholder={`请输入${name}版本`} maxLength={64} showCount allowClear disabled /> | |||
| </Form.Item> | |||
| <Form.Item | |||
| label="版本描述" | |||
| name="version_desc" | |||
| rules={[ | |||
| { | |||
| required: true, | |||
| message: '请输入版本描述', | |||
| }, | |||
| ]} | |||
| > | |||
| <Input.TextArea | |||
| placeholder="请输入版本描述" | |||
| autoSize={{ minRows: 2, maxRows: 6 }} | |||
| maxLength={200} | |||
| showCount | |||
| allowClear | |||
| /> | |||
| </Form.Item> | |||
| </Form> | |||
| </KFModal> | |||
| ); | |||
| } | |||
| export default EditVersionModal; | |||
| @@ -23,6 +23,7 @@ import { App, Button, Flex, Select, Tabs } from 'antd'; | |||
| import classNames from 'classnames'; | |||
| import { useCallback, useEffect, useState } from 'react'; | |||
| import AddVersionModal from '../AddVersionModal'; | |||
| import EditVersionModal from '../EditVersionModal'; | |||
| import ResourceIntro from '../ResourceIntro'; | |||
| import ResourceVersion from '../ResourceVersion'; | |||
| import VersionCompareModal from '../VersionCompareModal'; | |||
| @@ -132,6 +133,18 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { | |||
| }); | |||
| }; | |||
| // 版本编辑 | |||
| const showEditVersionModal = () => { | |||
| const { close } = openAntdModal(EditVersionModal, { | |||
| resourceType: resourceType, | |||
| resourceVersion: info, | |||
| onOk: () => { | |||
| getResourceDetail(); | |||
| close(); | |||
| }, | |||
| }); | |||
| }; | |||
| // 选择版本 | |||
| const showVersionSelector = () => { | |||
| const { close } = openAntdModal(VersionSelectorModal, { | |||
| @@ -291,6 +304,14 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { | |||
| <Button type="default" onClick={showModal} icon={<KFIcon type="icon-xinjian2" />}> | |||
| 创建新版本 | |||
| </Button> | |||
| <Button | |||
| type="default" | |||
| style={{ marginLeft: '20px' }} | |||
| icon={<KFIcon type="icon-bianji" />} | |||
| onClick={showEditVersionModal} | |||
| > | |||
| 版本编辑 | |||
| </Button> | |||
| <Button | |||
| type="default" | |||
| style={{ marginLeft: '20px' }} | |||
| @@ -9,6 +9,8 @@ import { | |||
| deleteDatasetVersion, | |||
| deleteModel, | |||
| deleteModelVersion, | |||
| editDatasetVersion, | |||
| editModelVersion, | |||
| getDatasetInfo, | |||
| getDatasetList, | |||
| getDatasetVersionList, | |||
| @@ -36,6 +38,7 @@ type ResourceTypeInfo = { | |||
| getVersions: (params: any) => Promise<any>; // 获取版本列表 | |||
| deleteRecord: (params: any) => Promise<any>; // 删除 | |||
| addVersion: (params: any) => Promise<any>; // 新增版本 | |||
| editVersion: (params: any) => Promise<any>; // 编辑版本 | |||
| deleteVersion: (params: any) => Promise<any>; // 删除版本 | |||
| getInfo: (params: any) => Promise<any>; // 获取详情 | |||
| compareVersion: (params: any) => Promise<any>; // 版本对比 | |||
| @@ -65,6 +68,7 @@ export const resourceConfig: Record<ResourceType, ResourceTypeInfo> = { | |||
| getVersions: getDatasetVersionList, | |||
| deleteRecord: deleteDataset, | |||
| addVersion: addDatasetVersion, | |||
| editVersion: editDatasetVersion, | |||
| deleteVersion: deleteDatasetVersion, | |||
| getInfo: getDatasetInfo, | |||
| compareVersion: compareDatasetVersion, | |||
| @@ -103,6 +107,7 @@ export const resourceConfig: Record<ResourceType, ResourceTypeInfo> = { | |||
| getVersions: getModelVersionList, | |||
| deleteRecord: deleteModel, | |||
| addVersion: addModelVersion, | |||
| editVersion: editModelVersion, | |||
| deleteVersion: deleteModelVersion, | |||
| getInfo: getModelInfo, | |||
| compareVersion: compareModelVersion, | |||
| @@ -58,6 +58,14 @@ export function addDatasetVersion(data) { | |||
| }); | |||
| } | |||
| // 编辑数据集版本 | |||
| export function editDatasetVersion(data) { | |||
| return request(`/api/mmp/newdataset/updateVersionDesc`, { | |||
| method: 'PUT', | |||
| data, | |||
| }); | |||
| } | |||
| // 下载数据集所有文件 | |||
| export function downloadAllFiles(params) { | |||
| return request(`/api/mmp/newdataset/downloadAllFiles`, { | |||
| @@ -132,6 +140,15 @@ export function addModelVersion(data) { | |||
| }); | |||
| } | |||
| // 编辑模型版本 | |||
| export function editModelVersion(data) { | |||
| return request(`/api/mmp/newmodel/updateVersionDesc`, { | |||
| method: 'PUT', | |||
| data, | |||
| }); | |||
| } | |||
| // 删除模型版本 | |||
| export function deleteModelVersion(params) { | |||
| return request(`/api/mmp/newmodel/deleteVersion`, { | |||