Spaces:
Running
Running
| # Serve the local text model (MiniCPM5-1B) as an OpenAI-compatible endpoint (F0). | |
| # Only used when TEXT_MODEL_PROVIDER=local (see .env.example). | |
| set -euo pipefail | |
| PORT="${MODEL_PORT:-8080}" | |
| CTX="${CTX:-8192}" | |
| MODEL_FILE="${MODEL_FILE:-}" | |
| MODEL_PATH="${MODEL_PATH:-model/weights/${MODEL_FILE}}" | |
| # HARDWARE=auto detects a CUDA GPU via nvidia-smi and offloads all layers (NGL=99); | |
| # otherwise runs CPU-only (NGL=0). Set HARDWARE=gpu or HARDWARE=cpu to force, | |
| # or set NGL directly to override both. | |
| HARDWARE="${HARDWARE:-auto}" | |
| if [ -n "${NGL:-}" ]; then | |
| : # NGL explicitly set, respect it | |
| elif [ "${HARDWARE}" = "cpu" ]; then | |
| NGL=0 | |
| elif [ "${HARDWARE}" = "gpu" ]; then | |
| NGL=99 | |
| elif command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi >/dev/null 2>&1; then | |
| NGL=99 | |
| else | |
| NGL=0 | |
| fi | |
| echo "Hardware: ${HARDWARE} -> NGL=${NGL}" | |
| if [ -z "${MODEL_FILE}" ] || [ ! -f "${MODEL_PATH}" ]; then | |
| echo "Model not found at '${MODEL_PATH}'." >&2 | |
| echo "Set MODEL_FILE (and run model/download_model.py) once the checkpoint is pinned." >&2 | |
| exit 1 | |
| fi | |
| # llama-server (llama.cpp C++ binary, built in the Dockerfile) exposes an | |
| # OpenAI-compatible API at /v1. --jinja applies MiniCPM5's chat template. | |
| if ! command -v llama-server >/dev/null 2>&1; then | |
| echo "llama-server not found on PATH. Build it from https://github.com/ggml-org/llama.cpp" >&2 | |
| exit 1 | |
| fi | |
| exec llama-server -m "${MODEL_PATH}" --host 0.0.0.0 --port "${PORT}" -c "${CTX}" -ngl "${NGL}" --jinja | |