Browse Source

Merge pull request '合并' (#213) from dev-zw into dev

pull/225/head
cp3hnu 9 months ago
parent
commit
842dc7f814
13 changed files with 77 additions and 32 deletions
  1. +2
    -2
      react-ui/src/components/IFramePage/index.tsx
  2. +1
    -1
      react-ui/src/pages/ActiveLearn/components/ExperimentHistory/index.tsx
  3. +1
    -1
      react-ui/src/pages/ActiveLearn/components/ExperimentVisualResult/index.tsx
  4. +4
    -3
      react-ui/src/pages/AutoML/Instance/index.tsx
  5. +7
    -2
      react-ui/src/pages/AutoML/components/CreateForm/ExecuteConfig.tsx
  6. +10
    -0
      react-ui/src/pages/AutoML/components/ExperimentResult/index.less
  7. +19
    -6
      react-ui/src/pages/AutoML/components/ExperimentResult/index.tsx
  8. +2
    -2
      react-ui/src/pages/AutoML/components/ExperimentVisualResult/index.tsx
  9. +4
    -8
      react-ui/src/pages/AutoML/types.ts
  10. +1
    -1
      react-ui/src/pages/HyperParameter/components/ExperimentHistory/index.tsx
  11. +9
    -6
      react-ui/src/pages/HyperParameter/components/TrialFileTree/index.tsx
  12. +10
    -0
      react-ui/src/services/activeLearn/index.js
  13. +7
    -0
      react-ui/src/services/developmentEnvironment/index.ts

+ 2
- 2
react-ui/src/components/IFramePage/index.tsx View File

@@ -1,6 +1,6 @@
import FullScreenFrame from '@/components/FullScreenFrame';
import KFSpin from '@/components/KFSpin';
import { getLabelStudioUrl } from '@/services/developmentEnvironment';
import { getKnowledgeGraphUrl, getLabelStudioUrl } from '@/services/developmentEnvironment';
import { to } from '@/utils/promise';
import SessionStorage from '@/utils/sessionStorage';
import { FloatButton } from 'antd';
@@ -41,7 +41,7 @@ const getRequestAPI = (type: IframePageType): (() => Promise<any>) => {
});
case IframePageType.Knowledge:
// 知识图谱
return () => Promise.resolve({ code: 200, data: `http://172.168.15.197:32701` });
return getKnowledgeGraphUrl;
case IframePageType.TensorBoard:
// TensorBoard
return () =>


+ 1
- 1
react-ui/src/pages/ActiveLearn/components/ExperimentHistory/index.tsx View File

@@ -72,7 +72,7 @@ function ExperimentHistory({ trialList, isClassification }: ExperimentHistoryPro

// 自定义展开视图
const expandedRowRender = (record: ActiveLearnTrial) => {
return <TrialFileTree title="训练结果" trial={record}></TrialFileTree>;
return <TrialFileTree title="训练结果" file={record.file}></TrialFileTree>;
};

// 展开实例


+ 1
- 1
react-ui/src/pages/ActiveLearn/components/ExperimentVisualResult/index.tsx View File

@@ -5,7 +5,7 @@
*/

import IframePage, { IframePageType } from '@/components/IFramePage';
import { getExpMetricsReq } from '@/services/experiment/index.js';
import { getExpMetricsReq } from '@/services/activeLearn';
import { to } from '@/utils/promise';
import SessionStorage from '@/utils/sessionStorage';
import { useEffect, useState } from 'react';


+ 4
- 3
react-ui/src/pages/AutoML/Instance/index.tsx View File

@@ -12,7 +12,7 @@ import AutoMLBasic from '../components/AutoMLBasic';
import ExperimentHistory from '../components/ExperimentHistory';
import ExperimentLog from '../components/ExperimentLog';
import ExperimentResult from '../components/ExperimentResult';
import TensorBoard from '../components/TensorBoard';
import ExperimentVisualResult from '../components/ExperimentVisualResult';
import { AutoMLData, AutoMLInstanceData } from '../types';
import styles from './index.less';

@@ -183,16 +183,17 @@ function AutoMLInstance() {
fileUrl={instanceInfo?.result_path}
imageUrl={instanceInfo?.img_path}
modelPath={instanceInfo?.model_path}
file={instanceInfo?.file_map}
/>
),
},
type === AutoMLType.Text
type === AutoMLType.Text || type === AutoMLType.Video
? {
key: TabKeys.Visual,
label: '可视化结果',
icon: <KFIcon type="icon-Trialliebiao" />,
children: (
<TensorBoard
<ExperimentVisualResult
path={instanceInfo?.run_history_path}
namespace={instanceInfo?.argo_ins_ns}
/>


+ 7
- 2
react-ui/src/pages/AutoML/components/CreateForm/ExecuteConfig.tsx View File

@@ -27,6 +27,9 @@ const classificationAlgorithms = [
'qda',
'random_forest',
'sgd',
'LightGBMClassification',
'XGBoostClassification',
'StackingClassification',
].map((name) => ({ label: name, value: name }));

// 回归算法
@@ -43,6 +46,8 @@ const regressorAlgorithms = [
'mlp',
'random_forest',
'sgd',
'LightGBMRegression',
'XGBoostRegression',
].map((name) => ({ label: name, value: name }));

// 特征预处理算法
@@ -289,7 +294,7 @@ function ExecuteConfig() {
name="ensemble_nbest"
tooltip="仅集成最佳的N个模型"
>
<InputNumber placeholder="请输入集成最佳模型数量" min={0} precision={0} />
<InputNumber placeholder="请输入集成最佳模型数量" min={1} precision={0} />
</Form.Item>
</Col>
</Row>
@@ -421,7 +426,7 @@ function ExecuteConfig() {
},
]}
>
<InputNumber placeholder="请输入交叉验证折数" min={0} precision={0} />
<InputNumber placeholder="请输入交叉验证折数" min={1} precision={0} />
</Form.Item>
</Col>
</Row>


+ 10
- 0
react-ui/src/pages/AutoML/components/ExperimentResult/index.less View File

@@ -24,6 +24,16 @@
}
}

