daimon / model /serve.sh
davidquicast's picture
chore: initial commit
f0347b4
Raw
History Blame Contribute Delete
1.48 kB
#!/usr/bin/env bash
# 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