Skip to content

v0.0.30

Choose a tag to compare

@github-actions github-actions released this 02 Sep 19:54
· 27 commits to main since this release
e000857

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 --auto never 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 cont copies left the dense KV path: +7.1% at 4031 tokens,
    byte-identical.
  • --trunk-quant q4_k converts 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.a under
    GCC and the build scripts looked only for ggml-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. -b never 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.