""" SQLModel Table Models - GENERATED FILE Do not edit directly. Regenerate using modelgen. """ from datetime import datetime from enum import Enum from typing import Any, Dict, List, Optional from uuid import UUID, uuid4 from sqlmodel import SQLModel, Field, Column from sqlalchemy import JSON class AssetStatus(str, Enum): PENDING = "pending" READY = "ready" ERROR = "error" class JobStatus(str, Enum): PENDING = "pending" RUNNING = "running" PAUSED = "paused" COMPLETED = "completed" FAILED = "failed" CANCELLED = "cancelled" class RunType(str, Enum): INITIAL = "initial" REPLAY = "replay" RETRY = "retry" class BrandSource(str, Enum): OCR = "ocr" VLM = "local_vlm" CLOUD = "cloud_llm" MANUAL = "manual" class SourceType(str, Enum): CHUNK_JOB = "chunk_job" UPLOAD = "upload" DEVICE = "device" STREAM = "stream" class MediaAsset(SQLModel, table=True): """A video/audio file registered in the system.""" __tablename__ = "media_asset" id: UUID = Field(default_factory=uuid4, primary_key=True) filename: str file_path: str status: AssetStatus = "pending" error_message: Optional[str] = None file_size: Optional[int] = None duration: Optional[float] = None video_codec: Optional[str] = None audio_codec: Optional[str] = None width: Optional[int] = None height: Optional[int] = None framerate: Optional[float] = None bitrate: Optional[int] = None properties: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) comments: str = "" tags: List[str] = Field(default_factory=list, sa_column=Column(JSON, nullable=False, server_default='[]')) created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) updated_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class TranscodePreset(SQLModel, table=True): """A reusable transcoding configuration (like Handbrake presets).""" __tablename__ = "transcode_preset" id: UUID = Field(default_factory=uuid4, primary_key=True) name: str description: str = "" is_builtin: bool = False container: str = "mp4" video_codec: str = "libx264" video_bitrate: Optional[str] = None video_crf: Optional[int] = None video_preset: Optional[str] = None resolution: Optional[str] = None framerate: Optional[float] = None audio_codec: str = "aac" audio_bitrate: Optional[str] = None audio_channels: Optional[int] = None audio_samplerate: Optional[int] = None extra_args: List[str] = Field(default_factory=list, sa_column=Column(JSON, nullable=False, server_default='[]')) created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) updated_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class Job(SQLModel, table=True): """A pipeline job.""" __tablename__ = "job" id: UUID = Field(default_factory=uuid4, primary_key=True) source_asset_id: UUID = Field(index=True) video_path: str profile_name: str = "soccer_broadcast" timeline_id: Optional[UUID] = None parent_id: Optional[UUID] = None run_type: RunType = "initial" config_overrides: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) status: JobStatus = "pending" current_stage: Optional[str] = None progress: float = 0.0 error_message: Optional[str] = None total_detections: int = 0 brands_found: int = 0 cloud_llm_calls: int = 0 estimated_cost_usd: float = 0.0 priority: int = 0 created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class Timeline(SQLModel, table=True): """The frame sequence from a source video.""" __tablename__ = "timeline" id: UUID = Field(default_factory=uuid4, primary_key=True) source_asset_id: Optional[UUID] = Field(default=None, index=True) source_video: str = "" profile_name: str = "" fps: float = 2.0 frames_prefix: str = "" frames_manifest: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) frames_meta: List[str] = Field(default_factory=list, sa_column=Column(JSON, nullable=False, server_default='[]')) created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class Checkpoint(SQLModel, table=True): """A snapshot of pipeline state on a timeline.""" __tablename__ = "checkpoint" id: UUID = Field(default_factory=uuid4, primary_key=True) timeline_id: UUID job_id: Optional[UUID] = Field(default=None, index=True) parent_id: Optional[UUID] = None stage_outputs: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) config_overrides: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) stats: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) is_scenario: bool = False scenario_label: str = "" created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class Brand(SQLModel, table=True): """A brand discovered or registered in the system.""" __tablename__ = "brand" id: UUID = Field(default_factory=uuid4, primary_key=True) canonical_name: str = Field(index=True) aliases: List[str] = Field(default_factory=list, sa_column=Column(JSON, nullable=False, server_default='[]')) source: BrandSource = "ocr" confirmed: bool = False airings: List[str] = Field(default_factory=list, sa_column=Column(JSON, nullable=False, server_default='[]')) total_airings: int = 0 created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) updated_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class Profile(SQLModel, table=True): """A content type profile.""" __tablename__ = "profile" id: UUID = Field(default_factory=uuid4, primary_key=True) name: str pipeline: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) configs: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}'))