Vision/multimodal routing for image inputs
FreeLLM can now route requests containing image content to the correct vision-capable model automatically.
What changed
Meta-model requests (free, free-smart, free-fast) — the router detects image content, filters to vision-capable providers, and picks the best vision model automatically. No config change needed.
Direct model requests — non-vision models with image content get a clear 400 error upfront instead of a cryptic upstream failure:
Model "groq/llama-3.3-70b-versatile" does not support vision/image inputs.
Use a vision-capable model or a meta-model (free, free-smart, free-fast).
Vision requests bypass the cache — image payloads are large with near-zero repeat rate. Both get() and set() skip caching for vision requests.
Vision-capable models (7 confirmed)
| Model | Provider |
|---|---|
groq/meta-llama/llama-4-scout-17b-16e-instruct |
Groq |
gemini/gemini-2.5-flash |
Gemini |
gemini/gemini-2.5-pro |
Gemini |
github/meta/Llama-3.2-11B-Vision-Instruct |
GitHub Models |
github/openai/gpt-4o-mini |
GitHub Models |
github/openai/gpt-4.1-mini |
GitHub Models |
cloudflare/@cf/mistral/mistral-small-3.1-24b-instruct |
Cloudflare |
Ollama — auto-detected from model name: llava, vision, bakllava, moondream, cogvlm, minicpm-v.
Tests
313 passing across 27 files (up from 295). New tests/vision.test.ts with 18 tests covering detection, cache bypass, fail-fast, meta-model routing, and Ollama heuristics.
No breaking changes
Existing text-only requests are completely unaffected. The supportsVision flag is optional on ModelObject — absent means text-only.