from enum import Enum from pydantic import BaseModel, Field class JobState(str, Enum): pending = "pending" processing = "processing" done = "done" error = "error" class JobStatus(BaseModel): job_id: str state: JobState progress: int = Field(default=0, ge=0, le=100) error: str | None = None stems: dict[str, str] | None = None original_filename: str | None = None # Analysis metadata for creators. bpm: float | None = Field(default=None, ge=30, le=260) bpm_confidence: float | None = Field(default=None, ge=0, le=1) musical_key: str | None = None key_scale: str | None = None key_confidence: float | None = Field(default=None, ge=0, le=1) # Rhythm / tala metadata. tala: str | None = None time_signature: str | None = None class DownloadRecord(BaseModel): job_id: str original_filename: str stem: str timestamp: str class UploadResponse(BaseModel): job_id: str class YoutubeJobRequest(BaseModel): url: str class YoutubeJobStatus(BaseModel): id: str status: str error: str | None = None slug: str | None = None