Spaces:
gijl
/
No application file

plo3 / run.sh
gijl's picture
Upload 2 files
34c7351 verified
#!/bin/bash
set -e
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
# ุงู„ู‚ูŠู… ุชุฃุชูŠ ู…ู† ู…ุชุบูŠุฑุงุช ุงู„ุจูŠุฆุฉ ุงู„ู…ุนุฑู‘ูุฉ ููŠ Dockerfile (ุฃูˆ ู…ู† HF Spaces Secrets)
# ูŠู…ูƒู†ูƒ ุชุฌุงูˆุฒู‡ุง ููŠ ูˆุงุฌู‡ุฉ HF Spaces ุชุญุช ู‚ุณู… "Repository secrets" ุฏูˆู† ุชุนุฏูŠู„ ุงู„ูƒูˆุฏ
# โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
MODELS_DIR="/data/models"
MODEL_PATH="$MODELS_DIR/$HF_FILE"
# โ”€โ”€ ุงู„ุชุญู‚ู‚ ู…ู† ุงู„ู…ุชุบูŠุฑุงุช ุงู„ุฃุณุงุณูŠุฉ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
if [ -z "$HF_REPO" ] || [ -z "$HF_FILE" ] || [ -z "$MODEL_NAME" ]; then
echo "ERROR: HF_REPO, HF_FILE, and MODEL_NAME must all be set."
exit 1
fi
echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•"
echo " Repo : $HF_REPO"
echo " File : $HF_FILE"
echo " Name : $MODEL_NAME"
echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•"
# ุฅู†ุดุงุก ุงู„ู…ุฌู„ุฏุงุช ุงู„ู…ุทู„ูˆุจุฉ
mkdir -p "$MODELS_DIR" /data/ollama /data/webui
# โ”€โ”€ ุชุญู…ูŠู„ ุงู„ู…ู„ู ู…ู† Hugging Face (ูŠุชุฎุทู‰ ุงู„ุชุญู…ูŠู„ ุฅู† ูƒุงู† ุงู„ู…ู„ู ู…ูˆุฌูˆุฏุงู‹ ุจุงู„ูุนู„) โ”€โ”€
if [ -f "$MODEL_PATH" ]; then
echo "Model file already exists at $MODEL_PATH โ€” skipping download."
else
echo "Downloading $HF_FILE from $HF_REPO ..."
# ุชู…ุฑูŠุฑ ุงู„ุชูˆูƒู† ูู‚ุท ุฅู† ูƒุงู† ู…ุถุจูˆุทุงู‹ (ู„ู„ู†ู…ุงุฐุฌ ุงู„ู…ุญู…ูŠุฉ)
HF_CLI_ARGS="--repo-type model --local-dir $MODELS_DIR"
if [ -n "$HF_TOKEN" ]; then
HF_CLI_ARGS="$HF_CLI_ARGS --token $HF_TOKEN"
fi
huggingface-cli download "$HF_REPO" "$HF_FILE" $HF_CLI_ARGS
if [ ! -f "$MODEL_PATH" ]; then
echo "ERROR: Download finished but file not found at $MODEL_PATH"
exit 1
fi
echo "Download complete: $MODEL_PATH"
fi
# โ”€โ”€ ุชุดุบูŠู„ ุฎุงุฏู… Ollama ููŠ ุงู„ุฎู„ููŠุฉ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
echo "Starting Ollama server..."
OLLAMA_MODELS=/data/ollama ollama serve &
# โ”€โ”€ ุงู†ุชุธุงุฑ ุญุชู‰ ูŠูƒูˆู† Ollama ุฌุงู‡ุฒุงู‹ ูุนู„ุงู‹ (ุจุฏู„ุงู‹ ู…ู† sleep ุซุงุจุช) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
echo "Waiting for Ollama to be ready..."
MAX_WAIT=60
WAITED=0
until curl -s http://localhost:11434/api/tags > /dev/null 2>&1; do
if [ "$WAITED" -ge "$MAX_WAIT" ]; then
echo "ERROR: Ollama did not respond within ${MAX_WAIT}s."
exit 1
fi
sleep 1
WAITED=$((WAITED + 1))
done
echo "Ollama is ready (after ${WAITED}s)."
# โ”€โ”€ ุฅู†ุดุงุก Modelfile ูŠุดูŠุฑ ุฅู„ู‰ ุงู„ู…ู„ู ุงู„ู…ุญู„ูŠ ููŠ ุงู„ู…ุฎุฒู† โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
echo "Creating Modelfile..."
cat <<EOF > "$MODELS_DIR/Modelfile"
FROM $MODEL_PATH
PARAMETER num_ctx $MODEL_CTX
PARAMETER num_thread $MODEL_THREADS
EOF
# โ”€โ”€ ุชุณุฌูŠู„ ุงู„ู†ู…ูˆุฐุฌ ููŠ Ollama ุฅู† ู„ู… ูŠูƒู† ู…ุณุฌู„ุงู‹ ุจุนุฏ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
if OLLAMA_MODELS=/data/ollama ollama list | grep -q "^$MODEL_NAME"; then
echo "Model '$MODEL_NAME' already registered โ€” skipping creation."
else
echo "Registering model '$MODEL_NAME' in Ollama..."
OLLAMA_MODELS=/data/ollama ollama create "$MODEL_NAME" -f "$MODELS_DIR/Modelfile"
echo "Model registered successfully."
fi
# โ”€โ”€ ุชุญู…ูŠู„ ุงู„ู†ู…ูˆุฐุฌ ู…ุณุจู‚ุงู‹ ููŠ ุงู„ุฐุงูƒุฑุฉ (Warmup) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# ู†ุฑุณู„ ุทู„ุจุงู‹ ูุงุฑุบุงู‹ ุจู€ keep_alive: -1 ููŠูุญู…ูŽู‘ู„ ุงู„ู†ู…ูˆุฐุฌ ุงู„ุขู† ูˆูŠุจู‚ู‰ ููŠ ุงู„ุฐุงูƒุฑุฉ
# ุญุชู‰ ุฅุนุงุฏุฉ ุงู„ุชุดุบูŠู„ุŒ ูู„ุง ูŠูˆุฌุฏ ุฃูŠ ุชุฃุฎูŠุฑ ุนู†ุฏ ุฃูˆู„ ุฑุณุงู„ุฉ ู…ู† ุงู„ู…ุณุชุฎุฏู…
echo "Pre-loading '$MODEL_NAME' into memory..."
curl -s -X POST http://localhost:11434/api/generate \
-H "Content-Type: application/json" \
-d "{\"model\": \"$MODEL_NAME\", \"prompt\": \"\", \"keep_alive\": -1}" \
> /dev/null
if [ $? -eq 0 ]; then
echo "Model '$MODEL_NAME' is loaded and ready in memory."
else
echo "WARNING: Pre-load request failed. Model will load on first use instead."
fi
# โ”€โ”€ ุชุดุบูŠู„ ูˆุงุฌู‡ุฉ Open WebUI โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
echo "Starting Open WebUI..."
cd /app/backend
exec bash start.sh