74 lines
1.7 KiB
Python
74 lines
1.7 KiB
Python
from typing import Optional
|
|
from uuid import UUID
|
|
|
|
from sqlalchemy import ForeignKey, String
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from letta.orm.base import Base
|
|
|
|
|
|
def is_valid_uuid4(uuid_string: str) -> bool:
|
|
"""Check if a string is a valid UUID4."""
|
|
try:
|
|
uuid_obj = UUID(uuid_string)
|
|
return uuid_obj.version == 4
|
|
except ValueError:
|
|
return False
|
|
|
|
|
|
class OrganizationMixin(Base):
|
|
"""Mixin for models that belong to an organization."""
|
|
|
|
__abstract__ = True
|
|
|
|
organization_id: Mapped[str] = mapped_column(String, ForeignKey("organizations.id"))
|
|
|
|
|
|
class UserMixin(Base):
|
|
"""Mixin for models that belong to a user."""
|
|
|
|
__abstract__ = True
|
|
|
|
user_id: Mapped[str] = mapped_column(String, ForeignKey("users.id"))
|
|
|
|
class FileMixin(Base):
|
|
"""Mixin for models that belong to a file."""
|
|
|
|
__abstract__ = True
|
|
|
|
file_id: Mapped[str] = mapped_column(String, ForeignKey("files.id"))
|
|
|
|
class AgentMixin(Base):
|
|
"""Mixin for models that belong to an agent."""
|
|
|
|
__abstract__ = True
|
|
|
|
agent_id: Mapped[str] = mapped_column(String, ForeignKey("agents.id"))
|
|
|
|
class FileMixin(Base):
|
|
"""Mixin for models that belong to a file."""
|
|
|
|
__abstract__ = True
|
|
|
|
file_id: Mapped[Optional[str]] = mapped_column(
|
|
String,
|
|
ForeignKey("files.id", ondelete="CASCADE"),
|
|
nullable=True
|
|
)
|
|
|
|
|
|
class SourceMixin(Base):
|
|
"""Mixin for models (e.g. file) that belong to a source."""
|
|
|
|
__abstract__ = True
|
|
|
|
source_id: Mapped[str] = mapped_column(String, ForeignKey("sources.id"))
|
|
|
|
|
|
class SandboxConfigMixin(Base):
|
|
"""Mixin for models that belong to a SandboxConfig."""
|
|
|
|
__abstract__ = True
|
|
|
|
sandbox_config_id: Mapped[str] = mapped_column(String, ForeignKey("sandbox_configs.id"))
|