feat: improve workflow run observability
This commit is contained in:
@@ -226,6 +226,49 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
!event.error &&
|
||||
(!event.status || event.status === 'success' || event.status === 'completed');
|
||||
|
||||
const getEventDisplayName = (event: StreamEvent) => {
|
||||
const typeMap: Record<string, string> = {
|
||||
complete: '执行完成',
|
||||
loop_start: '循环开始',
|
||||
node_event: '节点事件',
|
||||
resume: '恢复执行',
|
||||
start: '开始执行',
|
||||
};
|
||||
return (
|
||||
event.node_label ||
|
||||
event.event?.message ||
|
||||
event.event?.content ||
|
||||
event.event?.type ||
|
||||
event.message ||
|
||||
event.content ||
|
||||
typeMap[event.type] ||
|
||||
event.type ||
|
||||
'运行事件'
|
||||
);
|
||||
};
|
||||
|
||||
const appendObservedStep = (
|
||||
event: StreamEvent,
|
||||
msgId: string,
|
||||
status: 'completed' | 'failed' | 'running' = 'completed',
|
||||
) => {
|
||||
currentSteps.value.push({
|
||||
type: status === 'failed' ? 'error' : 'observation',
|
||||
content: getEventDisplayName(event),
|
||||
node_id: event.node_id,
|
||||
node_type: event.node_type,
|
||||
...buildReasoningMeta(event),
|
||||
params: event.config || event.waiting_config || event.event || event.params,
|
||||
output: event.outputs || event.output || event.result,
|
||||
status,
|
||||
timestamp: new Date().toISOString(),
|
||||
});
|
||||
updateAssistantMessage(msgId, {
|
||||
reasoning_steps: [...currentSteps.value],
|
||||
...buildMessageMeta(event),
|
||||
});
|
||||
};
|
||||
|
||||
/** 处理流式事件 */
|
||||
const handleStreamEvent = (event: StreamEvent, msgId: string) => {
|
||||
switch (event.type) {
|
||||
@@ -600,7 +643,11 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
(s) => s.node_id === event.node_id && s.type === 'parallel_start',
|
||||
);
|
||||
const branchResults = event.branch_results || {};
|
||||
const content = `并行分支完成:${getItemCount(branchResults)} 个分支`;
|
||||
const nodeSucceeded = isSuccessEvent(event);
|
||||
const content = nodeSucceeded
|
||||
? `并行分支完成:${getItemCount(branchResults)} 个分支`
|
||||
: `并行分支失败:${getStreamErrorMessage(event)}`;
|
||||
const nodeStatus = nodeSucceeded ? 'completed' : 'failed';
|
||||
if (existingIndex === -1) {
|
||||
currentSteps.value.push({
|
||||
type: 'parallel_complete',
|
||||
@@ -612,7 +659,7 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
branch_results: branchResults,
|
||||
total_tokens: event.total_tokens,
|
||||
},
|
||||
status: 'completed',
|
||||
status: nodeStatus,
|
||||
timestamp: new Date().toISOString(),
|
||||
});
|
||||
} else {
|
||||
@@ -625,7 +672,7 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
branch_results: branchResults,
|
||||
total_tokens: event.total_tokens,
|
||||
},
|
||||
status: 'completed',
|
||||
status: nodeStatus,
|
||||
};
|
||||
}
|
||||
updateAssistantMessage(msgId, {
|
||||
@@ -673,6 +720,8 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
};
|
||||
messages.value.push(newMsg);
|
||||
}
|
||||
} else if (nodeEvent) {
|
||||
appendObservedStep(event, msgId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -719,6 +768,12 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
break;
|
||||
}
|
||||
|
||||
case 'resume': {
|
||||
currentRunId.value = event.run_id || currentRunId.value;
|
||||
appendObservedStep(event, msgId, 'running');
|
||||
break;
|
||||
}
|
||||
|
||||
// ========== 对话流交互事件 ==========
|
||||
case 'waiting_input': {
|
||||
waitingForInput.value = true;
|
||||
@@ -752,6 +807,24 @@ export function useEventHandler(config: EventHandlerConfig) {
|
||||
running.value = false;
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
if (
|
||||
event.type &&
|
||||
(event.content ||
|
||||
event.message ||
|
||||
event.error ||
|
||||
event.error_message ||
|
||||
event.event)
|
||||
) {
|
||||
appendObservedStep(
|
||||
event,
|
||||
msgId,
|
||||
event.error || event.error_message ? 'failed' : 'completed',
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user