Skip to content

lfm3: admit official MLX text and VL checkpoints - #1513

Draft
BlivionIaG wants to merge 3 commits into
ashhart:mainfrom
BlivionIaG:feature/lfm3-admission
Draft

BlivionIaG wants to merge 3 commits into
ashhart:mainfrom
BlivionIaG:feature/lfm3-admission

Conversation

@BlivionIaG

@BlivionIaG BlivionIaG commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Change

Admit official LiquidAI LFM3-1.7B and LFM3-VL-2B MLX 4/6/8-bit metadata, without registering inference. Validate family geometry, quantization layouts and tensor headers. Add a host inspector and rejection tests through the normal build graph.

Refs #1491. This is the admission foundation requested in #1502; text inference will sit on this, with VL stacked above text. The original admission commit and authorship are preserved. CUDA follow-up #1508 already carries a cherry-pick of that admission.

Code pointers

Verification

Pinned base: b30d5b9d3. Zig 0.17.0, macOS 26.5.1, M4 Pro 48 GB: zig build test-lfm3-host tf-lfm3-check -Dcpu=apple_m1 passed 8/8 steps and 13/13 host tests; the admission Python suite passed 12/12. This slice performs no GPU inference and makes no runtime or performance qualification claim. The recipe links the weights' LFM Open License v1.0.

ATC overlaps from the full implementation include conflicts with concurrent work; this smaller admission slice is intended to establish shared ancestry. Integration must be reconciled before landing.

Prepare text and VL 4/6/8-bit checkpoints with revision-pinned header inspection and native metadata validation. Inference remains unregistered pending operator and model qualification.

Refs ashhart#1491
@ashhart

ashhart commented Oct 30, 2026

Copy link
Copy Markdown
Owner

Thanks for splitting the admission out. It reads well and the host tests cover it. Could you add a short PR description: what it admits (the six MLX exports and their revisions), what it deliberately doesn't do (no engine, no inference), and that #1514 and #1508 build on it? Then it can leave draft.

@jschmied

Copy link
Copy Markdown
Contributor

A suggestion for this PR, if it helps. The XPU backend for LFM3 (#1666) needs to load the text decoder by these names. weights.zig already has every one, self_attn.gate_proj included, but only inside schema().

Commit 865e50022 on jschmied/TensorFold:lfm3-names sits directly on this PR's head 3b140b7ff. It moves the table into families/lfm3/names.zig:

  • Namespace: bare model. or wrapped language_model.model.;
  • Module, with each module's path;
  • moduleName(), detect() and embedName().

weights.zig re-exports them, and schema() and validate() read the same table, so admission is unchanged. names.zig doesn't import the safetensors parser. That matters because a backend's core module already owns core/safetensors.zig, and Zig refuses a second module rooted at the same file. A new test in weights_test.zig checks every module name of both namespaces against the schema. test-lfm3-host passes.

Cherry-pick it if you agree. Otherwise the XPU PR will carry it on top of this one.

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.

3 participants