File size: 3,116 Bytes
8822914
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/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