export type AudioMode = 'auto' | 'standard' | 'aggressive' | 'none'; export type ModelStateTag = 'unloaded' | 'loading' | 'waiting_for_gpu' | 'ready'; export interface ModelStatus { state: ModelStateTag; loaded_at?: string; vram_needed_mb?: number; vram_free_mb?: number; retry_in_secs?: number; vram_used_mb?: number; vram_total_mb?: number; } export type JobStatus = 'pending' | 'downloading' | 'preparing' | 'transcribing' | 'processing' | 'done' | 'failed' | 'cancelled'; export interface Segment { index: number; start: number; end: number; text: string; words: Word[]; } export interface Word { start: number; end: number; word: string; probability?: number; } export interface Job { id: string; status: JobStatus; title: string; source: string; audioMode: AudioMode; meanVolume: number | null; whisperJobId: string | null; progress: number; outputDir: string | null; segmentsJson: string | null; error: string | null; createdAt: string; updatedAt: string; } export interface WhisperJob { id: string; status: 'queued' | 'running' | 'done' | 'failed' | 'cancelled'; language: string | null; task: string; duration_secs: number | null; progress: number; segments: Segment[]; error: string | null; created_at: string; completed_at: string | null; } export interface PushSubscription { id: number; endpoint: string; p256dh: string; auth: string; createdAt: string; } export interface AudioAnalysis { meanVolume: number; maxVolume: number; }