Bladeren bron

fix: agent node can't use in parallel (#15047)

Novice 1 maand geleden
bovenliggende
commit
778861f461

+ 1 - 0
api/core/app/apps/workflow_app_runner.py

@@ -522,6 +522,7 @@ class WorkflowBasedAppRunner(AppRunner):
                     status=event.status,
                     data=event.data,
                     metadata=event.metadata,
+                    node_id=event.node_id,
                 )
             )
         elif isinstance(event, ParallelBranchRunStartedEvent):

+ 1 - 0
api/core/app/entities/queue_entities.py

@@ -427,6 +427,7 @@ class QueueAgentLogEvent(AppQueueEvent):
     status: str
     data: Mapping[str, Any]
     metadata: Optional[Mapping[str, Any]] = None
+    node_id: str
 
 
 class QueueNodeRetryEvent(QueueNodeStartedEvent):

+ 1 - 0
api/core/app/entities/task_entities.py

@@ -817,6 +817,7 @@ class AgentLogStreamResponse(StreamResponse):
         status: str
         data: Mapping[str, Any]
         metadata: Optional[Mapping[str, Any]] = None
+        node_id: str
 
     event: StreamEvent = StreamEvent.AGENT_LOG
     data: Data

+ 1 - 0
api/core/app/task_pipeline/workflow_cycle_manage.py

@@ -959,5 +959,6 @@ class WorkflowCycleManage:
                 status=event.status,
                 data=event.data,
                 metadata=event.metadata,
+                node_id=event.node_id,
             ),
         )

+ 1 - 0
api/core/workflow/graph_engine/entities/event.py

@@ -268,6 +268,7 @@ class AgentLogEvent(BaseAgentEvent):
     status: str = Field(..., description="status")
     data: Mapping[str, Any] = Field(..., description="data")
     metadata: Optional[Mapping[str, Any]] = Field(default=None, description="metadata")
+    node_id: str = Field(..., description="agent node id")
 
 
 InNodeEvent = BaseNodeEvent | BaseParallelBranchEvent | BaseIterationEvent | BaseAgentEvent | BaseLoopEvent

+ 2 - 1
api/core/workflow/graph_engine/graph_engine.py

@@ -18,6 +18,7 @@ from core.workflow.entities.node_entities import AgentNodeStrategyInit, NodeRunM
 from core.workflow.entities.variable_pool import VariablePool, VariableValue
 from core.workflow.graph_engine.condition_handlers.condition_manager import ConditionManager
 from core.workflow.graph_engine.entities.event import (
+    BaseAgentEvent,
     BaseIterationEvent,
     BaseLoopEvent,
     GraphEngineEvent,
@@ -502,7 +503,7 @@ class GraphEngine:
                     break
 
                 yield event
-                if event.parallel_id == parallel_id:
+                if not isinstance(event, BaseAgentEvent) and event.parallel_id == parallel_id:
                     if isinstance(event, ParallelBranchRunSucceededEvent):
                         succeeded_count += 1
                         if succeeded_count == len(futures):

+ 1 - 0
api/core/workflow/nodes/tool/tool_node.py

@@ -338,6 +338,7 @@ class ToolNode(BaseNode[ToolNodeData]):
                     data=message.message.data,
                     label=message.message.label,
                     metadata=message.message.metadata,
+                    node_id=self.node_id,
                 )
 
                 # check if the agent log is already in the list