Spaces:
Sleeping
Sleeping
| set -e | |
| echo "==================================" | |
| echo "Starting HF Space with llama.cpp" | |
| echo "==================================" | |
| if [ ! -d /data ]; then | |
| export HF_HOME=/workspace/data/.cache/huggingface | |
| export HUGGINGFACE_HUB_CACHE=/workspace/data/.cache/huggingface | |
| export MODEL_CACHE_DIR=/workspace/data/models | |
| else | |
| export HF_HOME=/data/.cache/huggingface | |
| export HUGGINGFACE_HUB_CACHE=/data/.cache/huggingface | |
| export MODEL_CACHE_DIR=/data/models | |
| fi | |
| mkdir -p "${HF_HOME}" "${HUGGINGFACE_HUB_CACHE}" "${MODEL_CACHE_DIR}" | |
| echo "MODEL_REPO_ID=${MODEL_REPO_ID}" | |
| echo "MODEL_FILENAME=${MODEL_FILENAME}" | |
| echo "PORT=${PORT}" | |
| echo "HF_HOME=${HF_HOME}" | |
| echo "MODEL_CACHE_DIR=${MODEL_CACHE_DIR}" | |
| # Download GGUF if missing | |
| if [ ! -f "${MODEL_CACHE_DIR}/${MODEL_FILENAME}" ]; then | |
| echo "Downloading GGUF from Hugging Face..." | |
| python3 - <<'PY' | |
| import os | |
| from huggingface_hub import hf_hub_download | |
| repo = os.environ["MODEL_REPO_ID"] | |
| filename = os.environ["MODEL_FILENAME"] | |
| local_dir = os.environ["MODEL_CACHE_DIR"] | |
| path = hf_hub_download( | |
| repo_id=repo, | |
| filename=filename, | |
| local_dir=local_dir, | |
| ) | |
| print(f"Downloaded model to: {path}") | |
| PY | |
| else | |
| echo "Model already present: ${MODEL_CACHE_DIR}/${MODEL_FILENAME}" | |
| fi | |
| echo "Starting llama.cpp server..." | |
| export LD_LIBRARY_PATH="/app:/app/build/bin:/app/build/lib:/usr/local/lib:${LD_LIBRARY_PATH}" | |
| echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" | |
| # Optional debug | |
| find /app -name "libmtmd.so*" -o -name "libllama.so*" -o -name "libggml*.so*" || true | |
| ldd /app/llama-server || true | |
| ldconfig || true | |
| /app/llama-server \ | |
| -m "${MODEL_CACHE_DIR}/${MODEL_FILENAME}" \ | |
| --host 127.0.0.1 \ | |
| --port 8000 \ | |
| > /tmp/llama.log 2>&1 & | |
| LLAMA_PID=$! | |
| echo "llama.cpp PID: ${LLAMA_PID}" | |
| echo "Waiting for llama.cpp server..." | |
| for i in $(seq 1 60); do | |
| if curl -sf http://127.0.0.1:8000/v1/models >/dev/null; then | |
| echo "llama.cpp is ready" | |
| break | |
| fi | |
| echo "waiting... ($i/60)" | |
| sleep 2 | |
| done | |
| if ! curl -sf http://127.0.0.1:8000/v1/models >/dev/null; then | |
| echo "llama.cpp failed to start" | |
| echo "==== llama.cpp logs ====" | |
| cat /tmp/llama.log || true | |
| exit 1 | |
| fi | |
| cd /workspace | |
| exec python3 app_gradio.py |