segments.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. def to_object(self) -> Any:
  27. return self.value
  28. class NoneSegment(Segment):
  29. value_type: SegmentType = SegmentType.NONE
  30. value: None = None
  31. @property
  32. def text(self) -> str:
  33. return 'null'
  34. @property
  35. def log(self) -> str:
  36. return 'null'
  37. @property
  38. def markdown(self) -> str:
  39. return 'null'
  40. class StringSegment(Segment):
  41. value_type: SegmentType = SegmentType.STRING
  42. value: str