LFM3-Audio-2B language model for Core AI
The language model of LiquidAI/LFM3-Audio-2B as a Core AI bundle
(.aimodel, macOS 27 / iOS 27) for FluidAudio's
LFM3AudioManager with backend: .coreAI, plus the TTS depth decoder. The audio encoder and the codec come from
FluidInference/lfm3-audio-2b-coreml and stay on Core ML
(the codec and the LiveASR encoder run on the Neural Engine there; Core AI has no Neural Engine path on macOS 27.0).
This is a modified version of the original model: the backbone was exported to Core AI and quantized (see below).
Files
| File | What |
|---|---|
coreai/LFM3-Audio-u8b32-f16L20-23.aimodel |
LFM3 backbone (2048 x 24) taking inputs_embeds; entrypoints prefill (state update), main (logits of the last row), hidden (final-norm hidden of the last row, for speech frames); states keyCache / valueCache / convStates. 2.16 GB |
coreai/DepthDecoder-fp16-gpu.aimodel |
MaskGIT depth decoder, fp16. FluidAudio runs depth_frame: 3 passes + presence penalty, temperature, top-k 128 and Gumbel-max in one call per speech frame (inputs h, sched [3, 12], noise / present [12, 2017], params; output codes [12]). Also has depth_in, depth_pass, depth_frame_f32s. 208 MB |
Quantization: asymmetric uint8 weights with block size 32, decoder layers 20-23 kept in fp16. Plain int8 (per channel or per block) is fine for ASR but flips too many speech codes in TTS; the last layers carry most of that error.
Use (Swift)
import FluidAudio
let manager = try await LFM3AudioManager.downloadAndLoad(backend: .coreAI) // macOS 27 / iOS 27
let text = try await manager.transcribe(samples).text
let speech = try await manager.synthesize("Hello from Core AI.")
FluidAudio loads one AIModel per entrypoint, all bound to the same host-owned states: with a single shared
AIModel, macOS 27.0 aborts in GPUMemrefOps ("Failed to resolve dynamic dimensions for memref.alloc") when one
function runs twice at consecutive positions with the same row count and another function is then called with the
next shape (the first main after speech frames in TTS). The first load specializes the graph for the GPU and
caches it (3.3 GB under `/Library/Caches/coreai-cache); the system purges the entry under storage pressure or when the bundle changes, and LFM3AudioModels.clearCoreAICache()` deletes it.
Parity (vs the original fp32 model)
| Check | Result |
|---|---|
| ASR, 20 golden LibriSpeech clips (greedy) | 18/20 token-identical (2 differ by a comma), WER 1.46% = original |
| TTS, 319 teacher-forced speech frames | LM hidden cosine min 0.99988 / mean 0.999985; codes 98.35% identical (fp32 reference depth decoder) |
Depth decoder depth_frame, 319 golden frames (injected order and noise) |
codes 99.40% identical; 3.24 ms per frame on the GPU |
Speed and accuracy
Apple M5 Pro (24 GB), macOS 27.0, FluidAudio release build; wall time includes warm-up after load.
| Task | Data | Result |
|---|---|---|
| Offline ASR | LibriSpeech test-clean, first 100 utterances (901 s) | WER 1.32%, RTFx 24.6 (Core ML LM: 18.4); 98/100 transcripts identical to the original model |
| LiveASR (160 ms pieces) | LibriSpeech test-clean, first 20 utterances | WER 1.46%, RTFx 13.3 (Core ML LM: 10.4) |
| TTS (Core AI depth decoder) | 20 phrases (71 s of speech) | RTFx 5.07, first audio 37 ms (median), Parakeet round-trip WER 2.5% (Core ML backend: RTFx 4.3-4.5) |
ASR peak memory footprint: 1.9 GB.
License
LFM Open License v1.0 (Liquid AI). Commercial use by organizations with annual revenue of USD 10 million or more requires a separate license from Liquid AI; see the license for the full terms.
Changelog
| Date | Files | Change | Issue | FluidAudio PR | HF commit |
|---|---|---|---|---|---|
| 2026-10-29 | coreai/LFM3-Audio-u8b32-f16L20-23.aimodel |
Initial release: Core AI LM bundle (uint8 b32, layers 20-23 fp16) | FluidAudio #49 | #1076 | e89ebdab |
| 2026-10-29 | coreai/DepthDecoder-fp16-gpu.aimodel |
Added the Core AI depth decoder (fused depth_frame, TTS RTFx 4.28 -> 5.07) |
FluidAudio #49 | #1076 | 6dc374f3 |
Model tree for FluidInference/lfm3-audio-2b-coreai
Base model
LiquidAI/LFM3-Audio-2B