前言¶
DeepSeek Harness(DSH)在判断一个模型能否接收图片时,只读取 llm-pi-ai 解析出的模型元数据。中转站的 /v1/models 通常不返回模态信息,配置里于是没有 input 字段,默认值是 ["text"]。图片在到达上游之前会被本地两道闸门拦掉:
- 会话准入:
dsh-api-session-controller的prompt()方法返回session/attachment-invalid,原因标记为MODEL_DOES_NOT_SUPPORT_IMAGES。 - 请求适配:
dsh-llm-pi-ai的streamWithSnapshot()抛出LlmError,类型为UNSUPPORTED_CONTENT。
即使上游模型本身支持图片,DSH 也会在用户按下发送时直接拒绝。
这是什么¶
dsh-send-photos 是一个 DSH bundle 包(dsh.bundle.patch),用于补全那些收得下图、却没有声明多模态能力的中转站/反代路由的输入声明。插件在 adapter 的 modelOf() 方法外面套一层,对管辖范围内的路由,把缺失的 image 补进 input。
维护者:Ayowait
分类:模型推理
核心价值:让 DSH 不再因为缺少模态声明而拒绝图片,从而兼容更多中转站配置。
核心功能¶
插件对管辖范围内的路由,在解析模型元数据后,将 image 加入 input 列表,使 DSH 允许图片通过。具体行为:
- 不修改请求体:图片仍以标准 OpenAI image part 格式发出,不做编码、拆分或伪装。
- 不修改配置文件:不触碰
cordis.patch.yml、settings 文档或 profile 文件。 - 可逆:卸载时将
modelOf原样还原。 - 只作用于存在
modelOf的适配器(pi-ai 路由,如api: openai-completions)。官方 DeepSeek 账号路由走另一适配器,不受影响。 - 监听
llm/adapters-updated,对后挂载的路由和后续新增的模型同样生效。
安装与启用¶
这是一个 DSH bundle 包,不是普通 npm 脚本。安装方式如下:
# 桌面版:在插件管理器里以本地目录安装,或
dsh plugin --profile <你的 profile> add link:<本目录绝对路径>
安装后,profile 的 package.json 会增加一条依赖,Loader 里会加载 dsh-send-photos。
卸载方式:
dsh plugin --profile <你的 profile> remove dsh-send-photos
配置示例¶
- id: dsh-send-photos
name: dsh-send-photos
config:
providers: [] # 要覆盖的 route;空数组 = 全部已挂载路由
modalities: [text, image]
enabled: true
若只想作用于某个中转站,可缩小范围:
providers:
- my-relay
适用场景与注意¶
- 该插件用于补声明,而非增强上游能力。如果上游模型确实不支持图片,请求会在上游失败,此时应将该 route 从
providers中排除。 - 显式写了
["text"]的模型也会被覆盖(解析后无法区分“声明为纯文本”和“没声明”)。如果某个 route 上有这类模型,用providers缩小范围,或只保留需要的那条。 - 依赖
llm-pi-ai路由(api: openai-completions这类)。若将来 DSH 改了适配器内部方法名,插件会打一条 warn 并保持无害的空转。 - 在 DSH
0.2.1-rc.2上验证通过。
结尾¶
dsh-send-photos 让 DSH 能够兼容那些缺少模态声明的中转站配置,从而在本地完成补全后再向上游发送标准 OpenAI image part 请求。如需查看源码或提交问题,可访问:
- GitHub:https://github.com/Ayowait/dsh-send-photos
- 目录页:https://www.skillhub.cn/plugins/Ayowait/dsh-send-photos