* -------------------------------------------------------------------------
* This file is part of the MindStudio project.
* Copyright (c) 2025 Huawei Technologies Co.,Ltd.
*
* MindStudio is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
*
* http://license.coscl.org.cn/MulanPSL2
*
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
* -------------------------------------------------------------------------
*/
import { observer } from 'mobx-react';
import React from 'react';
import {
queryOneKernel,
queryAffinityOptimizer,
affinityOptimizerColumns,
queryAICPUOperators,
queryACLNNOperators,
aicpuOperatorColumns,
aclnnOperatorColumns,
queryAffinityAPI,
affinityAPIColumns,
queryOperatorFusion,
fusionOperatorColumns,
operatorDispatchColumns,
} from './Common';
import { BaseSummary, type BaseSummaryProps, type SelectContentViewProps } from './SystemView';
import { ExpertSummary } from './ExpertSummary';
import { queryExpertAnalysis, queryOperatorDispatch } from '../../api/request';
import type { BaseSummaryRowItemType } from '../../api/interface';
import jumpToUnitOperator from '../../utils/jumpToUnitOperator';
import type { CardMetaData } from '../../entity/data';
import { ProjectType } from '../../entity/insight';
import { StyledEmpty } from '@insight/lib';
const shouldHiddenContent = (props: SelectContentViewProps): boolean => {
const targetInfo = props.session.units.find(unitItem => (unitItem.metadata as CardMetaData)?.cardId === props.card.cardId);
return targetInfo === undefined || targetInfo.projectType === undefined || targetInfo.projectType === ProjectType.IE;
};
const HiddenContent = (): JSX.Element => {
return <div style={{ display: 'flex', height: '100%' }}>
<StyledEmpty style={{ margin: 'auto' }}/>
</div>;
};
const ExpertAnalysis = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <ExpertSummary request={queryExpertAnalysis} {...props} />;
});
const AffinityAPI = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <BaseSummary request={queryAffinityAPI} columns={affinityAPIColumns} {...props} />;
});
const AffinityOptimizer = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <BaseSummary request={queryAffinityOptimizer} columns={affinityOptimizerColumns} {...props} />;
});
const AICPUOperator = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <BaseSummary request={queryAICPUOperators} columns={aicpuOperatorColumns} {...props} />;
});
const ACLNNOperator = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <BaseSummary request={queryACLNNOperators} columns={aclnnOperatorColumns} {...props} />;
});
const FusedOperator = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <BaseSummary request={queryOperatorFusion} columns={fusionOperatorColumns} {...props} />;
});
const OperatorDispatch = observer((props: SelectContentViewProps) => {
if (shouldHiddenContent(props)) {
return <HiddenContent />;
}
return <BaseSummary request={queryOperatorDispatch} columns={operatorDispatchColumns} {...props} />;
});
export const handleAdvisorSelected = async (rowData: BaseSummaryRowItemType, props: BaseSummaryProps): Promise<void> => {
const queryName = rowData.name ?? rowData.originOptimizer ?? '';
const res = await queryOneKernel({
rankId: rowData.rankId,
dbPath: rowData.dbPath,
name: queryName,
timestamp: rowData.startTime,
duration: rowData.duration,
});
const depth = rowData.depth > res.depth ? rowData.depth : res.depth;
jumpToUnitOperator({
...rowData,
id: props.session.isFullDb as boolean ? rowData.id : res.id,
cardId: rowData.rankId,
dbPath: rowData.dbPath,
timestamp: rowData.startTime,
depth,
duration: rowData.duration,
name: queryName,
});
};
export const ExpertSystemView = [ExpertAnalysis, AffinityAPI, AffinityOptimizer, AICPUOperator, ACLNNOperator, FusedOperator, OperatorDispatch];