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
1 changed files with 10 additions and 2 deletions

View File

@ -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: