From 8563ae5511690190fc0ca7be270c98bec91b6b02 Mon Sep 17 00:00:00 2001 From: Stream Date: Mon, 15 Sep 2025 16:13:07 +0800 Subject: [PATCH] feat: add inference for VersionedMemory type when deserializing --- api/factories/variable_factory.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/api/factories/variable_factory.py b/api/factories/variable_factory.py index 0274b6e89c..875eae5b13 100644 --- a/api/factories/variable_factory.py +++ b/api/factories/variable_factory.py @@ -20,7 +20,7 @@ from core.variables.segments import ( NoneSegment, ObjectSegment, Segment, - StringSegment, + StringSegment, VersionedMemorySegment, VersionedMemoryValue, ) from core.variables.types import SegmentType from core.variables.variables import ( @@ -38,7 +38,7 @@ from core.variables.variables import ( ObjectVariable, SecretVariable, StringVariable, - Variable, + Variable, VersionedMemoryVariable, ) from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID @@ -66,6 +66,7 @@ SEGMENT_TO_VARIABLE_MAP = { NoneSegment: NoneVariable, ObjectSegment: ObjectVariable, StringSegment: StringVariable, + VersionedMemorySegment: VersionedMemoryVariable } @@ -182,6 +183,7 @@ _segment_factory: Mapping[SegmentType, type[Segment]] = { SegmentType.FILE: FileSegment, SegmentType.BOOLEAN: BooleanSegment, SegmentType.OBJECT: ObjectSegment, + SegmentType.VERSIONED_MEMORY: VersionedMemorySegment, # Array types SegmentType.ARRAY_ANY: ArrayAnySegment, SegmentType.ARRAY_STRING: ArrayStringSegment, @@ -248,6 +250,12 @@ def build_segment_with_type(segment_type: SegmentType, value: Any) -> Segment: else: raise TypeMismatchError(f"Type mismatch: expected {segment_type}, but got empty list") + if segment_type == SegmentType.VERSIONED_MEMORY: + return VersionedMemorySegment( + value_type=segment_type, + value=VersionedMemoryValue.model_validate(value) + ) + inferred_type = SegmentType.infer_segment_type(value) # Type compatibility checking if inferred_type is None: