File size: 3,509 Bytes
6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 7caf1c9 6ce6322 114c977 | 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 | #!/bin/bash
set -e
MODELS_DIR="/data/models"
LLAMA_PORT=8080
mkdir -p "$MODELS_DIR"
mkdir -p /data/webui
# نظّف إشارات التشغيل السابقة عند إعادة التشغيل
rm -f /tmp/launch_signal /tmp/selected_model /tmp/selected_mmproj
# ===================================================================
# المرحلة الأولى: واجهة إعداد النموذج على المنفذ 7860
# تظهر للمستخدم قائمة النماذج المحفوظة ونموذج تحميل جديد
# ===================================================================
echo ">>> تشغيل واجهة إعداد النموذج على المنفذ 7860..."
python3 /app/model_setup.py
# ===================================================================
# المرحلة الثانية: بعد أن يضغط المستخدم "تشغيل"
# يقرأ الملف المختار ويبدأ llama.cpp
# ===================================================================
MODEL_FILE=$(cat /tmp/selected_model 2>/dev/null || echo "")
MMPROJ_FILE=$(cat /tmp/selected_mmproj 2>/dev/null || echo "")
if [ -z "$MODEL_FILE" ] || [ ! -f "$MODELS_DIR/$MODEL_FILE" ]; then
echo "!!! لم يتم تحديد نموذج صالح، إعادة التشغيل..."
exec bash /app/run.sh
fi
echo ">>> النموذج المختار: $MODEL_FILE"
# بناء أمر llama.cpp ديناميكياً (مع أو بدون mmproj)
LLAMA_CMD=(
python3 -m llama_cpp.server
--model "$MODELS_DIR/$MODEL_FILE"
--host 0.0.0.0
--port $LLAMA_PORT
--n_ctx 8192
--n_threads 2
--n_gpu_layers 0
--chat_format gemma
--flash_attn true
--use_mmap true
--use_mlock false
--verbose false
)
# إضافة mmproj فقط إن وُجد
if [ -n "$MMPROJ_FILE" ] && [ -f "$MODELS_DIR/$MMPROJ_FILE" ]; then
echo ">>> تفعيل دعم الرؤية (mmproj): $MMPROJ_FILE"
LLAMA_CMD+=(--clip_model_path "$MODELS_DIR/$MMPROJ_FILE")
fi
echo ">>> تشغيل خادم llama.cpp على المنفذ $LLAMA_PORT..."
"${LLAMA_CMD[@]}" &
LLAMA_PID=$!
# ===================================================================
# انتظر حتى يصبح llama.cpp جاهزاً
# ===================================================================
echo ">>> انتظار جهوزية خادم llama.cpp..."
MAX_WAIT=120
WAITED=0
until curl -sf "http://localhost:$LLAMA_PORT/health" > /dev/null 2>&1; do
if [ $WAITED -ge $MAX_WAIT ]; then
echo "!!! فشل تشغيل llama.cpp بعد ${MAX_WAIT} ثانية"
exit 1
fi
# تحقق أن الـ process لا يزال حياً
if ! kill -0 $LLAMA_PID 2>/dev/null; then
echo "!!! توقف خادم llama.cpp بشكل غير متوقع"
exit 1
fi
sleep 2
WAITED=$((WAITED + 2))
done
echo ">>> llama.cpp جاهز (استغرق ${WAITED} ثانية)"
# ===================================================================
# المرحلة الثالثة: تشغيل Open WebUI على المنفذ 7860
# ===================================================================
export OPENAI_API_BASE_URL="http://localhost:$LLAMA_PORT/v1"
export OPENAI_API_KEY="sk-llama-cpp-local"
export ENABLE_OLLAMA_API=false
export ENABLE_OPENAI_API=true
export DATA_DIR=/data/webui
export PORT=7860
export HOST=0.0.0.0
echo ">>> تشغيل Open WebUI على المنفذ 7860..."
cd /app/backend
exec bash start.sh |