feat(frank-dragoon): raise HALOGEN_CTX to the native 262144 ceiling
The 200,704 ceiling squeezed the harness contextWindow down to 155,648 (the 400-zone fit law needs ~45k of gap under the ceiling), which is why long dragoon sessions kept hitting the 400 zone: the harness clamps max_tokens to window - est - 4096, its chars/4 est under-counts ~3 %, and config.yml compacts at 95 % while the pair was designed for 85 %. Ceiling -> checkpoint's native 262,144 (no RAM move: the KV pool stays 401,408 and is what the ledger bills; the band ctx <= pool <= slots*ctx still holds). The harness window becomes 200,000 with a 62,144 gap. The fit-law seam now reads the declared window from the vault page (the one owner) and checks the arithmetic at the live 95 % trigger, so a ceiling/window pair that drifts back together fails tests/run.sh instead of a live session.
This commit is contained in:
@@ -1401,9 +1401,10 @@ deploy_anubis() {
|
||||
# conversion (2026-10-11) of the abliterated Qwen3.8-Flash-Next —
|
||||
# qwen38-flash-next-v2-abliterated.hgn (66,687,678,432 B, ~62 GiB resident)
|
||||
# + the REQUIRED n-gram lookup table + the vision tower — MTP spec decode
|
||||
# (HALOGEN_SPEC_ADAPT=0), 2 slots over ONE 401,408-position KV pool (2 × ctx,
|
||||
# raised 2026-10-18 so BOTH slots can hold a maximum-length request) at the
|
||||
# ctx 200704 ceiling, image input — on the Strix Halo iGPU. It stays a
|
||||
# (HALOGEN_SPEC_ADAPT=0), 2 slots over ONE 401,408-position KV pool at the
|
||||
# native ctx 262144 ceiling (raised 2026-10-21 from 200704 so the harness can
|
||||
# run a 200,000 window with its ~45k fit gap; the pool still carries two
|
||||
# 200k conversations at once), image input — on the Strix Halo iGPU. It stays a
|
||||
# ROOT unit because the serve script drives `podman run` directly (the frank-archon pattern):
|
||||
# relink_unit points /etc/systemd/system/frank-dragoon.service at the repo
|
||||
# file, boot persistence is that unit's [Install], and LimitMEMLOCK=infinity
|
||||
|
||||
@@ -49,14 +49,21 @@ FRANK_DRAGOON_TOKENIZER_FILES="tokenizer.json chat_template.jinja tokenizer_conf
|
||||
# stays at the image default, which is what was qualified) ------------------
|
||||
# Served id. OpenWebUI api_configs model_ids for the :7770 backend MUST name it.
|
||||
HALOGEN_MODEL_ID=frank-dragoon
|
||||
# PER-REQUEST ceiling: a longer prompt is a 400 naming the limit, never a
|
||||
# truncation. The harness window must sit ~45k UNDER this (the 400-zone law on
|
||||
# the page) — a window equal to the ceiling makes every long request a 400.
|
||||
HALOGEN_CTX=200704
|
||||
# ONE pool behind both slots, sized so BOTH can carry a maximum-length request
|
||||
# at once. Pool positions buy concurrency; the per-request window never moves
|
||||
# with them. Legal band: ctx <= pool <= slots * ctx (the seam enforces it), and
|
||||
# RAM the pool takes is RAM the n-gram table's page cache loses.
|
||||
# PER-REQUEST ceiling, set to the checkpoint's NATIVE window (262,144 — a
|
||||
# longer prompt is a 400 naming the limit, never a truncation; stretching
|
||||
# past native would need HALOGEN_ROPE_YARN and is not on plan). The harness
|
||||
# `contextWindow` must sit ~45k under THIS number (the 400-zone law on the
|
||||
# page): with the window at 200,000 the gap is 62,144, which absorbs the
|
||||
# chars/4 under-count. A window at or near the ceiling makes every long
|
||||
# request a guaranteed 400.
|
||||
HALOGEN_CTX=262144
|
||||
# ONE pool behind both slots. The harness window is 200,000, so 401,408
|
||||
# still carries TWO maximum harness-length conversations at once
|
||||
# (2 x 200,000 + one 45,056 budget <= pool + cap headroom); two literal
|
||||
# ceiling-length requests would queue instead — buying those means raising
|
||||
# the pool, and RAM the pool takes is RAM the n-gram table's page cache
|
||||
# loses. Pool positions buy concurrency; the per-request window never moves
|
||||
# with them. Legal band: ctx <= pool <= slots * ctx (the seam enforces it).
|
||||
HALOGEN_KV_POOL_POSITIONS=401408
|
||||
# Two concurrent conversations: the MTP drafter is not slot-locked on this
|
||||
# engine, so the second slot is capacity, not a speculation tax.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[Unit]
|
||||
Description=halogen-flash-server container (Quat3rnion NATIVE v2 abliterated Qwen3.8-Flash-Next, MTP spec decode, 2 slots over ONE 401408-position pool at ctx 200704, vision ON), root systemd unit (dankclaw, frank-dragoon, Strix Halo iGPU)
|
||||
Description=halogen-flash-server container (Quat3rnion NATIVE v2 abliterated Qwen3.8-Flash-Next, MTP spec decode, 2 slots over ONE 401408-position pool at ctx 262144, vision ON), root systemd unit (dankclaw, frank-dragoon, Strix Halo iGPU)
|
||||
After=network-online.target
|
||||
Wants=network-online.target
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# of the abliterated Qwen3.8-Flash-Next (a .hgn flash-server payload) on the
|
||||
# Strix Halo iGPU through the halogen-flash-server CONTAINER (0.16.2,
|
||||
# digest-pinned), driven by the root unit's serve script — 2 slots over ONE
|
||||
# 200,704-position KV pool with the MTP head always on (HALOGEN_SPEC_ADAPT=0)
|
||||
# 401,408-position KV pool at the native 262,144 ceiling, MTP head always on (HALOGEN_SPEC_ADAPT=0)
|
||||
# and the vision tower mounted. 2026-10-17 cutover from the Swift1.5-finetune
|
||||
# shape, which itself cut over the halogen 27B-dense shape on 2026-10-06.
|
||||
#
|
||||
@@ -85,7 +85,7 @@ good_env() {
|
||||
"FRANK_DRAGOON_VISION_BYTES=0"
|
||||
"FRANK_DRAGOON_TOKENIZER_FILES=tok.json"
|
||||
"HALOGEN_MODEL_ID=frank-dragoon"
|
||||
"HALOGEN_CTX=200704"
|
||||
"HALOGEN_CTX=262144"
|
||||
"HALOGEN_KV_POOL_POSITIONS=401408"
|
||||
"HALOGEN_KV_SLOTS=2"
|
||||
"HALOGEN_SPEC_ADAPT=0"
|
||||
@@ -159,9 +159,11 @@ good_env() {
|
||||
reserve="$(sed -nE 's/^HALOGEN_HOST_RESERVE_GIB=([0-9]+)$/\1/p' "$ENV_FILE")"
|
||||
# The pool is ONE budget behind the slots (boot ledger form: "2 slots over
|
||||
# ONE <pool>-position KV pool, each request up to HALOGEN_CTX"), NOT
|
||||
# a per-slot private pool. Since 2026-10-18 it is sized pool = slots * ctx
|
||||
# (401,408 = 2 x 200,704), so two MAXIMUM-length conversations can be
|
||||
# resident at once — frank-zealot parity on total in-flight context. What
|
||||
# a per-slot private pool. Since 2026-10-21 the ceiling is the checkpoint's
|
||||
# native 262,144 while the pool stays 401,408 (raised 2026-10-18): two
|
||||
# MAXIMUM harness-length (200,000-token) conversations are resident at once;
|
||||
# two literal ceiling-length requests would queue — widening that is a pool
|
||||
# raise, not a window move.
|
||||
# still binds: the pool must back ONE full-length request (below that the
|
||||
# advertised per-request ceiling would be unreachable, hence pool >= ctx),
|
||||
# it must not pretend to be more than slots x ctx (pool <= slots * ctx), and
|
||||
@@ -287,7 +289,7 @@ $(cat "$TEST_TMP/serve.log")"
|
||||
[[ "$output" == *"--name frank-dragoon-halogen"* ]]
|
||||
[[ "$output" == *"--publish 7770:8731"* ]]
|
||||
[[ "$output" == *"-e HALOGEN_MODEL_ID=frank-dragoon"* ]]
|
||||
[[ "$output" == *"-e HALOGEN_CTX=200704"* ]]
|
||||
[[ "$output" == *"-e HALOGEN_CTX=262144"* ]]
|
||||
[[ "$output" == *"-e HALOGEN_KV_POOL_POSITIONS=401408"* ]]
|
||||
[[ "$output" == *"-e HALOGEN_KV_SLOTS=2"* ]]
|
||||
[[ "$output" == *"-e HALOGEN_SPEC_ADAPT=0"* ]]
|
||||
@@ -306,27 +308,32 @@ $(cat "$TEST_TMP/serve.log")"
|
||||
|
||||
@test "the shipped env keeps the harness fit law inside the ceiling" {
|
||||
# HALOGEN_CTX is the hard per-request ceiling (a longer prompt is a 400
|
||||
# naming the limit, never a silent truncation). The law is INVARIANT to
|
||||
# the value: the harness window must sit ~45k UNDER it, because the
|
||||
# harness clamps max_tokens = min(45056, window − est − 4096), compacts
|
||||
# at 85 % of its declared window, and its chars/4 est UNDER-counts the
|
||||
# rendered prompt by ~3 % on code/agent traffic (measured 4,450 tokens at
|
||||
# est 152,938 on 2026-10-07 — with window == ceiling, every request over
|
||||
# ~65 % of the window was a guaranteed 400 before compaction could fire).
|
||||
# The shipped pair is ctx 200704 / window 155648 (lowered from
|
||||
# 262144/217088 on 2026-10-17); the gap must absorb the error at BOTH
|
||||
# monotone maxima of est + budget (est ≤ window − 4096):
|
||||
# full budget at the compaction threshold: 1.03*132300 + 45056
|
||||
# clamped budget at the clamp's zero point: 1.03*151552 + 0
|
||||
# and the compaction request that rides on frank-zealot (its
|
||||
# 200,704-token slot) must fit: input ≈ threshold − keepRecent(20k).
|
||||
grep -qE '^HALOGEN_CTX=200704$' "$ENV_FILE"
|
||||
ctx=200704
|
||||
hw=155648; mt=45056
|
||||
thr=$(( hw * 85 / 100 ))
|
||||
# naming the limit, never a silent truncation). The law: the harness
|
||||
# window must sit ~45k UNDER the ceiling, because the harness clamps
|
||||
# max_tokens = min(45056, window − est − 4096), compacts at the trigger
|
||||
# percent of its declared window, and its chars/4 est UNDER-counts the
|
||||
# rendered prompt by ~3 % on code/agent traffic (measured 4,450 tokens
|
||||
# at est 152,938 on 2026-10-07 — with window ≈ ceiling, every long
|
||||
# request is a guaranteed 400 before compaction can fire). The 2026-10-21
|
||||
# pair: ceiling 262144 (native) under a harness window of 200,000.
|
||||
# The declared window is read from the endpoint page — the one owner —
|
||||
# so env, models.yml and page that disagree FAIL HERE, not as a 400
|
||||
# mid-session (the recurring failure this seam exists for).
|
||||
grep -qE '^HALOGEN_CTX=262144$' "$ENV_FILE"
|
||||
ctx="$(sed -nE 's/^HALOGEN_CTX=([0-9]+)$/\1/p' "$ENV_FILE")"
|
||||
page="$ROOT/serverAppConfigs-docs/LLM/frank-dragoon.md"
|
||||
grep -qE 'contextWindow: 200000' "$page"
|
||||
hw="$(grep -oE 'contextWindow: [0-9]+' "$page" | head -1 | grep -oE '[0-9]+')"
|
||||
mt=45056
|
||||
# Invariant checked at the live 95 % trigger (config.yml
|
||||
# thresholdPercent) — strictly stronger than the 85 % design point.
|
||||
# Both monotone maxima of est + budget (est ≤ window − 4096):
|
||||
thr=$(( hw * 95 / 100 ))
|
||||
[ $(( thr * 103 / 100 + mt )) -le "$ctx" ]
|
||||
zero=$(( hw - 4096 ))
|
||||
[ $(( zero * 103 / 100 )) -le "$ctx" ]
|
||||
# The compaction request rides on frank-zealot's 200,704-token slot:
|
||||
# input ≈ threshold − keepRecent(20k).
|
||||
[ $(( (thr - 20000) * 103 / 100 )) -le 200704 ]
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user