mlx-bun library API
    Preparing search index...
    TrainingProgress:
        | {
            adapter_path?: string;
            applied_ranks?: Record<string, number>;
            message?: string;
            progress?: number;
            stage: string;
            type: "stage";
        }
        | {
            accuracy?: number;
            active_gb?: number;
            grad_norm?: number;
            kind: "train"
            | "val";
            learning_rate?: number;
            loss: number;
            margin?: number;
            message?: string;
            n_correct?: number;
            n_total?: number;
            peak_gb?: number;
            pinned?: number;
            progress?: number;
            step: number;
            tokens_per_sec?: number;
            type: "metric";
            val_rows_skipped?: number;
            val_rows_used?: number;
        }

    Training-owned progress. App jobs may map these observations to their own persistence or wire events; the training library never owns a job lifecycle.