dsh-eyes v0.1.0
On-demand vision for text-only DeepSeek models — DeepSeek answers, Qwen sees.
What it does
- Upload without rejection. Pasted/attached images no longer trip the DeepSeek adapter's
UNSUPPORTED_CONTENT— the plugin admitsinputModalities: [text, image]and strips image blocks right before dispatch. - On-demand, anytime. The model calls a
view_imagetool to look at any image whenever it needs to. Recognition is never forced into the first step, so it behaves as if DeepSeek were natively multimodal. - Multi-image. Each image gets an
attachment_id, andview_imageaccepts a batchattachment_ids(string[]) in one call. - Session isolation. A session can only resolve its own
attachment_ids — no cross-session leaks. - Persistent index at
.dsh/attachments/v1/dsh-eyes-index.json, so image refs survive restarts and compaction. - Any OpenAI-compatible endpoint. DashScope Qwen by default; swap in any vision provider via env vars.
Install
dsh plugin --profile web add github:Leeminjing/dsh-eyesConfiguration (environment variables)
| Var | Required | Default | Notes |
|---|---|---|---|
VISION_API_KEY |
yes | — | DashScope / OpenAI-compatible API key |
VISION_MODEL |
yes | — | e.g. qwen-vl-max |
VISION_ENDPOINT |
no | https://dashscope.aliyuncs.com/compatible-mode/v1 |
any OpenAI-compatible base URL |
targetProvider |
no | deepseek-official |
provider whose model gets the vision admission bypass |
maxImageBytes |
no | 15 MB | size cap for local image_path |
Notes
- Recognition runs on the configured vision endpoint; DeepSeek still writes the answer.
- See the README for provider examples and known limitations.