v0.0.30
Chaos v0.0.30 — the first release built to LTS standard
A runner for models that do not fit in memory. The always-read weights stay in
RAM; the routed experts stream from disk per token. DeepSeek-V4-Flash is 144 GB
and generates on a 15.7 GiB laptop.
This is the first tag in twenty-nine rungs. v0.0.24 to v0.0.29 were phases of
work and were never tagged: 23 releases went out in 21 days once and none of them
got a stabilisation period.
What LTS means here, and what it does not
Written down in SUPPORT.md, and deliberately narrower than the phrase usually
implies:
- The CLI's flags, the HTTP endpoints, the settings file and the catalogue layout
stop moving. A script written against this release keeps working against every
patch of it. - Correctness bugs get fixed on this release, not only on main.
- Every claim in these notes was measured on hardware with the command line
recorded.
It does not mean a support window in years — one person cannot promise that,
so the promise is structural: the newest LTS is supported until the next one
exists.
The gate for this release is every parity cell measured, not every cell
won: counting cells won can never reach 100% from here, and a gate that cannot be
met is a reason never to tag. All 19 cells (recounted; the table claimed 18)
now carry a number or a written reason, and three read unmeasurable here
because llama.cpp gives no stable figure for a 144 GB model on the development
machine — 0.16-0.47 tok/s across eight runs of one command line, and a 40-minute
hang with every thread waiting and zero CPU on a 4040-token prefill.
Quality: at parity with llama.cpp, measured across the range
One session, real prose, chunk 512, per-chunk BOS, both engines scoring the same
tokens:
| model | Chaos | llama.cpp | |
|---|---|---|---|
| Qwen3-4B dense | 44.8667 | 45.5245 +/- 5.70 | -1.44% |
| Qwen3-30B-A3B | 25.9308 | 25.8347 +/- 2.78 | +0.37% |
| DeepSeek-V4-Flash | 14.6877 | 14.1034 +/- 1.79 | +4.1% |
Each is inside the other's error bar. Getting there meant fixing our own
measuring equipment first -- a perplexity corpus that was one sentence repeated
80 times, a missing per-chunk BOS, and a stepwise scoring path that did not
reproduce a batched one -- and then finding a real bug underneath.
The bug that made the flagship model look worse than it is
Our joyai-llm pre-tokenizer was missing an entire regex alternative:
[!"#$%&'()*+,\-./:;<=>?@\[\\]^_`{|}~][A-Za-z]+
One ASCII punctuation mark plus the letters after it, as one piece. Ours
began at the second alternative, so SUPPORT.md came out . + md and
project's came out ' + s -- tokens the model has only ever seen whole.
Perplexity 18.5548 -> 14.6877, a 31.6% gap becoming 4.1%. Our ids now match
llama-tokenize exactly, 294 for 294.
Four checks could have caught it and none did: it is the only joyai-llm
container in existence; the test named v4flash_still_uses_joyai_llm_unchanged
checks only which pre-tokenizer is selected and passes either way; the
eight-prompt greedy diff behind VERIFIED_ARCHITECTURES cannot see a
distribution gap, because a wrong split still reads as fluent English; and the
perplexity harness that would have shown it did not exist on that path until the
same day.
Faster, and each change through a quality gate
DeepSeek-V4-Flash generation 0.509 -> 0.728 tok/s, 1.43x, from two changes
that are byte-identical — 50 of 50 answers unchanged. A third lever was built,
measured, and refused by the gate.
- The block tail was being computed twice: 1.120x, exact.
- The expert cache defaulted to zero on that model, and
--autonever ran on it
at all: 1.20x, exact. Sized from total RAM now, because the measured curve
has a cliff — 3 GiB gave 0.721 tok/s and 6 GiB gave 0.352 while the hit rate
kept climbing. - Two
contcopies left the dense KV path: +7.1% at 4031 tokens,
byte-identical. --trunk-quant q4_kconverts the always-read trunk at load, 7.38 -> 4.26 GiB
— and was refused by the quality gate: 20 of 50 answers byte-identical
against a 95% bar. It ships off by default, documented as failing, and no
speed figure from it is quoted. Not one checkable answer was lost, so a 7%
weight error changes how the model words things and not what it knows.
Every platform, actually run
- Linux could not build from the README. cmake emits
libggml-base.aunder
GCC and the build scripts looked only forggml-base.a, so the documented
instructions produced a file the error message called missing. Fixed, and a
model now runs on Debian 12 with the suite passing at Windows's exact counts. - The published Android APK installs, launches and draws its interface on an
emulator. It then crashes entering a mode, inside translated code that cannot
be attributed to Chaos. Still never run on a phone. - V4-Flash can take a long prompt for the first time.
-bnever reached that
architecture and its compute arena was a hardcoded 1 GiB, so a 4040-token
prompt was refused with advice no code path could follow — and the first
chunked attempt made ggml abort. Both fixed: 4040 tokens prefill in 8 blocks
at 5.07 tok/s. - macOS binaries are built and published and have never been executed by
anybody, including us. Same for the .deb, the AppImage and the arm64 Linux
tarball.
Any machine, any model
chaos-pull probes your machine, takes the largest quant whose always-read set
fits it, says what it passed over and why, and predicts tok/s only where the
law is calibrated — declining rather than guessing for streaming containers.
Its one prediction on the development machine was within 1% of the measurement.
Guarded rather than documented
scripts/quality-gate.sh— 50 checkable prompts, a different bar per lever:
exact needs 100% byte-identical, lossy needs 95% plus no checkable regression
plus perplexity within 1%. Validated against a deliberately corrupted model.scripts/check-docs.sh— ten graph nodes were in no index line at all.scripts/check-readme.sh,check-test-count.sh,check-old-updaters.sh—
the numbers in the documents are compared against the code that produces them.
Retracted in this cycle
Kept here because a retraction is part of the record: "the routed expert matmuls
are under 1%" (they are 40%), "88% of the compute is the hyper-connection
algebra" (it is 8%), "4.26 tok/s is the ceiling" (that was a disk bound with the
arithmetic set to zero; the real bound is three times lower), and "Proven:
Qwen3-30B-A3B" — that architecture is unverified and needs --force.
Install
Windows: the Setup .exe. Linux: the tarball, the .deb or the AppImage. Android:
the .apk. macOS: the tarball, untested. Chaos distributes no model weights.
Full detail in CHANGELOG.md; the honest scoreboard is STATUS.md.