fix: When the reference variable in the workflow is empty, take the value of None (#3814)

This commit is contained in:
shaohuzhang1 2025-08-05 15:07:09 +08:00 committed by GitHub
parent 319bd37b10
commit 9a626efe35
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 28 additions and 11 deletions

View File

@ -73,15 +73,19 @@ def valid_reference_value(_type, value, name):
def convert_value(name: str, value, _type, is_required, source, node): def convert_value(name: str, value, _type, is_required, source, node):
if not is_required and (value is None or (isinstance(value, str) and len(value) == 0)): if not is_required and (value is None or ((isinstance(value, str) or isinstance(value, list)) and len(value) == 0)):
return None
if not is_required and source == 'reference' and (value is None or len(value) == 0):
return None return None
if source == 'reference': if source == 'reference':
value = node.workflow_manage.get_reference_field( value = node.workflow_manage.get_reference_field(
value[0], value[0],
value[1:]) value[1:])
if value is None:
if not is_required:
return None
else:
raise Exception(_(
'Field: {name} Type: {_type} is required'
).format(name=name, _type=_type))
value = valid_reference_value(_type, value, name) value = valid_reference_value(_type, value, name)
if _type == 'int': if _type == 'int':
return int(value) return int(value)

View File

@ -59,13 +59,19 @@ def valid_reference_value(_type, value, name):
def convert_value(name: str, value, _type, is_required, source, node): def convert_value(name: str, value, _type, is_required, source, node):
if not is_required and (value is None or (isinstance(value, str) and len(value) == 0)): if not is_required and (value is None or ((isinstance(value, str) or isinstance(value, list)) and len(value) == 0)):
return None return None
if source == 'reference': if source == 'reference':
value = node.workflow_manage.get_reference_field( value = node.workflow_manage.get_reference_field(
value[0], value[0],
value[1:]) value[1:])
if value is None:
if not is_required:
return None
else:
raise Exception(_(
'Field: {name} Type: {_type} is required'
).format(name=name, _type=_type))
value = valid_reference_value(_type, value, name) value = valid_reference_value(_type, value, name)
if _type == 'int': if _type == 'int':
return int(value) return int(value)
@ -81,15 +87,17 @@ def convert_value(name: str, value, _type, is_required, source, node):
v = json.loads(value) v = json.loads(value)
if isinstance(v, dict): if isinstance(v, dict):
return v return v
raise Exception("类型错误") raise Exception(_('type error'))
if _type == 'array': if _type == 'array':
v = json.loads(value) v = json.loads(value)
if isinstance(v, list): if isinstance(v, list):
return v return v
raise Exception("类型错误") raise Exception(_('type error'))
return value return value
except Exception as e: except Exception as e:
raise Exception(f'字段:{name}类型:{_type}值:{value}类型错误') raise Exception(
_('Field: {name} Type: {_type} Value: {value} Type error').format(name=name, _type=_type,
value=value))
class BaseToolNodeNode(IToolNode): class BaseToolNodeNode(IToolNode):

View File

@ -602,7 +602,10 @@ class WorkflowManage:
elif node_id == 'chat': elif node_id == 'chat':
return INode.get_field(self.chat_context, fields) return INode.get_field(self.chat_context, fields)
else: else:
return self.get_node_by_id(node_id).get_reference_field(fields) node = self.get_node_by_id(node_id)
if node:
return node.get_reference_field(fields)
return None
def get_workflow_content(self): def get_workflow_content(self):
context = { context = {

View File

@ -37,6 +37,7 @@
"md-editor-v3": "^5.8.2", "md-editor-v3": "^5.8.2",
"mermaid": "^10.9.0", "mermaid": "^10.9.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"nanoid": "^5.1.5",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"pinia": "^3.0.1", "pinia": "^3.0.1",
"recorder-core": "^1.3.25011100", "recorder-core": "^1.3.25011100",

View File

@ -1,3 +1,4 @@
import { nanoid } from 'nanoid'
/** /**
* *
*/ */
@ -36,7 +37,7 @@ export function isFunction(fn: any) {
id id
*/ */
export const randomId = function () { export const randomId = function () {
return Math.floor(Math.random() * 10000) + '' return nanoid()
} }
/* /*