#!/usr/bin/env bash # Serve the FastFlowLM (FLM) NPU endpoint on Dankclaw — frank-default-small. # # Runs flm serve with the model tag in frank-default-small.env. The NPU # (XDNA2, 50 TOPS) is a single-lane device: generations serialize in FIFO # order, so this is a background/triage endpoint, not an interactive # multi-user chat backend. The NPU shares the 30 GiB unified pool with the # frank-default-large PP head; see serverAppConfigs-docs/FastFlowLM NPU Inference.md for the # memory budget and the measured model matrix. # # NOTE: FLM requires unlimited memlock. The unit sets LimitMEMLOCK=infinity. # Running this script by hand from a login shell needs the pam_limits rule # in /etc/security/limits.d/99-flm-memlock.conf. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" ENV_FILE="${FLM_SMALL_ENV_FILE:-$SCRIPT_DIR/frank-default-small.env}" if [[ -f "$ENV_FILE" ]]; then set -a # shellcheck disable=SC1090 source "$ENV_FILE" set +a fi # --- defaults (used when the env file does not set them) ------------------- : "${FLM_BIN:=/usr/bin/flm}" : "${FLM_MODEL:=gemma4-it:e4b}" : "${FLM_HOST:=0.0.0.0}" : "${FLM_PORT:=52625}" : "${FLM_PMODE:=performance}" : "${FLM_ASR:=0}" : "${FLM_CTX_LEN:=-1}" if [[ ! -x "$FLM_BIN" ]]; then echo "missing flm binary: $FLM_BIN" >&2 exit 1 fi # --- optional flags ---------------------------------------------------------- OPT_ARGS=() if [[ "${FLM_ASR}" != "0" ]]; then OPT_ARGS+=(-a "${FLM_ASR}") fi if [[ "${FLM_CTX_LEN}" != "-1" ]]; then OPT_ARGS+=(-c "${FLM_CTX_LEN}") fi exec "$FLM_BIN" serve "$FLM_MODEL" \ --host "$FLM_HOST" \ -p "$FLM_PORT" \ --pmode "$FLM_PMODE" \ "${OPT_ARGS[@]}"