LFM2.5‑VL-450M is Liquid AI's refreshed version of the first vision-language model, LFM2-VL-450M, built on an updated backbone LFM2.5-350M and tuned for stronger real-world performance. Find more about LFM2.5 family of models in our blog post.
Enhanced instruction following on vision and language tasks.
Improved multilingual vision understanding in Arabic, Chinese, French, German, Japanese, Korean, Portuguese and Spanish.
Bounding box prediction and object detection for grounded visual understanding.
Function calling support for text-only input.
🎥⚡️ You can try LFM2.5-VL-450M running locally in your browser with our real-time video stream captioning WebGPU demo 🎥⚡️
Alternatively, try the API model on the Playground.
📄 Model details
LFM2.5-VL-450M is a general-purpose vision-language model with the following features:
MLX format for Apple Silicon. Optimized for fast on-device inference on Mac with mlx-vlm. Also available in 4bit, 5bit, 6bit, and bf16.
We recommend using it for general vision-language workloads, captioning and object detection. It’s not well-suited for knowledge-intensive tasks or fine-grained OCR.
<|startoftext|><|im_start|>system
You are a helpful multimodal assistant by Liquid AI.<|im_end|>
<|im_start|>user
<image>Describe this image.<|im_end|>
<|im_start|>assistant
This image shows a Caenorhabditis elegans (C. elegans) nematode.<|im_end|>
You can run LFM2.5-VL-450M with Hugging Face transformers v5.1 or newer:
pip install transformers pillow
python
1from transformers import AutoProcessor, AutoModelForImageTextToText
2from transformers.image_utils import load_image
34# Load model and processor5model_id ="LiquidAI/LFM2.5-VL-450M"6model = AutoModelForImageTextToText.from_pretrained(7 model_id,8 device_map="auto",9 dtype="bfloat16"10)11processor = AutoProcessor.from_pretrained(model_id)1213# Load image and create conversation14url ="https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg"15image = load_image(url)16conversation =[17{18"role":"user",19"content":[20{"type":"image","image": image},21{"type":"text","text":"What is in this image?"},22],23},24]2526# Generate Answer27inputs = processor.apply_chat_template(28 conversation,29 add_generation_prompt=True,30 return_tensors="pt",31 return_dict=True,32 tokenize=True,33).to(model.device)34outputs = model.generate(**inputs, max_new_tokens=64)35processor.batch_decode(outputs, skip_special_tokens=True)[0]3637# This image captures the iconic Statue of Liberty standing majestically on Liberty Island in New York City. The statue, a symbol of freedom and democracy, is prominently featured in the foreground, its greenish-gray hue contrasting beautifully with the surrounding water.
Visual grounding
LFM2.5-VL-450M supports bounding box prediction:
python
1url ="https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg"2image = load_image(url)3query ="status"4prompt =f'Detect all instances of: {query}. Response must be a JSON array: [{"label":...,"bbox": [x1, y1, x2, y2]}, ...]. Coordinates are normalized to [0,1].'56conversation =[7{8"role":"user",9"content":[10{"type":"image","image": image},11{"type":"text","text": prompt},12],13},14]1516# Generate Answer17inputs = processor.apply_chat_template(18 conversation,19 add_generation_prompt=True,20 return_tensors="pt",21 return_dict=True,22 tokenize=True,23).to(model.device)24outputs = model.generate(**inputs, max_new_tokens=64)25processor.batch_decode(outputs, skip_special_tokens=True)[0]2627# [{"label": "statue", "bbox": [0.3, 0.25, 0.4, 0.65]}]
Tool Use
LFM2.5 supports function calling for text only input by applying the chat template with the tokenizer. See the Tool Use documentation for the full guide.
python
1tools =[{2"name":"get_weather",3"description":"Get current weather for a location",4"parameters":{5"type":"object",6"properties":{"location":{"type":"string"}},7"required":["location"]8}9}]1011messages =[{"role":"user","content":"What's the weather in Paris?"}]1213# Apply chat template with tools14inputs = processor.tokenizer.apply_chat_template(15 messages,16 tools=tools,17 add_generation_prompt=True,18 return_tensors="pt",19 return_dict=True,20)21input_ids = inputs["input_ids"].to(model.device)22outputs = model.generate(input_ids, max_new_tokens=256)23response = processor.tokenizer.decode(outputs[0, input_ids.shape[1]:], skip_special_tokens=False)2425# <|tool_call_start|>[get_weather(location="Paris")]<|tool_call_end|>I am retrieving the current weather for Paris.<|im_end|>
LFM2.5-VL-450M improves over LFM2-VL-450M across both vision and language benchmarks, while also adding two new capabilities: bounding box prediction on RefCOCO-M and function calling support measured by BFCLv4.
Vision benchmarks
Model
MMStar
RealWorldQA
MMBench (dev en)
MMMU (val)
POPE
MMVet
BLINK
InfoVQA (val)
OCRBench
MM-IFEval
MMMB
CountBench
RefCOCO-M
LFM2.5-VL-450M
43.00
58.43
60.91
32.67
86.93
41.10
43.92
43.02
684
45.00
68.09
73.31
81.28
LFM2-VL-450M
40.87
52.03
56.27
34.44
83.79
33.85
42.61
44.56
657
33.09
54.29
47.64
-
SmolVLM2-500M
38.20
49.90
52.32
34.10
82.67
29.90
40.70
24.64
609
11.27
46.79
61.81
-
All vision benchmark scores are obtained using VLMEvalKit. Multilingual scores are based on the average of benchmarks translated by GPT-4.1-mini from English to Arabic, Chinese, French, German, Japanese, Korean, Portuguese, and Spanish.