ai-toolkit / start.sh
jbilcke-hf's picture
jbilcke-hf HF Staff
Convert AI-Toolkit to a HF Space
8822914
#!/bin/bash
set -e # Exit the script if any statement returns a non-true return value
echo "=== Starting AI Toolkit ==="
echo "Working directory: $(pwd)"
echo "User: $(whoami)"
# Check if app has already been copied to /data
if [ ! -d "/data/ai-toolkit/ui" ]; then
echo "First run detected. Setting up persistent application..."
echo "This may take a moment..."
# Create base directory
mkdir -p /data/ai-toolkit
# Copy entire app to /data for full write access
echo "Copying application files..."
cp -r /app/ai-toolkit/* /data/ai-toolkit/
echo "✓ Application copied to /data/ai-toolkit"
# Remove the build-time Prisma client
rm -rf /data/ai-toolkit/ui/node_modules/.prisma
echo "✓ Removed build-time Prisma client"
else
echo "✓ Application already exists in /data/ai-toolkit"
# Sync Python files in case they were updated (but preserve node_modules and database)
echo "Syncing Python toolkit updates..."
rsync -av --exclude='ui/node_modules' --exclude='ui/.next' --exclude='database' \
/app/ai-toolkit/ /data/ai-toolkit/
echo "✓ Python toolkit synced"
fi
# Ensure persistent directories exist
echo "Creating persistent directories..."
mkdir -p /data/ai-toolkit/database
echo "✓ Database directory ready"
# Set database URL to use organized persistent directory
export DATABASE_URL="file:/data/ai-toolkit/database/aitk_db.db"
echo "Database URL set to: $DATABASE_URL"
# Set HuggingFace cache directories to writable location
export HF_HOME="/data/huggingface"
export HUGGINGFACE_HUB_CACHE="/data/huggingface/hub"
export TRANSFORMERS_CACHE="/data/huggingface/transformers"
export DIFFUSERS_CACHE="/data/huggingface/diffusers"
echo "HuggingFace cache set to: $HF_HOME"
# Create HuggingFace cache directories
mkdir -p "$HF_HOME"
mkdir -p "$HUGGINGFACE_HUB_CACHE"
mkdir -p "$TRANSFORMERS_CACHE"
mkdir -p "$DIFFUSERS_CACHE"
# Change to the writable UI directory
echo "Changing to writable UI directory..."
cd /data/ai-toolkit/ui
echo "Current directory: $(pwd)"
# Run database migrations/setup if needed
echo "=== Setting up database ==="
# Generate Prisma client (now with full write access)
echo "Generating Prisma client..."
npx prisma generate --schema prisma/schema.prisma
echo "✓ Prisma client generated"
# Push schema to create database tables
echo "Creating database tables..."
npx prisma db push --schema prisma/schema.prisma --skip-generate
echo "✓ Database tables created"
# Start the application with HuggingFace cache environment variables
echo ""
echo "=== Starting application ==="
echo "Environment variables for HuggingFace:"
echo " HF_HOME=$HF_HOME"
echo " HUGGINGFACE_HUB_CACHE=$HUGGINGFACE_HUB_CACHE"
echo " TRANSFORMERS_CACHE=$TRANSFORMERS_CACHE"
echo " DIFFUSERS_CACHE=$DIFFUSERS_CACHE"
# Export variables again to ensure they're available to the Node process
export HF_HOME="/data/huggingface"
export HUGGINGFACE_HUB_CACHE="/data/huggingface/hub"
export TRANSFORMERS_CACHE="/data/huggingface/transformers"
export DIFFUSERS_CACHE="/data/huggingface/diffusers"
npm run start