feat: add inference for VersionedMemory type when deserializing

This commit is contained in:
Stream 2025-09-15 16:13:07 +08:00
parent 2c765ccfae
commit 8563ae5511
No known key found for this signature in database
GPG Key ID: 033728094B100D70

View File

@ -20,7 +20,7 @@ from core.variables.segments import (
NoneSegment, NoneSegment,
ObjectSegment, ObjectSegment,
Segment, Segment,
StringSegment, StringSegment, VersionedMemorySegment, VersionedMemoryValue,
) )
from core.variables.types import SegmentType from core.variables.types import SegmentType
from core.variables.variables import ( from core.variables.variables import (
@ -38,7 +38,7 @@ from core.variables.variables import (
ObjectVariable, ObjectVariable,
SecretVariable, SecretVariable,
StringVariable, StringVariable,
Variable, Variable, VersionedMemoryVariable,
) )
from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID from core.workflow.constants import CONVERSATION_VARIABLE_NODE_ID, ENVIRONMENT_VARIABLE_NODE_ID
@ -66,6 +66,7 @@ SEGMENT_TO_VARIABLE_MAP = {
NoneSegment: NoneVariable, NoneSegment: NoneVariable,
ObjectSegment: ObjectVariable, ObjectSegment: ObjectVariable,
StringSegment: StringVariable, StringSegment: StringVariable,
VersionedMemorySegment: VersionedMemoryVariable
} }
@ -182,6 +183,7 @@ _segment_factory: Mapping[SegmentType, type[Segment]] = {
SegmentType.FILE: FileSegment, SegmentType.FILE: FileSegment,
SegmentType.BOOLEAN: BooleanSegment, SegmentType.BOOLEAN: BooleanSegment,
SegmentType.OBJECT: ObjectSegment, SegmentType.OBJECT: ObjectSegment,
SegmentType.VERSIONED_MEMORY: VersionedMemorySegment,
# Array types # Array types
SegmentType.ARRAY_ANY: ArrayAnySegment, SegmentType.ARRAY_ANY: ArrayAnySegment,
SegmentType.ARRAY_STRING: ArrayStringSegment, SegmentType.ARRAY_STRING: ArrayStringSegment,
@ -248,6 +250,12 @@ def build_segment_with_type(segment_type: SegmentType, value: Any) -> Segment:
else: else:
raise TypeMismatchError(f"Type mismatch: expected {segment_type}, but got empty list") 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) inferred_type = SegmentType.infer_segment_type(value)
# Type compatibility checking # Type compatibility checking
if inferred_type is None: if inferred_type is None: