Vision Sub-agent
September 10, 2026 · View on GitHub
When the main model does not accept image input (read_image refuses), use a workflow sub-agent pinned to a vision-capable model to "see" the figure — for checking chart visual quality (blank/overlapping regions, missing axis labels, whether a figure supports a conclusion).
Principle
DeepSeek Harness's workflow tool lets you specify provider and model independently on agent(). The key prerequisite is choosing a model in the current deployment that actually accepts image input (its inputModalities includes image), so the sub-agent can read and review the image.
Registered vision model names differ across deployments — do not hardcode one. Probe first.
How to find an available vision model
Use the llm service's listProviders() / resolveModelInfo(provider, model) to iterate providers and pick a model whose inputModalities includes image:
// Idea: iterate provider -> listModels/resolveModelInfo -> filter inputModalities includes 'image'
// Pick a model that accepts images and get its { provider, model }
const vision = /* a {provider, model} whose inputModalities contains 'image' */
await agent(prompt, { provider: vision.provider, model: vision.model })
Usage template
Dispatch the vision sub-agent via workflow (replace provider/model with what you probed):
await agent(
'Use the read_image tool to read <absolute image path>, review the chart, and output a structured verdict: ' +
'title, axis ticks/labels, legend, data lines, any blank or overlapping regions, and whether it is acceptable.',
{ provider: '<probed provider>', model: '<probed vision model>' } // the vision model
)
Validated example (this host)
On the deployment hosting this preset, kimi-coding / kimi-for-coding (MiMo V2.5, inputModalities text+image, 1M context) was used and validated as the vision model:
- The sub-agent successfully read a PNG image
- It returned a structured review: title, chart type, axes, data lines, legend, and defects (e.g. "axis missing tick labels")
- The result can be used as evidence for chart QA / paper figure verification / review gates
⚠️ This is one validated candidate, not a name every deployment uses. On a different environment, re-probe as described above; on this host the economy vision model is
kimi-coding/kimi-for-coding; if it is unavailable, use any other model whoseinputModalitiesincludesimage.
Notes
- Do not hardcode
provider/model— probe withllm.resolveModelInfobefore use to confirm the model supportsimageinput - If the main model (e.g.
deepseek-v4-flash) declares no image input, a directread_imagethrows — that is expected; use this approach instead