LFM2.5-230M β BRIK (int4)
LiquidAI LFM2.5-230M converted to the BRIK format so it runs inside the browser on the visitor's GPU (WebGPU) β no inference server, no API key, no per-token cost. Converted from the F16 weights.
It was the default of Brimkern's embeddable widget until SDK 0.8.0 and is still the app's default on mobile: at 149 MB it is the smallest file in the catalogue that still reads a document and refuses to answer outside it. Since 0.8.0 the widget defaults to Qwen3-0.6B Shop EN/FR (290 MB, Apache-2.0), which scores higher on the same benches; this model stays one option away.
| File | lfm25-230m-q4.brik (149 MB) |
| Quantization | int4, group of 32 β pre-quantized in the exact layout the kernels read (no dequantization at load) |
| Tokenizer | embedded in the file (no separate download) |
| Architecture | hybrid: short convolutions + grouped attention β 14 blocks, d=1024, vocab 65 536 |
| Engine | Brimkern β hand-written WGSL kernels |
Try it in one click
π https://brimkern.com/chat?model=romainkh14/LFM2.5-230M_BRIK
The file is streamed by HTTP Range, cached by the browser, then reusable offline. Nothing is sent to a server: the prompt and the generation stay on the machine.
Embed it in a site (SDK)
<script src="https://brimkern.com/sdk.js"></script>
<script>
Brimkern.embed({
title: 'Assistant',
model: 'lfm2.5-230m',
knowledge: [{ title: 'Shipping', body: 'Free above β¬50.' }],
});
</script>
npm i brimkern for the bundled version. model: 'lfm2.5-230m' selects this file (the SDK default
is the 290 MB Qwen3-0.6B Shop since 0.8.0). The weights download only if a visitor actually opens
the widget.
Measured
Chrome, Apple Silicon laptop, production build β replayable benches in
scripts/e2e/:
| Decoding | ~158 tok/s |
| Prefill | 2 289 tok/s |
Widget document Q&A (sdk-rag.mjs, EN + FR) |
12/12 β including refusing to answer outside the supplied facts |
Dialogue over 3 full rounds (sdk-dialogue.mjs) |
33/33 |
Public API surface (sdk-api.mjs) |
50/50 |
149 MB is the floor for this model, and that is a measurement, not an estimate. Our flat int4 is
not the limit: a 3-bit build (129 MB) drops to 4/6 on the same document benches, and re-encoding
unsloth's importance-matrix Q3_K values without loss fails the same two cases deterministically.
What breaks is going below 4 bits, not the way of getting there.
Format
A .brik is a self-describing container: architecture, tokenizer and configuration travel inside
the file, weights are pre-quantized in the layout the kernels read, and every layer is one contiguous
HTTP range β partial load, resume after a drop, offline afterwards.
Specification: BRIK_FORMAT.md.
License
Weights under the LFM Open License v1.0 (LiquidAI) β see LICENSE in this repository. The
Brimkern engine itself is MIT. If you need Apache-2.0 weights instead, the SDK's current default,
Qwen3-0.6B Shop EN/FR, is Apache-2.0.