657 lines
11 KiB
TypeScript
657 lines
11 KiB
TypeScript
/*
|
|
* Copyright 2025 coze-dev Authors
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
/* eslint-disable max-lines */
|
|
import { useMemo } from 'react';
|
|
|
|
import { type CSpan } from '@coze-devops/common-modules/query-trace';
|
|
import { SpanType } from '@coze-arch/bot-api/ob_query_api';
|
|
|
|
import { fieldHandlers } from '../utils/field-item';
|
|
import { type FieldCol, type FieldColConfig } from '../typings';
|
|
|
|
const colsConfigForStart: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'first_response_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'latency_first',
|
|
},
|
|
{
|
|
name: 'tokens',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForInvokeAgent: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'call_type',
|
|
},
|
|
{
|
|
name: 'agent_type',
|
|
},
|
|
{
|
|
name: 'temperature',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'model',
|
|
},
|
|
{
|
|
name: 'tokens',
|
|
},
|
|
{
|
|
name: 'max_length_resp',
|
|
},
|
|
{
|
|
name: 'dialog_round',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForSwitchAgent: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForLLMCall: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
{
|
|
name: 'call_type',
|
|
},
|
|
{
|
|
name: 'max_length_resp',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'first_response_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'latency_first',
|
|
},
|
|
{
|
|
name: 'model',
|
|
},
|
|
{
|
|
name: 'tokens',
|
|
},
|
|
{
|
|
name: 'temperature',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForWorkflow: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'tokens',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForWorkflowEnd: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'tokens',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForCode: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForCondition: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForPluginTool: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'call_type',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForKnowledge: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'call_type',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigGeneral: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForCard: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'call_type',
|
|
},
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'card_id',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForMessage: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'call_type',
|
|
},
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'stream_output',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForBWCondition: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'branch_name',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
const colsConfigForBWConnector: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'node_type',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
const colsConfigForHook: FieldColConfig[] = [
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'category',
|
|
},
|
|
{
|
|
name: 'start_time',
|
|
},
|
|
{
|
|
name: 'end_time',
|
|
},
|
|
{
|
|
name: 'hook_type',
|
|
},
|
|
{
|
|
name: 'agent_id',
|
|
},
|
|
{
|
|
name: 'is_stream',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
fields: [
|
|
{
|
|
name: 'status',
|
|
},
|
|
{
|
|
name: 'latency',
|
|
},
|
|
{
|
|
name: 'name',
|
|
},
|
|
{
|
|
name: 'hook_resp_code',
|
|
},
|
|
{
|
|
name: 'hook_uri',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
const colsConfigMap = {
|
|
[SpanType.UserInput]: colsConfigForStart,
|
|
[SpanType.ThirdParty]: colsConfigForStart,
|
|
[SpanType.ScheduledTasks]: colsConfigForStart,
|
|
[SpanType.OpenDialog]: colsConfigForStart,
|
|
[SpanType.InvokeAgent]: colsConfigForInvokeAgent,
|
|
[SpanType.RestartAgent]: colsConfigForSwitchAgent,
|
|
[SpanType.SwitchAgent]: colsConfigForSwitchAgent,
|
|
[SpanType.LLMCall]: colsConfigForLLMCall,
|
|
[SpanType.WorkflowLLMCall]: colsConfigForLLMCall,
|
|
[SpanType.LLMBatchCall]: colsConfigForLLMCall,
|
|
[SpanType.WorkflowLLMBatchCall]: colsConfigForLLMCall,
|
|
[SpanType.Workflow]: colsConfigForWorkflow,
|
|
[SpanType.WorkflowStart]: colsConfigForWorkflowEnd,
|
|
[SpanType.WorkflowEnd]: colsConfigForWorkflowEnd,
|
|
[SpanType.PluginTool]: colsConfigForPluginTool,
|
|
[SpanType.WorkflowPluginTool]: colsConfigForPluginTool,
|
|
[SpanType.PluginToolBatch]: colsConfigForPluginTool,
|
|
[SpanType.WorkflowPluginToolBatch]: colsConfigForPluginTool,
|
|
[SpanType.Knowledge]: colsConfigForKnowledge,
|
|
[SpanType.WorkflowKnowledge]: colsConfigForKnowledge,
|
|
[SpanType.Code]: colsConfigForCode,
|
|
[SpanType.WorkflowCode]: colsConfigForCode,
|
|
[SpanType.CodeBatch]: colsConfigForCode,
|
|
[SpanType.WorkflowCodeBatch]: colsConfigForCode,
|
|
[SpanType.Condition]: colsConfigForCondition,
|
|
[SpanType.WorkflowCondition]: colsConfigForCondition,
|
|
[SpanType.Unknown]: colsConfigGeneral,
|
|
[SpanType.Chain]: [],
|
|
[SpanType.Card]: colsConfigForCard,
|
|
[SpanType.WorkflowMessage]: colsConfigForMessage,
|
|
[SpanType.Hook]: colsConfigForHook,
|
|
[SpanType.BWStart]: colsConfigGeneral,
|
|
[SpanType.BWEnd]: colsConfigGeneral,
|
|
[SpanType.BWBatch]: colsConfigGeneral,
|
|
[SpanType.BWLoop]: colsConfigGeneral,
|
|
[SpanType.BWCondition]: colsConfigForBWCondition,
|
|
[SpanType.BWLLM]: colsConfigForLLMCall,
|
|
[SpanType.BWParallel]: colsConfigGeneral,
|
|
[SpanType.BWScript]: colsConfigGeneral,
|
|
[SpanType.BWVariable]: colsConfigGeneral,
|
|
[SpanType.BWCallFlow]: colsConfigGeneral,
|
|
[SpanType.BWConnector]: colsConfigForBWConnector,
|
|
};
|
|
|
|
export const useSpanCols = (input: {
|
|
span?: CSpan;
|
|
}): {
|
|
spanCols: FieldCol[];
|
|
} => {
|
|
const { span } = input;
|
|
const spanCols: FieldCol[] = useMemo(() => {
|
|
if (!span) {
|
|
return [];
|
|
}
|
|
const colsConfig = colsConfigMap[span.type];
|
|
return (
|
|
colsConfig?.map(colConfig => {
|
|
const { fields } = colConfig;
|
|
return {
|
|
fields: fields?.map(fieldConfig => {
|
|
const { name, options } = fieldConfig;
|
|
return {
|
|
...fieldHandlers[name](span),
|
|
options,
|
|
};
|
|
}),
|
|
};
|
|
}) || []
|
|
);
|
|
}, [span]);
|
|
|
|
return {
|
|
spanCols,
|
|
};
|
|
};
|