feat: add VersionedMemoryValueModel

This commit is contained in:
Stream 2025-09-15 13:47:04 +08:00
parent 8685f055ea
commit ad07d63994
No known key found for this signature in database
GPG Key ID: 033728094B100D70
1 changed files with 25 additions and 1 deletions

View File

@ -1,7 +1,7 @@
import json
import sys
from collections.abc import Mapping, Sequence
from typing import Annotated, Any, TypeAlias
from typing import Annotated, Any, TypeAlias, Self, Optional
from pydantic import BaseModel, ConfigDict, Discriminator, Tag, field_validator
@ -197,6 +197,30 @@ class ArrayFileSegment(ArraySegment):
def text(self) -> str:
return ""
class VersionedMemoryValue(BaseModel):
current_value: str
versions: Mapping[str, str]
model_config = ConfigDict(frozen=True)
def add_version(
self,
new_value: str,
version_name: Optional[str] = None
) -> Self:
if version_name is None:
version_name = str(len(self.versions) + 1)
if version_name in self.versions.keys():
raise ValueError(f"Version '{version_name}' already exists.")
self.current_value = new_value
return VersionedMemoryValue(
current_value=new_value,
versions={
version_name: new_value,
**self.versions,
}
)
def get_segment_discriminator(v: Any) -> SegmentType | None:
if isinstance(v, Segment):