#!/usr/bin/env bash set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" QWEN38="$ROOT/models/Qwen3.8-27B-Q6_K.gguf" QWEN36="$ROOT/models/Qwen3.6-35B-A3B-UD-Q5_K_M.gguf" [[ -f "$QWEN38" && "$(stat -c %s "$QWEN38")" == 22563871392 ]] || { echo "Missing or incomplete: $QWEN38" >&2; exit 1; } [[ -f "$QWEN36" && "$(stat -c %s "$QWEN36")" == 26456194016 ]] || { echo "Missing or incomplete: $QWEN36" >&2; exit 1; } BIN="$ROOT/runtime/b11177/llama-server" [[ -x "$BIN" ]] || BIN="$ROOT/runtime/b11177/build/bin/llama-server" [[ -x "$BIN" ]] || { echo 'llama-server missing. Run bash scripts/install.sh.' >&2; exit 1; } mkdir -p "$ROOT/secrets" "$ROOT/runtime" KEY_FILE="$ROOT/secrets/api_keys.txt" if [[ ! -s "$KEY_FILE" ]]; then umask 077 python -c 'import secrets; print(secrets.token_urlsafe(32))' > "$KEY_FILE" fi chmod 600 "$KEY_FILE" PRESET="$ROOT/runtime/models.ini" cat > "$PRESET" <> "$PRESET" <&2 fi GPTOSS_1="$ROOT/models/gpt-oss-120b-MXFP4-00001-of-00002.gguf" GPTOSS_2="$ROOT/models/gpt-oss-120b-MXFP4-00002-of-00002.gguf" if [[ -f "$GPTOSS_1" && -f "$GPTOSS_2" \ && "$(stat -c %s "$GPTOSS_1")" == 39815566336 \ && "$(stat -c %s "$GPTOSS_2")" == 23571779104 ]]; then cat >> "$PRESET" <&2 fi export LD_LIBRARY_PATH="$ROOT/runtime/b11177:/opt/conda/lib:${LD_LIBRARY_PATH:-}" # llama.cpp b11177 otherwise defaults its HTTP thread pool to visible CPUs. # Keep nested/optional library pools small; llama.cpp owns the main compute pool. export OMP_NUM_THREADS="${LLM_OMP_THREADS:-4}" export OMP_THREAD_LIMIT="${LLM_OMP_THREADS:-4}" export OMP_DYNAMIC=FALSE export MKL_NUM_THREADS=1 export OPENBLAS_NUM_THREADS=1 export NUMEXPR_NUM_THREADS=1 export BLIS_NUM_THREADS=1 export VECLIB_MAXIMUM_THREADS=1 CPU_SET="$(python -c 'import os; print(",".join(map(str, sorted(os.sched_getaffinity(0))[:32])))')" exec taskset -c "$CPU_SET" "$BIN" \ --models-preset "$PRESET" \ --models-max 1 \ --models-autoload \ --sleep-idle-seconds "${LLM_IDLE_SECONDS:-900}" \ --host "${LLM_HOST:-127.0.0.1}" \ --port "${LLM_PORT:-8080}" \ --api-key-file "$KEY_FILE" \ --threads 16 \ --threads-batch 16 \ --threads-http 4 \ --cont-batching \ --reasoning-effort "${LLM_REASONING_EFFORT:-medium}" \ --batch-size 2048 \ --ubatch-size 512 \ --jinja