plo3 / run.sh
gijl's picture
Update run.sh
9298273 verified
Raw History Blame Contribute Delete
4.49 kB
#!/bin/bash
set -euo pipefail
# =====================================================================
# تحديث: تم الانتقال من تنزيل ملف GGUF يدويًا من Hugging Face إلى استخدام
# نموذج Gemma 4 الرسمي المتوفر مباشرة في مكتبة Ollama (gemma4) — أبسط
# وأكثر ثباتًا، ويتضمن دعم الرؤية تلقائيًا بدون ملف mmproj منفصل.
# كما تمت إضافة أدوات Open WebUI: بحث الويب، تنفيذ الأكواد، واستدعاء
# الأدوات بالطريقة الأصلية (Native Function Calling) التي يدعمها Gemma 4.
# =====================================================================
# تحديد مسارات المخزن الدائم (في مساحات HF عادة يكون /data)
OLLAMA_DATA_DIR="/data/ollama"
WEBUI_DATA_DIR="/data/webui"
# نموذج Gemma 4 من مكتبة Ollama الرسمية (يمكن تغييره عبر متغير بيئة بدون إعادة بناء الصورة)
# الخيارات المتاحة: e2b (الأخف ~7.2GB) | e4b (~9.6GB) | 12b | 26b (MoE) | 31b
BASE_MODEL="${BASE_MODEL:-gemma4:e2b}"
OLLAMA_MODEL_NAME="${OLLAMA_MODEL_NAME:-my-gemma}"
# سياق المحادثة: الحد الأقصى لـ e2b/e4b هو 128000، و256000 لما هو أكبر (12b/26b/31b)
# قلّل هذا الرقم إذا كانت موارد المساحة (RAM) محدودة وواجهت مشاكل في الذاكرة
NUM_CTX="${NUM_CTX:-128000}"
NUM_THREAD="${NUM_THREAD:-$(nproc)}"
# ---------------------- إعدادات أدوات Open WebUI ----------------------
# بحث الويب عبر DuckDuckGo (لا يحتاج مفتاح API)
export ENABLE_WEB_SEARCH="${ENABLE_WEB_SEARCH:-true}"
export WEB_SEARCH_ENGINE="${WEB_SEARCH_ENGINE:-duckduckgo}"
export WEB_SEARCH_RESULT_COUNT="${WEB_SEARCH_RESULT_COUNT:-3}"
export WEB_SEARCH_CONCURRENT_REQUESTS="${WEB_SEARCH_CONCURRENT_REQUESTS:-1}"
export USER_AGENT="${USER_AGENT:-Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0 Safari/537.36}"
# منفّذ الأكواد المدمج (Pyodide) - مفعّل افتراضيًا في Open WebUI، موضوع هنا للوضوح والتأكيد
export ENABLE_CODE_EXECUTION="${ENABLE_CODE_EXECUTION:-true}"
export ENABLE_CODE_INTERPRETER="${ENABLE_CODE_INTERPRETER:-true}"
# تفعيل استدعاء الأدوات بالطريقة "الأصلية" (Native) التي يدعمها Gemma 4 أصلاً
# (هذا ما يجعل بحث الويب وتنفيذ الأكواد تعمل بشكل موثوق مع النموذج)
if [ -z "${DEFAULT_MODEL_PARAMS:-}" ]; then
DEFAULT_MODEL_PARAMS='{"function_calling": "native"}'
fi
export DEFAULT_MODEL_PARAMS
# إنشاء المجلدات المطلوبة في المخزن إن لم تكن موجودة
mkdir -p "$OLLAMA_DATA_DIR" "$WEBUI_DATA_DIR"
# تشغيل خادم Ollama في الخلفية
echo "Starting Ollama server..."
OLLAMA_MODELS="$OLLAMA_DATA_DIR" ollama serve &
# الانتظار حتى يصبح خادم Ollama جاهزًا فعليًا لتلقي الطلبات
# (بدل الانتظار الثابت sleep 4 في النسخة السابقة، وهو غير موثوق)
echo "Waiting for Ollama to be ready..."
for i in $(seq 1 60); do
if ollama list >/dev/null 2>&1; then
echo "Ollama server is ready."
break
fi
sleep 1
done
if ! ollama list >/dev/null 2>&1; then
echo "ERROR: Ollama server did not become ready in time." >&2
exit 1
fi
# تنزيل نموذج Gemma 4 من مكتبة Ollama الرسمية
# هذه العملية آمنة لإعادة التشغيل تلقائيًا: إذا كانت طبقات النموذج موجودة
# بالفعل في $OLLAMA_DATA_DIR فلن تُعاد تنزيلها
echo "Pulling $BASE_MODEL..."
ollama pull "$BASE_MODEL"
# إنشاء ملف إعدادات النموذج (Modelfile) لتوسيع سياق المحادثة وضبط عدد المسارات
echo "Creating Modelfile..."
cat <<EOF > /tmp/Modelfile
FROM $BASE_MODEL
PARAMETER num_ctx $NUM_CTX
PARAMETER num_thread $NUM_THREAD
EOF
# تسجيل النموذج المخصص داخل Ollama
echo "Registering model '$OLLAMA_MODEL_NAME' with Ollama..."
ollama create "$OLLAMA_MODEL_NAME" -f /tmp/Modelfile
# تشغيل واجهة Open WebUI (الأمر الافتراضي للصورة الأساسية)
echo "Starting Open WebUI..."
cd /app/backend
exec bash start.sh