managarten/services/mana-stt/setup.sh

123 lines
3.6 KiB
Bash
Executable file

#!/bin/bash
# ManaCore STT Service Setup Script
# For Mac Mini M4 (Apple Silicon)
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_DIR="$SCRIPT_DIR/.venv"
PYTHON_VERSION="3.11"
echo "=============================================="
echo " ManaCore STT Service Setup"
echo " Whisper (Lightning MLX) + Voxtral"
echo "=============================================="
echo ""
# Check if running on macOS
if [[ "$(uname)" != "Darwin" ]]; then
echo "Warning: This script is optimized for macOS (Apple Silicon)"
fi
# Check for Apple Silicon
if [[ "$(uname -m)" != "arm64" ]]; then
echo "Warning: Not running on Apple Silicon. MLX optimizations won't work."
fi
# Check Python version
echo "1. Checking Python installation..."
if command -v python3.11 &> /dev/null; then
PYTHON_CMD="python3.11"
elif command -v python3 &> /dev/null; then
PYTHON_CMD="python3"
PY_VERSION=$($PYTHON_CMD --version 2>&1 | cut -d' ' -f2 | cut -d'.' -f1,2)
echo " Found Python $PY_VERSION"
else
echo "Error: Python 3 not found. Please install Python 3.11+"
echo " brew install python@3.11"
exit 1
fi
# Create virtual environment
echo ""
echo "2. Creating virtual environment..."
if [ -d "$VENV_DIR" ]; then
echo " Virtual environment already exists at $VENV_DIR"
read -p " Recreate? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
rm -rf "$VENV_DIR"
$PYTHON_CMD -m venv "$VENV_DIR"
echo " Virtual environment recreated"
fi
else
$PYTHON_CMD -m venv "$VENV_DIR"
echo " Virtual environment created at $VENV_DIR"
fi
# Activate virtual environment
source "$VENV_DIR/bin/activate"
# Upgrade pip
echo ""
echo "3. Upgrading pip..."
pip install --upgrade pip wheel setuptools
# Install dependencies
echo ""
echo "4. Installing dependencies..."
echo " This may take several minutes (downloading large models)..."
# Install PyTorch with MPS support first
pip install torch torchvision torchaudio
# Install MLX for Apple Silicon
pip install mlx
# Install other dependencies
pip install -r "$SCRIPT_DIR/requirements.txt"
# Install scipy for audio resampling (needed by Voxtral)
pip install scipy
echo ""
echo "5. Verifying installation..."
# Test imports
python -c "import torch; print(f' PyTorch {torch.__version__} - MPS available: {torch.backends.mps.is_available()}')"
python -c "import mlx; print(f' MLX installed')" 2>/dev/null || echo " MLX not available (CPU fallback)"
python -c "import fastapi; print(f' FastAPI {fastapi.__version__}')"
echo ""
echo "6. Downloading Whisper model (large-v3)..."
echo " This will download ~2.9 GB on first run..."
# Pre-download the model
python -c "
from lightning_whisper_mlx import LightningWhisperMLX
print(' Initializing Whisper model...')
whisper = LightningWhisperMLX(model='large-v3', batch_size=12)
print(' Whisper model ready!')
" || echo " Note: Model will be downloaded on first transcription request"
echo ""
echo "=============================================="
echo " Setup Complete!"
echo "=============================================="
echo ""
echo "To start the STT service:"
echo ""
echo " cd $SCRIPT_DIR"
echo " source .venv/bin/activate"
echo " uvicorn app.main:app --host 0.0.0.0 --port 3020"
echo ""
echo "Or use the systemd/launchd service (recommended for production):"
echo ""
echo " ./scripts/mac-mini/setup-stt.sh"
echo ""
echo "API Endpoints:"
echo " POST /transcribe - Whisper transcription"
echo " POST /transcribe/voxtral - Voxtral transcription"
echo " POST /transcribe/auto - Auto-select best model"
echo " GET /health - Health check"
echo " GET /models - List available models"
echo ""