segments.py 958 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. from typing import Any
  2. from pydantic import BaseModel, ConfigDict, field_validator
  3. from .types import SegmentType
  4. class Segment(BaseModel):
  5. model_config = ConfigDict(frozen=True)
  6. value_type: SegmentType
  7. value: Any
  8. @field_validator('value_type')
  9. def validate_value_type(cls, value):
  10. """
  11. This validator checks if the provided value is equal to the default value of the 'value_type' field.
  12. If the value is different, a ValueError is raised.
  13. """
  14. if value != cls.model_fields['value_type'].default:
  15. raise ValueError("Cannot modify 'value_type'")
  16. return value
  17. @property
  18. def text(self) -> str:
  19. return str(self.value)
  20. @property
  21. def log(self) -> str:
  22. return str(self.value)
  23. @property
  24. def markdown(self) -> str:
  25. return str(self.value)
  26. class StringSegment(Segment):
  27. value_type: SegmentType = SegmentType.STRING
  28. value: str