Checked every hosted entry against published documentation 2026-09-21. There
were errors in BOTH directions, and the overstatements are the dangerous
half -- an understated limit wastes tokens, an overstated one is a hard API
rejection partway through a session.
anthropic/claude-haiku-4-5 1,000,000 -> 200,000 OVERSTATED 5x
openai/gpt-5.6-sol 200,000 -> 1,050,000
openai/gpt-5.5 200,000 -> 1,050,000
openai/gpt-5.4 200,000 -> 1,050,000
openai/gpt-5.4-mini 200,000 -> 1,050,000
chatgpt/* (4 aliases) 272,000 -> 1,050,000
agent/*-gpt-5.x (11 aliases) 272,000 -> 1,050,000
agent/*-glm-5.3 (4 aliases) 150,000 -> 200,000 deliberate cap
anthropic/claude-{opus,sonnet}-5 unchanged, already correct
Haiku is the one that mattered. Opus 5 and Sonnet 5 really are 1M, the whole
Anthropic block was set to 1M, and Haiku inherited a limit five times its
real 200k. Opencode would have grown a session past the ceiling and the API
would have refused it.
⚠ glm-5.3 is capped at 200,000 BY CHOICE. Its real maximum is 1M. GLM bills
per input token and cost on this stack tracks context size and cache-read
volume more than model choice, so the cap is budget control, not ignorance.
Do not "correct" it upward against the docs. This is the one place where a
declared limit below the vendor maximum is intentional.
⚠ chatgpt/* now carries the API's 1,050,000, but OpenAI does not publish a
context limit for ChatGPT-plan routing and it has historically been far
below the API's. This is deliberately optimistic and being watched for a
crash; if long sessions start failing, that is the first thing to lower.
Left alone for want of evidence, not because they are right:
openai/gpt-5.3-codex (200,000), agent/librarian-glm-5.3-flash (128,000),
agent/sisyphus-junior-glm-5.3-flash (150,000). Raising an unconfirmed limit
risks the Haiku failure mode, so these stay until measured.
Unrelated but found while checking: LiteLLM declares kimi/kimi-k2.7-code at
272,000 against a published 262,144. Overstated by ~10k.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E9UH1zGZZtA9yhohmQrcT6
Every local model was declared at 32768 (16384 for the OMO local aliases)
regardless of what llama-swap is configured to serve. gpt-oss-20b runs with
`-c 65536`, so opencode was compacting at half the real window -- and
local/librarian and local/explore, which both route to gpt-oss-20b, at a
quarter of it.
Compaction is not free and it is not neutral. Measured on mainframe
2026-09-21, one agent session against a model told it had 32k when it had
131k: four cache-cold prefills, and 780 seconds spent after a working fix
re-reading the same forty lines, because each compaction discarded the memory
of having already verified it. Reasoning spend per step went from 2-5 tokens
to 1739. The model was not confused; it had been made to forget.
Values are llama-swap's own `-c`:
gpt-oss-20b 65536 (was 32768)
local/librarian 65536 (was 16384 / 32768)
local/explore 65536 (was 16384 / 32768)
qwen3-coder-30b 32768 unchanged, already correct
gemma3-12b 32768 unchanged, already correct
The hosted entries were already right and are untouched.
⚠ These are hand-maintained and llama-swap's config is the source of truth.
If a `-c` changes there, change it here. llmbench now derives the same
numbers by parsing that file, and raises rather than guessing when an alias
is unknown -- a wrong context limit produces plausible numbers instead of an
error, which is how this went unnoticed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E9UH1zGZZtA9yhohmQrcT6
Replaces the previous repo, which had split into two histories that never
met (mainframe on a dead GitLab remote, the laptops on Gitea) with 146
dirty files across three machines and the NAS never enrolled at all.
Branch-per-machine is gone. One main, with host differences expressed as
small files under hosts/<hostname>/ rather than as branches, so there is
nothing to merge. The reconciled zsh layer reduces 15-33 line forks to
1-7 effective lines per host; distro differences (oh-my-zsh prefix,
syntax-highlighting path, fd vs fdfind) are probed in common/ instead.
Fresh history: the old one carried six plaintext credentials, 45 MB of
mail caches, browser caches and vendored binaries. 5,096 tracked files
and 144 MB become 462 files and 2.6 MB. The .gitignore is now an
allowlist, which is what keeps that true.
Root cause of the rot: ~/.local/bin was a symlink to scripts/ with GOPATH
inside it, so every go install wrote into version control (2.2 GB on the
work laptop). PATH now points at the repo instead of the reverse.
Also: Hyprland replaces sway and is sourced in two halves so $browser is
defined before use; singleton automations carry ConditionHost= alongside
host-layer-only placement; ddns moves from cron to a guarded timer;
package manifests and pkg-snapshot/pkg-restore replace the X11-era
install_scripts/; networkmanager-dmenu added to system76 (the binding
always existed, the package never did).