Einskyle/dsh-llm-vision-bridge ↗★ 1
dsh-llm-vision-bridge
DeepSeek vision bridge for the dsh web GUI: route image attachments to a vision model (pi-ai / llama.cpp Qwen3-VL) and continue the conversation with the text description on a text-only LLM (DeepSeek)
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Einskyle/dsh-llm-vision-bridge说明文档
阅读完整 README ↗dsh-llm-vision-bridge
English | 中文
让纯文本模型(DeepSeek)也能"看"图片:在 dsh web GUI 的聊天输入框直接粘贴图片,插件自动把图片路由到视觉辅助模型(复用你已配置的 pi-ai / llama.cpp 上的 Qwen3-VL),得到文字描述后交给 DeepSeek 继续生成回复——体验与原生多模态模型一致。
功能特性
- 原生 LLM provider——注册
deepseek-vision到 DSH 的LlmAdapter接缝。图片准入、请求路由、会话压缩全部由 harness 原生机制驱动,无需改动 UI、无需拦截前端。 - 无图零开销——不含图片的请求原样透传给回退 provider(默认
deepseek-official)。 - 视觉辅助回复——每张图片由视觉模型解析(附带用户文本一起送入提示词),替换为
[图片 N 描述]文本块后再发给 DeepSeek。 - LRU 描述缓存——同一张图 + 同一问题不重复解析;历史回放与会话压缩不会反复调用视觉模型。
- 503/429 自动重试——适配台式机单 GPU 互斥调度(其他工具占用显存时视觉网关返回 503)。
- 可配置失败策略——
placeholder(插入失败说明继续对话)或error(整轮报错)。
工作原理
聊天输入栏原生支持图片附件:图片以 {type:"image", attachment} 内容块进入模型请求。但 DeepSeek chat-completions 适配器对 image 块显式报 UNSUPPORTED_CONTENT,纯文本模型无法直接处理。
本插件的桥接 provider(deepseek-vision)对外声明 inputModalities: ["text", "image"],从而通过 host 的图片准入校验(否则消息进 agent 前就会被 MODEL_DOES_NOT_SUPPORT_IMAGES 拒绝)。在它的 stream() 中:
- 无图 →
yield* ctx.llm.stream({ ...options, provider: fallbackProvider }),纯透传、零开销; - 有图 → 对每个 image 块,通过一次嵌套的
ctx.llm.stream()调用配置的视觉 provider(如 pi-ai 的llama路由,图片字节由附件服务自动读取),把 image 块替换为[图片 N 描述]\n文本块后,将改写后的消息转发给回退 provider。
会话压缩(compaction)复用最近一次请求的 provider,因此含图历史也会自动走桥接。可选的 autoRoute(默认关)会把 deepseek-official 的 agent 请求额外改写为本 provider,但无法绕过 host 的图片准入校验,仅作兜底——要真正发图,请把主模型配置为 deepseek-vision。
安装
# 从 GitHub 安装(纯 JS 无需构建,也无需 allowBuilds)
dsh plugin --profile web add github:Einskyle/dsh-llm-vision-bridge
# 或从 npm registry 安装
dsh plugin --profile web add dsh-llm-vision-bridge
# 重启 web 服务生效
pnpm dsh web