| 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 | |