#!/bin/bash
# Derive lighter GGUFs from the F32 source-of-truth produced by convert.py.
# Each F32 model under models/ is quantized to BF16, Q8_0 and Q4_K_M.
#
# Three target precisions cover the useful range : BF16 for max precision
# on CUDA, Q8_0 as the balanced default, Q4_K_M as the smallest variant
# that still sounds correct.
#
# Quantization policy is centralized in tools/quantize.cpp should_quantize :
# only the talker transformer body quantizes. RVQ codebooks and the DAC
# acoustic decoder stay at high precision in every variant : nearest
# neighbor lookup and the waveform-facing conv stack are both sensitive
# to per-row quantization noise. Same policy as qwentts.cpp /
# omnivoice.cpp / acestep.cpp keeping audio-critical paths intact.

set -eu

Q="./build/quantize"

quantize() {
    local src="$1" type="$2"
    local out="${src/-F32.gguf/-${type}.gguf}"
    if [ -f "$out" ]; then
        echo "[Skip] $out"
    else
        $Q "$src" "$out" "$type"
    fi
}

for src in models/higgs-*-F32.gguf; do
    [ -f "$src" ] || continue
    quantize "$src" BF16
    quantize "$src" Q8_0
    quantize "$src" Q4_K_M
done
