Skip to main content

How to use dsh-vision-proxy

Enable DeepSeek Harness to send images with DeepSeek models by automatically invoking a third-party vision model to transcribe images into text before passing to DeepSeek for answering.

This article is auto-derived from indexed fields (wiki / faq / compatibility_json), not freshly AI-generated.

This article is derived from the plugin's already-indexed fields (wiki / faq / compatibility_json / readme), not freshly generated by AI. Source field is noted at the end of each section.

Quick start

dsh-vision-proxy

— source: plugin_wiki.wiki_content

Install & verify

dsh plugin --profile web add dsh-vision-proxy

Run the command above in your DSH Web Profile. Then enable the plugin in the plugin list.

— source: plugins.install

Key points

  • 绝不卡死。匿名端点强制 20 秒超时上限(免费档挂起也拖不住整轮对话);匿名端点遇到 HTTP 429 立即失败(不做无意义的 Retry-After 等待);刚失败(429/超时)的端点进入 60 秒冷却并被跳过。
  • 多模型、多厂商。任何 OpenAI 兼容 VLM 端点都行——百炼/Qwen、QwenCloud 国际站、智谱、OpenRouter、本地 Ollama、或你自己的端点。每条 fallbackModels 都可以带各自独立的 baseURL/model,一个安装即可串联多家。
  • 零配置本地路径。autoLocalOllama(默认开)启动时探测 http://localhost:11434,检测到 Ollama 就自动加入降级链——图片不出本机,免 key 免注册。
  • 快速且明确的失败。没有 key 也没有本地 Ollama 时,转译在几秒内失败并给出可操作指引(配置 VISION_API_KEY / DASHSCOPE_API_KEY 或安装 Ollama)——绝不静默卡住。
  • 有 key 自动提速。导出 VISION_API_KEY / DASHSCOPE_API_KEY 后自动走你配置的付费端点(默认百炼 qwen3.7-flash——快、便宜、不限速;百炼/QwenCloud/智谱/OpenRouter 或任意 OpenAI 兼容端点均可);没有 key 的条目会被跳过而不是失败。

— source: plugin_wiki.readme_en (fallback readme_raw)

FAQ

How to verify it works after installation?

Running dsh --profile web --dump-config | grep dsh-vision-proxy should show exactly one entry; restart dsh web and the model selector will show the "DeepSeek + Auto Image Recognition" option.

Can it be used without an API key?

Yes. By default it detects local Ollama (http://localhost:11434), so image recognition happens locally without uploading; if Ollama is also not available, it fails quickly within a few seconds and provides configuration guidance without hanging.

Why does it say "no API key" even after exporting environment variables on Windows?

Windows explorer.exe caches old environment variables, so running dsh can't read them. Writing apiKey directly into the plugin configuration (profile's cordis.patch.yml) is the only reliable way on Windows.

What to do when pnpm ≥ 10 reports Ignored build scripts?

Add allowBuilds: { dsh-vision-proxy: true, sharp: true } to the profile's pnpm-workspace.yaml, then run dsh plugin --profile web add dsh-vision-proxy again to complete registration.

What to do if small text details are lost in transcription?

This is a capability limit of the vision model itself, not a plugin bug. You can switch to a stronger model (like qwen3-vl-plus) or increase maxTokens; this is especially noticeable in dense OCR scenarios.

Where is image data uploaded to? Will it be saved?

During transcription, images are sent via base64 over HTTPS to the configured or auto-detected VLM endpoint. The plugin only caches in-process (by SHA-256, 200 entry limit), nothing is saved to disk. For sensitive images, use local Ollama or self-hosted endpoints.

Will the entire conversation break when all vision endpoints fail?

By default no. failureMode: placeholder (default) inserts "[Image translation failed: reason]" placeholder text at the original image location and the conversation continues; failed images are tracked by content hash for 60 seconds, during which no new network requests are made.

Which vendors or models are available?

Any OpenAI-compatible vision endpoint works: default uses BaLian qwen3.7-flash, also supports QwenCloud International, Zhipu glm-4.6v-flash, OpenRouter, local Ollama, etc. You can freely switch via baseURL/model and chain multiple providers through fallbackModels.

— source: plugin_wiki.faq_json

Compatibility

  • DSH: >=0.1.0-rc.6
  • Node: >=22.19.0

— source: plugin_wiki.compatibility_json

Pitfalls

Review the upstream repo before installing. This guide is auto-derived from indexed fields and may lag the latest release. If anything contradicts the official docs, treat the upstream source as authoritative.

— source: general rule