&__file {
height: 100%;
:global {
.kf-info-group__content {
height: calc(100% - 56px);
overflow-y: auto;
}
}
}

&__text {
font-family: 'Roboto Mono', 'Menlo', 'Consolas', 'Monaco', monospace;
white-space: pre;


+ 19
- 6
react-ui/src/pages/AutoML/components/ExperimentResult/index.tsx View File

@@ -1,5 +1,7 @@
import InfoGroup from '@/components/InfoGroup';
import { AutoMLType } from '@/enums';
import { type HyperParameterFile } from '@/pages/AutoML/types';
import TrialFileTree from '@/pages/HyperParameter/components/TrialFileTree';
import { getFileReq } from '@/services/file';
import { to } from '@/utils/promise';
import { Button, Image } from 'antd';
@@ -11,9 +13,10 @@ type ExperimentResultProps = {
imageUrl?: string;
modelPath?: string;
type?: string;
file?: HyperParameterFile;
};

function ExperimentResult({ fileUrl, imageUrl, modelPath, type }: ExperimentResultProps) {
function ExperimentResult({ fileUrl, imageUrl, modelPath, type, file }: ExperimentResultProps) {
const [result, setResult] = useState<string | undefined>('');

const images = useMemo(() => {
@@ -32,16 +35,25 @@ function ExperimentResult({ fileUrl, imageUrl, modelPath, type }: ExperimentResu
}
};

if (fileUrl) {
if (fileUrl && type !== AutoMLType.Video) {
getResultFile();
}
}, [fileUrl]);
}, [fileUrl, type]);

return (
<div className={styles['experiment-result']}>
<InfoGroup title="实验结果" height={420} width="100%">
<div className={styles['experiment-result__text']}>{result}</div>
</InfoGroup>
{type === AutoMLType.Video ? (
<TrialFileTree
file={file}
title="实验结果"
classname={styles['experiment-result__file']}
></TrialFileTree>
) : (
<InfoGroup title="实验结果" height={420}>
<div className={styles['experiment-result__text']}>{result}</div>
</InfoGroup>
)}

{type === AutoMLType.Table && (
<InfoGroup title="可视化结果" style={{ margin: '16px 0' }}>
<div className={styles['experiment-result__images']}>
@@ -65,6 +77,7 @@ function ExperimentResult({ fileUrl, imageUrl, modelPath, type }: ExperimentResu
</div>
</InfoGroup>
)}

{modelPath && (
<div className={styles['experiment-result__download']}>
<span style={{ marginRight: '12px', color: '#606b7a' }}>文件名</span>


react-ui/src/pages/AutoML/components/TensorBoard/index.tsx → react-ui/src/pages/AutoML/components/ExperimentVisualResult/index.tsx View File

@@ -15,7 +15,7 @@ type TensorBoardProps = {
path?: string;
};

function TensorBoard({ namespace, path }: TensorBoardProps) {
function ExperimentVisualResult({ namespace, path }: TensorBoardProps) {
const [tensorboardUrl, setTensorboardUrl] = useState('');
useEffect(() => {
// 运行 TensorBoard
@@ -40,4 +40,4 @@ function TensorBoard({ namespace, path }: TensorBoardProps) {
return <>{tensorboardUrl && <IframePage type={IframePageType.TensorBoard}></IframePage>}</>;
}

export default TensorBoard;
export default ExperimentVisualResult;

+ 4
- 8
react-ui/src/pages/AutoML/types.ts View File

@@ -1,13 +1,8 @@
/*
* @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @Date: 2025-04-17 10:22:05
* @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
* @LastEditTime: 2025-04-27 11:43:19
* @FilePath: \ci4s\react-ui\src\pages\AutoML\types.ts
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import { type ParameterInputObject } from '@/components/ResourceSelect';
import { type NodeStatus } from '@/types';
import { type HyperParameterFile } from '@/pages/HyperParameter/types';

export { type HyperParameterFile }

// 操作类型
export enum OperationType {
@@ -104,4 +99,5 @@ export type AutoMLInstanceData = {
finish_time: string;
nodeStatus?: NodeStatus;
type: string;
file_map?: HyperParameterFile;
};

+ 1
- 1
react-ui/src/pages/HyperParameter/components/ExperimentHistory/index.tsx View File

@@ -123,7 +123,7 @@ function ExperimentHistory({ trialList = [] }: ExperimentHistoryProps) {

// 自定义展开视图
const expandedRowRender = (record: HyperParameterTrial) => {
return <TrialFileTree title="寻优结果" trial={record}></TrialFileTree>;
return <TrialFileTree title="寻优结果" file={record.file}></TrialFileTree>;
};

// 展开实例


+ 9
- 6
react-ui/src/pages/HyperParameter/components/TrialFileTree/index.tsx View File

@@ -1,18 +1,21 @@
import InfoGroup from '@/components/InfoGroup';
import KFIcon from '@/components/KFIcon';
import { HyperParameterFile } from '@/pages/HyperParameter/types';
import { type HyperParameterFile } from '@/pages/HyperParameter/types';
import { downLoadZip } from '@/utils/downloadfile';
import { Tree, type TreeDataNode } from 'antd';
import classNames from 'classnames';
import styles from './index.less';

const { DirectoryTree } = Tree;

export type TrialFileTreeProps = {
title: string;
trial: { file?: HyperParameterFile };
file?: HyperParameterFile;
classname?: string;
defaultExpandAll?: boolean;
};

function TrialFileTree({ trial, title }: TrialFileTreeProps) {
function TrialFileTree({ file, title, defaultExpandAll = true, classname }: TrialFileTreeProps) {
const filesToTreeData = (
files: HyperParameterFile[],
parent?: HyperParameterFile,
@@ -27,13 +30,13 @@ function TrialFileTree({ trial, title }: TrialFileTreeProps) {
};
});

const treeData: TreeDataNode[] = filesToTreeData(trial.file ? [trial.file] : []);
const treeData: TreeDataNode[] = filesToTreeData(file ? [file] : []);
return (
<InfoGroup title={title} className={styles['trail-file-tree']}>
<InfoGroup title={title} className={classNames(styles['trail-file-tree'], classname)}>
<DirectoryTree
// @ts-ignore
treeData={treeData}
defaultExpandAll
defaultExpandAll={defaultExpandAll}
titleRender={(record: TreeDataNode & HyperParameterFile) => {
const label = record.title + (record.isFile ? `(${record.size})` : '');
return (


+ 10
- 0
react-ui/src/services/activeLearn/index.js View File

@@ -89,3 +89,13 @@ export function batchDeleteActiveLearnInsReq(data) {
data,
});
}


// 获取当前实验的指标对比地址
export function getExpMetricsReq(data) {
return request(`/api/mmp/activeLearnIns/getExpMetrics`, {
method: 'POST',
data,
});
}


+ 7
- 0
react-ui/src/services/developmentEnvironment/index.ts View File

@@ -64,3 +64,10 @@ export function createEditorMirrorReq(data: any) {
data,
});
}

// 获取知识图谱的url
export function getKnowledgeGraphUrl() {
return request(`/api/mmp/knowledgeGraph/getURL`, {
method: 'GET',
});
}

Loading…
Cancel
Save