Skip to content

colibrì v1.9.0

Latest

Choose a tag to compare

@JustVugg JustVugg released this 28 Aug 20:25
184e052

colibrì v1.9.0

GLM-5.3-Flash, and it sees

A seventh family: GLM-5.3-Flash, 321B parameters across 45 layers plus MTP, with a vision tower. It runs on 25 GB of RAM with its routed experts streamed from disk, and it reads images.

prompt:  "trascrivi esattamente il testo che vedi" + a PNG
answer:  COLIBRI SUPPORTA VISION CON GLM 5.3

That is the real 195 GB checkpoint on a laptop, transcribing a banner exactly, both lines. Asked to describe a red square on black it answers Un quadrato rosso su sfondo nero — in Italian, because the question was.

Every mechanism was validated in isolation against a transformers oracle before assembly, which is why the first full forward was token-exact rather than nearly right: KDA, the k-pooled DSA indexer, mHC shared with DeepSeek V4, the ViT, then the whole model, then the whole model with an image.

MLA is absorbed. Caching expanded keys costs 1.39 MB per token across the DSA layers, which is 11.9 GB at 8192 positions on an engine that exists to fit in small memory. Folding kv_b_proj into the two ends leaves the 512-wide latent in cache instead: same arithmetic, an identity rather than an approximation, 33 KB per token.

Where the speed stops, measured

resident weights at GLM53_BITS=4 ~12 GB
KV state 33 KB per token (1.1 GB at 32k)
prefill workspace flat, ~60 MB at any context
decode ~44 s/token cold, ~20 s/token with a warm cache

One token touches 42 sparse layers × 8 experts × 14.2 MB = 4.8 GB. Measured with O_DIRECT, the reference disk gives 72 MB/s at queue depth 1 and saturates near 200 MB/s from QD4. That puts a floor of 24 seconds per token on that hardware: what the disk takes to deliver the bytes, with any CPU and any GPU. Faster silicon does not move it; fewer bytes would. Anyone benchmarking this should know it before starting rather than after.

Vision that is reachable

Paste a path in coli chat, attach or drop a file in coli web, or send an OpenAI image_url part. Windows paths work from WSL, and when an image fails to attach the turn is refused rather than sent — silence there means waiting minutes for an answer about nothing.

Preprocessing is pinned against the official processor: identical geometry on every shape, bit-identical pixels wherever no resampling happens, 0.03 worst case where it does. Images travel in their own IMAGE frame (docs/serve_protocol.md). GLM53_MAX_IMAGE_TOKENS caps how large a picture may become — the checkpoint's own ceiling of 8000 is 2691 tokens for an ordinary 1080p photo.

Tool calling is complete and pinned byte for byte against chat_template.jinja. Reasoning can be switched off (--no-think) or dialled (--effort); both are time controls on this engine, not matters of taste.

tools/convert_glm53.py downloads and converts in one pass, one shard at a time, so peak disk is the output plus a single 5 GB shard rather than the repository's 328 GB. 62 shards, 194.7 GB out, 25 hours.

Distributed inference: Segment and Edge

An engine-neutral runtime ABI, with range-native adapters for all seven engines and a conformance gate that is all-or-nothing across the family set. Segment runs a range of layers on activations; Edge is the two ends, turning tokens into state and state back into tokens, now including full final-head logits so sampling policy stays with the caller instead of inside model math.

Fixes and improvements

Windows. The release archive now has something to double-click (#1241), and the check suite got the timeout it had outgrown rather than being cancelled at the line.

CUDA. Speculative verification pins its expert kernel family so it cannot switch into row-count-gated Tensor Core paths mid-verification; the default path is unchanged. NVCC_ALLOW_UNSUPPORTED makes a host compiler newer than VS2022 reachable. Qwen3.6's CUDA tier decays heat periodically, so a long session can replace an old workload's hot set instead of freezing it, and its admission threshold no longer overflows a saturated counter.

Correctness. Qwen3.6 escapes literal quotes in OpenAI output, which was producing invalid JSON. Vulkan expert residency is reported truthfully in TIERS, HWINFO and EMAP. Two hardcoded /tmp paths are gone.

Planner. It emits evidence-backed next actions instead of silently enabling optimizations it has not measured, and it counts dense weights as they will sit in RAM rather than as they sit on disk — a family that requantizes at load was being told it had no room for a single expert slot per layer when seventeen fit.

Performance. The DeepSeek V4 indexer no longer allocates per batch, and a hot SIMD loop drops a libm call that clang would not inline.

Docs. A Mintlify site with an OpenAPI reference, docs/glm53-flash.md, the GLM53_ environment table, and the IMAGE frame written into the protocol specification.

Thanks

@ZacharyZcR, @Unknown-Findout, @hamedrabah, @bherald, @iam-saiteja, @TechPizzaDev, @Petsku01 and everyone who filed an issue this cycle. The GLM-5.3 oracle contracts are @ZacharyZcR's, delivered as the infrastructure half of a larger proposal after review — and regenerating that fixture with his tool produces byte-identical results to the one this work was developed against, which is worth more than either oracle alone.