Skip to content

sync: Muse Glimmer converter, k-quant passthrough and mmproj bundling - #47

Merged
prabod merged 3 commits into
mainfrom
sync/muse-glimmer-kquant-0.2.2
Aug 12, 2026
Merged

sync: Muse Glimmer converter, k-quant passthrough and mmproj bundling#47
prabod merged 3 commits into
mainfrom
sync/muse-glimmer-kquant-0.2.2

Conversation

@prabod

@prabod prabod commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Open-core sync for 0.2.2, computed by tools/sync_public.py (allow-list — tuned quant profiles stay private).

Without this the public tree cannot build the bundles 0.2.2 is about, and basert pull basecompute/Muse-Glimmer-30B cannot resolve at all: the catalog is served from this repo's main.

Converter

  • base-arch — new muse_glimmer mapper (HF + GGUF), including the perception tower's canonical vision.* naming. The HF and GGUF name tables are pinned to agree by test, so a bundle built from either source is interchangeable.
  • base-convert--kquant-passthrough copies GGUF Q4_K/Q5_K/Q6_K super-blocks in verbatim (lossless: no dequant/repack round trip). --mmproj folds a companion mmproj GGUF's vision tower into the same bundle, so a GGUF-sourced build is no longer text-only.
  • base-format — reader support for the above.

Catalog

Two rows for basecompute/Muse-Glimmer-30B:

quant file size
default-kquant-dynamic muse-glimmer-30B-kquant-dynamic.base 21.0 GB
kquant-17gb muse-glimmer-30B-kquant-17gb.base 18.1 GB

Catalog::find returns the first row for an id, so a bare pull gets the dynamic build. Both rows carry real size + sha256; fetch verifies and bails on mismatch. Weights are already published at basecompute/Muse-Glimmer-30B (public, Apache-2.0).

Headers / bindings

embed_norm_eps plus the Muse Glimmer config fields, mirrored across the C header and the Swift/Rust/Python/Node copies. These are one ABI struct; the mirrors were verified field-for-field and in order against include/baseRT/types.h.

Verification

base-convert builds clean in this tree and its test suites pass. The corresponding internal work is basecompute/baseRT-internal#302 (merged) and #301.

Open-core sync for 0.2.2, computed by tools/sync_public.py (allow-list; tuned
quant profiles stay private).

CONVERTER
- base-arch: new muse_glimmer mapper (HF + GGUF), including the perception
  tower's canonical `vision.*` naming. The HF and GGUF name tables are pinned
  to agree by test, so a bundle built from either source is interchangeable.
- base-convert: `--kquant-passthrough` copies GGUF Q4_K/Q5_K/Q6_K super-blocks
  in verbatim (lossless — no dequant/repack round trip), and `--mmproj` folds a
  companion mmproj GGUF's vision tower into the same bundle, so a GGUF-sourced
  build is no longer text-only.
- base-format: reader support for the above.

CATALOG
Two rows for basecompute/Muse-Glimmer-30B so `basert pull` resolves it:
`default-kquant-dynamic` (what a bare pull gets) and `kquant-17gb`. Both carry
real size + sha256; fetch verifies and bails on mismatch. The weights are
published at huggingface.co/basecompute/Muse-Glimmer-30B.

DELIBERATELY EXCLUDED: the header and binding mirrors.

`embed_norm_eps` widens BaseRTModelConfig from 1540 to 1704 bytes. The
rust-sys ABI job links the LATEST ENGINE RELEASE (v0.2.1) and compares it
against the in-tree mirror, so syncing the headers before a matching engine
release fails by construction — 1540 from the binary vs 1704 from source.
That half has to follow the 0.2.2 engine release, not lead it. Nothing here
touches the ABI: base-convert is pure Rust and links no engine.

Verified in this tree: base-convert builds clean and its 23 test suites pass.
@prabod
prabod force-pushed the sync/muse-glimmer-kquant-0.2.2 branch from 1b43516 to 780a8c6 Compare August 12, 2026 03:23
prabod added 2 commits August 12, 2026 13:55
`basert pull basecompute/Muse-Glimmer-30B` failed with

  no pre-converted .base for quant "q4" in this repo; it offers: 17gb, dynamic

A bare pull requests "q4", and the catalog row is only served when the
requested bits match. `quant_bits` scans for `q` followed by a digit, so
`kquant-dynamic` yielded None — the `q` there is followed by `u` — and
resolution fell through to matching by filename tag. These files are named
after the upstream GGUFs, whose tags are "dynamic" and "17gb".

Renamed the variants to `default-q4k-dynamic` / `q4k-17gb`, which scan to
"q4". Only the catalog's variant ids change; the published artifacts are
untouched. A test now asserts every catalog quant exposes its bit width.

Also carries BASERT_VERSION_PATCH 2. Still no header or binding mirrors —
those must follow the 0.2.2 engine release, not lead it.
Version strings only — package.json, setup.py, the two Cargo manifests and
BASERT_VERSION_PATCH — so the published packages carry the release they belong
to. No struct or signature changes.

The header and binding MIRRORS are still deliberately held back: embed_norm_eps
widens BaseRTModelConfig from 1540 to 1704 bytes, and the rust-sys ABI job links
the latest ENGINE RELEASE (still v0.2.1) to compare against the in-tree mirror.
Syncing them before that release exists fails by construction. They follow the
0.2.2 engine release, not lead it.
@prabod
prabod merged commit 3a0358a into main Aug 12, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant