mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-15 00:01:10 +02:00
123 lines
3.6 KiB
Bash
Executable file
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 ""
|