# frank-zealot — llama.cpp (PrismML fork build 10777, CUDA) on the RTX 3090, # :7771. Payload: Ternary-Bonsai-2-9B PQ2_0 with the MTP head in the file. # # ONE OWNER: shape, payload identity, eras, laws and every measured number # live in serverAppConfigs-docs/LLM/frank-zealot.md. This file carries the # knobs and only the reason a reader editing THIS line cannot recover # elsewhere. Where the two disagree, this file wins on values. LLAMA_BIN=/home/dank/GitPackages/llama-prism-b10777/llama-server # The fork is a LOCK, not a preference: custom tensor type 142 + prism.hadamard.* # metadata. Stock llama.cpp refuses the file; a loader ignoring the Hadamard # metadata dequantizes wrong, silently. MODEL_FILE=/home/dank/models/Bonsai2-9B-MTP/Ternary-Bonsai-2-9B-PQ2_0-MTP-Q8_0.gguf # Q8_0 IS MANDATORY: the publisher states the BF16 tower can crash llama-server # under concurrent image requests, which is exactly --parallel 2. MMPROJ_FILE=/home/dank/models/Bonsai2-9B-MTP/Ternary-Bonsai-2-9B-mmproj-Q8_0.gguf # Served id — the harness/family name, not a fact about the payload. # Id-keyed consumers: OpenWebUI (model row, access_grant, api_configs), models.yml. ALIAS=frank-zealot BIND_ADDR=0.0.0.0 LISTEN_PORT=7771 # CTX_SIZE is the POOL llama.cpp divides across slots: 524,288 / 2 = 262,144 a # conversation, each still at the trained window. MUST stay divisible by # PARALLEL (the seam enforces it) and models.yml contextWindow quotes the # PER-SLOT number — a longer prompt is a 400, never a truncation. The pool # cannot go back to 786,432 under exact f16 KV: 24,576 MiB of cache against the # 24,123 MiB the driver leaves addressable, before a weight loads. CTX_SIZE=524288 PARALLEL=2 BATCH_SIZE=4096 # Ubatch is a prefill knob (decode never moves with it) and it sets the # compute-buffer size — which is what decides whether a drafter fits. # UBATCH_SIZE=1024 is the documented MTP arm. UBATCH_SIZE=2048 # Exact K and V: the retrieval-fidelity ask, paid with one conversation of # concurrency. Rate law and the arithmetic: [[frank-zealot]] → Laws. CACHE_TYPE_K=f16 CACHE_TYPE_V=f16 # Speculation OFF — measured, not assumed: the draft context bills its own f16 # KV over the WHOLE pool, and there is no room beside exact KV (the arm census # is on the page). SPEC_TYPE=none strips the WHOLE set (--spec-type and every # --spec-draft-*); half a set has segfaulted at load. SPEC_TYPE=none SPEC_DRAFT_N_MAX=2 SPEC_DRAFT_N_MIN=0 SPEC_DRAFT_P_MIN=0 # The sampler recipe lives in the checkpoint (general.sampling.*) and # llama.cpp reads it itself. Presence penalty is the one recipe value with no # GGUF metadata key, so it must reach argv. "" is the documented opt-out. PRESENCE_PENALTY=1.0 NGL=99 # 4 = debug: KV layout, buffer sizes and graph capture land in the journal, and # that is what VRAM forensics read. Above 4 floods the journal. VERBOSITY=4 # Without --metrics llama.cpp answers 501 on /metrics, which Prometheus reads # as DOWN while /health stays 200. 0 opts out and re-breaks the scrape. METRICS=1