perf: lighten routes and improve ai runtime events

This commit is contained in:
2026-06-21 21:01:38 +08:00
parent 0c52bf0641
commit 9647a227da
13 changed files with 130 additions and 74 deletions
@@ -139,6 +139,9 @@ const getStepLabel = (step: ReasoningStep) => {
if (step.status === 'running') {
return '执行中';
}
if (step.status === 'failed') {
return '执行失败';
}
return '已完成';
}
@@ -169,6 +172,9 @@ const getStepColor = (step: ReasoningStep) => {
if (step.status === 'running') {
return 'text-blue-500';
}
if (step.status === 'failed') {
return 'text-red-500';
}
return 'text-emerald-500';
}
@@ -83,8 +83,8 @@ export interface ReasoningStep {
target?: Record<string, any>;
};
output?: any;
/** 步骤状态:running 执行中,completed 已完成 */
status?: 'completed' | 'running';
/** 步骤状态:running 执行中,completed 已完成failed 执行失败 */
status?: 'completed' | 'failed' | 'running';
timestamp?: string;
}
@@ -214,6 +214,18 @@ export function useEventHandler(config: EventHandlerConfig) {
};
};
const getStreamErrorMessage = (event: StreamEvent) =>
event.error_message ||
event.message ||
event.error ||
event.content ||
'执行失败';
const isSuccessEvent = (event: StreamEvent) =>
!event.error_message &&
!event.error &&
(!event.status || event.status === 'success' || event.status === 'completed');
/** 处理流式事件 */
const handleStreamEvent = (event: StreamEvent, msgId: string) => {
switch (event.type) {
@@ -357,18 +369,19 @@ export function useEventHandler(config: EventHandlerConfig) {
}
case 'error': {
const errorMessage = getStreamErrorMessage(event);
currentSteps.value.push({
type: 'error',
content: event.message || event.content || '执行失败',
content: errorMessage,
node_id: event.node_id,
node_type: event.node_type,
...buildReasoningMeta(event),
status: 'completed',
status: 'failed',
timestamp: new Date().toISOString(),
});
updateAssistantMessage(msgId, {
status: 'failed',
error_message: event.message || event.content || '执行失败',
error_message: errorMessage,
reasoning_steps: [...currentSteps.value],
});
running.value = false;
@@ -535,25 +548,30 @@ export function useEventHandler(config: EventHandlerConfig) {
event.node_type,
event.node_label,
);
const nodeSucceeded = isSuccessEvent(event);
const nodeStatus = nodeSucceeded ? 'completed' : 'failed';
const nodeContent = nodeSucceeded
? completeLabel
: `${completeLabel || event.node_id || '节点'}${getStreamErrorMessage(event)}`;
if (existingIndex === -1) {
currentSteps.value.push({
type: 'node_complete',
content: completeLabel,
content: nodeContent,
node_id: event.node_id,
node_type: event.node_type,
...buildReasoningMeta(event),
output: event.outputs,
status: 'completed',
status: nodeStatus,
timestamp: new Date().toISOString(),
});
} else {
currentSteps.value[existingIndex] = {
...currentSteps.value[existingIndex]!,
type: 'node_complete',
content: completeLabel,
content: nodeContent,
...buildReasoningMeta(event),
output: event.outputs,
status: 'completed',
status: nodeStatus,
};
}
updateAssistantMessage(msgId, {
@@ -165,18 +165,12 @@ export class ZqTableApi<T extends Record<string, any> = any> {
// 核心数据加载逻辑
async reload(params: Record<string, any> = {}) {
console.log('[ZqTable] reload called, state:', this.state?.gridOptions);
const { proxyConfig } = this.state?.gridOptions || {};
if (!proxyConfig?.ajax?.query) {
console.warn(
'[ZqTable] No ajax.query configured, proxyConfig:',
proxyConfig,
);
this.setLoading(false);
return;
}
console.log('[ZqTable] Starting data load...');
this.setLoading(true);
try {
// 1. 获取表单数据(带超时保护)