Laya Vision (SmolVLM-256M)
0
3 commits
2 linked in READMEs
updated Sep 19, 2026
This model makes calibrated, typed decisions about an image plus optional text. It answers choice, score and noul (yes/no probability) questions in one forward pass, with no text generation.
It adds image input to Laya by replacing Laya's ModernBERT encoder with SmolVLM-256M-Instruct. Laya's predict(state, questions) API, proper-scoring-rule training and temperature calibration are unchanged.
git clone https://github.com/r33drichards/laya-vision && pip install -e ./laya-vision torchvision
import laya
from PIL import Image
agent = laya.load_vlm("thaitea/laya-vision-smolvlm-256m")
result = agent.predict(
{"image": Image.open("photo.jpg"), "note": "customer says it arrived broken"},
{
"damaged": {"type": "noul", "instructions": "Does the item in the photo look damaged?"},
"category": {"type": "choice", "instructions": "What kind of item is this?",
"criteria": ["electronics", "clothing", "furniture", "food", "other"]},
},
)
result["answers"]["damaged"]["noul"] # calibrated P(true)
result["answers"]["category"]["choice"] # top option; see ["probabilities"], ["confidence"]
Scores are on the full validation splits. "Calibrated" uses the per-type temperatures stored in vlm_agent_config.json, which are applied automatically.
| Dataset | Question type | Chance | Accuracy | ECE raw | ECE calibrated |
|---|---|---|---|---|---|
| A-OKVQA (n=1,138) | 4-way choice | 25% | 61.8% | 0.295 | 0.123 |
| ScienceQA, image subset (n=2,097) | 2–5-way choice | ~36% | 86.6% | 0.090 | 0.034 |
| VQAv2 yes/no (n=5,000)* | noul | 50% | 73.4% | 0.102 | 0.041 |
| All (n=8,235) | 75.2% | 0.124 | 0.034 |
* The VQAv2 train/val split is a re-split of the official VQAv2 validation set by image (the only official split with answers), so these numbers are not comparable to published VQAv2 results.
predict call and shared by every question.n_permutations=4) doesn't help.choicechoicenoultraining_metrics.json has every evaluation from the run.score questions are untrained. There was no ordinal image data, so their outputs are meaningless.The weights are released under CC BY-NC-SA 4.0, because they were trained partly on ScienceQA, which uses that license. The base model, SmolVLM, is Apache 2.0. A-OKVQA is Apache 2.0. VQAv2 annotations are CC BY 4.0, and its COCO images carry Flickr terms. The code is Apache 2.0.
3 commits
Laya Vision (SmolVLM-256M)
0
3 commits
2 linked in READMEs
updated Sep 19, 2026
This model makes calibrated, typed decisions about an image plus optional text. It answers choice, score and noul (yes/no probability) questions in one forward pass, with no text generation.
It adds image input to Laya by replacing Laya's ModernBERT encoder with SmolVLM-256M-Instruct. Laya's predict(state, questions) API, proper-scoring-rule training and temperature calibration are unchanged.
git clone https://github.com/r33drichards/laya-vision && pip install -e ./laya-vision torchvision
import laya
from PIL import Image
agent = laya.load_vlm("thaitea/laya-vision-smolvlm-256m")
result = agent.predict(
{"image": Image.open("photo.jpg"), "note": "customer says it arrived broken"},
{
"damaged": {"type": "noul", "instructions": "Does the item in the photo look damaged?"},
"category": {"type": "choice", "instructions": "What kind of item is this?",
"criteria": ["electronics", "clothing", "furniture", "food", "other"]},
},
)
result["answers"]["damaged"]["noul"] # calibrated P(true)
result["answers"]["category"]["choice"] # top option; see ["probabilities"], ["confidence"]
Scores are on the full validation splits. "Calibrated" uses the per-type temperatures stored in vlm_agent_config.json, which are applied automatically.
| Dataset | Question type | Chance | Accuracy | ECE raw | ECE calibrated |
|---|---|---|---|---|---|
| A-OKVQA (n=1,138) | 4-way choice | 25% | 61.8% | 0.295 | 0.123 |
| ScienceQA, image subset (n=2,097) | 2–5-way choice | ~36% | 86.6% | 0.090 | 0.034 |
| VQAv2 yes/no (n=5,000)* | noul | 50% | 73.4% | 0.102 | 0.041 |
| All (n=8,235) | 75.2% | 0.124 | 0.034 |
* The VQAv2 train/val split is a re-split of the official VQAv2 validation set by image (the only official split with answers), so these numbers are not comparable to published VQAv2 results.
predict call and shared by every question.n_permutations=4) doesn't help.choicechoicenoultraining_metrics.json has every evaluation from the run.score questions are untrained. There was no ordinal image data, so their outputs are meaningless.The weights are released under CC BY-NC-SA 4.0, because they were trained partly on ScienceQA, which uses that license. The base model, SmolVLM, is Apache 2.0. A-OKVQA is Apache 2.0. VQAv2 annotations are CC BY 4.0, and its COCO images carry Flickr terms. The code is Apache 2.0.
3 commits