Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e7191a46c2 |
No files matched your search
@@ -27,7 +27,7 @@ merge absorbed the former `vllmScripts` repo, history preserved).
|
|||||||
|--------|---------|---------|-------|------|
|
|--------|---------|---------|-------|------|
|
||||||
| Dankserver | `frank-archon` | **radiance** (StillDeadcode, **pin 1.0.13** digest-pinned `stilldeadcode/radiance@sha256:4c3f484564…`, plain `podman run`, root systemd unit) | **Publisher payload** (swap 2026-10-15, MODEL_FILE-only): `StillDeadcode/qwen3.8-next-flash-fp8-iq4r-moe` → **`qwen3.8-next-flash-fp8-iq4r-moe.rad`** (121,969,901,568 B = **116,322 MiB**, Hub-LFS sha256 `0af5e962…` verified at fetch by `scripts/download-frank-archon-iq4r.sh`) — the OFFICIAL Qwen3.8-Flash-Next bf16 checkpoint rad-converted by the engine's author: routed experts as **4-bit codes into a 16-level non-uniform codebook** (128-pt Walsh–Hadamard rotation, GPTQ on a 10M-token calibration + 3 coordinate-descent sweeps, E4M3 scales per 64 weights), **10 whole bf16-protected experts/layer**, int8 W8A8 trunk/lm_head, fp8 HC mixtures, fp8 fixed-scale PLE n-gram (47.7 GiB), **MTP head + bf16 vision tower in the container**; card KL 0.0789 mean all-tokens / top-1 92.85 % vs BF16. **Base-alignment (censored) model** — the abliterated family lives on frank-dragoon. Shape carried VERBATIM from the 2026-10-13 record: **3 × 200,000 fp8-KV** (`--max-num-seqs 3`), **25,600 MiB slab + 5,120 MiB pool = 30,720 of the 30,969 MiB claimable**, 44 GiB/rank pinned host pool, PLE pinned to RAM, MTP depth 2, MNBT 2048, Froggeric v22.5 template. Decode/prefill ladders in the runbook are the **w4dn8 record** (the bar to beat; new-payload probes pending). Rollback: revert the swap commit (w4dn8 `.rad` on disk); the fp8-native `.rad` + the raw Swift1.5 BF16 source were DELETED from disk 2026-10-15 (Frank's one-time rm, volume for this payload; rebuildable via the fetch/build scripts). | 7770 |
|
| Dankserver | `frank-archon` | **radiance** (StillDeadcode, **pin 1.0.13** digest-pinned `stilldeadcode/radiance@sha256:4c3f484564…`, plain `podman run`, root systemd unit) | **Publisher payload** (swap 2026-10-15, MODEL_FILE-only): `StillDeadcode/qwen3.8-next-flash-fp8-iq4r-moe` → **`qwen3.8-next-flash-fp8-iq4r-moe.rad`** (121,969,901,568 B = **116,322 MiB**, Hub-LFS sha256 `0af5e962…` verified at fetch by `scripts/download-frank-archon-iq4r.sh`) — the OFFICIAL Qwen3.8-Flash-Next bf16 checkpoint rad-converted by the engine's author: routed experts as **4-bit codes into a 16-level non-uniform codebook** (128-pt Walsh–Hadamard rotation, GPTQ on a 10M-token calibration + 3 coordinate-descent sweeps, E4M3 scales per 64 weights), **10 whole bf16-protected experts/layer**, int8 W8A8 trunk/lm_head, fp8 HC mixtures, fp8 fixed-scale PLE n-gram (47.7 GiB), **MTP head + bf16 vision tower in the container**; card KL 0.0789 mean all-tokens / top-1 92.85 % vs BF16. **Base-alignment (censored) model** — the abliterated family lives on frank-dragoon. Shape carried VERBATIM from the 2026-10-13 record: **3 × 200,000 fp8-KV** (`--max-num-seqs 3`), **25,600 MiB slab + 5,120 MiB pool = 30,720 of the 30,969 MiB claimable**, 44 GiB/rank pinned host pool, PLE pinned to RAM, MTP depth 2, MNBT 2048, Froggeric v22.5 template. Decode/prefill ladders in the runbook are the **w4dn8 record** (the bar to beat; new-payload probes pending). Rollback: revert the swap commit (w4dn8 `.rad` on disk); the fp8-native `.rad` + the raw Swift1.5 BF16 source were DELETED from disk 2026-10-15 (Frank's one-time rm, volume for this payload; rebuildable via the fetch/build scripts). | 7770 |
|
||||||
| Dankclaw | `frank-dragoon` | **halogen-flash-server 0.16.2** (`ghcr.io/peonist-ai/halogen-flash-server@sha256:0c61bf84…`, digest-pinned, plain `podman run` via `scripts/serve-frank-dragoon.sh`, root systemd unit) | Quat3rnion/halogen-swift1.5-qwen3.8-flash-next-v2-abliterated **`qwen38-flash-next-v2-swift15-abliterated.hgn`** (66,687,678,464 B = compacted r2 of the card's 89,775,868,032 B original, ~62 GiB resident; the v2 `.hgn` format loads in NO other engine), **+ REQUIRED `qwen38-flash-next-ngram.hgn`** (51,200,246,144 B, peonist @5cc17cea — read beside the checkpoint) **+ vision tower** (897,916,416 B, @e053f488 — **vision ON**, `image_url` parts only, ≥256 px probes), **MTP spec decode ALWAYS-ON (`HALOGEN_SPEC_ADAPT=0` — the adaptive default disables the drafter per request and HALVES decode)**, MTP head INSIDE the checkpoint (`HALOGEN_MTP_HEAD` unset; no sidecar fetched), **2 slots × 262,144 ctx** (KV pool 524,288 positions ≈ 14.0 GiB at ~28 KiB/position; the 27B slots>1-disables-drafting law does NOT carry over — batching and speculation coexist, the card's quickstart ships 2 with the head), harness window 217,088 = ceiling − 45k estimate headroom, **server-side sampler 1.0/0.95/20** (card recipe; models.yml extraBody matches), coupled cap/timeout 65536/7200, prompt cache ON by default (warm 100k turn ≈ 2 s vs ≈ 88 s cold)|7770|
|
| Dankclaw | `frank-dragoon` | **halogen-flash-server 0.16.2** (`ghcr.io/peonist-ai/halogen-flash-server@sha256:0c61bf84…`, digest-pinned, plain `podman run` via `scripts/serve-frank-dragoon.sh`, root systemd unit) | Quat3rnion/halogen-swift1.5-qwen3.8-flash-next-v2-abliterated **`qwen38-flash-next-v2-swift15-abliterated.hgn`** (66,687,678,464 B = compacted r2 of the card's 89,775,868,032 B original, ~62 GiB resident; the v2 `.hgn` format loads in NO other engine), **+ REQUIRED `qwen38-flash-next-ngram.hgn`** (51,200,246,144 B, peonist @5cc17cea — read beside the checkpoint) **+ vision tower** (897,916,416 B, @e053f488 — **vision ON**, `image_url` parts only, ≥256 px probes), **MTP spec decode ALWAYS-ON (`HALOGEN_SPEC_ADAPT=0` — the adaptive default disables the drafter per request and HALVES decode)**, MTP head INSIDE the checkpoint (`HALOGEN_MTP_HEAD` unset; no sidecar fetched), **2 slots × 262,144 ctx** (KV pool 524,288 positions ≈ 14.0 GiB at ~28 KiB/position; the 27B slots>1-disables-drafting law does NOT carry over — batching and speculation coexist, the card's quickstart ships 2 with the head), harness window 217,088 = ceiling − 45k estimate headroom, **server-side sampler 1.0/0.95/20** (card recipe; models.yml extraBody matches), coupled cap/timeout 65536/7200, prompt cache ON by default (warm 100k turn ≈ 2 s vs ≈ 88 s cold)|7770|
|
||||||
| Dankclaw | `frank-zealot` | **llama.cpp PrismML fork build** (vendor release `0.2.0-dev` build **10754**, commit `2459f68b5`; root systemd unit, relinked — the ONLY loader for this payload) | `prism-ml/Ternary-Bonsai-2-27B-gguf` **PQ2_0** (7,206,168,928 B, sha256 `3907dc16…`; `qwen35` hybrid: **64 blocks, 16 full-attention + 48 Gated DeltaNet**, 4 KV heads × 256 dim, vocab 248,320, native 262,144, **no MTP head in the file**; `general.file_type 141` = custom tensor type **142** + `prism.hadamard.*` dequant metadata, which is what locks the runtime) + the publisher's own **Q8_0 mmproj** (629,246,976 B; Qwen3-VL tower, 27 blocks, 768 px, `qwen3vl_merger`) for **vision**, on the RTX 3090, **TWO 200,704-token slots** (`--ctx-size 401408 --parallel 2`), **q8_0 K + q8_0 V** under flash attention (34 KiB/token over the 16 full layers = 13,328 MiB pool; **f16 KV needs 25,088 MiB and cannot boot this card**), batch 4096 / **ubatch 2048** (measured CUDA optimum), `--log-verbosity 4`, **MTP OFF** (no head in the file). Boot 22,664 used / 1,461 free; 76.6 t/s single-stream decode, 691.7 t/s prefill at 166k. Cutover 2026-10-17 from Qwen3.5-9B-Uncensored Q6_K (same shape; payload + master CUDA build on disk as rollback). |
|
| Dankclaw | `frank-zealot` | llama.cpp master (0.5.0-dev, commit `5fc4f3c`), CUDA sm_86 build (root systemd unit, relinked) | HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive **Q6_K** (7,359,259,008 B; dense `qwen35` hybrid: 32 layers, 8 full-attention + 24 Gated DeltaNet, 4 KV heads × 256 dim, vocab 248,320, native 262,144, **no MTP tensors in the file**) + the publisher's own **BF16 mmproj** (921,704,448 B) for **vision**, on the RTX 3090, **TWO 200,704-token slots** (`--ctx-size 401408 --parallel 2`), **exact f16 K + f16 V** under flash attention (32 KiB/token over the 8 full layers = 12.25 GiB pool), batch 4096 / **ubatch 2048** (measured CUDA optimum), `--log-verbosity 4`, **MTP OFF** (forced: no `nextn` tensors exist). Priced from the MiMo Q6_K boots (same geometry, same card, same shape): 21,276/2,849 at ubatch 1024, 21,846/2,279 at 2048. Cutover 2026-10-07 (late) from Gemma4-26B-A4B Q4_K_M 1×200,704. All three endpoints route harness **compaction** here. | 7771 |
|
||||||
|
|
||||||
Retired endpoints (`frank-npu`, and every prior runtime) are in
|
Retired endpoints (`frank-npu`, and every prior runtime) are in
|
||||||
the [runbook index](#runbook-index). The full swap history lives in
|
the [runbook index](#runbook-index). The full swap history lives in
|
||||||
@@ -429,89 +429,69 @@ Rollback: revert the swap commit and redeploy — the 27B payload
|
|||||||
halogen 0.1.4 image digest all remain on disk; the ROCmFPX door behind
|
halogen 0.1.4 image digest all remain on disk; the ROCmFPX door behind
|
||||||
that (`scripts/build-rocmfpx.sh`, pin `36e9acd`) is untouched.
|
that (`scripts/build-rocmfpx.sh`, pin `36e9acd`) is untouched.
|
||||||
|
|
||||||
### frank-zealot — llama.cpp (PrismML fork) on the RTX 3090 (Dankclaw, ACTIVE)
|
### frank-zealot — llama.cpp on the RTX 3090 (Dankclaw, ACTIVE)
|
||||||
|
|
||||||
**The PrismML fork build of llama.cpp** (vendor release, `--version` =
|
**llama.cpp master** (0.5.0-dev, commit `5fc4f3c`; CUDA sm_86 build
|
||||||
`0.2.0-dev (build 10754, commit 2459f68b5)`;
|
`/home/dank/GitPackages/llama-master/build-cuda/bin/llama-server`,
|
||||||
`/home/dank/GitPackages/llama-prism/llama-server`) as a **root systemd unit**
|
`GGML_CUDA_FA_ALL_QUANTS=ON`) as a **root systemd unit**
|
||||||
(`scripts/frank-zealot.service`, `relink_unit`ed into
|
(`scripts/frank-zealot.service`, `relink_unit`ed into
|
||||||
`/etc/systemd/system/`), serving `prism-ml/Ternary-Bonsai-2-27B-gguf` at
|
`/etc/systemd/system/`), serving
|
||||||
**PQ2_0** (7,206,168,928 B, sha256 `3907dc16…` = the Hub LFS oid) **plus the
|
`HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive` at **Q6_K**
|
||||||
publisher's own Q8_0 mmproj** (629,246,976 B), both
|
(7,359,259,008 B, sha256 `c0ba7beb…` computed locally — the Hub carries no
|
||||||
`/home/dank/models/Bonsai2-PQ2_0/`, on port 7771. Cutover 2026-10-17 from the
|
LFS oid) **plus the publisher's own BF16 mmproj** (921,704,448 B), both
|
||||||
Qwen3.5-9B-Uncensored Q6_K era (same shape).
|
`/home/dank/models/Qwen35-9B-HauhauCS-Q6K/`, on port 7771. Cutover
|
||||||
|
2026-10-07 (late) from the Gemma4-26B-A4B Q4_K_M 1×200,704 shape (same day).
|
||||||
|
|
||||||
**The runtime is part of the payload identity.** The file is
|
**Architecture: qwen35 dense hybrid** — read from the GGUF's own header, not
|
||||||
`general.file_type 141` (PQ2_0, 2.13 bpw, group 128) with **402 tensors of the
|
the model card: 32 layers, `full_attention_interval = 4` ⇒ **8 full-attention
|
||||||
custom GGML type 142** plus `prism.hadamard.*` metadata (normalized
|
layers (3, 7, 11, …, 31) + 24 Gated DeltaNet linear layers**, 16 attention
|
||||||
Sylvester–Walsh transform, block 1024, 401 named weights, inverse on
|
heads / **4 KV heads** × 256 dim, `ssm` conv_kernel 4 / state_size 128 /
|
||||||
`token_embd`, `gdn_v_grouped`). Stock llama.cpp refuses type 142 at load, and a
|
group_count 16 / time_step_rank 32 / inner_size 4096, native 262,144, vocab
|
||||||
loader that ignored the Hadamard metadata would dequant wrongly — same lock class
|
248,320. Tensor types are Q6_K × 250 + F32 × 177 — standard quants only, so
|
||||||
as the ROCmFPX era. Retargeting the payload without the fork ships an endpoint
|
the stock master build loads it (arch `qwen35` is registered in this build's
|
||||||
that cannot load, so the seam pins both paths.
|
`src/llama-arch.cpp`). **KV accounting:** the pool scales with the 8 full
|
||||||
|
layers only — 8 × 4 × 256 = 8,192 elements/token per cache, so f16 K + f16 V
|
||||||
|
bills **32 KiB/token** = 12.25 GiB at the 401,408 pool; the 24 DeltaNet
|
||||||
|
layers bill a fixed recurrent state per SLOT, not per token, which is exactly
|
||||||
|
why two 200k slots fit where the 26B MoE fit one.
|
||||||
|
|
||||||
**Architecture: qwen35 hybrid** — read from the GGUF's own header: **64
|
**The shape (2026-10-07):** `--ctx-size 401408 --parallel 2` = TWO
|
||||||
blocks**, `full_attention_interval = 4` ⇒ **16 full-attention + 48 Gated
|
|
||||||
DeltaNet layers**, 24 attention heads / **4 KV heads** × 256 dim, embedding
|
|
||||||
5,120, ffn 17,408, `ssm` conv_kernel 4 / state_size 128 / group_count 16 /
|
|
||||||
time_step_rank 48 / inner_size 6,144, native 262,144, vocab 248,320. **KV
|
|
||||||
accounting:** the pool scales with the 16 full layers — 16 × 4 × 256 = 16,384
|
|
||||||
elements/token per cache, so **q8_0 K + q8_0 V bills 34 KiB/token** = 13,328
|
|
||||||
MiB at the 401,408 pool (ledger-confirmed to the MiB), while **f16 KV needs
|
|
||||||
25,088 MiB and cannot boot on a 24,123 MiB card** (measured `cudaMalloc` OOM).
|
|
||||||
The 48 DeltaNet layers bill a fixed recurrent state per SLOT — ~150 MiB each —
|
|
||||||
so pool arithmetic alone under-prices the shape.
|
|
||||||
|
|
||||||
**The shape (2026-10-17):** `--ctx-size 401408 --parallel 2` = TWO
|
|
||||||
conversations of 200,704 (Frank's cap; the harness `contextWindow` quotes
|
conversations of 200,704 (Frank's cap; the harness `contextWindow` quotes
|
||||||
the per-slot number), `--flash-attn on`, **q8_0 K + q8_0 V**, batch 4096 /
|
the per-slot number), `--flash-attn on`, **f16 K + f16 V** (exact KV),
|
||||||
**ubatch 2048** (the measured CUDA optimum carried from the MiMo/Swift A/Bs on
|
batch 4096 / **ubatch 2048** (the measured CUDA optimum: +4.6 % prefill,
|
||||||
this card), `--log-verbosity 4`, `--mmproj` for vision, **speculative decoding
|
decode flat, 616 MiB — MiMo-era A/B on this card), `--log-verbosity 4`,
|
||||||
OFF** (`SPEC_TYPE=none`). Boot: **22,664 MiB used / 1,461 free**; the
|
`--mmproj` for vision, **speculative decoding OFF** (`SPEC_TYPE=none`).
|
||||||
projection (21,439) excludes the projector's 873.10 MiB worst-case, which
|
|
||||||
lands AFTER the fit check — read settled `nvidia-smi`, never the projection.
|
|
||||||
Measured: 76.6 t/s single-stream decode (the 9B ran 94.4), 1,258 t/s prefill
|
|
||||||
at 35k, 691.7 t/s at 166k, 109.4 t/s aggregate across two concurrent streams.
|
|
||||||
The **first request after boot is a warmup artifact** (2.6 t/s prefill / 37.7
|
|
||||||
t/s decode measured) — never report it.
|
|
||||||
|
|
||||||
**Why MTP is off**: the PQ2_0 export carries no MTP head (upstream ships a
|
**Why MTP is off**: it is not a choice — **this Q6_K file carries no
|
||||||
separate `…-CRACK-MTP-GGUF`, +451 MB, for that), and MTP is a property of the
|
`nextn`/`mtp` tensors** (verified from the tensor-name list), and MTP is a
|
||||||
file, not of the flags.
|
property of the file, not of the flags. The publisher card advertises "MTP
|
||||||
|
support" for the base architecture; the quantized export dropped the head.
|
||||||
|
|
||||||
**Vision**: the publisher's own Q8_0 mmproj via `--mmproj` (Qwen3-VL tower: 27
|
**Measured boots** (nvidia-smi, the referee): the deployed boot is
|
||||||
blocks, 768 px, patch 16, merge 2, `qwen3vl_merger`, deepstack). Probe traps
|
**21,436 used / 2,689 free** (ubatch 2048) — the pricing boots were the
|
||||||
|
MiMo-V2.6-Distill-Qwen-9B pair at this exact geometry (**21,276 / 2,849** at
|
||||||
|
ubatch 1024, **21,846 / 2,279** at 2048), so the 415 MiB lighter weights
|
||||||
|
bought back what the projection predicted. The engine ledger confirms the KV
|
||||||
|
law to the MiB: `CUDA0 KV buffer size = 12544.00 MiB` (`K (f16): 6272.00`,
|
||||||
|
`V (f16): 6272.00`), compute buffers 1,136 MiB on CUDA0 + 848 MiB host, the
|
||||||
|
mmproj 879 MiB + 248 MiB. Decode is ubatch-invariant (Swift-era 3090 law). The
|
||||||
|
Q6_K rung costs ~10 % decode vs Q5_K_M (weight bandwidth; MiMo-measured 94.4
|
||||||
|
vs 104.8 t/s).
|
||||||
|
|
||||||
|
**Vision**: the publisher's own BF16 mmproj via `--mmproj` (the model is
|
||||||
|
natively multimodal; the Q6_K file carries no vision tensors). Probe traps
|
||||||
carry over: ≥256 px probe images or the model answers "video", and only the
|
carry over: ≥256 px probe images or the model answers "video", and only the
|
||||||
OpenAI `image_url` content part reaches the model. **New trap:** thinking
|
OpenAI `image_url` content part reaches the model.
|
||||||
tokens count against `max_tokens`, so a vision probe at 64 tokens returns
|
|
||||||
EMPTY `content` with `finish_reason: "length"` — budget ≥512 or the endpoint
|
|
||||||
looks blind while it is only mid-thought.
|
|
||||||
|
|
||||||
**Base alignment**: Bonsai-2 is the censored BASE lineage (the 9B it replaced
|
|
||||||
was uncensored). The CRACK re-export on disk
|
|
||||||
(`/home/dank/models/Bonsai2-CRACK/`, header census proves byte-identical
|
|
||||||
geometry) is a one-line `MODEL_FILE` swap if a refusal ever surfaces.
|
|
||||||
|
|
||||||
**Compaction hub**: `models.yml` routes `compactionModel` for
|
**Compaction hub**: `models.yml` routes `compactionModel` for
|
||||||
`frank-archon`, `frank-dragoon` and `frank-zealot` (the 3090 endpoint) here — 200,704 is the
|
`frank-archon`, `frank-dragoon` and `frank-zealot` (the 3090 endpoint) here — 200,704 is the
|
||||||
only window in the fleet that fits a worst-case compaction input (~170k
|
only window in the fleet that fits a worst-case compaction input (~170k
|
||||||
tokens). With `--parallel 2` a compaction request no longer serializes behind
|
tokens). With `--parallel 2` a compaction request no longer serializes behind
|
||||||
a live generation (the Gemma4 era's `--parallel 1` law). Retrieval through a
|
a live generation (the Gemma4 era's `--parallel 1` law).
|
||||||
25,960-token prompt was verified exact after the swap.
|
|
||||||
|
|
||||||
**Contract law learned at verbosity 4:** a raw `/completion` request prints
|
|
||||||
`failed to parse reasoning content (… parse_reasoning=true)` whenever the
|
|
||||||
model closes a bare prompt with `` — cosmetic
|
|
||||||
(`probe_request.cpp:789`); the `/v1/chat/completions` path parses
|
|
||||||
`reasoning_content` correctly, which is the only path consumers use. Do not
|
|
||||||
lower `VERBOSITY` to silence it: the KV/buffer ledger is what VRAM forensics
|
|
||||||
read.
|
|
||||||
|
|
||||||
Runbook:
|
Runbook:
|
||||||
`serverAppConfigs-docs/LLM/frank-zealot-llama-prism-bonsai2-pq20.md`.
|
`serverAppConfigs-docs/LLM/frank-zealot-llama-qwen35-9b-q6k-2x200704.md`.
|
||||||
Rollback: revert the swap commit — the Qwen3.5-9B Q6_K payload
|
Rollback: revert the swap commit — the Gemma4 payload
|
||||||
(`/home/dank/models/Qwen35-9B-HauhauCS-Q6K/`) with the master CUDA build
|
|
||||||
(`~/GitPackages/llama-master/build-cuda/`), the Gemma4 payload
|
|
||||||
(`/home/dank/models/Gemma4-26B-A4B/`), the MiMo Q6_K payload
|
(`/home/dank/models/Gemma4-26B-A4B/`), the MiMo Q6_K payload
|
||||||
(`/home/dank/models/MiMo-Q6K/`), the Swift payload
|
(`/home/dank/models/MiMo-Q6K/`), the Swift payload
|
||||||
(`/home/dank/models/Swift15-UncIQ3XXS/`) and the Ornith Q8_0 payload
|
(`/home/dank/models/Swift15-UncIQ3XXS/`) and the Ornith Q8_0 payload
|
||||||
@@ -596,8 +576,7 @@ accept 0.7246).
|
|||||||
|
|
||||||
**The KV dtype law (measured 2026-10-11, applied at 4 slots 2026-10-13)**:
|
**The KV dtype law (measured 2026-10-11, applied at 4 slots 2026-10-13)**:
|
||||||
`--kv-cache-dtype` takes ONLY `bf16|fp8` — one dtype for the whole cache, so
|
`--kv-cache-dtype` takes ONLY `bf16|fp8` — one dtype for the whole cache, so
|
||||||
llama.cpp's exact-K/quantized-V pair (the 9B-era frank-zealot ran it; the
|
llama.cpp's exact-K/quantized-V pair (what frank-zealot runs) has NO radiance
|
||||||
Bonsai-2 swap runs q8_0/q8_0) has NO radiance
|
|
||||||
equivalent; the rung under bf16 is fp8 on both halves. Measured per rank from
|
equivalent; the rung under bf16 is fp8 on both halves. Measured per rank from
|
||||||
the two boot ledgers: `kv_attn` (13 layers, 4-token blocks) pages 26.00 → 52.00
|
the two boot ledgers: `kv_attn` (13 layers, 4-token blocks) pages 26.00 → 52.00
|
||||||
KiB, while `kv_qsa_bkey` (13 layers) stays 3.25 KiB at BOTH dtypes (the QSA
|
KiB, while `kv_qsa_bkey` (13 layers) stays 3.25 KiB at BOTH dtypes (the QSA
|
||||||
@@ -1042,31 +1021,6 @@ linked runbooks.
|
|||||||
`Unexpected reasoning effort high` until `high: xhigh` was added on
|
`Unexpected reasoning effort high` until `high: xhigh` was added on
|
||||||
2026-09-16. Halogen accepts the wider set, so the two entries legitimately
|
2026-09-16. Halogen accepts the wider set, so the two entries legitimately
|
||||||
differ.
|
differ.
|
||||||
- **The vision projector is NOT billed in llama.cpp's own fit check.** The
|
|
||||||
engine prints `[mtmd] estimated worst-case memory usage of mmproj is
|
|
||||||
873.10 MiB` and then fits WITHOUT it: frank-zealot's Bonsai-2 boot projected
|
|
||||||
21,439 MiB and settled at 22,664 (2026-10-17). Price a 3090-class shape from
|
|
||||||
settled `nvidia-smi` after a real boot, never from
|
|
||||||
`model + context + compute` — the projector (and any drafter context) lands
|
|
||||||
after `/health` would already have answered. Same failure class as the
|
|
||||||
DSpark drafter OOM.
|
|
||||||
- **The FIRST request after a boot is a warmup artifact.** Measured on
|
|
||||||
Bonsai-2/3090: 2.6 t/s prefill and 37.7 t/s decode on request #1, then
|
|
||||||
1,258 t/s prefill and 54.7 t/s (per stream, two concurrent) on the next — a
|
|
||||||
3× spread on the same shape. Benchmark the second request or later, or the
|
|
||||||
graph-capture cost reads as a model fault.
|
|
||||||
- **Thinking tokens count against `max_tokens`, so a short-budget vision probe
|
|
||||||
reads as blindness.** The Bonsai-2/`image_url` probe at `max_tokens: 64`
|
|
||||||
returned `content: ""` with `finish_reason: "length"` and half a thought in
|
|
||||||
`reasoning_content` — the image HAD reached the model (322 prompt tokens vs
|
|
||||||
42 for the text alone). At 512 tokens the same image answers "Red". Budget
|
|
||||||
≥512 for any thinking model you probe for vision.
|
|
||||||
- **Quantized KV is not the only dtype law a fork build can hide.** Vendor
|
|
||||||
builds carry their own compile options: frank-zealot's PrismML prebuilt
|
|
||||||
served `--cache-type-v q8_0` under flash attention at the exact 34,816
|
|
||||||
B/token (the `GGML_CUDA_FA_ALL_QUANTS` door), so a build decision must be
|
|
||||||
proven by the KV buffer line in the boot ledger, not by the build flags you
|
|
||||||
remember passing.
|
|
||||||
|
|
||||||
**Ops**
|
**Ops**
|
||||||
|
|
||||||
@@ -1138,7 +1092,7 @@ Active:
|
|||||||
| Service | Runbook |
|
| Service | Runbook |
|
||||||
|---------|---------|
|
|---------|---------|
|
||||||
| frank-dragoon (flash-server 0.16.2, abliterated Swift1.5 v2 .hgn + MTP always-on, 2×262,144, vision ON, Dankclaw) | `serverAppConfigs-docs/LLM/frank-dragoon-flash-server-v2-swift15.md` |
|
| frank-dragoon (flash-server 0.16.2, abliterated Swift1.5 v2 .hgn + MTP always-on, 2×262,144, vision ON, Dankclaw) | `serverAppConfigs-docs/LLM/frank-dragoon-flash-server-v2-swift15.md` |
|
||||||
| frank-zealot (llama.cpp PrismML fork, Bonsai-2-27B PQ2_0, 2×200,704 q8_0 KV MTP-off, vision ON, Dankclaw) | `serverAppConfigs-docs/LLM/frank-zealot-llama-prism-bonsai2-pq20.md` |
|
| frank-zealot (llama.cpp CUDA, Qwen3.5-9B-Uncensored Q6_K, 2×200,704 exact f16 KV MTP-off, vision ON, Dankclaw) | `serverAppConfigs-docs/LLM/frank-zealot-llama-qwen35-9b-q6k-2x200704.md` |
|
||||||
| frank-archon (radiance StillDeadcode, publisher Qwen3.8-Flash-Next iq4r .rad, 2×R9700 TP=2, Dankserver) | `serverAppConfigs-docs/LLM/frank-archon-radiance-qwen38-iq4r.md` |
|
| frank-archon (radiance StillDeadcode, publisher Qwen3.8-Flash-Next iq4r .rad, 2×R9700 TP=2, Dankserver) | `serverAppConfigs-docs/LLM/frank-archon-radiance-qwen38-iq4r.md` |
|
||||||
| Dankclaw kernel posture (`amd_iommu=off`) | `serverAppConfigs-docs/LLM/dankclaw-iommu-translation-off.md` |
|
| Dankclaw kernel posture (`amd_iommu=off`) | `serverAppConfigs-docs/LLM/dankclaw-iommu-translation-off.md` |
|
||||||
| Deployment flow + incidents | `serverAppConfigs-docs/LLM/deployment.md` |
|
| Deployment flow + incidents | `serverAppConfigs-docs/LLM/deployment.md` |
|
||||||
@@ -1148,7 +1102,6 @@ Retired (rollback targets and history):
|
|||||||
| Runtime | Host | Window | Runbook |
|
| Runtime | Host | Window | Runbook |
|
||||||
|---------|------|--------|---------|
|
|---------|------|--------|---------|
|
||||||
| radiance Swift1.5-Qwen3.8-Flash-Next GPTQ w4dn8, 3×200,000 fp8-KV slab 25600 (`frank-archon`) | Dankserver | 2026-10-08 → 10-15 (rollback target — `.rad` on disk; owns the slab-slope ladder, KV dtype law, KLD campaign, and every shape law the iq4r swap carried verbatim) | `frank-archon-radiance-swift15-w4dn8.md` |
|
| radiance Swift1.5-Qwen3.8-Flash-Next GPTQ w4dn8, 3×200,000 fp8-KV slab 25600 (`frank-archon`) | Dankserver | 2026-10-08 → 10-15 (rollback target — `.rad` on disk; owns the slab-slope ladder, KV dtype law, KLD campaign, and every shape law the iq4r swap carried verbatim) | `frank-archon-radiance-swift15-w4dn8.md` |
|
||||||
| llama.cpp CUDA (master) Qwen3.5-9B-Uncensored Q6_K, 2×200,704 exact f16 KV MTP-off (`frank-zealot`) | Dankclaw | 2026-10-07 → 10-17 (rollback target — payload + master CUDA build on disk; owns the 32 KiB/token 8-full-layer KV law and the 2→3-slot reslice law) | `frank-zealot-llama-qwen35-9b-q6k-2x200704.md` |
|
|
||||||
| llama.cpp CUDA Gemma4-26B-A4B QAT Q4_K_M, 1×200,704 f16-K/q8_0-V MTP-off (`frank-zealot`) | Dankclaw | 2026-10-07 → 10-07 (same-day swap; rollback target — payload on disk; owns the `attention_k_eq_v` pair-billing KV law and the gemma4-assistant drafter-cost boots) | `frank-zealot-llama-gemma4-q4km-200704.md` |
|
| llama.cpp CUDA Gemma4-26B-A4B QAT Q4_K_M, 1×200,704 f16-K/q8_0-V MTP-off (`frank-zealot`) | Dankclaw | 2026-10-07 → 10-07 (same-day swap; rollback target — payload on disk; owns the `attention_k_eq_v` pair-billing KV law and the gemma4-assistant drafter-cost boots) | `frank-zealot-llama-gemma4-q4km-200704.md` |
|
||||||
| ROCmFPX llama.cpp fork Qwen3.8-27B Uncensored Q6_0_ROCMFPX_AGENT + MTP (`frank-dragoon`) | Dankclaw | 2026-10-03 → 10-05 (rollback target, payload + fork build on disk) | `frank-dragoon-rocmfpx-q6agent-uncensored-mtp.md` |
|
| ROCmFPX llama.cpp fork Qwen3.8-27B Uncensored Q6_0_ROCMFPX_AGENT + MTP (`frank-dragoon`) | Dankclaw | 2026-10-03 → 10-05 (rollback target, payload + fork build on disk) | `frank-dragoon-rocmfpx-q6agent-uncensored-mtp.md` |
|
||||||
| tcclaviger vLLM fork Qwen3.8-Flash-Next-Uncensored FP8, TP=2, shape G (`frank-archon`) | Dankserver | 2026-09-29 → 10-05 (rollback target — tag `frank-archon-vllm-shapeG-20261003`; trio + env lore in the tag, image in rootless storage) | `dankserver-qwen38-fp8-expert-offload-tuning.md` |
|
| tcclaviger vLLM fork Qwen3.8-Flash-Next-Uncensored FP8, TP=2, shape G (`frank-archon`) | Dankserver | 2026-09-29 → 10-05 (rollback target — tag `frank-archon-vllm-shapeG-20261003`; trio + env lore in the tag, image in rootless storage) | `dankserver-qwen38-fp8-expert-offload-tuning.md` |
|
||||||
|
|||||||
@@ -1,16 +1,5 @@
|
|||||||
# Server App Configs
|
# Server App Configs
|
||||||
|
|
||||||
### AI Disclosures:
|
|
||||||
|
|
||||||
- Slop rating: 2/5 - Actively using, actively de-slopping, **repository mostly human owned**, lacks formal process.
|
|
||||||
- Completeness: Unfinished, planning planned, no plan yet
|
|
||||||
- Datacenter model/spend: Less than $20 of Deepseek 4.1 Flash and GLM-5.3-Flash
|
|
||||||
- Local model: Qwen 3.8 Flash Next
|
|
||||||
|
|
||||||
### slop rating of 2 or lower indicates human reading is a worthwhile exercise, and that Frank has read the code and knows the architecture.
|
|
||||||
### slop rating of 2 indicates that while this project is human owned, no human contribution process exists and/or release is agentically driven.
|
|
||||||
|
|
||||||
|
|
||||||
The single repository for the two homelab servers: the Podman container
|
The single repository for the two homelab servers: the Podman container
|
||||||
stacks **and** the LLM inference fleet. One repo, one checkout per host,
|
stacks **and** the LLM inference fleet. One repo, one checkout per host,
|
||||||
one deploy script.
|
one deploy script.
|
||||||
|
|||||||
+16
-19
@@ -1222,26 +1222,23 @@ deploy_llm_dragoon() {
|
|||||||
wait_for_health frank-dragoon http://127.0.0.1:7770/health 1200
|
wait_for_health frank-dragoon http://127.0.0.1:7770/health 1200
|
||||||
}
|
}
|
||||||
|
|
||||||
# deploy_llm_zealot — frank-zealot is llama.cpp (PrismML fork build) on the
|
# deploy_llm_zealot — frank-zealot is llama.cpp (master build, CUDA sm_86) on
|
||||||
# RTX 3090 as a ROOT unit: the runtime is a native binary tree under
|
# the RTX 3090 as a ROOT unit: the runtime is a native binary tree under
|
||||||
# ~/GitPackages/llama-prism (vendor release build 10754, commit 2459f68b5 —
|
# ~/GitPackages/llama-master/build-cuda, so there is no container image and
|
||||||
# the ONLY loader that registers the payload's custom tensor type 142 and
|
# no generated unit to avoid. relink_unit points
|
||||||
# reads its prism.hadamard.* metadata), so there is no container image and no
|
|
||||||
# generated unit to avoid. relink_unit points
|
|
||||||
# /etc/systemd/system/frank-zealot.service at the repo file and boot
|
# /etc/systemd/system/frank-zealot.service at the repo file and boot
|
||||||
# persistence is that unit's [Install] section.
|
# persistence is that unit's [Install] section.
|
||||||
#
|
#
|
||||||
# It is a SEPARATE endpoint on port 7771; frank-dragoon keeps 7770. The 3090 is
|
# It is a SEPARATE endpoint on port 7771; frank-dragoon keeps 7770. The 3090 is
|
||||||
# not shared: frank-dragoon's engine runs on the gfx1151 iGPU.
|
# not shared: frank-dragoon's engine runs on the gfx1151 iGPU.
|
||||||
LLM_ZEALOT_MODEL_FILE="${LLM_ZEALOT_MODEL_FILE:-/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-PQ2_0.gguf}"
|
LLM_ZEALOT_MODEL_FILE="${LLM_ZEALOT_MODEL_FILE:-/home/dank/models/Qwen35-9B-HauhauCS-Q6K/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf}"
|
||||||
LLM_ZEALOT_RUNTIME="${LLM_ZEALOT_RUNTIME:-/home/dank/GitPackages/llama-prism/llama-server}"
|
LLM_ZEALOT_RUNTIME="${LLM_ZEALOT_RUNTIME:-/home/dank/GitPackages/llama-master/build-cuda/bin/llama-server}"
|
||||||
# The projector IS the vision capability here: the Bonsai-2 text file carries
|
# The projector IS the vision capability here: the model is natively
|
||||||
# no vision tensors, so the publisher's own mmproj (Qwen3-VL tower, 27 blocks,
|
# multimodal and the Q6_K file carries no vision tensors — the publisher ships
|
||||||
# 768 px, qwen3vl_merger, 629,246,976 B) is the whole image path — a deploy
|
# its own BF16 projector in the same repo, so a deploy that starts without
|
||||||
# that starts without it silently ships a text-only endpoint. Checked
|
# this file silently ships a text-only endpoint. Checked unconditionally, like
|
||||||
# unconditionally, like frank-dragoon's. Its 873.10 MiB worst-case VRAM lands
|
# frank-dragoon's.
|
||||||
# AFTER the engine's fit check, so it is not inside the q8_0 budget.
|
LLM_ZEALOT_MMPROJ="${LLM_ZEALOT_MMPROJ:-/home/dank/models/Qwen35-9B-HauhauCS-Q6K/mmproj-Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-BF16.gguf}"
|
||||||
LLM_ZEALOT_MMPROJ="${LLM_ZEALOT_MMPROJ:-/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-mmproj-Q8_0.gguf}"
|
|
||||||
|
|
||||||
deploy_llm_zealot() {
|
deploy_llm_zealot() {
|
||||||
# Refuse rather than restart-loop: a unit whose runtime or payload is
|
# Refuse rather than restart-loop: a unit whose runtime or payload is
|
||||||
@@ -1249,15 +1246,15 @@ deploy_llm_zealot() {
|
|||||||
# endpoint dark with nothing in the log to say why.
|
# endpoint dark with nothing in the log to say why.
|
||||||
if [[ ! -x "$LLM_ZEALOT_RUNTIME" ]]; then
|
if [[ ! -x "$LLM_ZEALOT_RUNTIME" ]]; then
|
||||||
echo "ERROR: llama.cpp runtime absent at $LLM_ZEALOT_RUNTIME" >&2
|
echo "ERROR: llama.cpp runtime absent at $LLM_ZEALOT_RUNTIME" >&2
|
||||||
echo "frank-zealot: fetch the PrismML fork release build (build 10754," >&2
|
echo "frank-zealot: build it (cmake -B build-cuda -DGGML_CUDA=ON" >&2
|
||||||
echo "frank-zealot: commit 2459f68b5) into ~/GitPackages/llama-prism first —" >&2
|
echo "frank-zealot: -DCMAKE_CUDA_ARCHITECTURES=86 -DCMAKE_CUDA_HOST_COMPILER=/usr/bin/gcc-13" >&2
|
||||||
echo "frank-zealot: stock llama.cpp refuses the payload's custom tensor type 142." >&2
|
echo "frank-zealot: && cmake --build build-cuda --target llama-server) first." >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
for f in "$LLM_ZEALOT_MODEL_FILE" "$LLM_ZEALOT_MMPROJ"; do
|
for f in "$LLM_ZEALOT_MODEL_FILE" "$LLM_ZEALOT_MMPROJ"; do
|
||||||
if [[ ! -f "$f" ]]; then
|
if [[ ! -f "$f" ]]; then
|
||||||
echo "ERROR: frank-zealot payload file absent at $f" >&2
|
echo "ERROR: frank-zealot payload file absent at $f" >&2
|
||||||
echo "frank-zealot: run scripts/download-frank-zealot-bonsai2.sh first;" >&2
|
echo "frank-zealot: run scripts/download-frank-zealot.sh first;" >&2
|
||||||
echo "frank-zealot: refusing to start a unit that cannot load." >&2
|
echo "frank-zealot: refusing to start a unit that cannot load." >&2
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
+43
-53
@@ -1,69 +1,59 @@
|
|||||||
# frank-zealot — llama.cpp (PrismML fork build, CUDA) serving
|
# frank-zealot — llama.cpp (master, CUDA sm_86) serving
|
||||||
# prism-ml/Ternary-Bonsai-2-27B-gguf at PQ2_0 on the RTX 3090, :7771.
|
# HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive at Q6_K on the RTX 3090,
|
||||||
|
# :7771.
|
||||||
#
|
#
|
||||||
# 2026-10-17 (Frank): swap from Qwen3.5-9B-Uncensored Q6_K to the Bonsai-2-27B
|
# 2026-10-07 (Frank): swap from Gemma4-26B-A4B QAT Q4_K_M (one 200,704 slot)
|
||||||
# ternary checkpoint at the SAME shape Frank asked for — TWO 200,704-token
|
# to Qwen3.5-9B Q6_K at TWO 200,704-token conversations, EXACT (f16) KV,
|
||||||
# conversations — with q8_0 K + q8_0 V (f16 is arithmetically impossible here,
|
# MTP disabled (SPEC_TYPE=none), log verbosity 4.
|
||||||
# see the KV law), MTP off (the file carries no nextn/mtp tensors), verbosity 4.
|
|
||||||
#
|
#
|
||||||
# THE RUNTIME IS A LOCK, NOT A PREFERENCE. The file is general.file_type 141
|
# Architecture — read from the GGUF's own header (HTTP range read, not the
|
||||||
# with 402 tensors of the CUSTOM GGML type 142 (pq2_0) plus prism.hadamard.*
|
# model card): arch qwen35, 32 layers, dense 9B, full_attention_interval 4
|
||||||
# metadata (normalized-Sylvester-Walsh transform, block 1024, 401 named
|
# ⇒ 8 full-attention layers (3,7,11,...,31) + 24 Gated DeltaNet linear layers,
|
||||||
# weights, inverse on token_embd, gdn_v_grouped). Stock llama.cpp refuses type
|
# 16 attention heads / 4 KV heads × 256 dim, ssm conv_kernel 4 / state_size
|
||||||
# 142 at load; only the PrismML fork registers the type AND reads the Hadamard
|
# 128 / group_count 16 / time_step_rank 32 / inner_size 4096, native 262,144,
|
||||||
# metadata. The vendor prebuilt build 10754 (commit 2459f68b5) is what every
|
# vocab 248,320, file_type 18 (Q6_K). Tensor-type histogram: Q6_K×250 +
|
||||||
# number in this file was measured on; sha256 12ae5baba033d8cd…
|
# F32×177 — standard types only, so the stock master build loads it (no
|
||||||
LLAMA_BIN=/home/dank/GitPackages/llama-prism/llama-server
|
# custom-quant lock-in like the ROCmFPX era). NO nextn/mtp tensors exist, so
|
||||||
MODEL_FILE=/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-PQ2_0.gguf
|
# in-file MTP is impossible here; SPEC_TYPE=none is forced by the payload.
|
||||||
MMPROJ_FILE=/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-mmproj-Q8_0.gguf
|
|
||||||
# The CRACK re-export (dealignai/Bonsai-2-27B-Ternary-CRACK-GGUF, uncensored,
|
|
||||||
# already on disk at /home/dank/models/Bonsai2-CRACK/) is a ONE-LINE swap: the
|
|
||||||
# header census proves byte-identical geometry (851 tensors, same
|
|
||||||
# {pq2_0:402, f32:353, bf16:96} histogram, 64 blocks, vocab 248,320, same
|
|
||||||
# 8,952-char chat template) and the official file's sha256 is the Hub LFS oid.
|
|
||||||
# Bonsai-2 is the BASE (censored) Qwen3.8 family; if a compaction or subagent
|
|
||||||
# request ever comes back with a refusal, point MODEL_FILE at the CRACK file
|
|
||||||
# and restart — the VRAM ledger below does not move.
|
|
||||||
#
|
#
|
||||||
# Served model id — the harness/family name. The SERVICE, unit, scripts and
|
# KV rate law: 8 full layers × 4 KV heads × 256 dim = 8,192 elements per
|
||||||
# this env file keep the frank-zealot name; only the alias on the wire is the
|
# token per cache. f16 K + f16 V = 32,768 B/token = 32 KiB/token, so the
|
||||||
# model id. Consumers that key on the served id: OpenWebUI (model row,
|
# 401,408-token pool is 12.25 GiB. The 24 DeltaNet layers cost a fixed
|
||||||
# access_grant, api_configs model_ids) and the harness models.yml.
|
# recurrent state per SLOT (not per token) — that is why two 200k slots fit
|
||||||
|
# where the 26B MoE fit only one.
|
||||||
|
#
|
||||||
|
# Feasibility comes from the predecessor's MEASURED boots, not a formula:
|
||||||
|
# MiMo-V2.6-Distill-Qwen-9B (identical qwen35 geometry, 7,793,710,624 B) at
|
||||||
|
# 2×200,704 f16 K + f16 V measured 21,276 used / 2,849 free at ubatch 1024
|
||||||
|
# and 21,846 / 2,279 at ubatch 2048. This file is 415 MiB lighter in weights,
|
||||||
|
# its BF16 mmproj is 3 MiB heavier ⇒ projected ~21,430 used / ~2,700 free.
|
||||||
|
# The verbosity-4 boot ledger is the referee.
|
||||||
|
#
|
||||||
|
# Ubatch 2048 is the measured CUDA optimum (measured on the MiMo predecessor
|
||||||
|
# at this exact arch + shape: +4.6 % prefill at 8.9k depth, decode flat, cost
|
||||||
|
# 616 MiB). 1024 is the fallback rung if the boot lands under the 2 GiB floor.
|
||||||
|
LLAMA_BIN=/home/dank/GitPackages/llama-master/build-cuda/bin/llama-server
|
||||||
|
MODEL_FILE=/home/dank/models/Qwen35-9B-HauhauCS-Q6K/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf
|
||||||
|
MMPROJ_FILE=/home/dank/models/Qwen35-9B-HauhauCS-Q6K/mmproj-Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-BF16.gguf
|
||||||
|
# Served model id — the harness/family name (Protoss rename completed to the
|
||||||
|
# wire 2026-10-09: harness ids + homepage cards 2026-10-08, /v1/models aliases
|
||||||
|
# this day). The SERVICE, unit, scripts and this env file keep the
|
||||||
|
# frank-zealot name; only the alias on the wire changed. Consumers that
|
||||||
|
# key on the served id: OpenWebUI (model row, access_grant, api_configs
|
||||||
|
# model_ids) and the harness models.yml.
|
||||||
ALIAS=frank-zealot
|
ALIAS=frank-zealot
|
||||||
BIND_ADDR=0.0.0.0
|
BIND_ADDR=0.0.0.0
|
||||||
LISTEN_PORT=7771
|
LISTEN_PORT=7771
|
||||||
# CTX_SIZE is the POOL llama.cpp divides across slots: 401,408 / 2 = 200,704
|
# CTX_SIZE is the POOL llama.cpp divides across slots: 401,408 / 2 = 200,704
|
||||||
# per conversation. MUST stay divisible by PARALLEL (the seam enforces it) and
|
# per conversation. MUST stay divisible by PARALLEL (the seam enforces it) and
|
||||||
# the harness contextWindow quotes the PER-SLOT number — a longer prompt is
|
# the harness contextWindow quotes the PER-SLOT number — a longer prompt is
|
||||||
# answered with a 400, never truncated. The model's native window is 262,144;
|
# answered with a 400, never truncated.
|
||||||
# 2 × 262,144 at q8_0 projects 25,758 MiB and does NOT fit this card (measured
|
|
||||||
# f16 analogue: 41,118). One 262,144 slot fits with 5,995 MiB free but
|
|
||||||
# serializes compaction, so the pair stays.
|
|
||||||
CTX_SIZE=401408
|
CTX_SIZE=401408
|
||||||
PARALLEL=2
|
PARALLEL=2
|
||||||
BATCH_SIZE=4096
|
BATCH_SIZE=4096
|
||||||
UBATCH_SIZE=2048
|
UBATCH_SIZE=2048
|
||||||
# KV law (from the GGUF header, then confirmed by the boot ledger): 16
|
CACHE_TYPE_K=f16
|
||||||
# full-attention layers (full_attention_interval 4 over 64 blocks) × 4 KV heads
|
CACHE_TYPE_V=f16
|
||||||
# × 256 dim = 16,384 elements per token per cache. q8_0 bills 17,408 B per
|
|
||||||
# cache ⇒ 34,816 B/token = 34 KiB, so the 401,408 pool is 13,328.00 MiB — the
|
|
||||||
# ledger said exactly that. f16 would bill 25,088 MiB and the boot DIES:
|
|
||||||
# `cudaMalloc failed: out of memory` on the 25,088.00 MiB request, engine fit
|
|
||||||
# projection 33,198 vs 23,558 free. The 48 DeltaNet layers bill a fixed
|
|
||||||
# recurrent state per SLOT — ~150 MiB each (context 13,627 − KV 13,328 = 299
|
|
||||||
# for two slots), which is why pool arithmetic alone under-prices the shape.
|
|
||||||
CACHE_TYPE_K=q8_0
|
|
||||||
CACHE_TYPE_V=q8_0
|
|
||||||
# Boot ledger (2026-10-17, this exact shape, nvidia-smi settled):
|
|
||||||
# 22,664 MiB used / 1,461 MiB free of 24,123
|
|
||||||
# fit projection 21,439 = 6,539 model + 13,627 context + 1,272 compute
|
|
||||||
# the mtmd projector's 873.10 MiB worst-case is NOT inside that projection —
|
|
||||||
# it lands after the fit check, which is the whole difference between
|
|
||||||
# "2.6 GiB free on paper" and 1.4 GiB free in reality. Watch it.
|
|
||||||
# Fallback rung if the margin is ever eaten (desktop, co-tenant): q4_0 KV
|
|
||||||
# measured 16,392 used / 7,733 free at the same 2 × 200,704.
|
|
||||||
# 1024 is the ubatch fallback (−616 MiB, measured on the 9B predecessor at
|
|
||||||
# this card/arch; 2048 was the measured CUDA optimum, +4.6 % prefill).
|
|
||||||
SPEC_TYPE=none
|
SPEC_TYPE=none
|
||||||
NGL=99
|
NGL=99
|
||||||
# Log verbosity threshold (llama.cpp -lv). 4 = debug: KV layout, buffer sizes
|
# Log verbosity threshold (llama.cpp -lv). 4 = debug: KV layout, buffer sizes
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[Unit]
|
[Unit]
|
||||||
Description=llama.cpp (PrismML build 10754) Ternary-Bonsai-2-27B PQ2_0 GGUF (qwen35 hybrid, 2x200704 slots, q8_0 K+V, MTP off, mmproj vision) on the RTX 3090 (dankclaw, frank-zealot)
|
Description=llama.cpp Qwen3.5-9B-Uncensored-HauhauCS-Aggressive Q6_K GGUF (qwen35 hybrid, 2x200704 slots, f16 K+V, MTP off, mmproj vision) on the RTX 3090 (dankclaw, frank-zealot)
|
||||||
After=network-online.target
|
After=network-online.target
|
||||||
Wants=network-online.target
|
Wants=network-online.target
|
||||||
|
|
||||||
|
|||||||
@@ -1,30 +1,28 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Serve prism-ml/Ternary-Bonsai-2-27B (PQ2_0 ternary quant) as frank-zealot on
|
# Serve HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive (Q6_K) as
|
||||||
# Dankclaw's RTX 3090 via llama.cpp (PrismML vendor build 10754, CUDA sm_86).
|
# frank-zealot on Dankclaw's RTX 3090 via llama.cpp (master build, CUDA sm_86).
|
||||||
#
|
#
|
||||||
# 2026-10-17 (Frank): Bonsai-2 PQ2_0 swap at TWO 200,704-token conversations
|
# 2026-10-07 (Frank): Qwen3.5-9B swap at TWO 200,704-token conversations
|
||||||
# (--ctx-size 401408 --parallel 2) with q8_0 K + q8_0 V — f16 KV does not fit
|
# (--ctx-size 401408 --parallel 2) with EXACT f16 KV — the 9B rung frees the
|
||||||
# this geometry: the engine's own fit projected 33,198 MiB against 23,558 free
|
# room the 26B MoE Gemma4 shape lacked, so quantized V retires. MTP stays off:
|
||||||
# and cudaMalloc failed on the 25,088 MiB pool. MTP stays off: this GGUF
|
# this GGUF carries no MTP tensors at all (verified from its tensor-name
|
||||||
# carries no MTP tensors (verified from its tensor-name list). Verbosity 4
|
# list), so there is no in-file head to draft with. Verbosity 4 ships so the
|
||||||
# ships so the VRAM-fit forensics (KV layout, buffer sizes, graph capture)
|
# VRAM-fit forensics (KV layout, buffer sizes, graph capture) land in the journal.
|
||||||
# land in the journal.
|
|
||||||
#
|
#
|
||||||
# Architecture: qwen35 — 27B, 64 blocks with full_attention_interval 4 (16
|
# Architecture: qwen35 — dense 9B, 32 layers with full_attention_interval 4
|
||||||
# full-attention layers + 48 Gated DeltaNet linear layers), 24 heads / 4 KV
|
# (8 full-attention layers at 3,7,...,31 + 24 Gated DeltaNet linear layers),
|
||||||
# heads × 256 dim, native 262,144, vocab 248,320. The KV pool scales with the
|
# 16 heads / 4 KV heads × 256 dim, native 262,144, vocab 248,320. The KV pool
|
||||||
# 16 full layers: 34 KiB/token at q8_0 K + q8_0 V (13,328 MiB at the 401,408
|
# scales with the 8 full layers: 32 KiB/token at f16 K + f16 V (12.25 GiB at
|
||||||
# pool); the DeltaNet layers cost a fixed recurrent state per SLOT (~150 MiB —
|
# the 401,408 pool); the DeltaNet layers cost a fixed recurrent state per
|
||||||
# boot-ledger context minus KV). Boot ledger: 22,664 used / 1,461 free, with
|
# slot. Feasibility is priced from the MiMo-V2.6-Distill-Qwen-9B boots (same
|
||||||
# the Q8_0 projector's 873 MiB landing AFTER the engine's fit projection.
|
# geometry, same card, same shape): 21,276/2,849 at ubatch 1024, 21,846/2,279
|
||||||
# The runtime is a hard lock, not a preference: the file carries 402 tensors
|
# at ubatch 2048 — the boot ledger, not arithmetic, is the referee.
|
||||||
# of custom GGML type 142 plus prism.hadamard.* metadata, which only the
|
# Vision comes from the publisher's own BF16 projector (the model is natively
|
||||||
# vendor build registers — stock llama.cpp refuses it at load.
|
# multimodal), so --mmproj is what gives this endpoint eyes; MMPROJ_FILE="" is
|
||||||
# Vision comes from the publisher's Q8_0 projector, so --mmproj is what gives
|
# the documented text-only opt-out.
|
||||||
# this endpoint eyes; MMPROJ_FILE="" is the documented text-only opt-out.
|
|
||||||
#
|
#
|
||||||
# Sampling: llama.cpp takes it per request (the fleet harness sends the file's
|
# Sampling: llama.cpp takes it per request (the fleet harness sends the
|
||||||
# own template defaults from models.yml: thinking temp 1.0 / top_p 0.95 / top_k 20).
|
# publisher recipe from models.yml: thinking temp 0.6 / top_p 0.95 / top_k 20).
|
||||||
#
|
#
|
||||||
# Tunables come from frank-zealot.env unless FRANK_ZEALOT_ENV_FILE overrides.
|
# Tunables come from frank-zealot.env unless FRANK_ZEALOT_ENV_FILE overrides.
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
@@ -39,8 +37,8 @@ if [[ -f "$ENV_FILE" ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# --- defaults (used when the env file does not set them) -------------------
|
# --- defaults (used when the env file does not set them) -------------------
|
||||||
: "${LLAMA_BIN:=/home/dank/GitPackages/llama-prism/llama-server}"
|
: "${LLAMA_BIN:=/home/dank/GitPackages/llama-master/build-cuda/bin/llama-server}"
|
||||||
: "${MODEL_FILE:=/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-PQ2_0.gguf}"
|
: "${MODEL_FILE:=/home/dank/models/Qwen35-9B-HauhauCS-Q6K/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-Q6_K.gguf}"
|
||||||
: "${ALIAS:=frank-zealot}"
|
: "${ALIAS:=frank-zealot}"
|
||||||
: "${BIND_ADDR:=0.0.0.0}"
|
: "${BIND_ADDR:=0.0.0.0}"
|
||||||
: "${LISTEN_PORT:=7771}"
|
: "${LISTEN_PORT:=7771}"
|
||||||
@@ -56,20 +54,19 @@ fi
|
|||||||
# throughput-neutral at a fixed ubatch.
|
# throughput-neutral at a fixed ubatch.
|
||||||
: "${BATCH_SIZE:=4096}"
|
: "${BATCH_SIZE:=4096}"
|
||||||
: "${UBATCH_SIZE:=2048}"
|
: "${UBATCH_SIZE:=2048}"
|
||||||
# Quantized KV: q8_0 K + q8_0 V — the only pair that funds 2 × 200,704 on this
|
# Exact (unquantized) KV: f16 K + f16 V, restoring the MiMo-era contract that
|
||||||
# card. 34 KiB/token at this geometry (16 full-attention layers × 4 KV heads ×
|
# the 26B Gemma4 shape could not afford. 32 KiB/token at this geometry
|
||||||
# 256 dim); 13,328 MiB at the 401,408 pool. f16 measured OOM; q4_0 is the
|
# (8 full-attention layers × 4 KV heads × 256 dim); 12.25 GiB at the 401,408
|
||||||
# fallback rung (16,392 used / 7,733 free). Explicit either way so the contract
|
# pool. Explicit either way so the contract is visible in the argv, and
|
||||||
# is visible in the argv, and --flash-attn stays required for quantized V
|
# --flash-attn stays required for any quantized-V fallback (q8_0 = llama.cpp's
|
||||||
# (no true fp8 KV dtype exists in this build).
|
# FP8 class; no true fp8 KV dtype exists in this build).
|
||||||
: "${CACHE_TYPE_K:=q8_0}"
|
: "${CACHE_TYPE_K:=f16}"
|
||||||
: "${CACHE_TYPE_V:=q8_0}"
|
: "${CACHE_TYPE_V:=f16}"
|
||||||
# Speculative decoding is OFF: this PQ2_0 file carries NO nextn/mtp tensors, so
|
# Speculative decoding is OFF: this Q6_K file carries NO nextn/mtp tensors, so
|
||||||
# there is no in-file head (the law: MTP is a property of the file, not of the
|
# there is no in-file head (the law: MTP is a property of the file, not of the
|
||||||
# flags). SPEC_TYPE=none strips BOTH speculative flags (flags move as a set);
|
# flags). SPEC_TYPE=none strips BOTH speculative flags (flags move as a set);
|
||||||
# an MTP-bearing CRACK re-export exists upstream (ManniX-ITA, +451 MB) if
|
# naming a drafter requires SPEC_DRAFT_FILE alongside SPEC_TYPE — the Gemma4
|
||||||
# decode ever needs it — that is a new payload with its own VRAM bill, never a
|
# assistant on disk is arch gemma4-assistant and cannot drafter-match qwen35.
|
||||||
# flag flip on this file.
|
|
||||||
: "${SPEC_TYPE:=none}"
|
: "${SPEC_TYPE:=none}"
|
||||||
: "${SPEC_DRAFT_N_MAX:=3}"
|
: "${SPEC_DRAFT_N_MAX:=3}"
|
||||||
: "${SPEC_DRAFT_FILE:=}"
|
: "${SPEC_DRAFT_FILE:=}"
|
||||||
@@ -80,7 +77,7 @@ fi
|
|||||||
: "${VERBOSITY:=3}"
|
: "${VERBOSITY:=3}"
|
||||||
# Vision projector. No colon on purpose: an explicitly empty value means
|
# Vision projector. No colon on purpose: an explicitly empty value means
|
||||||
# "text-only, on purpose" and must NOT be replaced by the default path.
|
# "text-only, on purpose" and must NOT be replaced by the default path.
|
||||||
: "${MMPROJ_FILE=/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-mmproj-Q8_0.gguf}"
|
: "${MMPROJ_FILE=/home/dank/models/Qwen35-9B-HauhauCS-Q6K/mmproj-Qwen3.5-9B-Uncensored-HauhauCS-Aggressive-BF16.gguf}"
|
||||||
|
|
||||||
# Fail loudly rather than half-loading: a missing file is a download that
|
# Fail loudly rather than half-loading: a missing file is a download that
|
||||||
# has not finished, and Restart=always would turn it into a crash loop that
|
# has not finished, and Restart=always would turn it into a crash loop that
|
||||||
|
|||||||
@@ -43,10 +43,8 @@ As of 2026-10-07 the picker exposes **exactly one model: `frank-zealot`**.
|
|||||||
| 2 | `http://host.containers.internal:7771/v1` | yes | `frank-zealot` | llama.cpp CUDA (RTX 3090, 2×200,704) | Dankclaw |
|
| 2 | `http://host.containers.internal:7771/v1` | yes | `frank-zealot` | llama.cpp CUDA (RTX 3090, 2×200,704) | Dankclaw |
|
||||||
|
|
||||||
The `model` table carries exactly one decoration row, `frank-zealot`
|
The `model` table carries exactly one decoration row, `frank-zealot`
|
||||||
(context length 200,704 = the per-slot window; description since 2026-10-17:
|
(context length 200,704 = the per-slot window; description: Qwen3.5-9B
|
||||||
Ternary-Bonsai-2-27B PQ2_0 + Q8_0 vision mmproj — the row's `description` is
|
Q6_K + BF16 vision mmproj).
|
||||||
live DB state, so a payload swap must re-key it in the database too, not only
|
|
||||||
in the repo).
|
|
||||||
|
|
||||||
A third gate sits *after* the table, and it is the one that bites family
|
A third gate sits *after* the table, and it is the one that bites family
|
||||||
accounts (2026-10-07): a model row is only visible to a non-admin user when
|
accounts (2026-10-07): a model row is only visible to a non-admin user when
|
||||||
|
|||||||
@@ -452,8 +452,7 @@ access is decided entirely by GROUP MEMBERSHIP consumed downstream —
|
|||||||
- `Non-Admin Users` = the plain-user marker group (precedents: qa-e2e, and
|
- `Non-Admin Users` = the plain-user marker group (precedents: qa-e2e, and
|
||||||
every human account).
|
every human account).
|
||||||
- **The human-user template** (ridley, kassie, alex, artem, kirby, ry, nic,
|
- **The human-user template** (ridley, kassie, alex, artem, kirby, ry, nic,
|
||||||
debo, freya, mitch, eric — mitch (pk 22) and eric (pk 23) created
|
debo, freya — kirby/ry/nic/debo/freya (pk 17–21) created 2026-10-09, kassie
|
||||||
2026-10-15, kirby/ry/nic/debo/freya (pk 17–21) created 2026-10-09, kassie
|
|
||||||
and alex created 2026-10-08, artem (pk 16) created 2026-10-07): `username` +
|
and alex created 2026-10-08, artem (pk 16) created 2026-10-07): `username` +
|
||||||
`<user>@franksdank.cloud` + display name +
|
`<user>@franksdank.cloud` + display name +
|
||||||
`is_active=True` + the password set via `set_password`, membership in
|
`is_active=True` + the password set via `set_password`, membership in
|
||||||
|
|||||||
@@ -1,174 +0,0 @@
|
|||||||
---
|
|
||||||
type: reference
|
|
||||||
title: "frank-zealot on Dankclaw — llama.cpp (PrismML fork), Bonsai-2-27B PQ2_0, 2 x 200704, q8_0 KV (ACTIVE)"
|
|
||||||
description: "The ACTIVE frank-zealot runbook (since 2026-10-17) — the PrismML fork build of llama.cpp serving prism-ml/Ternary-Bonsai-2-27B-gguf at PQ2_0 on the RTX 3090: two conversations of 200,704 tokens with q8_0 K + q8_0 V (f16 KV does not fit this card at this window), vision through the publisher's Q8_0 Qwen3-VL projector, MTP impossible (no tensors in the file), and the measured four-arm VRAM census that priced the shape."
|
|
||||||
tags:
|
|
||||||
- llm
|
|
||||||
- frank-zealot
|
|
||||||
- dankclaw
|
|
||||||
- llama-cpp
|
|
||||||
- gguf
|
|
||||||
- rtx3090
|
|
||||||
timestamp: 2026-10-17
|
|
||||||
---
|
|
||||||
|
|
||||||
# frank-zealot — llama.cpp (PrismML) Bonsai-2-27B PQ2_0, 2 × 200,704, q8_0 KV
|
|
||||||
|
|
||||||
Live since 2026-10-17, replacing the
|
|
||||||
[[frank-zealot-llama-qwen35-9b-q6k-2x200704]] era (Qwen3.5-9B Q6_K, exact f16
|
|
||||||
KV, same 2 × 200,704 shape). The trade: the ternary 27B costs ~3.4× the weights
|
|
||||||
of the 9B and buys a 3× larger, stronger base at the SAME window contract —
|
|
||||||
paid for by quantizing KV (f16 KV is arithmetically impossible for this
|
|
||||||
payload on this card, measured below).
|
|
||||||
|
|
||||||
## Identity
|
|
||||||
|
|
||||||
| | |
|
|
||||||
|---|---|
|
|
||||||
| Host / device | Dankclaw (192.168.0.143), RTX 3090, 24,576 MiB (24,123 MiB visible to the engine) |
|
|
||||||
| Endpoint | `http://192.168.0.143:7771` — served model id **`frank-zealot`** (`ALIAS`), `/v1` OpenAI surface |
|
|
||||||
| Runtime | **PrismML fork build** `/home/dank/GitPackages/llama-prism/llama-server` — vendor release, `--version` = `0.2.0-dev (build 10754, commit 2459f68b5)`, sha256 `12ae5baba033d8cd…`. NOT a preference: see *Why the fork* |
|
|
||||||
| Unit | root systemd `frank-zealot.service` ([`scripts/frank-zealot.service`](../../scripts/frank-zealot.service)), `User=dank`, `Restart=on-failure`, `LimitMEMLOCK=infinity` |
|
|
||||||
| Serve script | [`scripts/serve-frank-zealot.sh`](../../scripts/serve-frank-zealot.sh), tunables [`scripts/frank-zealot.env`](../../scripts/frank-zealot.env) |
|
|
||||||
| Weights | `/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-PQ2_0.gguf` — 7,206,168,928 B, sha256 `3907dc1658db1f78a9826bf8d5bcb8dc65db0d466388937af57f2294fae62ec1` |
|
|
||||||
| Projector | `Ternary-Bonsai-2-27B-mmproj-Q8_0.gguf` — 629,246,976 B (full sha256 pinned in the fetch script), Qwen3-VL tower; **873.10 MiB worst-case VRAM, loaded AFTER the engine's fit check** |
|
|
||||||
| Fetch | [`scripts/download-frank-zealot-bonsai2.sh`](../../scripts/download-frank-zealot-bonsai2.sh) — `-f`, byte-count + sha256 verified, idempotent, `--verify-only`, no token on the command line |
|
|
||||||
| Seam | `tests/frank_zealot_unit.bats` (argv assertions against a stub engine) |
|
|
||||||
|
|
||||||
## Why the fork — the format is the lock
|
|
||||||
|
|
||||||
Read from the file's own metadata, not the model card:
|
|
||||||
|
|
||||||
|Key|Value|
|
|
||||||
|---|---|
|
|
||||||
|`general.architecture`|`qwen35` (hybrid: Gated DeltaNet + softmax attention)|
|
|
||||||
|`qwen35.block_count`|64, `full_attention_interval` 4 ⇒ **16 full-attention + 48 DeltaNet layers**|
|
|
||||||
|Attention|24 heads / **4 KV heads** × key 256 / value 256; `rope.dimension_sections` [11,11,10,0], `freq_base` 1e7, partial rope `dimension_count` 64|
|
|
||||||
|Widths|embedding 5,120, feed-forward 17,408|
|
|
||||||
|`qwen35.ssm.*`|conv_kernel 4, state_size 128, group_count 16, **time_step_rank 48**, **inner_size 6,144**|
|
|
||||||
|Window / vocab|`context_length` 262,144; vocab 248,320 (gpt2 BPE, pre `qwen35`), eos 248046|
|
|
||||||
|`general.file_type`|**141 = PQ2_0 — 2.13 bpw (group 128)**|
|
|
||||||
|Tensor histogram|851 tensors: **`pq2_0` ×402** (custom GGML type **142**), f32 ×353, bf16 ×96|
|
|
||||||
|`prism.hadamard.*`|transform `normalized-sylvester-walsh-hadamard`, block_size 1024, axis `input-last-dimension`, sign_mode explicit, **401 named weights**, sign widths [5120, 6144, 17408], 28,672 sign values, inverse applied on `token_embd.weight`, `gdn_v_grouped` true|
|
|
||||||
|Sampler metadata|`general.sampling.temp` 1.0 / `top_p` 0.95 / `top_k` 20|
|
|
||||||
|Chat template|8,952 chars; reads `enable_thinking`, **`reasoning_effort` ∈ {`xhigh` (default), `medium`, `low` — anything else is `raise_exception`**, `preserve_thinking`, `tools`/`tool_call`, image + video content parts|
|
|
||||||
|
|
||||||
Stock llama.cpp cannot load this file: type 142 is not in its enum (`gguf-py`'s
|
|
||||||
stock `GGMLQuantizationType` raises `ValueError: 142 is not a valid…` on the
|
|
||||||
same read), and even a loader that parsed it would ignore the
|
|
||||||
`prism.hadamard.*` dequant transform the weights depend on. Same class of lock
|
|
||||||
as the ROCmFPX custom-type era. The vendor build 10754 already carries the
|
|
||||||
September upstream fixes (AVX-512 load segfault, and a `GGML_CUDA_FA_ALL_QUANTS`
|
|
||||||
-capable CUDA backend — proven by q8_0 V serving under flash attention at the
|
|
||||||
correct 34,816 B/token, below).
|
|
||||||
|
|
||||||
## VRAM census (2026-10-17, four arms, production stopped)
|
|
||||||
|
|
||||||
The engine's own `common_memory_breakdown_print` ledger + settled `nvidia-smi`,
|
|
||||||
all arms `--n-gpu-layers 99 --flash-attn on --batch-size 4096 --ubatch-size 2048`,
|
|
||||||
mmproj attached:
|
|
||||||
|
|
||||||
|Shape|KV|projected `model + context + compute`|settled used / free|verdict|
|
|
||||||
|---|---|---|---|---|
|
|
||||||
|**2 × 200,704 (pool 401,408)**|**q8_0 / q8_0**|21,439 = 6,539 + 13,627 + 1,272|**22,664 / 1,461**|**DEPLOYED**|
|
|
||||||
|2 × 200,704|f16 / f16|33,198 = 6,539 + 25,387 + 1,272|—|`cudaMalloc failed: out of memory` on the **25,088.00 MiB** KV request|
|
|
||||||
|1 × 262,144|q8_0 / q8_0|16,905 = 6,539 + 8,853 + 1,512|18,130 / 5,995|fits, but one slot serializes compaction|
|
|
||||||
|2 × 262,144|q8_0 / q8_0|≈25,758 (arithmetic, same terms)|—|does not fit (f16 analogue measured 41,118)|
|
|
||||||
|2 × 200,704|q4_0 / q4_0|15,167 = 6,539 + 7,355 + 1,272|16,392 / 7,733|the roomy fallback rung|
|
|
||||||
|
|
||||||
**KV rate law (confirmed to the MiB):** 16 full layers × 4 KV heads × 256 dim =
|
|
||||||
16,384 elements/token/cache; q8_0 bills 17,408 B per cache ⇒ **34,816 B/token**,
|
|
||||||
so the 401,408 pool = **13,328.00 MiB** — the ledger printed exactly that
|
|
||||||
(`CUDA0 KV buffer size = 13328.00 MiB`). f16 doubles it to 25,088 MiB, which is
|
|
||||||
the wall. The 48 DeltaNet layers bill a fixed recurrent state per **slot**:
|
|
||||||
context 13,627 − KV 13,328 = **299 MiB for two slots (~150 MiB each)** — pool
|
|
||||||
arithmetic alone under-prices the shape by that much.
|
|
||||||
|
|
||||||
**The projector is outside the fit check.** `[mtmd] estimated worst-case memory
|
|
||||||
usage of mmproj is 873.10 MiB` is printed before fitting but not billed in it:
|
|
||||||
settled used (22,664) − projection (21,439) ≈ 1.2 GiB is that projector plus the
|
|
||||||
CUDA context. This is the difference between "2.6 GiB free on paper" and the
|
|
||||||
real **1.4 GiB** — the same late-allocation failure class that killed the
|
|
||||||
DSpark drafter boot in the llama.cpp eras. Any resize must re-read the settled
|
|
||||||
`nvidia-smi`, never the projection.
|
|
||||||
|
|
||||||
## Measured rates (greedy, `Server-Timing`-free `/completion` `timings`)
|
|
||||||
|
|
||||||
|Probe|Result|
|
|
||||||
|---|---|
|
|
||||||
|Short, warm, single stream (128 tok)|**76.6 t/s** decode (the 9B Q6_K predecessor ran 94.4 — the ternary 27B is ~19 % slower, weight bandwidth + Hadamard dequant)|
|
|
||||||
|First request after boot|2.6 t/s prefill / 37.7 t/s decode — **warmup artifact; never report the first request** (measured twice on this payload)|
|
|
||||||
|Prefill at ~35k depth|**1,258.4 t/s** (27.8 s)|
|
|
||||||
|Prefill at 166,027-token depth|**691.7 t/s** (240.0 s), zero errors, slot intact|
|
|
||||||
|Two concurrent streams, 256 tok each|**54.7 + 54.7 = 109.4 t/s aggregate** — `--parallel 2` really batches|
|
|
||||||
|Long-context retrieval (25,960-token prompt, needle at position 180 of 300 passages)|exact: *"Frank keeps the fleet in git, only through it."*|
|
|
||||||
|
|
||||||
## Behavior contract (probes, not assumptions)
|
|
||||||
|
|
||||||
- **Reasoning** lands in `reasoning_content` (`--reasoning-format deepseek`) ✓.
|
|
||||||
- **Tool calls**: a `get_weather` request returns `finish_reason: tool_calls`
|
|
||||||
with `arguments: {"city":"Seattle"}` — valid JSON, no loop, no HTTP 500. The
|
|
||||||
fork's `KNOWN_ISSUES.md` warning about malformed/looping tool calls did not
|
|
||||||
reproduce on build 10754 at this shape.
|
|
||||||
- **Vision**: a 512 px solid-red PNG answers **"Red"** — but ONLY with a
|
|
||||||
thinking budget ≥ ~512 tokens. At `max_tokens: 64` the request returns
|
|
||||||
`finish_reason: "length"` with EMPTY `content` and half a thought in
|
|
||||||
`reasoning_content`: thinking tokens count against the budget, so a
|
|
||||||
short-budget vision probe reads as "the model is blind". Images do reach the
|
|
||||||
model (a 512 px image bills ~280 prompt tokens: 322 total vs 42 for the text
|
|
||||||
alone). Keep the ≥256 px probe rule from the earlier eras.
|
|
||||||
- **Log noise law**: `/completion` (text context) at `VERBOSITY=4` prints
|
|
||||||
`failed to parse reasoning content (response_format json_schema is currently
|
|
||||||
only supported with parse_reasoning=true), content will be stored in
|
|
||||||
'content' field` (`probe_request.cpp:789`) whenever the model closes a raw
|
|
||||||
prompt with ``. It is **cosmetic** — the full chain of thought
|
|
||||||
is in `content`. The OpenAI `/v1/chat/completions` path parses it into
|
|
||||||
`reasoning_content` correctly, which is the path the harness and every
|
|
||||||
consumer uses. Do not diagnose this as a fault, and do not drop verbosity
|
|
||||||
below 4 — the KV/buffer ledger in the journal is what VRAM forensics read.
|
|
||||||
- **Long raw-prompt completions can come back empty**: at ~26k+ tokens a bare
|
|
||||||
`/completion` request generated 0–1 tokens with no error (the model emits an
|
|
||||||
end-of-turn marker immediately, and a text context has no role frame to keep
|
|
||||||
it talking). Chat traffic is unaffected; nothing in the harness posts raw
|
|
||||||
`/completion` at depth.
|
|
||||||
|
|
||||||
## Ops notes
|
|
||||||
|
|
||||||
- **Trial-window law (cost one boot window on 2026-10-17):** a scratch env file
|
|
||||||
must use the serve script's OWN variable names — `CACHE_TYPE_K`/`CACHE_TYPE_V`,
|
|
||||||
`BIND_ADDR`, `NGL`. An invented `KV_CACHE_TYPE` is silently swallowed by the
|
|
||||||
script's `: "${CACHE_TYPE_K:=f16}"` default and the arm boots **f16**, which
|
|
||||||
for this payload is an OOM that looks like a model problem.
|
|
||||||
- **Base alignment:** Bonsai-2 is the BASE (censored) Qwen3.8-27B lineage, so a
|
|
||||||
refusal is possible on a compaction or subagent request. The CRACK re-export
|
|
||||||
(`dealignai/Bonsai-2-27B-Ternary-CRACK-GGUF`, already on disk at
|
|
||||||
`/home/dank/models/Bonsai2-CRACK/Bonsai-2-27B-PQ2_0-CRACK.gguf`, sha256
|
|
||||||
`5b24ea3e…`) is a **one-line `MODEL_FILE` swap**: the header census proves
|
|
||||||
byte-identical geometry — 851 tensors, the same `{142:402, f32:353, bf16:96}`
|
|
||||||
histogram, 64 blocks, vocab 248,320, the same 8,952-char template. The VRAM
|
|
||||||
ledger does not move. If a refusal ever surfaces, that is the fix; there is
|
|
||||||
also an MTP-bearing CRACK re-export upstream
|
|
||||||
(`ManniX-ITA/…-CRACK-MTP-GGUF`, 7,657,489,920 B, +451 MB head) if decode ever
|
|
||||||
needs the drafter — untested here.
|
|
||||||
- **Compaction hub unchanged:** all three endpoints still route
|
|
||||||
`compactionModel` here; 200,704 per slot is the fleet's only window that fits
|
|
||||||
a worst-case compaction input, and `--parallel 2` keeps compaction off the
|
|
||||||
critical path of a live generation.
|
|
||||||
- **Harness side** (`~/.omp/agent/models.yml`): `contextWindow: 200704` and
|
|
||||||
`maxTokens: 16384` unchanged; `extraBody` now quotes the payload's own
|
|
||||||
1.0 / 0.95 / 20 with `preserve_thinking: true`. The `reasoningEffortMap` fold
|
|
||||||
became **load-bearing** (the template raises on any level outside
|
|
||||||
`xhigh|medium|low`) — an unmapped level is a hard 500 on the role's first
|
|
||||||
request, naming Jinja rather than the model.
|
|
||||||
- **Rollback:** revert the swap commit. The Qwen3.5-9B Q6_K payload, its mmproj
|
|
||||||
and the master CUDA build all remain on disk
|
|
||||||
(`/home/dank/models/Qwen35-9B-HauhauCS-Q6K/`,
|
|
||||||
`~/GitPackages/llama-master/build-cuda/`), and the retired era keeps its own
|
|
||||||
page: [[frank-zealot-llama-qwen35-9b-q6k-2x200704]].
|
|
||||||
|
|
||||||
## Related
|
|
||||||
|
|
||||||
- [[frank-zealot-llama-qwen35-9b-q6k-2x200704]] — the replaced era (rollback target)
|
|
||||||
- [[frank-dragoon-flash-server-v2-swift15]] — the abliterated sibling on the iGPU
|
|
||||||
- [[frank-archon-radiance-qwen38-iq4r]] — the censored-base flagship this payload shares base alignment with
|
|
||||||
- [[deployment]] — deploy flow and incidents
|
|
||||||
@@ -20,13 +20,11 @@ digest serving the Quat3rnion ABLITERATED Swift1.5 finetune of
|
|||||||
Qwen3.8-Flash-Next v2, a ~62 GiB v2 .hgn that loads in no other engine,
|
Qwen3.8-Flash-Next v2, a ~62 GiB v2 .hgn that loads in no other engine,
|
||||||
MTP spec decode always-on (HALOGEN_SPEC_ADAPT=0), TWO slots at 200,192
|
MTP spec decode always-on (HALOGEN_SPEC_ADAPT=0), TWO slots at 200,192
|
||||||
ctx, vision ON)** and
|
ctx, vision ON)** and
|
||||||
**llama.cpp on the PrismML fork (frank-zealot, port 7771: prism-ml
|
**llama.cpp CUDA (frank-zealot, port 7771: HauhauCS Gemma4-26B-A4B QAT
|
||||||
Ternary-Bonsai-2-27B at **PQ2_0** — 27B qwen35 hybrid (16 full-attention + 48
|
Uncensored Q4_K_M GGUF — 26B MoE hybrid (25 sliding-window + 5 full-attention
|
||||||
Gated DeltaNet layers), TWO 200,704-token conversations, MTP disabled,
|
layers), ONE 200,704-token conversation, MTP disabled,
|
||||||
q8_0 K + q8_0 V (f16 KV does not fit the RTX 3090 at this window), vision via
|
q8_0 K + q8_0 V (FP8 class), vision via the publisher's own BF16
|
||||||
the publisher's own Q8_0 Qwen3-VL mmproj, on the RTX 3090 — and the custom
|
mmproj, on the RTX 3090)**.
|
||||||
tensor type 142 + `prism.hadamard.*` metadata mean no other loader can open the
|
|
||||||
file)**.
|
|
||||||
|
|
||||||
> 2026-08-22: the former `vllmScripts` repository is merged into the
|
> 2026-08-22: the former `vllmScripts` repository is merged into the
|
||||||
> serverAppConfigs repository. This knowledge base moved from the old repo's
|
> serverAppConfigs repository. This knowledge base moved from the old repo's
|
||||||
@@ -108,25 +106,13 @@ frank-zealot, port 7771]
|
|||||||
(`slow`/`advisor` → frank-archon) carried forward. Superseded by the
|
(`slow`/`advisor` → frank-archon) carried forward. Superseded by the
|
||||||
MODEL swap: the abliterated v2 .hgn loads only in flash-server, so the
|
MODEL swap: the abliterated v2 .hgn loads only in flash-server, so the
|
||||||
engine moved with the model
|
engine moved with the model
|
||||||
- [[frank-zealot-llama-prism-bonsai2-pq20]] — **ACTIVE since 2026-10-17**
|
- [[frank-zealot-llama-qwen35-9b-q6k-2x200704]] — **ACTIVE since 2026-10-07**
|
||||||
(root systemd unit, port 7771): the **PrismML fork** build of llama.cpp
|
(root systemd unit, port 7771): llama.cpp master (CUDA sm_86) serving
|
||||||
(vendor 10754, commit `2459f68b5` — the only loader for the payload's custom
|
HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive **Q6_K** on the RTX 3090
|
||||||
tensor type 142 + `prism.hadamard.*` transform) serving
|
— TWO 200,704-token conversations (`--ctx-size 401408 --parallel 2`), exact
|
||||||
prism-ml/Ternary-Bonsai-2-27B-gguf **PQ2_0** (2.13 bpw) on the RTX 3090 —
|
f16 K + f16 V, vision via the publisher's BF16 mmproj. MTP is OFF because
|
||||||
TWO 200,704-token conversations (`--ctx-size 401408 --parallel 2`), **q8_0 K
|
the file has no MTP tensors at all. Priced from the MiMo Q6_K boots (same
|
||||||
+ q8_0 V** (34 KiB/token over the 16 full layers = 13,328 MiB; the f16 pair
|
qwen35 geometry, same card, same shape). Supersedes the Gemma4 era (below).
|
||||||
needs 25,088 MiB and dies), settled 22,664 used / 1,461 free, vision via the
|
|
||||||
publisher's Q8_0 mmproj (+873 MiB, charged AFTER the engine's fit check), MTP
|
|
||||||
OFF (no MTP tensors). 76.6 t/s single-stream decode, 691.7 t/s prefill at
|
|
||||||
166k, 109.4 t/s aggregate at two streams. Supersedes the Qwen3.5-9B era below.
|
|
||||||
- [[frank-zealot-llama-qwen35-9b-q6k-2x200704]] — **RETIRED 2026-10-07 →
|
|
||||||
10-17** (payload + master CUDA build on disk as rollback): llama.cpp master
|
|
||||||
(CUDA sm_86) serving HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive
|
|
||||||
**Q6_K** on the RTX 3090 — TWO 200,704-token conversations
|
|
||||||
(`--ctx-size 401408 --parallel 2`), exact f16 K + f16 V, vision via the
|
|
||||||
publisher's BF16 mmproj. MTP is OFF because the file has no MTP tensors at
|
|
||||||
all. Priced from the MiMo Q6_K boots (same qwen35 geometry, same card, same
|
|
||||||
shape). Supersedes the Gemma4 era (below).
|
|
||||||
- [[frank-zealot-llama-gemma4-q4km-200704]] — **RETIRED 2026-10-07** (same
|
- [[frank-zealot-llama-gemma4-q4km-200704]] — **RETIRED 2026-10-07** (same
|
||||||
day; superseded by qwen35-9b-q6k; payload on disk as rollback): llama.cpp
|
day; superseded by qwen35-9b-q6k; payload on disk as rollback): llama.cpp
|
||||||
master (CUDA sm_86) serving HauhauCS/Gemma4-26B-A4B-QAT-Uncensored-
|
master (CUDA sm_86) serving HauhauCS/Gemma4-26B-A4B-QAT-Uncensored-
|
||||||
|
|||||||
@@ -388,15 +388,8 @@ The LLM inference fleet on the two hosts. Full index:
|
|||||||
- [[ciru-activefpx-promptforge]] — the RETIRED v3 CIRU PromptForge runtime on Dankclaw (superseded 2026-08-24)
|
- [[ciru-activefpx-promptforge]] — the RETIRED v3 CIRU PromptForge runtime on Dankclaw (superseded 2026-08-24)
|
||||||
- [[kingjones-strix-mtp]] — the kingjones Qwen3.8-27B ROCmFP4 STRIX MTP model on Dankclaw (active)
|
- [[kingjones-strix-mtp]] — the kingjones Qwen3.8-27B ROCmFP4 STRIX MTP model on Dankclaw (active)
|
||||||
- [[dealign-ornith-crack]] — the retired Ornith-1.5-35B-A3B CRACK model on Dankserver (retired 2026-09-02)
|
- [[dealign-ornith-crack]] — the retired Ornith-1.5-35B-A3B CRACK model on Dankserver (retired 2026-09-02)
|
||||||
- [[frank-zealot-llama-prism-bonsai2-pq20]] — the **ACTIVE** frank-zealot
|
- [[frank-zealot-llama-qwen35-9b-q6k-2x200704]] — the **ACTIVE** frank-zealot
|
||||||
runbook since 2026-10-17: the PrismML vendor llama.cpp build 10754 (the only
|
runbook since 2026-10-07 (late): llama.cpp master (CUDA sm_86) serving
|
||||||
loader for GGML type 142 / `prism.hadamard.*`) serving
|
|
||||||
prism-ml/Ternary-Bonsai-2-27B-gguf **PQ2_0** on the RTX 3090 — TWO
|
|
||||||
200,704-token conversations, q8_0 K + q8_0 V (f16 OOMs at 2×200,704: 34 KiB
|
|
||||||
vs 64 KiB per token over 16 full-attention layers), MTP **off** (no head in
|
|
||||||
the file), vision through the Q8_0 mmproj; boot 22,664 used / 1,461 free
|
|
||||||
- [[frank-zealot-llama-qwen35-9b-q6k-2x200704]] — RETIRED 2026-10-17 (rollback
|
|
||||||
target, payload on disk): llama.cpp master (CUDA sm_86) serving
|
|
||||||
HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive **Q6_K** on the RTX 3090 —
|
HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive **Q6_K** on the RTX 3090 —
|
||||||
TWO 200,704-token conversations, exact f16 K + f16 V, MTP **impossible**
|
TWO 200,704-token conversations, exact f16 K + f16 V, MTP **impossible**
|
||||||
(the file carries no `nextn`/`mtp` tensors), vision through the publisher's
|
(the file carries no `nextn`/`mtp` tensors), vision through the publisher's
|
||||||
|
|||||||
@@ -1783,72 +1783,3 @@ every restart since the cutover.
|
|||||||
Gate rerunning against the repaired fleet; frank-archon's own health gate
|
Gate rerunning against the repaired fleet; frank-archon's own health gate
|
||||||
passed every deploy. Open: decode/prefill ladders vs the w4dn8 record,
|
passed every deploy. Open: decode/prefill ladders vs the w4dn8 record,
|
||||||
probe leg D — scheduled probe window.
|
probe leg D — scheduled probe window.
|
||||||
|
|
||||||
## 2026-10-15 — authentik: two more human accounts (Dankclaw)
|
|
||||||
- **Live — mitch (pk 22) and eric (pk 23) provisioned via `ak shell` ORM, no
|
|
||||||
repo objects.** Each `<user>@franksdank.cloud` in the human-user template
|
|
||||||
shape (`is_active=True`, display name, password via `set_password` on stdin
|
|
||||||
only — never argv, so nothing lands in `ps`), groups `Non-Admin Users` +
|
|
||||||
`jellyfin_users` + `openwebui_users`; no admin group granted. Verified
|
|
||||||
through the exact PasswordStage code path (`authenticate()` accepted each
|
|
||||||
password and rejected a wrong one), `app_entitlements(open-webui)` →
|
|
||||||
`Open WebUI Users` for both (identical to the ridley precedent), and
|
|
||||||
`is_superuser=False` / `path=users`. Zero `proxysession` rows for either —
|
|
||||||
groups were set before any login, so no claim purge was due. Downstream:
|
|
||||||
Jellyfin visibility rides the LDAP outpost cache (expect lag); OpenWebUI
|
|
||||||
mints their accounts as role `pending` on first login.
|
|
||||||
- `/serverAppConfigs-docs/Infrastructure/Authentik.md` — human-user template
|
|
||||||
census extended with pk 22–23.
|
|
||||||
|
|
||||||
## 2026-10-17 — frank-zealot: Bonsai-2-27B PQ2_0 trial + cutover (2 × 200,704, q8_0 KV)
|
|
||||||
|
|
||||||
- Ask: evaluate `prism-ml/Ternary-Bonsai-2-27B-gguf` (PQ2_0) as frank-zealot's
|
|
||||||
payload, and specifically measure **2 × 200,704 with q8_0 K + q8_0 V** on the
|
|
||||||
RTX 3090. Fetch script `scripts/download-frank-zealot-bonsai2.sh` (exact
|
|
||||||
bytes + sha256, `--verify-only`) landed first; payload verified at
|
|
||||||
`/home/dank/models/Bonsai2-PQ2_0/` (7,206,168,928 B + 629,246,976 B mmproj).
|
|
||||||
- Runtime door: the file is `file_type 141` with 402 tensors of custom GGML
|
|
||||||
type **142** plus `prism.hadamard.*` metadata — stock llama.cpp refuses it,
|
|
||||||
so the PrismML vendor build 10754 (`2459f68b5`) is forced, not chosen. A
|
|
||||||
source build with `GGML_CUDA_FA_ALL_QUANTS=ON` was started and then
|
|
||||||
cancelled as unnecessary: the vendor build already serves q8_0 V under flash
|
|
||||||
attention at the exact 34,816 B/token (ledger-confirmed).
|
|
||||||
- Trial-window law cost one boot: the scratch env invented `KV_CACHE_TYPE`
|
|
||||||
where the serve script reads `CACHE_TYPE_K`/`CACHE_TYPE_V`, so the script's
|
|
||||||
`:=f16` default silently won and every arm booted f16. That failed window is
|
|
||||||
now the measured f16 wall: `cudaMalloc` OOM on a 25,088.00 MiB KV request,
|
|
||||||
engine fit 33,198 vs 23,558 free.
|
|
||||||
- Four-arm census (production stopped, trap-guarded restore, `bg_12`):
|
|
||||||
**2 × 200,704 q8_0 = 22,664 used / 1,461 free (DEPLOYED)**; 1 × 262,144
|
|
||||||
q8_0 = 18,130 / 5,995 (fits, but serializes compaction); 2 × 262,144 q8_0
|
|
||||||
≈ 25,758 projected (no fit); 2 × 200,704 q4_0 = 16,392 / 7,733 (fallback
|
|
||||||
rung). Recurrent DeltaNet state bills ~150 MiB per SLOT (context 13,627 −
|
|
||||||
KV 13,328 for two slots), which pool arithmetic alone misses.
|
|
||||||
- Behavior probes green: exact-instruction chat, `reasoning_content` present,
|
|
||||||
`tool_calls` with valid JSON arguments (no fork `KNOWN_ISSUES` loop/500),
|
|
||||||
512 px solid-red PNG answered **"Red"**, needle retrieval exact through a
|
|
||||||
25,960-token prompt, 166,027-token prefill clean in 240.0 s. Rates: 76.6 t/s
|
|
||||||
single-stream (9B ran 94.4), 1,258 t/s at 35k, 691.7 t/s at 166k,
|
|
||||||
**109.4 t/s aggregate** at two concurrent streams.
|
|
||||||
- New fleet laws recorded (AGENTS.md + runbook): the mmproj's 873.10 MiB
|
|
||||||
worst-case is NOT inside the engine's fit projection; the first request after
|
|
||||||
a boot is a warmup artifact (2.6 / 37.7 t/s measured); a 64-token thinking
|
|
||||||
budget makes a thinking model look blind; the Bonsai-2 template reads
|
|
||||||
`reasoning_effort` (xhigh/medium/low, raises otherwise) so the harness fold
|
|
||||||
became load-bearing on this endpoint, and it reads `preserve_thinking`.
|
|
||||||
- Cutover: `scripts/frank-zealot.env` (payload + `CACHE_TYPE_*`=q8_0 + ledger
|
|
||||||
lore), `scripts/deploy-remote.sh` (runtime/model/mmproj gates re-keyed, fork
|
|
||||||
hint), `tests/frank_zealot_unit.bats` (payload pair pinned; KV assertions now
|
|
||||||
env-derived instead of an f16 literal), harness `models.yml` (extraBody 1.0
|
|
||||||
/0.95/20 + `preserve_thinking`, effort-map comment corrected —
|
|
||||||
`contextWindow` 200704 and `maxTokens` 16384 unchanged), new runbook
|
|
||||||
[[frank-zealot-llama-prism-bonsai2-pq20]], indexes re-keyed, 9B era retired
|
|
||||||
in place. Full bats green (371).
|
|
||||||
- Base alignment: **Frank chose the OFFICIAL censored payload** — publisher
|
|
||||||
provenance over refusal-freedom. The 9B it replaces was uncensored, so the
|
|
||||||
homepage card and its warning contract were re-keyed with it: zealot's card
|
|
||||||
now carries the base-alignment notice, the shared legal warning belongs to
|
|
||||||
dragoon alone, and the `homepage_config.bats` equality
|
|
||||||
(`zealot.warn == dragoon.warn`) retired with the payload it described.
|
|
||||||
The CRACK re-export (byte-identical geometry per header census) stays on
|
|
||||||
disk as the one-line `MODEL_FILE` fallback if refusals bite.
|
|
||||||
@@ -90,14 +90,14 @@
|
|||||||
|
|
||||||
<h2>frank-zealot — the fast utility model</h2>
|
<h2>frank-zealot — the fast utility model</h2>
|
||||||
<ul>
|
<ul>
|
||||||
<li><strong>Model:</strong> <a href="https://huggingface.co/prism-ml/Ternary-Bonsai-2-27B-gguf" target="_blank" rel="noopener">Ternary-Bonsai-2-27B</a> (PQ2_0 ternary weights) on the RTX 3090 — roughly 77 tokens per second.</li>
|
<li><strong>Model:</strong> <a href="https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive" target="_blank" rel="noopener">Qwen3.5-9B-Uncensored</a> (Q6_K) on the RTX 3090 — roughly 95 tokens per second.</li>
|
||||||
<li><strong>Equivalent:</strong> last year's frontier level (2025).</li>
|
<li><strong>Equivalent:</strong> last year's frontier level (2025).</li>
|
||||||
<li><strong>Capacity:</strong> 200k-token context, two submissions at a time; sees images.</li>
|
<li><strong>Capacity:</strong> 200k-token context, two submissions at a time; sees images.</li>
|
||||||
<li><strong>Inputs:</strong> text, image.</li>
|
<li><strong>Inputs:</strong> text, image.</li>
|
||||||
<li><strong>Best for:</strong> code editor autocomplete, agentic search, RAG, research subagents, translation, roleplay, and summarization — any small task that doesn't need much intelligence, and anything with a picture. This is the model Open WebUI offers to family accounts.</li>
|
<li><strong>Best for:</strong> code editor autocomplete, agentic search, RAG, research subagents, translation, roleplay, and summarization — any small task that doesn't need much intelligence, and anything with a picture. This is the model Open WebUI offers to family accounts.</li>
|
||||||
<li><strong>Compaction:</strong> if your agent harness supports setting a compaction model, set this one. A compaction job severely slows the bigger models for far longer than it slows this one.</li>
|
<li><strong>Compaction:</strong> if your agent harness supports setting a compaction model, set this one. A compaction job severely slows the bigger models for far longer than it slows this one.</li>
|
||||||
<li><strong>Supervision:</strong> requires tight human supervision.</li>
|
<li><strong>Supervision:</strong> requires tight human supervision.</li>
|
||||||
<li><strong>Warning:</strong> <details class="key-warn"><summary>⚠ censored base model</summary><div class="warn-body">Base-alignment (censored) model: refusals are possible on sensitive topics, and any model can still be steered into risky output. Uncensored work belongs on frank-dragoon. Take this warning seriously — don’t ruin this server for everybody.</div></details></li>
|
<li><strong>Warning:</strong> <details class="key-warn"><summary>⚠ uncensored model</summary><div class="warn-body">Uncensored model: output can include adult content, content that describes harmful, hateful, or illegal acts, content concerning “sensitive offensive cybersecurity topics”, and other output that may carry severe legal risk. Take this warning seriously — don’t ruin this server for everybody.</div></details></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h2>frank-dragoon — deep reasoning</h2>
|
<h2>frank-dragoon — deep reasoning</h2>
|
||||||
|
|||||||
@@ -295,13 +295,13 @@
|
|||||||
"model": {
|
"model": {
|
||||||
"unit": "zealot",
|
"unit": "zealot",
|
||||||
"role": "Frank's utility model",
|
"role": "Frank's utility model",
|
||||||
"hf": "https://huggingface.co/prism-ml/Ternary-Bonsai-2-27B-gguf",
|
"hf": "https://huggingface.co/HauhauCS/Qwen3.5-9B-Uncensored-HauhauCS-Aggressive",
|
||||||
"tagline": "HONOR GUIDE ME!",
|
"tagline": "HONOR GUIDE ME!",
|
||||||
"sfx": [
|
"sfx": [
|
||||||
"zealot-honor.ogg"
|
"zealot-honor.ogg"
|
||||||
],
|
],
|
||||||
"equiv": "Equivalent to last year's frontier level (2025).",
|
"equiv": "Equivalent to last year's frontier level (2025).",
|
||||||
"spec": "Ternary-Bonsai-2-27B (PQ2_0 ternary weights) on an NVIDIA RTX 3090 — ~77 tokens/s; 200k-token context, two submissions at a time; sees images.",
|
"spec": "Qwen3.5-9B-Uncensored (Q6_K) on an NVIDIA RTX 3090 — ~95 tokens/s; 200k-token context, two submissions at a time; sees images.",
|
||||||
"inputs": [
|
"inputs": [
|
||||||
"text",
|
"text",
|
||||||
"image"
|
"image"
|
||||||
@@ -314,7 +314,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"supervision": "Requires tight human supervision.",
|
"supervision": "Requires tight human supervision.",
|
||||||
"warn": "Base-alignment (censored) model: refusals are possible on sensitive topics, and any model can still be steered into risky output. Take this warning seriously — don’t ruin this server for everybody.",
|
"warn": "Uncensored model: output can include adult content, content that describes harmful, hateful, or illegal acts, content concerning “sensitive offensive cybersecurity topics”, and other output that may carry severe legal risk. Take this warning seriously — don’t ruin this server for everybody.",
|
||||||
"compaction": "If your agent harness lets you set a compaction model, set this one: a compaction job on the bigger models blocks them for far longer."
|
"compaction": "If your agent harness lets you set a compaction model, set this one: a compaction job on the bigger models blocks them for far longer."
|
||||||
},
|
},
|
||||||
"url": "",
|
"url": "",
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
# Seam: the frank-zealot llama.cpp root unit on dankclaw.
|
# Seam: the frank-zealot llama.cpp root unit on dankclaw.
|
||||||
# frank-zealot is the RTX 3090 endpoint; since 2026-10-17 it serves
|
# frank-zealot is the RTX 3090 endpoint; since 2026-10-07 it serves
|
||||||
# prism-ml/Ternary-Bonsai-2-27B-gguf at PQ2_0 — the ternary Bonsai-2-27B, a
|
# HauhauCS's Qwen3.5-9B-Uncensored-HauhauCS-Aggressive (Q6_K, qwen35 hybrid:
|
||||||
# qwen35 hybrid with 64 blocks (16 full-attention + 48 Gated DeltaNet, no
|
# 32 layers, 8 full-attention + 24 Gated DeltaNet, no MTP tensors in the file)
|
||||||
# nextn/mtp tensors in the file) — via the PrismML fork build of llama.cpp
|
# via the CUDA (sm_86) build of llama.cpp master: TWO 200,704-token
|
||||||
# (vendor build 10754), the ONLY loader that registers the payload's custom
|
# conversations (--ctx-size 401408 --parallel 2), exact f16 K + f16 V under
|
||||||
# tensor type 142 and honours its prism.hadamard.* metadata: TWO 200,704-token
|
# flash attention, the publisher's own BF16 vision projector, and MTP off —
|
||||||
# conversations (--ctx-size 401408 --parallel 2), q8_0 K + q8_0 V under flash
|
# the file carries no nextn/mtp tensors, so there is no in-file head to draft
|
||||||
# attention (f16 KV does not fit this card at this pool — the boot dies on a
|
# with. Log verbosity 4 ships so the VRAM-fit forensics (KV layout, buffer
|
||||||
# 25,088 MiB cudaMalloc), the publisher's own Q8_0 vision projector, and MTP
|
# sizes, graph capture) land in the journal.
|
||||||
# off. Log verbosity 4 ships so the VRAM-fit forensics land in the journal.
|
|
||||||
# This seam runs the serve script against a stub engine and asserts on the
|
# This seam runs the serve script against a stub engine and asserts on the
|
||||||
# argv it actually execs, so what is pinned is the command the operator gets.
|
# argv it actually execs, so what is pinned is the command the operator gets.
|
||||||
|
|
||||||
@@ -96,15 +95,10 @@ run_stage() {
|
|||||||
grep -q 'FRANK_ZEALOT_ENV_FILE=/home/dank/serverAppConfigs/scripts/frank-zealot.env' "$UNIT"
|
grep -q 'FRANK_ZEALOT_ENV_FILE=/home/dank/serverAppConfigs/scripts/frank-zealot.env' "$UNIT"
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "the shipped env points at the fork runtime and the Bonsai-2 PQ2_0 pair" {
|
@test "the shipped env points at the llama.cpp runtime and the Qwen3.5-9B Q6_K GGUF" {
|
||||||
# The payload path IS the endpoint's identity, and the runtime is part of
|
# The payload path IS the endpoint's identity.
|
||||||
# it here: the file's custom tensor type 142 + prism.hadamard.* metadata
|
grep -qE '^LLAMA_BIN=/home/dank/GitPackages/llama-master/build-cuda/bin/llama-server$' "$ENV_FILE"
|
||||||
# make the PrismML build the only loader, so a retarget that moves the
|
grep -qE '^MODEL_FILE=/home/dank/models/Qwen35-9B-HauhauCS-Q6K/Qwen3\.5-9B-Uncensored-HauhauCS-Aggressive-Q6_K\.gguf$' "$ENV_FILE"
|
||||||
# model but leaves the master build behind ships an endpoint that cannot
|
|
||||||
# load at all.
|
|
||||||
grep -qE '^LLAMA_BIN=/home/dank/GitPackages/llama-prism/llama-server$' "$ENV_FILE"
|
|
||||||
grep -qE '^MODEL_FILE=/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-PQ2_0\.gguf$' "$ENV_FILE"
|
|
||||||
grep -qE '^MMPROJ_FILE=/home/dank/models/Bonsai2-PQ2_0/Ternary-Bonsai-2-27B-mmproj-Q8_0\.gguf$' "$ENV_FILE"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "the deployer gates on exactly the payload paths the env file ships" {
|
@test "the deployer gates on exactly the payload paths the env file ships" {
|
||||||
@@ -141,23 +135,19 @@ run_stage() {
|
|||||||
[ $((pool / slots)) -eq 200704 ]
|
[ $((pool / slots)) -eq 200704 ]
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "the KV dtype pair follows the env file and flash-attn stays pinned on" {
|
@test "the KV contract is exact f16 K + f16 V, flash-attn on" {
|
||||||
# Asserted against the env rather than a literal so a retune moves one
|
|
||||||
# file, not two. The shipped pair is q8_0/q8_0: this payload bills
|
|
||||||
# 16 full-attention layers × 4 KV heads × 256 dim = 16,384 elements per
|
|
||||||
# token per cache, so f16/f16 would need 25,088 MiB of the 24,123 MiB card
|
|
||||||
# (measured: cudaMalloc OOM, engine fit 33,198 vs 23,558 free) while q8_0
|
|
||||||
# bills 34,816 B/token = 13,328.00 MiB at the 401,408 pool. The boot
|
|
||||||
# ledger, not this file, is the referee. flash-attn is not decoration:
|
|
||||||
# quantized V is only legal with it, and it must stay explicit so a
|
|
||||||
# future quant swap cannot silently fall back.
|
|
||||||
local env_k env_v
|
|
||||||
env_k="$(sed -nE 's/^CACHE_TYPE_K=(.+)$/\1/p' "$ENV_FILE")"
|
|
||||||
env_v="$(sed -nE 's/^CACHE_TYPE_V=(.+)$/\1/p' "$ENV_FILE")"
|
|
||||||
serve_argv
|
serve_argv
|
||||||
[ "$status" -eq 0 ]
|
[ "$status" -eq 0 ]
|
||||||
[ "$(argv_value --cache-type-k)" = "$env_k" ]
|
# Frank, 2026-10-07: the 9B rung funds unquantized KV (the 26B MoE era
|
||||||
[ "$(argv_value --cache-type-v)" = "$env_v" ]
|
# shipped q8_0 V because the card was full). qwen35 bills the pool on the
|
||||||
|
# 8 full-attention layers only (8 × 4 KV heads × 256 dim = 8,192
|
||||||
|
# elements/token ⇒ 32 KiB/token at f16/f16, 12.25 GiB at the 401,408
|
||||||
|
# pool); the 24 DeltaNet layers cost a fixed recurrent state per slot.
|
||||||
|
# The boot ledger, not this file, is the referee. flash-attn stays pinned:
|
||||||
|
# any quantized-V fallback (q8_0 = this build's FP8 class) requires it, and
|
||||||
|
# the build carries GGML_CUDA_FA_ALL_QUANTS=ON.
|
||||||
|
[ "$(argv_value --cache-type-k)" = "f16" ]
|
||||||
|
[ "$(argv_value --cache-type-v)" = "f16" ]
|
||||||
[ "$(argv_value --flash-attn)" = "on" ]
|
[ "$(argv_value --flash-attn)" = "on" ]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -105,10 +105,8 @@ for s in fleet:
|
|||||||
assert [s["name"] for s in fleet] == ["frank-zealot", "frank-dragoon", "frank-archon"], \
|
assert [s["name"] for s in fleet] == ["frank-zealot", "frank-dragoon", "frank-archon"], \
|
||||||
"card render order must be zealot, dragoon, archon: " + str([s["name"] for s in fleet])
|
"card render order must be zealot, dragoon, archon: " + str([s["name"] for s in fleet])
|
||||||
w = {s["name"]: s["model"].get("warn", "") for s in fleet}
|
w = {s["name"]: s["model"].get("warn", "") for s in fleet}
|
||||||
assert "legal risk" in w["frank-dragoon"].lower() and "everybody" in w["frank-dragoon"].lower(), \
|
assert w["frank-zealot"] == w["frank-dragoon"] != "", "the legal warnings must be the common uncensored text"
|
||||||
"the abliterated endpoint must carry the common legal warning"
|
assert "legal risk" in w["frank-zealot"].lower() and "everybody" in w["frank-zealot"].lower()
|
||||||
assert "censored" in w["frank-zealot"].lower() and "uncensored" not in w["frank-zealot"].lower(), \
|
|
||||||
"zealot ships the censored base since 2026-10-17: its card warning must not claim uncensored output"
|
|
||||||
archon = next(s for s in fleet if s["name"] == "frank-archon")
|
archon = next(s for s in fleet if s["name"] == "frank-archon")
|
||||||
assert "permission" in archon["model"], "archon card needs the ask-Frank permission callout"
|
assert "permission" in archon["model"], "archon card needs the ask-Frank permission callout"
|
||||||
PY
|
PY
|
||||||
|
|||||||
Reference in new issue
Block a user