#!/bin/bash # SolVox Model Downloader # Downloads all required GGUF/ONNX models for QVAC SDK # All models are stored locally — no cloud required after download. set -e MODELS_DIR="./models" mkdir -p "$MODELS_DIR" echo "╔══════════════════════════════════════════════════════════╗" echo "║ SolVox — QVAC Model Downloader ║" echo "║ Downloading AI models for 100% local inference ║" echo "╚══════════════════════════════════════════════════════════╝" echo "" # 1. LLM — Llama 3.2 3B Instruct (Q4_K_M quantization, ~2GB) echo "📦 [1/6] Downloading LLM: Llama 3.2 3B Instruct (Q4_K_M)..." if [ ! -f "$MODELS_DIR/llama-3.2-3b-instruct-q4_k_m.gguf" ]; then curl -L -o "$MODELS_DIR/llama-3.2-3b-instruct-q4_k_m.gguf" \ "https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/resolve/main/Llama-3.2-3B-Instruct-Q4_K_M.gguf" echo " ✓ LLM model downloaded (~2.0 GB)" else echo " ✓ LLM model already exists" fi # 2. Embeddings — Nomic Embed Text v1.5 (Q4_K_M, ~260MB) echo "📦 [2/6] Downloading Embeddings: Nomic Embed Text v1.5..." if [ ! -f "$MODELS_DIR/nomic-embed-text-v1.5.Q4_K_M.gguf" ]; then curl -L -o "$MODELS_DIR/nomic-embed-text-v1.5.Q4_K_M.gguf" \ "https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q4_K_M.gguf" echo " ✓ Embedding model downloaded (~260 MB)" else echo " ✓ Embedding model already exists" fi # 3. Speech-to-Text — Whisper Base English (GGML, ~150MB) echo "📦 [3/6] Downloading STT: Whisper Base (English)..." if [ ! -f "$MODELS_DIR/ggml-base.en.bin" ]; then curl -L -o "$MODELS_DIR/ggml-base.en.bin" \ "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin" echo " ✓ Whisper model downloaded (~150 MB)" else echo " ✓ Whisper model already exists" fi # 4. Text-to-Speech — Piper TTS Amy (en_US, medium quality, ONNX, ~75MB) echo "📦 [4/6] Downloading TTS: Piper Amy (en_US, medium)..." if [ ! -f "$MODELS_DIR/en_US-amy-medium.onnx" ]; then curl -L -o "$MODELS_DIR/en_US-amy-medium.onnx" \ "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/amy/medium/en_US-amy-medium.onnx" curl -L -o "$MODELS_DIR/en_US-amy-medium.onnx.json" \ "https://huggingface.co/rhasspy/piper-voices/resolve/main/en/en_US/amy/medium/en_US-amy-medium.onnx.json" echo " ✓ TTS model downloaded (~75 MB)" else echo " ✓ TTS model already exists" fi # 5. Translation — MarianMT English↔Spanish (OPUS, ~50MB) echo "📦 [5/6] Downloading Translation: EN↔ES..." if [ ! -f "$MODELS_DIR/translate-en-es.bin" ]; then echo " ℹ Translation model requires manual download from LibreTranslate" echo " Visit: https://github.com/LibreTranslate/LibreTranslate" echo " Or use QVAC's bundled translation models (see docs.qvac.tether.io)" touch "$MODELS_DIR/translate-en-es.bin.placeholder" echo " ⚠ Placeholder created — install actual model for translation" else echo " ✓ Translation model already exists" fi # 6. OCR — PaddleOCR v4 (ONNX, ~30MB) echo "📦 [6/6] Downloading OCR: PaddleOCR v4..." if [ ! -f "$MODELS_DIR/ppocr-v4.onnx" ]; then echo " ℹ OCR model requires QVAC's bundled OCR models" echo " See: https://docs.qvac.tether.io/addons/ocr-onnx/" touch "$MODELS_DIR/ppocr-v4.onnx.placeholder" echo " ⚠ Placeholder created — install actual model for OCR" else echo " ✓ OCR model already exists" fi echo "" echo "╔══════════════════════════════════════════════════════════╗" echo "║ Download Complete! ║" echo "╚══════════════════════════════════════════════════════════╝" echo "" echo "Model directory: $MODELS_DIR" echo "" ls -lh "$MODELS_DIR" echo "" echo "Next steps:" echo " 1. npm install" echo " 2. npm run dev" echo " 3. npm start"