Handle empty sys.files in agent node parameters

Adds logic to detect when sys.files is referenced and is empty, and strips leftover '[]' placeholders from string parameters. This prevents unnecessary placeholders in agent node runtime and log parameters when no files are present.
pull/21938/head
Kalo Chin 10 months ago
parent b092a3e970
commit 56323712fa

@ -31,7 +31,7 @@ from core.tools.entities.tool_entities import (
ToolProviderType, ToolProviderType,
) )
from core.tools.tool_manager import ToolManager from core.tools.tool_manager import ToolManager
from core.variables.segments import ArrayFileSegment, FileSegment, StringSegment from core.variables.segments import ArrayFileSegment, FileSegment, StringSegment, ArrayAnySegment
from core.workflow.entities.node_entities import NodeRunResult from core.workflow.entities.node_entities import NodeRunResult
from core.workflow.entities.variable_pool import VariablePool from core.workflow.entities.variable_pool import VariablePool
from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus from core.workflow.entities.workflow_node_execution import WorkflowNodeExecutionStatus
@ -190,6 +190,27 @@ class AgentNode(ToolNode):
""" """
agent_parameters_dictionary = {parameter.name: parameter for parameter in agent_parameters} agent_parameters_dictionary = {parameter.name: parameter for parameter in agent_parameters}
# Determine once whether this node references sys.files anywhere and whether that variable is empty.
def _input_uses_sys_files(_agent_input):
if _agent_input.type == "variable":
return _agent_input.value == ["sys", SystemVariableKey.FILES.value]
if _agent_input.type in {"mixed", "constant"}:
return "sys.files" in str(_agent_input.value)
return False
uses_sys_files_for_node: bool = any(
_input_uses_sys_files(inp) for inp in node_data.agent_parameters.values()
)
sys_files_segment = variable_pool.get(["sys", SystemVariableKey.FILES.value])
sys_files_empty: bool = (
sys_files_segment is None
or (
isinstance(sys_files_segment, (ArrayFileSegment, ArrayAnySegment))
and len(sys_files_segment.value) == 0
)
)
result: dict[str, Any] = {} result: dict[str, Any] = {}
for parameter_name in node_data.agent_parameters: for parameter_name in node_data.agent_parameters:
parameter = agent_parameters_dictionary.get(parameter_name) parameter = agent_parameters_dictionary.get(parameter_name)
@ -402,6 +423,10 @@ class AgentNode(ToolNode):
pass pass
value["history_prompt_messages"] = history_prompt_messages value["history_prompt_messages"] = history_prompt_messages
# If sys.files is empty, strip any leftover "[]" placeholder from strings (both log and runtime params).
if sys_files_empty and isinstance(value, str):
value = value.replace("[]", "").rstrip()
result[parameter_name] = value result[parameter_name] = value
return result return result

Loading…
Cancel
Save