-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathentrypoint.sh
More file actions
83 lines (71 loc) · 2.13 KB
/
entrypoint.sh
File metadata and controls
83 lines (71 loc) · 2.13 KB
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
#!/bin/sh
set -e
MODEL_DIR="/app/data/models"
MODEL_FILE="$MODEL_DIR/qwen2.5-0.5b-instruct-q4_k_m.gguf"
MODEL_URL="https://huggingface.co/Qwen/Qwen2.5-0.5B-Instruct-GGUF/resolve/main/qwen2.5-0.5b-instruct-q4_k_m.gguf"
# Ensure model directory exists (volume mount overwrites image dirs)
mkdir -p "$MODEL_DIR"
# Download model if not cached
if [ ! -f "$MODEL_FILE" ]; then
echo "[CaseflowAI] Downloading Qwen2.5-0.5B (~400MB, one-time)..."
curl -L -o "$MODEL_FILE" "$MODEL_URL"
echo "[CaseflowAI] Model downloaded."
else
echo "[CaseflowAI] Model already cached."
fi
# Start llama-server in background
echo "[CaseflowAI] Starting llama-server..."
llama-server \
--model "$MODEL_FILE" \
--host 127.0.0.1 \
--port 8080 \
--ctx-size 2048 \
--threads $(nproc) \
--log-disable \
&
# Wait for llama-server to be ready
echo "[CaseflowAI] Waiting for llama-server..."
for i in $(seq 1 30); do
if curl -sf http://127.0.0.1:8080/health > /dev/null 2>&1; then
echo "[CaseflowAI] llama-server ready."
break
fi
sleep 1
done
# Run DB migrations and seed for all tenants
for TENANT in acmecorp attacker; do
echo "[caseflow] Migrating $TENANT..."
TENANT=$TENANT npm run db:migrate
USER_COUNT=$(node -e "
const Database = require('better-sqlite3');
const db = new Database('/app/data/${TENANT}.db');
const row = db.prepare('SELECT COUNT(*) as count FROM users').get();
console.log(row.count);
db.close();
" 2>/dev/null || echo "0")
if [ "$USER_COUNT" = "0" ]; then
echo "[caseflow] Seeding $TENANT..."
TENANT=$TENANT npm run db:seed
else
echo "[caseflow] $TENANT already seeded ($USER_COUNT users found), skipping."
fi
done
echo "[caseflow] Starting Next.js server..."
# Start Next.js in background
npm start &
NEXT_PID=$!
# Wait for Next.js to be ready
echo "[caseflow] Waiting for Next.js..."
for i in $(seq 1 30); do
if curl -sf http://127.0.0.1:3000 > /dev/null 2>&1; then
echo "[caseflow] Next.js ready."
break
fi
sleep 1
done
# Start admin bot (acmecorp only)
echo "[caseflow] Starting admin bot..."
node /app/bot/admin-bot.js &
BOT_PID=$!
# Wait for Next.js process
wait $NEXT_PID