From f83cbc25169ffb262d8ee289573411ed6f5cd5ef Mon Sep 17 00:00:00 2001
From: Yi Zhong <207368749+vincentzed@users.noreply.github.com>
Date: Thu, 25 Jun 2026 17:27:57 -0700
Subject: [PATCH] Add LFM2.5-230M to the LFM2.5 cookbook (#29321)
---
.../autoregressive/LiquidAI/LFM2.5.mdx | 15 +++++--
.../supported-models/generative_models.mdx | 2 +-
.../configs/LiquidAI/lfm2.5-benchmarks.jsx | 30 +++++++++++++
.../src/snippets/configs/LiquidAI/lfm2.5.jsx | 43 +++++++++++++++++++
4 files changed, 86 insertions(+), 4 deletions(-)
diff --git a/docs_new/cookbook/autoregressive/LiquidAI/LFM2.5.mdx b/docs_new/cookbook/autoregressive/LiquidAI/LFM2.5.mdx
index 5d2102aad..bedae1ffb 100644
--- a/docs_new/cookbook/autoregressive/LiquidAI/LFM2.5.mdx
+++ b/docs_new/cookbook/autoregressive/LiquidAI/LFM2.5.mdx
@@ -156,6 +156,12 @@ This minimal hybrid layout was selected by a hardware-in-the-loop architecture s
32K |
Compact instruct, structured output |
+
+ | LFM2.5-230M |
+ 230M (dense) |
+ 32K |
+ Most compact; data extraction, structured output |
+
| LFM2.5-1.2B-JP-202606 |
1.17B (dense) |
@@ -189,7 +195,7 @@ This minimal hybrid layout was selected by a hardware-in-the-loop architecture s
-The Deploy panel above covers the seven serving variants; **LFM2.5-1.2B-JP** (original — launch without `--tool-call-parser`) and the **Base** repos (pre-trained only, no post-training — see [§3.5](#35-base-checkpoints)) launch the same way with the model path swapped.
+The Deploy panel above covers the eight serving variants; **LFM2.5-1.2B-JP** (original — launch without `--tool-call-parser`) and the **Base** repos (pre-trained only, no post-training — see [§3.5](#35-base-checkpoints)) launch the same way with the model path swapped.
**Choosing a variant:**
@@ -197,6 +203,7 @@ The Deploy panel above covers the seven serving variants; **LFM2.5-1.2B-JP** (or
- **1.2B-Thinking** — reasoning-heavy tasks: math, tool use, programming.
- **1.2B-Instruct** — the recommended pick for chat and creative writing.
- **350M** — tool use, data extraction, and structured output; not recommended for math, code, or creative writing.
+- **230M** — the most compact checkpoint; same use as the 350M, not for math, code, or creative writing.
**License:** [LFM Open License v1.0](https://huggingface.co/LiquidAI/LFM2.5-8B-A1B/blob/main/LICENSE).
@@ -228,6 +235,7 @@ The Deploy panel above covers the seven serving variants; **LFM2.5-1.2B-JP** (or
| LFM2.5-1.2B-Instruct | 0.1 | {`{"top_k": 50, "repetition_penalty": 1.05}`} |
| LFM2.5-1.2B-Thinking | 0.05 | {`{"top_k": 50, "repetition_penalty": 1.05}`} |
| LFM2.5-350M | 0.1 | {`{"top_k": 50, "repetition_penalty": 1.05}`} |
+ | LFM2.5-230M | 0.1 | {`{"top_k": 50, "repetition_penalty": 1.05}`} |
| LFM2.5-1.2B-JP-202606 | 0.1 | {`{"top_k": 50, "repetition_penalty": 1.05}`} |
| LFM2.5-1.2B-JP | 0.3 | {`{"min_p": 0.15, "repetition_penalty": 1.05}`} |
| LFM2.5-VL-1.6B (text) | 0.1 | {`{"min_p": 0.15, "repetition_penalty": 1.05}`} |
@@ -253,6 +261,7 @@ SAMPLING = {
"LiquidAI/LFM2.5-1.2B-Instruct": dict(temperature=0.1, extra_body={"top_k": 50, "repetition_penalty": 1.05}),
"LiquidAI/LFM2.5-1.2B-Thinking": dict(temperature=0.05, extra_body={"top_k": 50, "repetition_penalty": 1.05}),
"LiquidAI/LFM2.5-350M": dict(temperature=0.1, extra_body={"top_k": 50, "repetition_penalty": 1.05}),
+ "LiquidAI/LFM2.5-230M": dict(temperature=0.1, extra_body={"top_k": 50, "repetition_penalty": 1.05}),
"LiquidAI/LFM2.5-1.2B-JP-202606": dict(temperature=0.1, extra_body={"top_k": 50, "repetition_penalty": 1.05}),
"LiquidAI/LFM2.5-VL-1.6B": dict(temperature=0.1, extra_body={"min_p": 0.15, "repetition_penalty": 1.05}),
"LiquidAI/LFM2.5-VL-450M": dict(temperature=0.1, extra_body={"min_p": 0.15, "repetition_penalty": 1.05}),
@@ -312,7 +321,7 @@ for call in resp.choices[0].message.tool_calls or []:
print(call.function.name, call.function.arguments)
```
-Tool calling is supported on 8B-A1B, 1.2B-Thinking, 1.2B-Instruct, 350M, 1.2B-JP-202606, VL-1.6B, and VL-450M. For the **VL** models it is text-turn-only — do not combine an image and tools in the same turn.
+Tool calling is supported on 8B-A1B, 1.2B-Thinking, 1.2B-Instruct, 350M, 230M, 1.2B-JP-202606, VL-1.6B, and VL-450M. For the **VL** models it is text-turn-only — do not combine an image and tools in the same turn.
### 3.4 Vision Input
@@ -335,7 +344,7 @@ print(resp.choices[0].message.content)
### 3.5 Base Checkpoints
-Each size ships a pre-trained Base repo — [LFM2.5-1.2B-Base](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Base), [LFM2.5-350M-Base](https://huggingface.co/LiquidAI/LFM2.5-350M-Base), and [LFM2.5-8B-A1B-Base](https://huggingface.co/LiquidAI/LFM2.5-8B-A1B-Base) — intended for fine-tuning and continued pre-training.
+Each size ships a pre-trained Base repo — [LFM2.5-230M-Base](https://huggingface.co/LiquidAI/LFM2.5-230M-Base), [LFM2.5-1.2B-Base](https://huggingface.co/LiquidAI/LFM2.5-1.2B-Base), [LFM2.5-350M-Base](https://huggingface.co/LiquidAI/LFM2.5-350M-Base), and [LFM2.5-8B-A1B-Base](https://huggingface.co/LiquidAI/LFM2.5-8B-A1B-Base) — intended for fine-tuning and continued pre-training.
The repos ship a ChatML-style chat template, so `chat.completions` requests format normally. The checkpoints have no post-training, though — don't expect instruction following. For raw text continuation:
diff --git a/docs_new/docs/supported-models/generative_models.mdx b/docs_new/docs/supported-models/generative_models.mdx
index 2bbcb5e74..464ba1572 100644
--- a/docs_new/docs/supported-models/generative_models.mdx
+++ b/docs_new/docs/supported-models/generative_models.mdx
@@ -254,7 +254,7 @@ in the GitHub search bar.
Arcee's foundational MoE Trinity family of models, open weights under Apache 2.0. |
- | LFM2 (350M, 1.2B) |
+ LFM2 (230M, 350M, 1.2B) |
LiquidAI/LFM2.5-1.2B-Instruct |
Liquid AI's hybrid language model combining gated short convolutions with a small number of grouped query attention (GQA) blocks. |
diff --git a/docs_new/src/snippets/configs/LiquidAI/lfm2.5-benchmarks.jsx b/docs_new/src/snippets/configs/LiquidAI/lfm2.5-benchmarks.jsx
index a4bfd49ed..cd5f0ab1f 100644
--- a/docs_new/src/snippets/configs/LiquidAI/lfm2.5-benchmarks.jsx
+++ b/docs_new/src/snippets/configs/LiquidAI/lfm2.5-benchmarks.jsx
@@ -48,6 +48,16 @@ export const benchmarks = [
ttft_ms: 476.85, tpot_ms: 4.26, tokens_per_sec_per_gpu: 18745.3 },
],
},
+ {
+ match: { hw: "h100", variant: "230m", quant: "bf16", strategy: "default", nodes: "single" },
+ sglang_version: "0.0.0.dev1+g631db6c75",
+ speed: [
+ { workload: { dataset: "random", isl: 1024, osl: 1024, max_concurrency: 1, num_prompts: 10 },
+ ttft_ms: 23.74, tpot_ms: 1.77, tokens_per_sec_per_gpu: 546.07 },
+ { workload: { dataset: "random", isl: 1024, osl: 1024, max_concurrency: 100, num_prompts: 1000 },
+ ttft_ms: 1128.14, tpot_ms: 4.54, tokens_per_sec_per_gpu: 14280.32 },
+ ],
+ },
{
match: { hw: "h100", variant: "jp", quant: "bf16", strategy: "default", nodes: "single" },
sglang_version: "0.0.0.dev1+g631db6c75",
@@ -121,6 +131,16 @@ export const benchmarks = [
ttft_ms: 880.23, tpot_ms: 4.37, tokens_per_sec_per_gpu: 15765.2 },
],
},
+ {
+ match: { hw: "h200", variant: "230m", quant: "bf16", strategy: "default", nodes: "single" },
+ sglang_version: "0.0.0.dev1+g631db6c75",
+ speed: [
+ { workload: { dataset: "random", isl: 1024, osl: 1024, max_concurrency: 1, num_prompts: 10 },
+ ttft_ms: 18.74, tpot_ms: 1.74, tokens_per_sec_per_gpu: 561.43 },
+ { workload: { dataset: "random", isl: 1024, osl: 1024, max_concurrency: 100, num_prompts: 1000 },
+ ttft_ms: 458.07, tpot_ms: 4.47, tokens_per_sec_per_gpu: 17892.27 },
+ ],
+ },
{
match: { hw: "h200", variant: "jp", quant: "bf16", strategy: "default", nodes: "single" },
sglang_version: "0.0.0.dev1+g631db6c75",
@@ -194,6 +214,16 @@ export const benchmarks = [
ttft_ms: 1177.6, tpot_ms: 1.92, tokens_per_sec_per_gpu: 22636.7 },
],
},
+ {
+ match: { hw: "b200", variant: "230m", quant: "bf16", strategy: "default", nodes: "single" },
+ sglang_version: "0.0.0.dev1+g631db6c75",
+ speed: [
+ { workload: { dataset: "random", isl: 1024, osl: 1024, max_concurrency: 1, num_prompts: 10 },
+ ttft_ms: 12.28, tpot_ms: 0.84, tokens_per_sec_per_gpu: 1158.08 },
+ { workload: { dataset: "random", isl: 1024, osl: 1024, max_concurrency: 100, num_prompts: 1000 },
+ ttft_ms: 1550.61, tpot_ms: 1.93, tokens_per_sec_per_gpu: 19205.62 },
+ ],
+ },
{
match: { hw: "b200", variant: "jp", quant: "bf16", strategy: "default", nodes: "single" },
sglang_version: "0.0.0.dev1+g631db6c75",
diff --git a/docs_new/src/snippets/configs/LiquidAI/lfm2.5.jsx b/docs_new/src/snippets/configs/LiquidAI/lfm2.5.jsx
index dc074a5ca..46c7a07ba 100644
--- a/docs_new/src/snippets/configs/LiquidAI/lfm2.5.jsx
+++ b/docs_new/src/snippets/configs/LiquidAI/lfm2.5.jsx
@@ -18,6 +18,7 @@ export const config = {
{ id: "instruct", label: "1.2B Instruct", subtitle: "1.17B dense" },
{ id: "thinking", label: "1.2B Thinking", subtitle: "1.17B · reasoning" },
{ id: "350m", label: "350M", subtitle: "dense" },
+ { id: "230m", label: "230M", subtitle: "dense · compact" },
{ id: "jp", label: "1.2B JP", subtitle: "Japanese" },
{ id: "vl", label: "VL 1.6B", subtitle: "vision" },
{ id: "vl-450m", label: "VL 450M", subtitle: "vision · compact" },
@@ -37,6 +38,7 @@ export const config = {
"instruct|bf16": "LiquidAI/LFM2.5-1.2B-Instruct",
"thinking|bf16": "LiquidAI/LFM2.5-1.2B-Thinking",
"350m|bf16": "LiquidAI/LFM2.5-350M",
+ "230m|bf16": "LiquidAI/LFM2.5-230M",
"jp|bf16": "LiquidAI/LFM2.5-1.2B-JP-202606",
"vl|bf16": "LiquidAI/LFM2.5-VL-1.6B",
"vl-450m|bf16": "LiquidAI/LFM2.5-VL-450M",
@@ -122,6 +124,7 @@ sgl-eval run aime25 \\
thinking: { mmlu_pct: 63.2, gsm8k_pct: 86.35, gpqa_pct: 39.08, aime25_pct: 27.08 },
instruct: { mmlu_pct: 60.33, gsm8k_pct: 75.13, gpqa_pct: 34.41, aime25_pct: 9.58 },
"350m": { mmlu_pct: 40.69, gsm8k_pct: 30.63, gpqa_pct: 28.35 },
+ "230m": { mmlu_pct: 38.45, gsm8k_pct: 31.84, gpqa_pct: 27.78 },
vl: { mmmu_pct: 39.12 },
"vl-450m": { mmmu_pct: 30.56 },
},
@@ -208,6 +211,19 @@ sgl-eval run aime25 \\
"--port {{PORT}}",
],
},
+ {
+ match: { hw: "h100", variant: "230m", quant: "bf16", strategy: "default", nodes: "single" },
+ verified: true,
+ env: [],
+ flags: [
+ "--trust-remote-code",
+ "--model-path {{MODEL_NAME}}",
+ "--tp 1",
+ "--tool-call-parser lfm2",
+ "--host {{HOST_IP}}",
+ "--port {{PORT}}",
+ ],
+ },
{
match: { hw: "h100", variant: "jp", quant: "bf16", strategy: "default", nodes: "single" },
verified: true,
@@ -312,6 +328,19 @@ sgl-eval run aime25 \\
"--port {{PORT}}",
],
},
+ {
+ match: { hw: "h200", variant: "230m", quant: "bf16", strategy: "default", nodes: "single" },
+ verified: true,
+ env: [],
+ flags: [
+ "--trust-remote-code",
+ "--model-path {{MODEL_NAME}}",
+ "--tp 1",
+ "--tool-call-parser lfm2",
+ "--host {{HOST_IP}}",
+ "--port {{PORT}}",
+ ],
+ },
{
match: { hw: "h200", variant: "jp", quant: "bf16", strategy: "default", nodes: "single" },
verified: true,
@@ -422,6 +451,20 @@ sgl-eval run aime25 \\
"--port {{PORT}}",
],
},
+ {
+ match: { hw: "b200", variant: "230m", quant: "bf16", strategy: "default", nodes: "single" },
+ verified: true,
+ env: [],
+ flags: [
+ "--trust-remote-code",
+ "--model-path {{MODEL_NAME}}",
+ "--tp 1",
+ "--attention-backend trtllm_mha",
+ "--tool-call-parser lfm2",
+ "--host {{HOST_IP}}",
+ "--port {{PORT}}",
+ ],
+ },
{
match: { hw: "b200", variant: "jp", quant: "bf16", strategy: "default", nodes: "single" },
verified: true,