""" 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" PROCESSING = "processing" COMPLETED = "completed" FAILED = "failed" CANCELLED = "cancelled" class ChunkJobStatus(str, Enum): PENDING = "pending" CHUNKING = "chunking" PROCESSING = "processing" COLLECTING = "collecting" COMPLETED = "completed" FAILED = "failed" CANCELLED = "cancelled" class DetectJobStatus(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_assets" 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_presets" 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 TranscodeJob(SQLModel, table=True): """A transcoding or trimming job in the queue.""" __tablename__ = "transcode_jobs" id: UUID = Field(default_factory=uuid4, primary_key=True) source_asset_id: UUID = Field(index=True) preset_id: Optional[UUID] = None preset_snapshot: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) trim_start: Optional[float] = None trim_end: Optional[float] = None output_filename: str = "" output_path: Optional[str] = None output_asset_id: Optional[UUID] = None status: JobStatus = "pending" progress: float = 0.0 current_frame: Optional[int] = None current_time: Optional[float] = None speed: Optional[str] = None error_message: Optional[str] = None celery_task_id: Optional[str] = None execution_arn: Optional[str] = None priority: int = 0 created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class ChunkJob(SQLModel, table=True): """A chunk pipeline job — splits a media file into chunks and processes them""" __tablename__ = "chunk_jobs" id: UUID = Field(default_factory=uuid4, primary_key=True) source_asset_id: UUID = Field(index=True) chunk_duration: float = 10.0 num_workers: int = 4 max_retries: int = 3 processor_type: str = "ffmpeg" status: ChunkJobStatus = "pending" progress: float = 0.0 total_chunks: int = 0 processed_chunks: int = 0 failed_chunks: int = 0 retry_count: int = 0 error_message: Optional[str] = None throughput_mbps: Optional[float] = None elapsed_seconds: Optional[float] = None celery_task_id: Optional[str] = None priority: int = 0 created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class DetectJob(SQLModel, table=True): """A detection pipeline job.""" __tablename__ = "detect_jobs" id: UUID = Field(default_factory=uuid4, primary_key=True) source_asset_id: UUID = Field(index=True) video_path: str profile_name: str = "soccer_broadcast" parent_job_id: Optional[UUID] = Field(default=None, index=True) run_type: RunType = "initial" replay_from_stage: Optional[str] = None config_overrides: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) status: DetectJobStatus = "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 celery_task_id: Optional[str] = None priority: int = 0 created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) started_at: Optional[datetime] = None completed_at: Optional[datetime] = None class StageCheckpoint(SQLModel, table=True): """A checkpoint saved after a pipeline stage completes.""" __tablename__ = "stage_checkpoints" id: UUID = Field(default_factory=uuid4, primary_key=True) job_id: UUID = Field(index=True) stage: str stage_index: int 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='[]')) filtered_frame_sequences: List[int] = Field(default_factory=list, sa_column=Column(JSON, nullable=False, server_default='[]')) stage_output_key: str = "" # s3 key: checkpoints/{job_id}/stages/{stage}.bson stats: Dict[str, Any] = Field(default_factory=dict, sa_column=Column(JSON, nullable=False, server_default='{}')) config_snapshot: 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='{}')) video_path: str = "" profile_name: str = "" is_scenario: bool = False scenario_label: str = "" created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class KnownBrand(SQLModel, table=True): """A brand discovered or registered in the system.""" __tablename__ = "known_brands" 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='[]')) first_source: BrandSource = "ocr" total_occurrences: int = 0 confirmed: bool = False created_at: Optional[datetime] = Field(default_factory=datetime.utcnow) updated_at: Optional[datetime] = Field(default_factory=datetime.utcnow) class SourceBrandSighting(SQLModel, table=True): """A brand seen in a specific source (video/asset).""" __tablename__ = "source_brand_sightings" id: UUID = Field(default_factory=uuid4, primary_key=True) source_asset_id: UUID = Field(index=True) brand_id: UUID brand_name: str first_seen_timestamp: float = 0.0 last_seen_timestamp: float = 0.0 occurrences: int = 0 detection_source: BrandSource = "ocr" avg_confidence: float = 0.0 created_at: Optional[datetime] = Field(default_factory=datetime.utcnow)