enoughpower/dsh-desktop-mac--plugins-dsh-vision-router ↗★ 1
dsh-vision-router
Eyes for text-only DeepSeek Harness agents: built-in free vision chain (no key) + pixel-level vision tools (Q&A, grounding, crop, pixel diff, colors, OCR, SVG trace, cutout, screenshots). One-command install, no Python, image turns work like ordinary tool-calling turns.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:enoughpower/dsh-desktop-mac#f957acef9a0861cef94ae074c75d6bfab0c04379&path:plugins/dsh-vision-router说明文档
阅读完整 README ↗Configuration
Everything is optional; defaults work out of the box. Prefer Settings → Vision Router; profile overrides remain available for advanced deployments:
| Field | Default | Meaning |
|---|---|---|
routingMode | ordered | ordered keeps the configured model-chain order; auto delegates prioritization to measured capability evidence. Auto is never enabled by migration |
routingPreference | balanced | Auto preference: balanced, quality, speed, or local; changes ordering only among already-authorized candidates |
backgroundBenchmarking | off | background capability profiling authority: off, local-free, or all; enabling Auto does not change it, and authorized background work runs only while Auto is active |
provider / model | vision-http / ovh/Qwen2.5-VL-72B-Instruct | shorthand vision backend route (adapter-backed provider + model that genuinely accepts images) |
fallbacks | [] | backup image models for the shorthand vision provider |
providers | built-in free vision-http pair | multi-provider vision backend chain { provider, model, fallbacks[] }, tried in order; do not put text-only models here |
httpProviders | built-in OVH entry | direct OpenAI-compatible endpoints { name, baseURL, model, apiKeyEnv, maxTokens } |
autoWrapProviders | true | discover enabled provider/models and live-sync their internal vision wrappers; confidently owned wrappers are hidden from the stock model picker while original groups stay unchanged |
wrappedProviders | [{ provider: 'deepseek-official', models: [] }] | optional manual wrapper scope { provider, models[] }, used after disabling auto-wrap or to restrict which models can enter an internal wrapper through “👁 Vision”; changes apply live, no restart |
routing | false | legacy whole-turn chain routing (one-shot answer). false = tools-first flow (recommended) |
reverseRouting | true | with routing: true, route text turns back to textProvider |
wrapperRoute / chainRoute | deepseek-vision / vision-chain | admission wrapper route name / fallback chain route name (empty disables) |
stealth | false | take over the official deepseek-official route (official row only; custom routes are auto-wrapped by default) |
textProvider | deepseek-official / deepseek-v4-pro | the model that reasons (your daily model) |
tool / progressiveTools / autoActivateOnImage | true / false / true | vision tools on / progressive mounting (off by default for a stable tool schema) / image-turn auto-mount when progressive mode is enabled; progressiveTools is boot-time config |
rewriteImages | true | rewrite image blocks in the model input (cached description or tool-hint marker); the UI log keeps images |
desktopScreenshot | false | privacy opt-in for the model-callable vision_screenshot desktop-capture tool; checked live before every capture |
freeFallback | true | append the anonymous OVH models after explicit local/custom HTTP backends; turning this off never disables an explicitly configured local backend |
localOllama | { enabled: false, baseURL: 'http://127.0.0.1:11434/v1', model: 'qwen2.5vl', format: 'openai' } | local vision backend; when enabled, local-ollama leads the HTTP vision chain, is skipped automatically when down, and supports OpenAI or Anthropic wire format |
localLmStudio | { enabled: false, baseURL: 'http://localhost:1234/v1', model: '', format: 'openai' } | local LM Studio backend after Ollama; enter the exact model identifier from LM Studio Developer or /v1/models |
visionTurnBudgetMs | 0 | whole-turn vision wall-clock budget; 0 means unlimited. Concrete provider calls/tools still keep their own hard deadlines |
downscale / downscaleMaxPixels | true / 4000000 | pre-call downscale and its pixel budget (latency guard) |
cache / cacheTtlSeconds / cacheMaxEntries | true / 3600 / 200 | vision answer cache |
timeoutMs | 120000 | per vision call deadline |
artifactsDir | .dsh-vision-router/artifacts | artifact directory (relative to the session workspace) |
proxy / proxyHosts | '' / openrouter hosts | optional proxy for vision provider hosts only |
catalogCorrections | true | built-in catalog-routing corrections for known upstream wire-protocol mismatches; each correction disarms itself once the catalog is fixed upstream |
Local Ollama vision backend (merged from dsh-vision)
Incremental author: shaoqiuyuavailable (router local-vision increment)
Design credit: the local vision backends (Ollama / LM Studio dual backends, structured recognition, screenshot identification, same-image memory dedup, failure fallback, concurrency protection and timeout handling) inherit their design from dsh-vision — merged into the HTTP vision chain here, with per-level fallback and dual-protocol support added on top.
An optional keyless local-first vision path for private, free, offline recognition. It plugs into the existing HTTP vision chain as local-ollama; if it fails, any configured cloud backends can still be tried unless you deliberately configure a local-only chain.
1. Install Ollama and pull a vision model