
[!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 images and let the model interact with them, as well as use tool calls and display generated bounding boxes. If you just want to chat about images, the LiquidAI playground is a fast way to do that.
| 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},
}