62 lines
2.6 KiB
Bash
62 lines
2.6 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# download_whisper_model.sh
|
||
|
|
# Xcode pre-build script: downloads distil-whisper CoreML model if not present.
|
||
|
|
# Only runs once — subsequent builds skip it if the weight files already exist.
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
MODEL_NAME="distil-whisper_distil-large-v3_594MB"
|
||
|
|
MODEL_DIR="${SRCROOT}/LockInBroMobile/${MODEL_NAME}"
|
||
|
|
HF_BASE="https://huggingface.co/argmaxinc/whisperkit-coreml/resolve/main/${MODEL_NAME}"
|
||
|
|
|
||
|
|
# Xcode checks outputPaths before running this script, but double-check here too.
|
||
|
|
if [ -f "${MODEL_DIR}/AudioEncoder.mlmodelc/weights/weight.bin" ] && \
|
||
|
|
[ -f "${MODEL_DIR}/TextDecoder.mlmodelc/weights/weight.bin" ]; then
|
||
|
|
echo "Whisper model already present — skipping download."
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo " Downloading distil-whisper model (~600 MB, one-time)"
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
|
||
|
|
FILES=(
|
||
|
|
"config.json"
|
||
|
|
"generation_config.json"
|
||
|
|
"AudioEncoder.mlmodelc/metadata.json"
|
||
|
|
"AudioEncoder.mlmodelc/model.mil"
|
||
|
|
"AudioEncoder.mlmodelc/coremldata.bin"
|
||
|
|
"AudioEncoder.mlmodelc/analytics/coremldata.bin"
|
||
|
|
"AudioEncoder.mlmodelc/weights/weight.bin"
|
||
|
|
"MelSpectrogram.mlmodelc/metadata.json"
|
||
|
|
"MelSpectrogram.mlmodelc/model.mil"
|
||
|
|
"MelSpectrogram.mlmodelc/coremldata.bin"
|
||
|
|
"MelSpectrogram.mlmodelc/analytics/coremldata.bin"
|
||
|
|
"MelSpectrogram.mlmodelc/weights/weight.bin"
|
||
|
|
"TextDecoder.mlmodelc/metadata.json"
|
||
|
|
"TextDecoder.mlmodelc/model.mil"
|
||
|
|
"TextDecoder.mlmodelc/coremldata.bin"
|
||
|
|
"TextDecoder.mlmodelc/analytics/coremldata.bin"
|
||
|
|
"TextDecoder.mlmodelc/weights/weight.bin"
|
||
|
|
)
|
||
|
|
|
||
|
|
TOTAL=${#FILES[@]}
|
||
|
|
INDEX=0
|
||
|
|
|
||
|
|
for file in "${FILES[@]}"; do
|
||
|
|
INDEX=$((INDEX + 1))
|
||
|
|
dest="${MODEL_DIR}/${file}"
|
||
|
|
mkdir -p "$(dirname "$dest")"
|
||
|
|
if [ ! -f "$dest" ]; then
|
||
|
|
echo "[${INDEX}/${TOTAL}] Downloading ${file}..."
|
||
|
|
curl -L --retry 3 --retry-delay 2 --progress-bar \
|
||
|
|
-o "$dest" "${HF_BASE}/${file}"
|
||
|
|
else
|
||
|
|
echo "[${INDEX}/${TOTAL}] Already exists: ${file}"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
|
|
echo " Model download complete. Build continuing..."
|
||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|