Spaces:
gijl
/
Sleeping

gijl commited on
Commit
34c7351
ยท
verified ยท
1 Parent(s): 252ca31

Upload 2 files

Browse files
Files changed (2) hide show
  1. Dockerfile +36 -0
  2. run.sh +101 -0
Dockerfile ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ุงุณุชุฎุฏุงู… ุงู„ุตูˆุฑุฉ ุงู„ุฑุณู…ูŠุฉ ุงู„ุชูŠ ุชุฏู…ุฌ Open WebUI ู…ุน Ollama
2
+ FROM ghcr.io/open-webui/open-webui:ollama
3
+
4
+ # โ”€โ”€ ุฅุนุฏุงุฏุงุช ุงู„ู…ุณุงุฑุงุช ุงู„ุฏุงุฆู…ุฉ (HF Spaces ูŠุฑุจุท ุงู„ู…ุฎุฒู† ุนู„ู‰ /data) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
5
+ ENV OLLAMA_MODELS=/data/ollama
6
+ ENV DATA_DIR=/data/webui
7
+ ENV PORT=7860
8
+ ENV HOST=0.0.0.0
9
+
10
+ # โ”€โ”€ ุฅุจู‚ุงุก ุงู„ู†ู…ูˆุฐุฌ ููŠ ุงู„ุฐุงูƒุฑุฉ ุฅู„ู‰ ุงู„ุฃุจุฏ (ู„ุง ุชูุฑูŠุบ ุนู†ุฏ ุงู„ุฎู…ูˆู„) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
11
+ ENV OLLAMA_KEEP_ALIVE=-1
12
+
13
+ # โ”€โ”€ ุฅุนุฏุงุฏุงุช ุงู„ู†ู…ูˆุฐุฌ ุงู„ู…ุฑุงุฏ ุชุญู…ูŠู„ู‡ ู…ู† Hugging Face โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
14
+ # ุบูŠู‘ุฑ ู‡ุฐู‡ ุงู„ู‚ูŠู… ูู‚ุท ู„ุชุดุบูŠู„ ุฃูŠ ู†ู…ูˆุฐุฌ GGUF ู…ู† HF ุฏูˆู† ุชุนุฏูŠู„ ุฃูŠ ุดูŠุก ุขุฎุฑ:
15
+ #
16
+ # HF_REPO : ู…ุณุงุฑ ุงู„ู…ุณุชูˆุฏุน ุนู„ู‰ HF (ู…ุซุงู„: unsloth/gemma-4-E2B-it-GGUF)
17
+ # HF_FILE : ุงุณู… ู…ู„ู GGUF ุจุฏู‚ุฉ ูƒู…ุง ูŠุธู‡ุฑ ููŠ ุงู„ู…ุณุชูˆุฏุน
18
+ # MODEL_NAME: ุงู„ุงุณู… ุงู„ุฐูŠ ุณูŠุธู‡ุฑ ุจู‡ ุงู„ู†ู…ูˆุฐุฌ ููŠ ูˆุงุฌู‡ุฉ Open WebUI
19
+ # HF_TOKEN : (ุงุฎุชูŠุงุฑูŠ) ู…ุทู„ูˆุจ ูู‚ุท ู„ู„ู†ู…ุงุฐุฌ ุงู„ุฎุงุตุฉ/ุงู„ู…ุญู…ูŠุฉ (gated models)
20
+ ENV HF_REPO="unsloth/gemma-4-E2B-it-GGUF"
21
+ ENV HF_FILE="gemma-4-E2B-it-UD-Q5_K_XL.gguf"
22
+ ENV MODEL_NAME="my-gemma"
23
+ ENV HF_TOKEN=""
24
+
25
+ # โ”€โ”€ ู…ุนุงู…ู„ุงุช ุชุดุบูŠู„ ุงู„ู†ู…ูˆุฐุฌ (ูŠู…ูƒู† ุชุนุฏูŠู„ู‡ุง ุญุณุจ ุญุฌู… ุงู„ู†ู…ูˆุฐุฌ ูˆุงู„ุฐุงูƒุฑุฉ ุงู„ู…ุชุงุญุฉ) โ”€โ”€
26
+ ENV MODEL_CTX=128000
27
+ ENV MODEL_THREADS=2
28
+
29
+ # ุชุซุจูŠุช ุฃุฏุงุฉ Hugging Face
30
+ RUN pip install -U huggingface_hub
31
+
32
+ # ู†ุณุฎ ุณูƒุฑูŠุจุช ุงู„ุชุดุบูŠู„
33
+ COPY run.sh /app/run.sh
34
+ RUN chmod +x /app/run.sh
35
+
36
+ CMD ["/app/run.sh"]
run.sh ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
5
+ # ุงู„ู‚ูŠู… ุชุฃุชูŠ ู…ู† ู…ุชุบูŠุฑุงุช ุงู„ุจูŠุฆุฉ ุงู„ู…ุนุฑู‘ูุฉ ููŠ Dockerfile (ุฃูˆ ู…ู† HF Spaces Secrets)
6
+ # ูŠู…ูƒู†ูƒ ุชุฌุงูˆุฒู‡ุง ููŠ ูˆุงุฌู‡ุฉ HF Spaces ุชุญุช ู‚ุณู… "Repository secrets" ุฏูˆู† ุชุนุฏูŠู„ ุงู„ูƒูˆุฏ
7
+ # โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
8
+ MODELS_DIR="/data/models"
9
+ MODEL_PATH="$MODELS_DIR/$HF_FILE"
10
+
11
+ # โ”€โ”€ ุงู„ุชุญู‚ู‚ ู…ู† ุงู„ู…ุชุบูŠุฑุงุช ุงู„ุฃุณุงุณูŠุฉ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
12
+ if [ -z "$HF_REPO" ] || [ -z "$HF_FILE" ] || [ -z "$MODEL_NAME" ]; then
13
+ echo "ERROR: HF_REPO, HF_FILE, and MODEL_NAME must all be set."
14
+ exit 1
15
+ fi
16
+
17
+ echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•"
18
+ echo " Repo : $HF_REPO"
19
+ echo " File : $HF_FILE"
20
+ echo " Name : $MODEL_NAME"
21
+ echo "โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•"
22
+
23
+ # ุฅู†ุดุงุก ุงู„ู…ุฌู„ุฏุงุช ุงู„ู…ุทู„ูˆุจุฉ
24
+ mkdir -p "$MODELS_DIR" /data/ollama /data/webui
25
+
26
+ # โ”€โ”€ ุชุญู…ูŠู„ ุงู„ู…ู„ู ู…ู† Hugging Face (ูŠุชุฎุทู‰ ุงู„ุชุญู…ูŠู„ ุฅู† ูƒุงู† ุงู„ู…ู„ู ู…ูˆุฌูˆุฏุงู‹ ุจุงู„ูุนู„) โ”€โ”€
27
+ if [ -f "$MODEL_PATH" ]; then
28
+ echo "Model file already exists at $MODEL_PATH โ€” skipping download."
29
+ else
30
+ echo "Downloading $HF_FILE from $HF_REPO ..."
31
+
32
+ # ุชู…ุฑูŠุฑ ุงู„ุชูˆูƒู† ูู‚ุท ุฅู† ูƒุงู† ู…ุถุจูˆุทุงู‹ (ู„ู„ู†ู…ุงุฐุฌ ุงู„ู…ุญู…ูŠุฉ)
33
+ HF_CLI_ARGS="--repo-type model --local-dir $MODELS_DIR"
34
+ if [ -n "$HF_TOKEN" ]; then
35
+ HF_CLI_ARGS="$HF_CLI_ARGS --token $HF_TOKEN"
36
+ fi
37
+
38
+ huggingface-cli download "$HF_REPO" "$HF_FILE" $HF_CLI_ARGS
39
+
40
+ if [ ! -f "$MODEL_PATH" ]; then
41
+ echo "ERROR: Download finished but file not found at $MODEL_PATH"
42
+ exit 1
43
+ fi
44
+ echo "Download complete: $MODEL_PATH"
45
+ fi
46
+
47
+ # โ”€โ”€ ุชุดุบูŠู„ ุฎุงุฏู… Ollama ููŠ ุงู„ุฎู„ููŠุฉ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
48
+ echo "Starting Ollama server..."
49
+ OLLAMA_MODELS=/data/ollama ollama serve &
50
+
51
+ # โ”€โ”€ ุงู†ุชุธุงุฑ ุญุชู‰ ูŠูƒูˆู† Ollama ุฌุงู‡ุฒุงู‹ ูุนู„ุงู‹ (ุจุฏู„ุงู‹ ู…ู† sleep ุซุงุจุช) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
52
+ echo "Waiting for Ollama to be ready..."
53
+ MAX_WAIT=60
54
+ WAITED=0
55
+ until curl -s http://localhost:11434/api/tags > /dev/null 2>&1; do
56
+ if [ "$WAITED" -ge "$MAX_WAIT" ]; then
57
+ echo "ERROR: Ollama did not respond within ${MAX_WAIT}s."
58
+ exit 1
59
+ fi
60
+ sleep 1
61
+ WAITED=$((WAITED + 1))
62
+ done
63
+ echo "Ollama is ready (after ${WAITED}s)."
64
+
65
+ # โ”€โ”€ ุฅู†ุดุงุก Modelfile ูŠุดูŠุฑ ุฅู„ู‰ ุงู„ู…ู„ู ุงู„ู…ุญู„ูŠ ููŠ ุงู„ู…ุฎุฒู† โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
66
+ echo "Creating Modelfile..."
67
+ cat <<EOF > "$MODELS_DIR/Modelfile"
68
+ FROM $MODEL_PATH
69
+
70
+ PARAMETER num_ctx $MODEL_CTX
71
+ PARAMETER num_thread $MODEL_THREADS
72
+ EOF
73
+
74
+ # โ”€โ”€ ุชุณุฌูŠู„ ุงู„ู†ู…ูˆุฐุฌ ููŠ Ollama ุฅู† ู„ู… ูŠูƒู† ู…ุณุฌู„ุงู‹ ุจุนุฏ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
75
+ if OLLAMA_MODELS=/data/ollama ollama list | grep -q "^$MODEL_NAME"; then
76
+ echo "Model '$MODEL_NAME' already registered โ€” skipping creation."
77
+ else
78
+ echo "Registering model '$MODEL_NAME' in Ollama..."
79
+ OLLAMA_MODELS=/data/ollama ollama create "$MODEL_NAME" -f "$MODELS_DIR/Modelfile"
80
+ echo "Model registered successfully."
81
+ fi
82
+
83
+ # โ”€โ”€ ุชุญู…ูŠู„ ุงู„ู†ู…ูˆุฐุฌ ู…ุณุจู‚ุงู‹ ููŠ ุงู„ุฐุงูƒุฑุฉ (Warmup) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
84
+ # ู†ุฑุณู„ ุทู„ุจุงู‹ ูุงุฑุบุงู‹ ุจู€ keep_alive: -1 ููŠูุญู…ูŽู‘ู„ ุงู„ู†ู…ูˆุฐุฌ ุงู„ุขู† ูˆูŠุจู‚ู‰ ููŠ ุงู„ุฐุงูƒุฑุฉ
85
+ # ุญุชู‰ ุฅุนุงุฏุฉ ุงู„ุชุดุบูŠู„ุŒ ูู„ุง ูŠูˆุฌุฏ ุฃูŠ ุชุฃุฎูŠุฑ ุนู†ุฏ ุฃูˆู„ ุฑุณุงู„ุฉ ู…ู† ุงู„ู…ุณุชุฎุฏู…
86
+ echo "Pre-loading '$MODEL_NAME' into memory..."
87
+ curl -s -X POST http://localhost:11434/api/generate \
88
+ -H "Content-Type: application/json" \
89
+ -d "{\"model\": \"$MODEL_NAME\", \"prompt\": \"\", \"keep_alive\": -1}" \
90
+ > /dev/null
91
+
92
+ if [ $? -eq 0 ]; then
93
+ echo "Model '$MODEL_NAME' is loaded and ready in memory."
94
+ else
95
+ echo "WARNING: Pre-load request failed. Model will load on first use instead."
96
+ fi
97
+
98
+ # โ”€โ”€ ุชุดุบูŠู„ ูˆุงุฌู‡ุฉ Open WebUI โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
99
+ echo "Starting Open WebUI..."
100
+ cd /app/backend
101
+ exec bash start.sh