LFM2.5-350M β Core AI (.aimodel)
LiquidAI/LFM2.5-350M converted to Core AI .aimodel bundles for Apple silicon by
visible-cx. These are derivative artifacts: Liquid
AI's weights re-expressed as a Core AI graph with int8 block-32 symmetric weight
quantization and a two-entrypoint (decode + chunked-prefill) function map. They load
through Core AI on macOS and are not usable by PyTorch, GGUF or MLX.
This is the fastest and smallest of the dense LFM2.5 bundles published here: around half a second per guided structured-output sample on a 16 GB Mac, at 1.21 GB peak resident.
β οΈ Recommended maximum context: 8192. Needle-recall is 3/3 at 8k and 1/3 at 15k, failing by fabrication β it returned an invented entity and an invented date rather than declining. See Context window before routing deep-context work to this model.
Provenance
| Base checkpoint | LiquidAI/LFM2.5-350M |
| Recipe | export_lfm2_multifunction.py int8hu --head-sym --chunk 64 |
| Toolchain base | apple/coreai-models @ b1cb71b8522d99408059fa0b98b8742171bcb0b8 + the coreai-model-zoo python overlay |
| Toolchain | coreai-torch 0.4.1, coreai-core 1.0.0b2, coreai-opt 0.2.1, torch 2.9.0 |
| Producer fingerprint | coreai-core 1.0.0b2 on every inner <name>.aimodel/metadata.json |
| Weight format | int8, per-K-block-32, symmetric; symmetric head (--head-sym) |
| Vocab | 65,536 |
| Export functions | main (S=1 decode) + prefill (S=64 chunked prefill), function_map: {"main": ["main", "prefill"]}, weights shared |
mf64 in the bundle name means multifunction with a 64-wide prefill.
The zoo ships no LFM2.5-350M recipe (models/lfm2.5/recipe.toml covers the 1.2B only), so
this is a new conversion against export_lfm2_multifunction.py rather than a reproduction
of a published zoo bundle.
Contents
| Path | Bytes | Manifest context | Functions |
|---|---|---|---|
gpu-pipelined/lfm2_5_350m_decode_int8hu_block32_sym_mf64 |
571,453,194 | 4096 | main + prefill |
ctx8192/gpu-pipelined/lfm2_5_350m_decode_int8hu_block32_sym_mf64 |
571,453,212 | 8192 | main + prefill |
Each folder holds <name>.aimodel/ (main.mlirb β 567 MB, main.hash, asset
metadata.json), a bundle-level metadata.json, and tokenizer/ (tokenizer.json,
tokenizer_config.json, generation_config.json, chat_template.jinja).
Both folders hold the same weights and the same graph. --max-ctx does not change the
exported graph; it sets language.max_context_length in the bundle manifest and nothing
else. No ctx16384 folder is published for this model, because its recall fails by
fabrication above 8k (see Context window).
Stop token: eos_token = "<|im_end|>" in both folders. Clean self-stop on every
measured sample.
Requirements
- Apple silicon Mac, Core AI runtime.
- Engine contract: 2 inputs (
input_ids,position_ids) β logits. No static inputs, no per-step mask. Runs on the pipelined engine and on the logits-capable sequential engine, so grammar-constrained decoding is available. - States:
keyCache/valueCacheFloat16, 6 Γ 1 Γ 8 Γ ? Γ 64plusconvState Float16, 10 Γ 1 Γ 1024 Γ 2. Dynamic sequence dim βGrowingKVCache(initial 256, doubling).convStateis fixed-size and does not scale with context. - KV cost: 12,288 bytes per token (fp16) β 50 MB at 4096, 101 MB at 8192.
- Memory envelope, 16 GB Mac (Metal working set β 10.7 GB): weights 0.57 GB resident. Measured max RSS 1.21 GB; peak in-process footprint 0.21 GB on guided decoding and 0.30 GB at 8k context. Minimum practical machine memory: 8 GB.
- The bundle manifest declares
runtime_env COREAI_CHUNK_THRESHOLD=1.
Performance
Measured on a 16 GB Apple silicon Mac (M2 Pro, macOS 27 beta): 10-sample harness,
guided JSON-constrained decoding against a fixed schema, greedy, sequential engine,
reset() between samples, 128-token cap. Load excluded from s/row; sample 1 excluded as
a cache-warm outlier.
| Cold load | 3.6 s |
| Guided JSON parse | 10/10 |
| Enum-clean | 10/10 |
| s/row (long samples) | 0.84 |
| s/row (short samples) | 0.55 |
| Decode | 155β166 tok/s |
| TTFT | 0.16β0.79 s |
| Peak footprint | 0.21 GB |
| Max RSS | 1.21 GB |
Judged on parse rate, enum conformance, content sanity and clean stop rather than an exact-output comparison. Its outputs are the least specific of the three dense LFM2.5 bundles in this set, which is the trade for being 4β5Γ faster than the 2.6B.
Unguided workload
Free-form generation from a fixed prompt, 900-token cap; the model self-stopped well inside the cap at both depths.
| depth | prompt tokens | TTFT | decode | generated | wall | peak footprint |
|---|---|---|---|---|---|---|
| 3.4k | 3371 | 1.48 s | 145.6 tok/s | 725 | 6.7 s | 0.15 GB |
| 8k | 7953 | 2.89 s | 127.5 tok/s | 546 | 7.4 s | 0.30 GB |
Speed is not this model's limitation; long-range recall is.
Context window
A needle-in-haystack probe planted three distinctive facts at 10% / 50% / 90% of the filler and asked for them back at the end. Strict scoring: a fact counts only if the distinctive entity comes back correct.
| depth | prompt tokens | result |
|---|---|---|
| 8k | 8,099 | 3/3 β all three entities returned (the date on fact 3 was omitted) |
| 15k | 15,106 | 1/3 β fabricated |
The failure mode at 15k is invention, not refusal: fact 1 survived, fact 2 vanished, and fact 3 came back with a fabricated entity and a fabricated date. The output looks correct and is not.
Recommended maximum context: 8192. Use the 1.2B or 2.6B bundles above 8k; both return 3/3 verbatim at 15k. The exact boundary between 8k and 15k is not measured β only the two endpoints are.
Status
| Artifact | Status |
|---|---|
gpu-pipelined/β¦_mf64 (ctx 4096) |
QUALIFIED β measured: 10/10 guided parse and enum-clean, 0.84/0.55 s/row, 155β166 tok/s. |
ctx8192/β¦_mf64 |
QUALIFIED AT DEPTH β 8192 is this model's ceiling. Same weights and graph; measured at depth: 3/3 needle recall at 8,099 tokens, 0.30 GB peak footprint. Do not widen the manifest beyond 8192. |
No PyTorch-reference oracle or PSNR gate has been run against these bundles.
License
LiquidAI/LFM2.5-350M is released under the LFM Open License v1.0 (lfm1.0). These
bundles are a derivative and the same licence and obligations travel with them β see the
upstream licence.
Redistribute the licence with the files. The contribution here is the conversion and the
qualification evidence, not the weights.