Views
No views yet
[!TIP] This model is reproducible!See the README in thereproducedirectory for more information.
| Parameter | Value |
|---|---|
| direction_index | per layer |
| attn.o_proj.max_weight | 1.20 |
| attn.o_proj.max_weight_position | 22.59 |
| attn.o_proj.min_weight | 0.60 |
| attn.o_proj.min_weight_distance | 11.46 |
| mlp.down_proj.max_weight | 1.39 |
| mlp.down_proj.max_weight_position | 23.51 |
| mlp.down_proj.min_weight | 0.94 |
| mlp.down_proj.min_weight_distance | 13.07 |
| Metric | This model | Original model (LiquidAI/LFM2.5-VL-3B) |
|---|---|---|
| KL divergence | 0.0553 | 0 (by definition) |
| Refusals | 6/100 | 100/100 |

[!NOTE] 💻 Demos: Try LFM2.5-VL-3B's vision understanding capabilities in a Hugging Face space without any setup: Vision-capable chat in your browser: allows you to upload images or use the webcam to capture stills and let the model interact with them.
| Model | Description |
|---|---|
| LFM2.5‑VL‑3B | Original checkpoint in native format. Best for fine-tuning and inference with HF Transformers, vLLM and SGLang |
| LFM2.5‑VL‑3B‑GGUF | Quantized GGUF exports of the original checkpoint. Best for CPU inference with reduced memory usage with llama.cpp |
| LFM2.5‑VL‑3B‑ONNX | Quantized ONNX exports for cross-platform deployment. Enables hardware-accelerated inference across diverse environments (cloud, edge, mobile). See the demo. |
| LFM2.5-VL-3B-MLX | Quantized MLX exports for Apple Silicon. Optimized for fast inference on Mac devices using the mlx-vlm framework. |
temperature=0.2, top_k=50, repetition_penalty=1.0processor_config.json file.<|startoftext|><|im_start|>system
You are a helpful assistant trained by Liquid AI.<|im_end|>
<|im_start|>user
What species is in this picture?<image><|im_end|>
<|im_start|>assistanttokenizer.apply_chat_template() to format your messages automatically.[!TIP] Note: Theapply_chat_template()method automatically inserts the<image>tag for each image in your message. Do not include<image>in your message content.
| Name | Description | Docs | Notebook |
|---|---|---|---|
| Transformers | Simple inference with direct access to model internals. | Link | ![]() |
| vLLM | High-throughput production deployments with GPU. | Link | ![]() |
| SGLang | High-throughput production deployments with GPU. | Link | ![]() |
| llama.cpp | Cross-platform inference with CPU offloading. | Link | ![]() |
transformers>=5.0.0):torch, transformers, and torchvision.1import torch
2from transformers import AutoModelForImageTextToText, AutoProcessor
3
4model_id = "LiquidAI/LFM2.5-VL-3B"
5
6model = AutoModelForImageTextToText.from_pretrained(model_id, dtype=torch.bfloat16)
7processor = AutoProcessor.from_pretrained(model_id)
8
9messages = [
10 {
11 "role": "user",
12 "content": [
13 {"type": "image", "url": "https://placecats.com/300/200"},
14 {"type": "text", "text": "Describe this image."},
15 ],
16 }
17]
18
19inputs = processor.apply_chat_template(
20 messages,
21 add_generation_prompt=True,
22 tokenize=True,
23 return_dict=True,
24 return_tensors="pt",
25).to(model.device)
26
27with torch.inference_mode():
28 output_ids = model.generate(
29 **inputs,
30 do_sample=True,
31 temperature=0.2,
32 top_k=50,
33 repetition_penalty=1.0,
34 max_new_tokens=256,
35 )
36
37generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
38print(processor.batch_decode(generated_ids, skip_special_tokens=True)[0])tokenizer.apply_chat_template() with tools=....<|tool_call_start|> and <|tool_call_end|> special tokens), as the assistant answer.tool role.<|startoftext|><|im_start|>system
List of tools: [{"name": "get_candidate_status", "description": "Retrieves the current status of a candidate in the recruitment process", "parameters": {"type": "object", "properties": {"candidate_id": {"type": "string", "description": "Unique identifier for the candidate"}}, "required": ["candidate_id"]}}]<|im_end|>
<|im_start|>user
What is the current status of candidate ID 12345?<|im_end|>
<|im_start|>assistant
<|tool_call_start|>[get_candidate_status(candidate_id="12345")]<|tool_call_end|>Checking the current status of candidate ID 12345.<|im_end|>
<|im_start|>tool
[{"candidate_id": "12345", "status": "Interview Scheduled", "position": "Clinical Research Associate", "date": "2023-11-20"}]<|im_end|>
<|im_start|>assistant
The candidate with ID 12345 is currently in the "Interview Scheduled" stage for the position of Clinical Research Associate, with an interview date set for 2023-11-20.<|im_end|>1image_index=<n> <label> [xmin, ymin, xmax, ymax]
2<content>
3
4image_index=<n> <label> [xmin, ymin, xmax, ymax]
5<content>
6
7image_index=<n> <label> [xmin, ymin, xmax, ymax]
8<content>
9
10...image_index is the zero-based index of image<label> is one of these layout labels:
[xmin, ymin, xmax, ymax] are normalized integer coordinates in [0, 1000], same as our grounding format.<content> is the region's content:
1Parse this document into its layout regions. The pages are provided as images in reading order. For every region, in reading order across all pages, output a header line immediately followed by the region's content:
2
3image_index=<n> <label> [xmin, ymin, xmax, ymax]
4<content>
5
6where:
7- image_index is the zero-based index of the page image the region appears on (0 for the first image, 1 for the second, and so on)
8- <label> is one of these layout labels: text, title, list, table, table_caption, table_footnote, image, image_block, image_caption, image_footnote, chart, equation, formula_number, code, code_caption, algorithm, aside_text, ref_text, phonetic, page_header, page_footer, page_number, page_footnote
9- [xmin, ymin, xmax, ymax] are normalized integer coordinates in [0, 1000]
10- <content> is the region's content: plain text for text regions, LaTeX for equations, OTSL for tables, and a short description for images and charts
11
12Separate each region block with one blank line. Return only the parsed regions.| Notebook | Description | Link |
|---|---|---|
| SFT (Unsloth) | Supervised Fine-Tuning with LoRA using Unsloth. | ![]() |
| SFT (TRL) | Supervised Fine-Tuning with LoRA using TRL. | ![]() |
| Benchmark | LFM2.5‑VL‑3B (3.1B) | LFM2‑VL‑3B (3.1B) | Gemma4 E2B (5.1B) | Gemma4 E4B (8B) | InternVL 3.5 4B (4.7B) | Qwen3.5-2B (2.3B) | Qwen3.5-4B (4.7B) |
|---|---|---|---|---|---|---|---|
| ScreenSpot-v2 (avg) | 80.7 | - | 31.1 | 50.9 | 84.2 | 66.5 | 78.5 |
| RefCOCO (Macro Prec@1) | 87.9 | 57.1 (-30.8) | 67.3 | 72.1 | 88.9 | 78.5 | 86.6 |
| BLINK | 61.5 | 50.2 (-11.3) | 51.8 | 56.4 | 57.4 | 59.3 | 65.0 |
| MuirBench | 58.3 | 34.9 (-23.4) | 40.7 | 48.9 | 53.4 | 49.0 | 67.0 |
| ToolSandBox | 59.5 | 26.4 (-33.1) | 56.5 | 61.6 | n/a1 | 47.7 | 65.0 |
| BFCLv4 | 32.5 | 20.5 (-12.0) | 33.2 | 40.0 | n/a1 | 33.9 | 53.6 |
| Benchmark | LFM2.5‑VL‑3B (3.1B) | LFM2‑VL‑3B (3.1B) | Gemma4 E2B (5.1B) | Gemma4 E4B (8B) | InternVL 3.5 2B (2.4B) | InternVL 3.5 4B (4.7B) | Qwen3.5-2B (2.3B) | Qwen3.5-4B (4.7B) |
|---|---|---|---|---|---|---|---|---|
| MME | 73.1 | 73.0 | 54.9 | 68.1 | 73.3 | 80.8 | 76.4 | 79.5 |
| MMStar | 63.3 | 57.7 | 57.9 | 61.9 | 57.5 | 65.3 | 67.9 | 73.3 |
| RealWorldQA | 73.1 | 71.1 | 56.2 | 61.8 | 61.4 | 68.6 | 71.4 | 76.2 |
| CountBenchQA | 87.3 | 92.2 | 70.8 | 80.1 | 70.6 | 82.5 | 83.2 | 86.9 |
| MMMB | 83.0 | 81.9 | 75.7 | 80.5 | 76.4 | 81.5 | 73.6 | 83.4 |
| MM-IF Eval | 60.6 | 51.4 | 64.5 | 66.7 | 48.4 | 54.6 | 52.1 | 63.8 |
| MathVista | 68.5 | 68.5 | 62.1 | 52.9 | 56.6 | 59.1 | 68.8 | 69.7 |
| MMMU Pro | 30.5 | 28.7 | 34.5 | 39.1 | 27.4 | 31.6 | 43.5 | 60.9 |
| ChartQA | 81.3 | 80.4 | 43.5 | 41.9 | 81.8 | 86.5 | 78.3 | 84.2 |
| OCRBenchv22 | 47.5 | 43.9 | 44.7 | 48.7 | 45.5 | 49.2 | 48.0 | 58.8 |
| POPE | 88.7 | 89.2 | 84.0 | 86.9 | 87.3 | 88.9 | 88.7 | 86.0 |



@article{liquidAI2026VL3B,
author = {Liquid AI},
title = {LFM2.5-VL-3B: A Better and Faster Vision-Language Model for the Edge},
journal = {Liquid AI Blog},
year = {2026},
note = {www.liquid.ai/blog/lfm2-5-vl-3b},
}