From a430284aa21e3ae1f0d5654e55b2ad2852519cc2 Mon Sep 17 00:00:00 2001
From: wwf <yearningwang@iqtogether.com>
Date: 星期三, 04 六月 2025 15:17:49 +0800
Subject: [PATCH] 初始化

---
 app/components/workflow/panel/debug-and-preview/hooks.ts |  161 +++++++++++++++++++++--------------------------------
 1 files changed, 65 insertions(+), 96 deletions(-)

diff --git a/app/components/workflow/panel/debug-and-preview/hooks.ts b/app/components/workflow/panel/debug-and-preview/hooks.ts
index 4ef33a6..d3e4e90 100644
--- a/app/components/workflow/panel/debug-and-preview/hooks.ts
+++ b/app/components/workflow/panel/debug-and-preview/hooks.ts
@@ -11,7 +11,7 @@
 import { useWorkflowRun } from '../../hooks'
 import { NodeRunningStatus, WorkflowRunningStatus } from '../../types'
 import { useWorkflowStore } from '../../store'
-import { DEFAULT_ITER_TIMES, DEFAULT_LOOP_TIMES } from '../../constants'
+import { DEFAULT_ITER_TIMES } from '../../constants'
 import type {
   ChatItem,
   ChatItemInTree,
@@ -30,6 +30,7 @@
 } from '@/app/components/base/file-uploader/utils'
 import type { FileEntity } from '@/app/components/base/file-uploader/types'
 import { getThreadMessages } from '@/app/components/base/chat/utils'
+import type { NodeTracing } from '@/types/workflow'
 
 type GetAbortController = (abortController: AbortController) => void
 type SendCallback = {
@@ -57,7 +58,6 @@
   const suggestedQuestionsAbortControllerRef = useRef<AbortController | null>(null)
   const {
     setIterTimes,
-    setLoopTimes,
   } = workflowStore.getState()
 
   const handleResponding = useCallback((isResponding: boolean) => {
@@ -129,23 +129,20 @@
     if (stopChat && taskIdRef.current)
       stopChat(taskIdRef.current)
     setIterTimes(DEFAULT_ITER_TIMES)
-    setLoopTimes(DEFAULT_LOOP_TIMES)
     if (suggestedQuestionsAbortControllerRef.current)
       suggestedQuestionsAbortControllerRef.current.abort()
-  }, [handleResponding, setIterTimes, setLoopTimes, stopChat])
+  }, [handleResponding, setIterTimes, stopChat])
 
   const handleRestart = useCallback(() => {
     conversationId.current = ''
     taskIdRef.current = ''
     handleStop()
     setIterTimes(DEFAULT_ITER_TIMES)
-    setLoopTimes(DEFAULT_LOOP_TIMES)
     setChatTree([])
     setSuggestQuestions([])
   }, [
     handleStop,
     setIterTimes,
-    setLoopTimes,
   ])
 
   const updateCurrentQAOnTree = useCallback(({
@@ -311,7 +308,6 @@
               )
               setSuggestQuestions(data)
             }
-            // eslint-disable-next-line unused-imports/no-unused-vars
             catch (error) {
               setSuggestQuestions([])
             }
@@ -362,7 +358,21 @@
           responseItem.workflowProcess!.tracing!.push({
             ...data,
             status: NodeRunningStatus.Running,
+            details: [],
+          } as any)
+          updateCurrentQAOnTree({
+            placeholderQuestionId,
+            questionItem,
+            responseItem,
+            parentId: params.parent_message_id,
           })
+        },
+        onIterationNext: ({ data }) => {
+          const tracing = responseItem.workflowProcess!.tracing!
+          const iterations = tracing.find(item => item.node_id === data.node_id
+            && (item.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id || item.parallel_id === data.execution_metadata?.parallel_id))!
+          iterations.details!.push([])
+
           updateCurrentQAOnTree({
             placeholderQuestionId,
             questionItem,
@@ -371,25 +381,14 @@
           })
         },
         onIterationFinish: ({ data }) => {
-          const currentTracingIndex = responseItem.workflowProcess!.tracing!.findIndex(item => item.id === data.id)
-          if (currentTracingIndex > -1) {
-            responseItem.workflowProcess!.tracing[currentTracingIndex] = {
-              ...responseItem.workflowProcess!.tracing[currentTracingIndex],
-              ...data,
-            }
-            updateCurrentQAOnTree({
-              placeholderQuestionId,
-              questionItem,
-              responseItem,
-              parentId: params.parent_message_id,
-            })
-          }
-        },
-        onLoopStart: ({ data }) => {
-          responseItem.workflowProcess!.tracing!.push({
+          const tracing = responseItem.workflowProcess!.tracing!
+          const iterationsIndex = tracing.findIndex(item => item.node_id === data.node_id
+            && (item.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id || item.parallel_id === data.execution_metadata?.parallel_id))!
+          tracing[iterationsIndex] = {
+            ...tracing[iterationsIndex],
             ...data,
-            status: NodeRunningStatus.Running,
-          })
+            status: NodeRunningStatus.Succeeded,
+          } as any
           updateCurrentQAOnTree({
             placeholderQuestionId,
             questionItem,
@@ -397,22 +396,10 @@
             parentId: params.parent_message_id,
           })
         },
-        onLoopFinish: ({ data }) => {
-          const currentTracingIndex = responseItem.workflowProcess!.tracing!.findIndex(item => item.id === data.id)
-          if (currentTracingIndex > -1) {
-            responseItem.workflowProcess!.tracing[currentTracingIndex] = {
-              ...responseItem.workflowProcess!.tracing[currentTracingIndex],
-              ...data,
-            }
-            updateCurrentQAOnTree({
-              placeholderQuestionId,
-              questionItem,
-              responseItem,
-              parentId: params.parent_message_id,
-            })
-          }
-        },
         onNodeStarted: ({ data }) => {
+          if (data.iteration_id)
+            return
+
           responseItem.workflowProcess!.tracing!.push({
             ...data,
             status: NodeRunningStatus.Running,
@@ -425,69 +412,51 @@
           })
         },
         onNodeRetry: ({ data }) => {
-          responseItem.workflowProcess!.tracing!.push(data)
+          if (data.iteration_id)
+            return
 
+          const currentIndex = responseItem.workflowProcess!.tracing!.findIndex((item) => {
+            if (!item.execution_metadata?.parallel_id)
+              return item.node_id === data.node_id
+            return item.node_id === data.node_id && (item.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id || item.parallel_id === data.execution_metadata?.parallel_id)
+          })
+          if (responseItem.workflowProcess!.tracing[currentIndex].retryDetail)
+            responseItem.workflowProcess!.tracing[currentIndex].retryDetail?.push(data as NodeTracing)
+          else
+            responseItem.workflowProcess!.tracing[currentIndex].retryDetail = [data as NodeTracing]
+
+          handleUpdateChatList(produce(chatListRef.current, (draft) => {
+            const currentIndex = draft.findIndex(item => item.id === responseItem.id)
+            draft[currentIndex] = {
+              ...draft[currentIndex],
+              ...responseItem,
+            }
+          }))
+        },
+        onNodeFinished: ({ data }) => {
+          if (data.iteration_id)
+            return
+
+          const currentIndex = responseItem.workflowProcess!.tracing!.findIndex((item) => {
+            if (!item.execution_metadata?.parallel_id)
+              return item.node_id === data.node_id
+            return item.node_id === data.node_id && (item.execution_metadata?.parallel_id === data.execution_metadata?.parallel_id || item.parallel_id === data.execution_metadata?.parallel_id)
+          })
+          responseItem.workflowProcess!.tracing[currentIndex] = {
+            ...(responseItem.workflowProcess!.tracing[currentIndex]?.extras
+              ? { extras: responseItem.workflowProcess!.tracing[currentIndex].extras }
+              : {}),
+            ...(responseItem.workflowProcess!.tracing[currentIndex]?.retryDetail
+              ? { retryDetail: responseItem.workflowProcess!.tracing[currentIndex].retryDetail }
+              : {}),
+            ...data,
+          } as any
           updateCurrentQAOnTree({
             placeholderQuestionId,
             questionItem,
             responseItem,
             parentId: params.parent_message_id,
           })
-        },
-        onNodeFinished: ({ data }) => {
-          const currentTracingIndex = responseItem.workflowProcess!.tracing!.findIndex(item => item.id === data.id)
-          if (currentTracingIndex > -1) {
-            responseItem.workflowProcess!.tracing[currentTracingIndex] = {
-              ...responseItem.workflowProcess!.tracing[currentTracingIndex],
-              ...data,
-            }
-            updateCurrentQAOnTree({
-              placeholderQuestionId,
-              questionItem,
-              responseItem,
-              parentId: params.parent_message_id,
-            })
-          }
-        },
-        onAgentLog: ({ data }) => {
-          const currentNodeIndex = responseItem.workflowProcess!.tracing!.findIndex(item => item.node_id === data.node_id)
-          if (currentNodeIndex > -1) {
-            const current = responseItem.workflowProcess!.tracing![currentNodeIndex]
-
-            if (current.execution_metadata) {
-              if (current.execution_metadata.agent_log) {
-                const currentLogIndex = current.execution_metadata.agent_log.findIndex(log => log.id === data.id)
-                if (currentLogIndex > -1) {
-                  current.execution_metadata.agent_log[currentLogIndex] = {
-                    ...current.execution_metadata.agent_log[currentLogIndex],
-                    ...data,
-                  }
-                }
-                else {
-                  current.execution_metadata.agent_log.push(data)
-                }
-              }
-              else {
-                current.execution_metadata.agent_log = [data]
-              }
-            }
-            else {
-              current.execution_metadata = {
-                agent_log: [data],
-              } as any
-            }
-
-            responseItem.workflowProcess!.tracing[currentNodeIndex] = {
-              ...current,
-            }
-
-            updateCurrentQAOnTree({
-              placeholderQuestionId,
-              questionItem,
-              responseItem,
-              parentId: params.parent_message_id,
-            })
-          }
         },
       },
     )

--
Gitblit v1.8.0