# @blue/dsh-image-model-router [English](README.md) · [简体中文](README.zh-CN.md) A [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) (dsh) plugin that routes an agent request to a **vision model** only when the user message contains an image, and keeps the **original model** otherwise. - Text-only turns keep your normal model (e.g. `deepseek-v4-pro`). - Turns that carry an image (a screenshot, a photo, a diagram) are routed to a multimodal model — by default `deepseek-v4-flash-vision-exp`. - Per-agent, per-step: the flag is keyed by the agent object in a `WeakMap`, so it can never leak across agents or turns. ## Install ```bash dsh plugin --profile web add @blue/dsh-image-model-router ``` The row is **disabled by default** so installing never silently changes routing. Enable it from the profile's own `cordis.patch.yml`: ```yaml - id: dsh-image-model-router disabled: false config: provider: deepseek-official model: deepseek-v4-flash-vision-exp ``` Then restart the profile (`dsh web`) and hard-refresh the browser. ### Install from a Git checkout (development) ```bash git clone https://github.com/Blue-2571/dsh-image-model-router.git cd dsh-image-model-router dsh plugin --profile web add . ``` ## Configuration | Key | Default | Description | | :--- | :--- | :--- | | `provider` | `deepseek-official` | Provider id the vision request is routed to. | | `model` | `deepseek-v4-flash-vision-exp` | Vision model id. Any image-capable route your provider advertises works here. | ## How it works ``` user message with image │ ▼ agent/pre-step (waterfall) ── detect image block ──► flag agent │ ▼ agent/request (waterfall) ── flagged? ──► swap provider/model, clear flag │ ▼ vision model answers ``` Image detection walks nested `tool-result` content the same way the harness's own image policy does, so an image produced by a tool result is treated as image input too. ## License MIT