File size: 5,091 Bytes
34c7351 | 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 90 91 92 93 94 95 96 97 98 99 100 101 102 | #!/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
|