pediatric-ai-scribe-v3/scripts/download-whisper-models.sh
ifedan-ed 9d817cd9f5 v18: Self-hosted Browser Whisper (zero CDN dependencies)
BREAKING FIX: Browser Whisper now fully self-contained

Previous issue:
- Loaded transformers.js from cdn.jsdelivr.net
- Downloaded models from cdn-lfs.huggingface.co
- Failed in corporate/clinical networks with firewall
- Stuck at "Initializing..." with no progress

Solution:
- Bundle transformers.js library (~876KB)
- Bundle Whisper tiny.en model (~42MB)
- Serve everything from local server
- Works in ANY network environment

Changes:
- whisperWorker.js: Load transformers from /models/ instead of CDN
- Dockerfile: Download models during Docker build
- Add download script for local dev
- Add comprehensive setup documentation

Docker image size: +~42MB (one-time cost, runtime benefit)

Tested: Works on unrestricted and firewalled networks
2026-03-31 20:02:11 +00:00

69 lines
2.7 KiB
Bash
Executable file

#!/bin/bash
# Download Browser Whisper models for local development
# These are bundled during Docker build, but need manual download for dev
set -e
cd "$(dirname "$0")/.."
MODELS_DIR="public/models"
echo "🎙️ Downloading Browser Whisper models..."
echo ""
# Create directories
mkdir -p "$MODELS_DIR/Xenova/whisper-tiny.en/onnx"
# Download transformers.js
echo "📦 Downloading transformers.js..."
curl -L --progress-bar -o "$MODELS_DIR/transformers.min.js" \
"https://cdn.jsdelivr.net/npm/@xenova/transformers@2.17.2/dist/transformers.min.js"
echo "✅ transformers.min.js ($(du -h $MODELS_DIR/transformers.min.js | cut -f1))"
echo ""
# Download model config files
echo "📝 Downloading model configs..."
cd "$MODELS_DIR/Xenova/whisper-tiny.en"
curl -sL -o config.json \
"https://huggingface.co/Xenova/whisper-tiny.en/resolve/main/config.json"
echo "✅ config.json ($(du -h config.json | cut -f1))"
curl -sL -o tokenizer.json \
"https://huggingface.co/Xenova/whisper-tiny.en/resolve/main/tokenizer.json"
echo "✅ tokenizer.json ($(du -h tokenizer.json | cut -f1))"
curl -sL -o preprocessor_config.json \
"https://huggingface.co/Xenova/whisper-tiny.en/resolve/main/preprocessor_config.json"
echo "✅ preprocessor_config.json ($(du -h preprocessor_config.json | cut -f1))"
curl -sL -o generation_config.json \
"https://huggingface.co/Xenova/whisper-tiny.en/resolve/main/generation_config.json"
echo "✅ generation_config.json ($(du -h generation_config.json | cut -f1))"
echo ""
# Download ONNX models (large files)
echo "🧠 Downloading encoder model..."
curl -L --progress-bar -o onnx/encoder_model_quantized.onnx \
"https://huggingface.co/Xenova/whisper-tiny.en/resolve/main/onnx/encoder_model_quantized.onnx"
echo "✅ encoder_model_quantized.onnx ($(du -h onnx/encoder_model_quantized.onnx | cut -f1))"
echo ""
echo "🧠 Downloading decoder model..."
curl -L --progress-bar -o onnx/decoder_model_merged_quantized.onnx \
"https://huggingface.co/Xenova/whisper-tiny.en/resolve/main/onnx/decoder_model_merged_quantized.onnx"
echo "✅ decoder_model_merged_quantized.onnx ($(du -h onnx/decoder_model_merged_quantized.onnx | cut -f1))"
echo ""
# Show summary
cd - > /dev/null
echo "════════════════════════════════════════"
echo "✅ Browser Whisper models downloaded!"
echo "════════════════════════════════════════"
echo "Total size: $(du -sh $MODELS_DIR | cut -f1)"
echo ""
echo "Files:"
ls -lh "$MODELS_DIR/Xenova/whisper-tiny.en/" | tail -n +2
echo ""
ls -lh "$MODELS_DIR/Xenova/whisper-tiny.en/onnx/" | tail -n +2
echo ""
echo "Models are ready for use. Start server with: npm start"