Downloads · 30 days
82
12% of all-time downloads
ekacare/parrotlet-v-2.5-pro
parrotlet-v-2.5-pro is a image-text-to-text model from ekacare. 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 apache-2.0.
A fine-tune of google/gemma-4-E2B-it (Gemma 4, E2B — ~2B effective parameters) for structured, schema-driven extraction from Indian medical records: prescriptions, invoices, lab reports, and discharge summaries, plus…
Downloads · 30 days
82
12% of all-time downloads
All-time downloads
706
Public
Parameters
5.5B
32.1 GB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors11 GB · 100%
From the Hugging Face model README
A fine-tune of google/gemma-4-E2B-it (Gemma 4, E2B — ~2B
effective parameters) for structured, schema-driven extraction from Indian medical records: prescriptions,
invoices, lab reports, and discharge summaries, plus PII detection.
The language-model backbone was fully fine-tuned; the vision and audio towers and the multimodal projector were kept
frozen. Weights are released in uniform bf16, matching the model's declared dtype and training precision.
The model is prompted with a document image plus one of the tags below as the user turn. No other instruction text is required — the tag alone selects the extraction schema.
pip install torch torchvision "transformers>=5.14" accelerate pillow
Keep the transformers>=5.14 floor: versions below 5.6 either lack the
gemma4 architecture entirely or (5.5.0) load it with silently re-initialized
layers. Expect a ~11 GB download and ~10.7 GiB peak VRAM in bf16.
import torch
from transformers import AutoModelForImageTextToText, AutoProcessor
from PIL import Image
model_id = "ekacare/parrotlet-v-2.5-pro"
model = AutoModelForImageTextToText.from_pretrained(model_id, dtype=torch.bfloat16, device_map="auto")
processor = AutoProcessor.from_pretrained(model_id)
image = Image.open("prescription.jpg")
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "<prescription>"},
],
}
]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True,
tokenize=True, return_dict=True, return_tensors="pt",
).to(model.device)
output = model.generate(**inputs, max_new_tokens=2048, do_sample=False)
result = processor.decode(output[0][inputs["input_ids"].shape[-1]:], skip_special_tokens=True)
print(result)
| Tag | Extracts |
|---|---|
<prescription> | Structured prescription data (medicines, dosage, doctor, etc.) |
<invoice> | Structured invoice/billing data |
<lab_report> | Structured lab report data (tests, results, specimen, panel) |
<discharge_summary> | Structured discharge summary data (conditions, status, etc.) |
<pii> | PII extraction, independent of document type |
Validate the tag string before sending: a mistyped tag does not error — the
model returns valid-looking but empty JSON (e.g. <lab_repot> yields
{"lab_report_elements": {"tests": []}}).
Internal evaluation on a held-out set of 1,147 pages across five document types, judged by an LLM rubric judge. Overall rubric score = mean(coverage, grounding), pooled from per-page judge scores. Baselines shown are this model's own un-fine-tuned base and four frontier models evaluated on the same pages with the same rubric.
| Model | Overall | Coverage | Grounding |
|---|---|---|---|
| parrotlet-v-2.5-pro (this model) | 85.72 | 82.35 | 89.09 |
| Gemini 3.6 Flash | 84.06 | 83.01 | 85.11 |
| GPT-5.6 Terra | 82.94 | 80.85 | 85.04 |
| Claude Sonnet 5 | 81.67 | 82.48 | 80.86 |
| GPT-5.6 Luna | 81.31 | 80.19 | 82.44 |
| Gemma-4-E2B-it (base, no fine-tune) | 46.17 | 34.55 | 57.78 |
Fine-tuning improves the blended score by ~40 points over the base model and clears every frontier model tested by 1.7–4.4 points. Gemini 3.6 Flash is the closest. The lead is entirely in grounding — this model's coverage (82.35) is third-best, behind Gemini and Claude Sonnet 5, while its grounding of 89.09 is 4 points above the best frontier model. It reproduces slightly less of the reference, but far less of what it writes is unsupported.
| Task | This model | Gemini 3.6 Flash | Claude Sonnet 5 | GPT-5.6 Terra | GPT-5.6 Luna |
|---|---|---|---|---|---|
| Lab report | 88.77 | 86.83 | 83.54 | 83.67 | 82.82 |
| Prescription | 85.03 | 83.81 | 81.81 | 84.73 | 82.55 |
| Discharge summary | 80.58 | 73.71 | 72.52 | 79.81 | 74.73 |
| PII | 92.78 | 80.28 | 79.90 | 77.08 | 77.95 |
| Invoice | 74.41 | 83.74 | 83.03 | 80.05 | 78.87 |
Wins 4 of 5 document types. Invoice is the exception and the model's weakest task — Gemini 3.6 Flash leads there, just ahead of Claude Sonnet 5. PII is the widest margin, ~12.5–16 points clear of every frontier model.
Complex = report-style/non-tabular modalities (echo, ECG, manometry, histopathology); simple = standard tabular reports.
| Cohort | This model | Gemini 3.6 Flash | Claude Sonnet 5 | GPT-5.6 Terra | GPT-5.6 Luna |
|---|---|---|---|---|---|
| Complex (228 pages) | 83.36 | 83.24 | 79.54 | 78.17 | 77.18 |
| Simple (232 pages) | 94.95 | 91.28 | 88.26 | 90.26 | 89.65 |
The complex cohort is where the gap closes: Gemini 3.6 Flash comes within 0.12 points of this model there, while still trailing by 3.7 on simple pages. Gemini also has the smallest complex→simple drop of any model tested (8.0 points, against this model's 11.6), so its advantage is relative robustness to non-tabular layouts rather than better extraction overall.
Apache-2.0. The base model, google/gemma-4-E2B-it, is released by Google under
Apache 2.0 (unlike Gemma 1–3's Gemma Terms of Use), so this fine-tune is
distributed under Apache-2.0 as well. Google publishes a
Prohibited Use Policy and Intended Use statement for the Gemma 4 family that
users should review.
If you use this model, please cite:
@software{parrotlet_v_2_5_pro,
author = {{Eka Care}},
title = {Parrotlet-v 2.5 Pro: schema-driven extraction from Indian medical documents},
year = {2026},
url = {https://huggingface.co/ekacare/parrotlet-v-2.5-pro}
}