fix: surface agent workflow progress
This commit is contained in:
@@ -1222,6 +1222,7 @@ export interface AgentChatEvent {
|
||||
| 'complete'
|
||||
| 'error'
|
||||
| 'knowledge_retrieval'
|
||||
| 'llm_chunk'
|
||||
| 'node_complete'
|
||||
| 'node_event'
|
||||
| 'node_start'
|
||||
@@ -1235,8 +1236,10 @@ export interface AgentChatEvent {
|
||||
message_id?: string;
|
||||
conversation_id?: string;
|
||||
tokens_used?: number;
|
||||
total_tokens?: number;
|
||||
elapsed_time?: number;
|
||||
config?: WaitingInputConfig;
|
||||
accumulated_content?: string;
|
||||
// 对话流模式:节点执行事件
|
||||
node_id?: string;
|
||||
node_type?: string;
|
||||
@@ -1436,7 +1439,7 @@ export async function getAgentMessagesApi(
|
||||
conversationId: string,
|
||||
params?: { page?: number; pageSize?: number },
|
||||
) {
|
||||
return requestClient.get<PaginatedResponse<AgentMessage>>(
|
||||
return requestClient.get<AgentMessage[] | PaginatedResponse<AgentMessage>>(
|
||||
`${BASE_URL}/agent/conversations/${conversationId}/messages`,
|
||||
{ params },
|
||||
);
|
||||
|
||||
@@ -140,7 +140,7 @@ async function loadMessages(convId: string) {
|
||||
|
||||
try {
|
||||
const res = await getAgentMessagesApi(convId, { pageSize: 100 });
|
||||
chatMessages.value = res.items;
|
||||
chatMessages.value = Array.isArray(res) ? res : res.items || [];
|
||||
conversationId.value = convId;
|
||||
await nextTick();
|
||||
scrollToBottom();
|
||||
@@ -312,9 +312,20 @@ function handleStreamEvent(
|
||||
break;
|
||||
}
|
||||
|
||||
case 'llm_chunk': {
|
||||
currentStep.value = 'answering';
|
||||
streamingContent.value =
|
||||
event.accumulated_content ||
|
||||
`${streamingContent.value}${event.content || ''}`;
|
||||
assistantMessage.content = streamingContent.value;
|
||||
assistantMessage.status = 'pending';
|
||||
break;
|
||||
}
|
||||
|
||||
case 'complete': {
|
||||
assistantMessage.status = 'completed';
|
||||
assistantMessage.total_tokens = event.tokens_used || 0;
|
||||
assistantMessage.total_tokens =
|
||||
event.tokens_used || event.total_tokens || 0;
|
||||
assistantMessage.elapsed_time = event.elapsed_time || 0;
|
||||
currentStep.value = '';
|
||||
break;
|
||||
|
||||
@@ -346,6 +346,63 @@ function handleWorkflowRunEvent(event: WorkflowStreamEvent) {
|
||||
);
|
||||
break;
|
||||
}
|
||||
case 'llm_chunk': {
|
||||
const content = event.accumulated_content || event.content || '';
|
||||
if (content) {
|
||||
const preview = content.length > 180 ? `${content.slice(0, 180)}...` : content;
|
||||
pushRunEvent(
|
||||
`智能体输出:${event.node_label || event.node_id || '节点'}`,
|
||||
'running',
|
||||
preview,
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'answer': {
|
||||
if (event.content) {
|
||||
pushRunEvent('节点消息', 'info', event.content);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'parallel_start': {
|
||||
pushRunEvent(
|
||||
`开始并行分支:${event.node_label || event.node_id || '节点'}`,
|
||||
'running',
|
||||
event.branches?.join(' / '),
|
||||
);
|
||||
break;
|
||||
}
|
||||
case 'parallel_complete': {
|
||||
pushRunEvent(
|
||||
`并行分支完成:${event.node_label || event.node_id || '节点'}`,
|
||||
'success',
|
||||
);
|
||||
break;
|
||||
}
|
||||
case 'loop_iteration_start': {
|
||||
pushRunEvent(
|
||||
`循环第 ${(event.iteration || 0) + 1} 轮开始`,
|
||||
'running',
|
||||
event.node_label || event.node_id,
|
||||
);
|
||||
break;
|
||||
}
|
||||
case 'loop_iteration_complete': {
|
||||
pushRunEvent(
|
||||
`循环第 ${(event.iteration || 0) + 1} 轮完成`,
|
||||
'success',
|
||||
event.node_label || event.node_id,
|
||||
);
|
||||
break;
|
||||
}
|
||||
case 'loop_iteration_error': {
|
||||
pushRunEvent(
|
||||
`循环第 ${(event.iteration || 0) + 1} 轮失败`,
|
||||
'failed',
|
||||
event.error || event.error_message,
|
||||
);
|
||||
break;
|
||||
}
|
||||
case 'complete': {
|
||||
runStatus.value = 'completed';
|
||||
runElapsedTime.value = event.elapsed_time || 0;
|
||||
@@ -653,11 +710,7 @@ onUnmounted(() => {
|
||||
{{ $t('ai-platform.workflow.publish') }}
|
||||
</ElDropdownItem>
|
||||
<ElDropdownItem
|
||||
v-if="
|
||||
item.status === 'published' &&
|
||||
(item.workflow_type === 'data_process' ||
|
||||
item.workflow_type === 'automation')
|
||||
"
|
||||
v-if="item.status === 'published'"
|
||||
command="run"
|
||||
>
|
||||
<Play class="mr-2 h-4 w-4" />
|
||||
|
||||
Reference in New Issue
Block a user