library_name: transformers license: other license_name: lfm1.0 license_link: LICENSE language:
- ar
- zh
- en
- fr
- de
- hi
- id
- it
- ja
- ko
- pl
- pt
- ru
- es
- th
- vi pipeline_tag: image-text-to-text tags:
- liquid
- lfm2.5
- edge
- heretic
- uncensored
- decensored
- abliterated
- reproducible base_model:
- LiquidAI/LFM2.5-VL-3B
This is a decensored version of LiquidAI/LFM2.5-VL-3B, made using Heretic v1.4.0
[!TIP] This model is reproducible!
See the README in the
reproducedirectory for more information.
Abliteration parameters
| 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 |
Performance
| Metric | This model | Original model (LiquidAI/LFM2.5-VL-3B) |
|---|---|---|
| KL divergence | 0.0553 | 0 (by definition) |
| Refusals | 6/100 | 100/100 |
LFM2.5-VL-3B
LFM2.5-VL-3B is a multimodal variant of LFM2.5, a family of hybrid models designed for on-device deployment. It builds on LFM2-VL-3B with further mid- and post-training. LFM2.5-VL-3B can process both text and images, and uses the LFM2.5-2.6B language model as its backbone, combined with a SigLIP2 NaFlex vision encoder.
- Better grounding: Improved grounding and object detection with natural language queries.
- Better OCR: Full page OCR with layout annotation. See layout annotation format for more information.
- Efficient inference: 228 tok/s on an Apple M5 Max and 116 tok/s on an AMD Ryzen AI Max+ 395, in under 3.3 GB of memory.
Find more information about LFM2.5-VL-3B in our release post.
lfm2_5_vl_3b_task_group_averages
[!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 Details
| 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. |
- LM Backbone: LFM2.5-2.6B
- Vision encoder: SigLIP2 NaFlex shape‑optimized 400M
- Vocabulary size: 128,000
- Context length: 32,768 tokens
- Languages: English, Arabic, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Vietnamese, Thai, Indonesian, Hindi, Russian, Polish
- Native resolution processing: Uses SigLIP2's NaFlex; large images are split into non-overlapping 512×512 patches and a resized whole-image thumbnail.
- Generation parameters:
- text:
temperature=0.2,top_k=50,repetition_penalty=1.0 - vision: Use the
processor_config.jsonfile.
- text:
We recommend using it for single-turn, high-throughput, low-latency tasks; for example, for near-realtime object detection in automotive applications, batch processing scanned documents with OCR with layout information for turning PDFs into searchable text, or for on-device translation of menus and road signs into your native language.
It is not recommended for long-context, reasoning-intensive tasks, such as visual web design, or answering highly technical questions about blueprints.
Chat Template
LFM2.5 uses a ChatML-like format. See the Chat Template documentation for details. Example:
<|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|>assistant
You can use tokenizer.apply_chat_template() to format your messages automatically.
[!TIP] Note: The
apply_chat_template()method automatically inserts the<image>tag for each image in your message. Do not include<image>in your message content.
Inference
LFM2.5-VL is supported by many inference frameworks. See the Inference documentation for the full list.
| 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 |
Quick start
Quick start with Transformers (compatible with transformers>=5.0.0):
You will need torch, transformers, and torchvision.
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "LiquidAI/LFM2.5-VL-3B"
model = AutoModelForImageTextToText.from_pretrained(model_id, dtype=torch.bfloat16)
processor = AutoProcessor.from_pretrained(model_id)
messages = [
{
"role": "user",
"content": [
{"type": "image", "url": "https://placecats.com/300/200"},
{"type": "text", "text": "Describe this image."},
],
}
]
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt",
).to(model.device)
with torch.inference_mode():
output_ids = model.generate(
**inputs,
do_sample=True,
temperature=0.2,
top_k=50,
repetition_penalty=1.0,
max_new_tokens=256,
)
generated_ids = output_ids[:, inputs["input_ids"].shape[1] :]
print(processor.batch_decode(generated_ids, skip_special_tokens=True)[0])
Tool Use
LFM2.5-VL-3B supports function calling in four steps:
- Function definition: Provide the list of tools as a JSON object in the system prompt, or use
tokenizer.apply_chat_template()withtools=.... - Function call: By default, LFM2.5 writes Pythonic function calls (a Python list between
<|tool_call_start|>and<|tool_call_end|>special tokens), as the assistant answer. - Function execution: Execute the call and return the result with the
toolrole. - Final answer: LFM2.5 interprets the tool output and returns a plain-text answer addressing the original prompt.
See the Tool Use documentation for the full guide. Example:
<|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|>
Layout Annotation Format
LFM2.5-VL-3B can do OCR with layout annotation. The layout annotation is a list of regions, each with a label, bounding box, and content. The format is:
image_index=<n> <label> [xmin, ymin, xmax, ymax]
<content>
image_index=<n> <label> [xmin, ymin, xmax, ymax]
<content>
image_index=<n> <label> [xmin, ymin, xmax, ymax]
<content>
...
where:
image_indexis the zero-based index of image<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
[xmin, ymin, xmax, ymax]are normalized integer coordinates in [0, 1000], same as our grounding format.<content>is the region's content:- plain text for text regions
- LaTeX for equations
- OTSL (Optimized Table Structure Language, introduced here by IBM) for tables
- a short description for images and charts
There will be a blank line between each region.
To prompt the model to generate this structured output, use a system or user prompt that includes this:
Parse 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:
image_index=<n> <label> [xmin, ymin, xmax, ymax]
<content>
where:
- 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)
- <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
- [xmin, ymin, xmax, ymax] are normalized integer coordinates in [0, 1000]
- <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
Separate each region block with one blank line. Return only the parsed regions.
Note that the layout annotation format is still experimental: it may change, may be unreliable, and may not be trivial to parse. We encourage users to try it out and provide feedback!
Fine-Tuning
We recommend fine-tuning LFM2.5-VL models for your specific use case to achieve the best results.
| Notebook | Description | Link |
|---|---|---|
| SFT (Unsloth) | Supervised Fine-Tuning with LoRA using Unsloth. | |
| SFT (TRL) | Supervised Fine-Tuning with LoRA using TRL. |
Performance
Benchmarks
LFM2.5-VL-3B significantly improves over LFM2-VL-3B in screen understanding, grounding, multi-image input, and tool use:
| 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 |
A selection of benchmarks for LFM2.5-VL-3B, including multimodal reasoning, math, and OCR (see our blog post for more benchmarks and details):
| 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 |
[1]: InternVL 3.5 doesn't support tool use.
[2]: English-only subset of OCRBenchv2.
On-device Inference
LFM2.5-VL-3B decodes 228 tokens/s on an Apple M5 Max and 116 tokens/s on an AMD Ryzen AI Max+ 395, and fits in about 3 GB of memory. It even reaches 20 tokens/s on a Galaxy S26 Ultra, so you can run it fully on-device.
lfm2_5_vl_3b_on-device_inference_TTFT
GPU Inference
On a single NVIDIA H100 with vLLM, LFM2.5-VL-3B reaches the highest output throughput of any model we tested, about 11K tokens per second at high concurrency, or nearly 1B tokens per day.
lfm2_5_vl_3b_throughput
Because it answers directly instead of reasoning, LFM2.5-VL-3B is quick to first token on a single H100, reaching about 34 ms on a 5-frame clip.
lfm2_5_vl_3b_ttft
Contact
- Got questions or want to connect? Join our Discord community
- If you are interested in custom solutions with edge deployment, please contact our sales team.
Citation
@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},
}