| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- from datetime import datetime
- from enum import Enum
- from typing import ClassVar, List, Optional
- from sqlmodel import (
- JSON,
- BigInteger,
- Column,
- Field,
- ForeignKey,
- Integer,
- Relationship,
- SQLModel,
- Text,
- )
- from gpustack.mixins import BaseModelMixin
- from gpustack.schemas.common import ListParams, PaginatedList
- from gpustack.schemas.links import (
- ModelInstanceDraftModelFileLink,
- ModelInstanceModelFileLink,
- )
- from gpustack.schemas.models import ModelSource, ModelInstance
- class ModelFileStateEnum(str, Enum):
- ERROR = "error"
- DOWNLOADING = "downloading"
- READY = "ready"
- class ModelFileBase(SQLModel, ModelSource):
- local_dir: Optional[str] = None
- worker_id: Optional[int] = None
- cleanup_on_delete: Optional[bool] = None
- size: Optional[int] = Field(sa_column=Column(BigInteger), default=None)
- download_progress: Optional[float] = None
- resolved_paths: List[str] = Field(sa_column=Column(JSON), default=[])
- state: ModelFileStateEnum = ModelFileStateEnum.DOWNLOADING
- state_message: Optional[str] = Field(
- default=None, sa_column=Column(Text, nullable=True)
- )
- class ModelFile(ModelFileBase, BaseModelMixin, table=True):
- __tablename__ = 'model_files'
- id: Optional[int] = Field(default=None, primary_key=True)
- # Unique index of the model source
- source_index: Optional[str] = Field(index=True, unique=True, default=None)
- # Tenant scope. Server-derived from worker→cluster on creation; not
- # exposed on the create payload to avoid clients smuggling overrides.
- cluster_id: Optional[int] = Field(default=None)
- owner_principal_id: Optional[int] = Field(
- default=None,
- sa_column=Column(Integer, ForeignKey("principals.id"), nullable=True),
- )
- instances: list[ModelInstance] = Relationship(
- sa_relationship_kwargs={"lazy": "noload"},
- back_populates="model_files",
- link_model=ModelInstanceModelFileLink,
- )
- draft_instances: list[ModelInstance] = Relationship(
- back_populates="draft_model_files",
- link_model=ModelInstanceDraftModelFileLink,
- sa_relationship_kwargs={"lazy": "noload"},
- )
- class ModelFileListParams(ListParams):
- sortable_fields: ClassVar[List[str]] = [
- "source",
- "worker_id",
- "state",
- "resolved_paths",
- "created_at",
- "updated_at",
- ]
- class ModelFileCreate(ModelFileBase):
- pass
- class ModelFileUpdate(ModelFileBase):
- pass
- class ModelFilePublic(
- ModelFileBase,
- ):
- id: int
- created_at: datetime
- updated_at: datetime
- ModelFilesPublic = PaginatedList[ModelFilePublic]
|