Downloads · 30 days
35
18% of all-time downloads
Alfaxad/Vector-LFM2.5-VL-450M
Vector-LFM2.5-VL-450M is a image-text-to-text model from Alfaxad. Use it for the image-text-to-text task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as other.
<center <div style="display: flex; justify-content: center; gap: 0.5em;" <a href="https://huggingface.co/Alfaxad/Vector-LFM2.5-VL-450M"<strongModel</strong</a | <a href="https://huggingface.co/datasets/Alfaxad/vector-…
Downloads · 30 days
35
18% of all-time downloads
All-time downloads
193
Public
Parameters
449M
909 MB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors909 MB · 97%
From the Hugging Face model README
Vector-LFM2.5-VL-450M is a variant of LiquidAI/LFM2.5-VL-450M fine-runed for geospatial epidemiology tasks.
The model was supervised on Alfaxad/vector-100k, a 100k-example multimodal dataset built from geospatial image packets, aligned environmental layers, vector/disease weak labels, and task prompts. It is intended to produce population-level environmental risk summaries, structured JSON outputs, source provenance, uncertainty audits, and field-task briefs from geospatial tiles.
Vector-LFM2.5-VL-450M is not a diagnostic model. It does not confirm disease presence, assign individual risk, or replace field epidemiology, clinical judgment, or public-health authority review.
Vector-LFM2.5-VL-450M inherits the general vision-language architecture and chat template of LFM2.5-VL-450M, then adapts it to the VectorOS remote-sensing task distribution.
LiquidAI/LFM2.5-VL-450MAlfaxad/Vector-LFM2.5-VL-450MAlfaxad/vector-100kInherited LFM2.5-VL properties from the base model include the LFM2.5 language backbone, SigLIP2-based vision encoder, multimodal chat template, and support for image-text-to-text generation through Hugging Face Transformers.
The fine-tune teaches the model to follow VectorOS-specific geospatial instructions over image/map packets and aligned metadata. The model is trained to reason over:
The supervised task families include:
| Task family | Output style |
|---|---|
risk_tile_json | Structured risk JSON with risk class, score, confidence, drivers, uncertainty, and recommended next actions |
source_provenance_json | Structured provenance JSON listing evidence sources and caveats |
evidence_cards_json | JSON cards summarizing ecological, exposure, and label evidence |
exposure_summary_json | Population and infrastructure exposure summaries |
uncertainty_audit_json | Structured uncertainty and review-needed summaries |
officer_explanation | Plain-language operational explanation |
field_task_brief | Field-ready task brief for review teams |
copilot_why_here | Explanation of why a tile was prioritized |
habitat_patch_summary | Habitat/ecology-focused summary |
hard_negative_assessment | Assessment for plausible but label-negative tiles |
Use the LFM2.5-VL multimodal chat template through processor.apply_chat_template.
A typical VectorOS prompt combines one image packet with a concise instruction.
<|startoftext|><|im_start|>system
You are VectorOS, a geospatial public-health assistant. Provide population-level surveillance support only.<|im_end|>
<|im_start|>user
<image>Analyze this geospatial tile and return a risk_tile_json output for the configured AOI and disease module.<|im_end|>
<|im_start|>assistant
...
Install current Transformers support for LFM2.5-VL:
pip install "transformers>=5.1.0" pillow accelerate safetensors
Run image-text-to-text inference:
from PIL import Image
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "Alfaxad/Vector-LFM2.5-VL-450M"
model = AutoModelForImageTextToText.from_pretrained(
model_id,
device_map="auto",
dtype=torch.bfloat16,
)
processor = AutoProcessor.from_pretrained(model_id)
image = Image.open("vectoros_tile_packet.png").convert("RGB")
conversation = [
{
"role": "system",
"content": [
{
"type": "text",
"text": (
"You are VectorOS, a geospatial public-health assistant. "
"Provide population-level surveillance support only."
),
}
],
},
{
"role": "user",
"content": [
{"type": "image", "image": image},
{
"type": "text",
"text": (
"Analyze this geospatial tile and return risk_tile_json. "
"Use only evidence visible in the tile packet and provided metadata. "
"Do not claim field-confirmed disease presence."
),
},
],
},
]
inputs = processor.apply_chat_template(
conversation,
add_generation_prompt=True,
return_tensors="pt",
return_dict=True,
tokenize=True,
).to(model.device)
with torch.inference_mode():
outputs = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False,
)
new_tokens = outputs[:, inputs["input_ids"].shape[-1]:]
answer = processor.batch_decode(new_tokens, skip_special_tokens=True)[0]
print(answer)
For long structured outputs such as full provenance or uncertainty audits,
increase max_new_tokens up to 1600, which was the fixed evaluation setting.
The model was trained for one epoch using LoRA SFT and then merged into a full
model repository. The adapter and checkpoint metadata are retained under
vectoros_run_artifacts/.
| Parameter | Value |
|---|---|
| Base model | LiquidAI/LFM2.5-VL-450M |
| Dataset | Alfaxad/vector-100k |
| Epochs | 1.0 |
| Max length | 3,584 |
| Max image tokens | 256 |
| Per-device train batch size | 16 |
| Per-device eval batch size | 8 |
| Gradient accumulation | 1 |
| Learning rate | 0.00015 |
| Warmup ratio | 0.03 |
| Weight decay | 0.01 |
| LoRA rank | 16 |
| LoRA alpha | 32 |
| LoRA dropout | 0.05 |
| Seed | 20260507 |
| Save/eval interval | 500 steps |
Training output:
| Metric | Value |
|---|---|
| Train loss | 0.12335 |
| Runtime | 9,698.18 s |
| Samples/s | 7.424 |
| Steps/s | 0.464 |
| Total FLOPs | 5.116e17 |
LiquidAI/LFM2.5-VL-450MAlfaxad/Vector-LFM2.5-VL-450Mmax_new_tokens=1600 to avoid clipping long JSON outputsArtifacts:
vectoros_run_artifacts/eval_comparison_fixed.jsonvectoros_run_artifacts/reeval_fixed_hf/vectoros_run_artifacts/train_config.jsonvectoros_run_artifacts/train_output.json| Split | Metric | Base LFM2.5-VL-450M | Vector-LFM2.5-VL-450M |
|---|---|---|---|
| Validation | Loss | 2.2434 | 0.0826 |
| Validation | Perplexity | 9.4255 | 1.0861 |
| Validation | Target tokens | 4,196,286 | 4,196,286 |
| Validation | Batches | 1,750 | 1,750 |
| Test | Loss | 2.2448 | 0.0913 |
| Test | Perplexity | 9.4383 | 1.0956 |
| Test | Target tokens | 4,213,561 | 4,213,561 |
| Test | Batches | 1,750 | 1,750 |
Generation evaluation used 300 stratified test records.
| Metric | Base LFM2.5-VL-450M | Vector-LFM2.5-VL-450M |
|---|---|---|
| JSON parse rate | 99.33% | 100.00% |
| Normalized exact match | 0.00% | 47.33% |
| Sequence similarity mean | 0.1498 | 0.9647 |
| Sequence similarity median | 0.1344 | 0.9984 |
| Prefix match ratio median | 0.0000 | 0.9883 |
| Source expected recall | 56.52% | 100.00% |
| Source term recall | 26.14% | 96.69% |
| Risk class accuracy | 0.00% | 43.33% |
| Risk score MAE | n/a | 9.56 |
| Confidence MAE | n/a | 0.0406 |
| Safety violation rate | 0.00% | 0.00% |
| Generation errors | 0 | 0 |
By-task median sequence similarity:
| Task | Base | Vector |
|---|---|---|
copilot_why_here | 0.2502 | 1.0000 |
evidence_cards_json | 0.1935 | 0.9988 |
exposure_summary_json | 0.1119 | 1.0000 |
field_task_brief | 0.0859 | 1.0000 |
habitat_patch_summary | 0.1141 | 0.9954 |
hard_negative_assessment | 0.1561 | 1.0000 |
officer_explanation | 0.1831 | 0.9955 |
risk_tile_json | 0.0844 | 0.9564 |
source_provenance_json | 0.0468 | 0.9557 |
uncertainty_audit_json | 0.2482 | 0.9976 |
The fine-tuned model is substantially better than the base model on the geospatial epidemiology task distribution. The largest gains are in held-out likelihood, format following, source recall, structured output validity, and task-specific language. Risk-class accuracy improved from 0% to 43.33% on the 300-record generation sample, but this remains the most important metric to improve before using the model as a primary risk classifier.
This repository stores the merged model at the repo root and training/evaluation
artifacts under vectoros_run_artifacts/.
| Path | Description |
|---|---|
model.safetensors | Merged full model weights |
config.json, generation_config.json | Model configuration |
processor_config.json, tokenizer.json, tokenizer_config.json | Processor/tokenizer assets |
vectoros_run_artifacts/adapter/ | Final LoRA adapter files |
vectoros_run_artifacts/checkpoints/ | Checkpoint metadata retained from training |
vectoros_run_artifacts/train_config.json | Training configuration |
vectoros_run_artifacts/train_output.json | Training runtime metrics |
vectoros_run_artifacts/eval_comparison.json | Original evaluation artifact retained for provenance |
vectoros_run_artifacts/eval_comparison_fixed.json | Corrected final evaluation comparison |
vectoros_run_artifacts/reeval_fixed_hf/ | Full corrected re-evaluation artifacts and generations |
Vector-LFM2.5-VL-450M should only be used for geospatial epidemiology support, education, research, and VectorOS product prototyping.
Do not use this model for:
The model is trained on weak labels and geospatial proxies. Outputs should be treated as decision-support intelligence requiring source review and local public-health validation.
risk_tile_json
samples.This model was built for the VectorOS hackathon project by Alfaxad. Use the Hugging Face repository discussions for model-specific questions and artifact issues.
@misc{vectorlfm25vl,
title = {Vector-LFM2.5-VL-450M: A Vision-Language Model for Geospatial Epidemiology},
author = {Alfaxad},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/Alfaxad/Vector-LFM2.5-VL-450M}}
}
@article{liquidai2025lfm2,
title = {LFM2 Technical Report},
author = {Liquid AI},
journal = {arXiv preprint arXiv:2511.23404},
year = {2025}
}