From 12fa517297a1eee2f33fccc05d03d1611b19ae05 Mon Sep 17 00:00:00 2001 From: Arcaner <52057416+lrhan321@users.noreply.github.com> Date: Thu, 13 Mar 2025 13:11:49 +0800 Subject: [PATCH] fix: if-else-node handles missing optional file variables (#15693) --- api/core/workflow/entities/variable_pool.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/api/core/workflow/entities/variable_pool.py b/api/core/workflow/entities/variable_pool.py index 844b46f352..a031808360 100644 --- a/api/core/workflow/entities/variable_pool.py +++ b/api/core/workflow/entities/variable_pool.py @@ -7,7 +7,7 @@ from pydantic import BaseModel, Field from core.file import File, FileAttribute, file_manager from core.variables import Segment, SegmentGroup, Variable -from core.variables.segments import FileSegment +from core.variables.segments import FileSegment, NoneSegment from factories import variable_factory from ..constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID, SYSTEM_VARIABLE_NODE_ID @@ -131,11 +131,13 @@ class VariablePool(BaseModel): if attr not in {item.value for item in FileAttribute}: return None value = self.get(selector) - if not isinstance(value, FileSegment): + if not isinstance(value, (FileSegment, NoneSegment)): return None - attr = FileAttribute(attr) - attr_value = file_manager.get_attr(file=value.value, attr=attr) - return variable_factory.build_segment(attr_value) + if isinstance(value, FileSegment): + attr = FileAttribute(attr) + attr_value = file_manager.get_attr(file=value.value, attr=attr) + return variable_factory.build_segment(attr_value) + return value return value