fix: Workflow The condition setting 'any' did not take effect when the discriminator was executed (#1979)

This commit is contained in:
shaohuzhang1 2025-01-06 14:04:25 +08:00 committed by GitHub
parent c307f6b0af
commit 00591a5b25
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 14 deletions

View File

@ -10,6 +10,7 @@ import concurrent
import json import json
import threading import threading
import traceback import traceback
import uuid
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
from functools import reduce from functools import reduce
from typing import List, Dict from typing import List, Dict
@ -575,7 +576,7 @@ class WorkflowManage:
details['node_id'] = node.id details['node_id'] = node.id
details['up_node_id_list'] = node.up_node_id_list details['up_node_id_list'] = node.up_node_id_list
details['runtime_node_id'] = node.runtime_node_id details['runtime_node_id'] = node.runtime_node_id
details_result[node.runtime_node_id] = details details_result[str(uuid.uuid1())] = details
return details_result return details_result
def get_answer_text_list(self): def get_answer_text_list(self):
@ -664,9 +665,18 @@ class WorkflowManage:
for edge in self.flow.edges: for edge in self.flow.edges:
if (edge.sourceNodeId == current_node.id and if (edge.sourceNodeId == current_node.id and
f"{edge.sourceNodeId}_{current_node_result.node_variable.get('branch_id')}_right" == edge.sourceAnchorId): f"{edge.sourceNodeId}_{current_node_result.node_variable.get('branch_id')}_right" == edge.sourceAnchorId):
next_node = [node for node in self.flow.nodes if node.id == edge.targetNodeId]
if len(next_node) == 0:
continue
if next_node[0].properties.get('condition', "AND") == 'AND':
if self.dependent_node_been_executed(edge.targetNodeId): if self.dependent_node_been_executed(edge.targetNodeId):
node_list.append( node_list.append(
self.get_node_cls_by_id(edge.targetNodeId, self.get_up_node_id_list(edge.targetNodeId))) self.get_node_cls_by_id(edge.targetNodeId,
[*current_node.up_node_id_list, current_node.node.id]))
else:
node_list.append(
self.get_node_cls_by_id(edge.targetNodeId,
[*current_node.up_node_id_list, current_node.node.id]))
else: else:
for edge in self.flow.edges: for edge in self.flow.edges:
if edge.sourceNodeId == current_node.id: if edge.sourceNodeId == current_node.id:
@ -676,10 +686,12 @@ class WorkflowManage:
if next_node[0].properties.get('condition', "AND") == 'AND': if next_node[0].properties.get('condition', "AND") == 'AND':
if self.dependent_node_been_executed(edge.targetNodeId): if self.dependent_node_been_executed(edge.targetNodeId):
node_list.append( node_list.append(
self.get_node_cls_by_id(edge.targetNodeId, self.get_up_node_id_list(edge.targetNodeId))) self.get_node_cls_by_id(edge.targetNodeId,
[*current_node.up_node_id_list, current_node.node.id]))
else: else:
node_list.append( node_list.append(
self.get_node_cls_by_id(edge.targetNodeId, [current_node.node.id])) self.get_node_cls_by_id(edge.targetNodeId,
[*current_node.up_node_id_list, current_node.node.id]))
return node_list return node_list
def get_reference_field(self, node_id: str, fields: List[str]): def get_reference_field(self, node_id: str, fields: List[str]):

View File

@ -123,13 +123,12 @@ export class ChatRecordManage {
this.chat.answer_text = this.chat.answer_text + chunk_answer this.chat.answer_text = this.chat.answer_text + chunk_answer
} }
get_current_up_node() { get_current_up_node(run_node: any) {
for (let i = this.node_list.length - 2; i >= 0; i--) { const index = this.node_list.findIndex((item) => item == run_node)
const n = this.node_list[i] if (index > 0) {
if (n.content.length > 0) { const n = this.node_list[index - 1]
return n return n
} }
}
return undefined return undefined
} }
get_run_node() { get_run_node() {
@ -146,14 +145,13 @@ export class ChatRecordManage {
const index = this.node_list.indexOf(run_node) const index = this.node_list.indexOf(run_node)
let current_up_node = undefined let current_up_node = undefined
if (index > 0) { if (index > 0) {
current_up_node = this.get_current_up_node() current_up_node = this.get_current_up_node(run_node)
} }
let answer_text_list_index = 0 let answer_text_list_index = 0
if ( if (
current_up_node == undefined || current_up_node == undefined ||
run_node.view_type == 'single_view' || run_node.view_type == 'single_view' ||
(run_node.view_type == 'many_view' && current_up_node.view_type == 'single_view') current_up_node.view_type == 'single_view'
) { ) {
const none_index = this.findIndex( const none_index = this.findIndex(
this.chat.answer_text_list, this.chat.answer_text_list,