DeepSeek Harness 插件

dsh-model-fix

DSH 模型流式缺陷修复:opencode 聚合端点上 muse-spark-1.2 不发送 finish_reason/[DONE],导致 pi-ai 每次对话结尾报 "Stream ended without finish_reason"(TRANSPORT)并触发重试。本插件在 llm/stream waterfall 上把「已输出内容但结尾被截断」的 finish 改写为正常 stop(英文原文)

跳到安装方式

来源信息

GitHub 仓库
bitterSmilezzz/dsh-model-fix
最近更新
2026年8月19日
分类
工具与能力
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/bitterSmilezzz/dsh-model-fix
插件名:dsh-model-fix
作者:bitterSmilezzz

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器2 个文件
README.md来源说明 · 只读预览

dsh-model-fix

修复特定模型在 DeepSeek Harness(DSH)里「流式内容正常但回合必报错」的流式收尾缺陷

背景:muse-spark-1.2 直连问题的根因

opencode 聚合端点(https://opencode.ai/zen/go/v1)上的 muse-spark-1.2 实现有缺陷: 流式响应正常吐出内容,但从不发送 finish_reason、也不发送 [DONE],流直接关闭 (同端点对照 deepseek-v4-flash / glm-5.2 均正常发送 finish_reason: 'stop' + [DONE])。

DSH 的 llm-pi-ai 走 pi-ai SDK(强制 stream: true 且要求流以 finish_reason 收尾), 于是每次对话的真实表现是:

1. 内容正常流式显示; 2. 结尾报 Stream ended without finish_reason(映射为 TRANSPORT 错误); 3. 回合被判失败,且 TRANSPORT 在默认可重试列表里 → agent 级重试插件按 maxRetries(opencode-go3 配置了 10 次)反复重跑整步,烧多份 token

这与代理无关:直连与走代理的响应完全相同,换代理解决不了。

⚠️ 重要说明:无需开启 opencode 的「Allow models that train on request data」

使用 muse-spark-1.2(经 opencode-go 路由)不需要在 opencode 平台设置里开启 「Allow models that train on request data」

  • 该开关是 opencode 的数据训练授权:开启后你的请求数据可能被用于模型训练,属于

需要慎重对待的隐私授权,不要为了使用 muse-spark 而开启它

  • 实测:不开启该开关,直连 https://opencode.ai/zen/go/v1 的 muse-spark-1.2 即可正常

返回内容(本插件修复的只是流式收尾缺陷,与训练授权无关);

  • 若在 opencode 设置里看到该开关,保持关闭即可;本文档所述修复不依赖它。

开关位置见下图(opencode 设置页 → 提供商区域,与「启用部署在中国的模型」相邻):

!opencode 设置页中的「Allow models that train on request data」开关(opencode 设置页 → 提供商区域)

本插件做什么

llm/stream waterfall 上,对匹配的模型把上述缺陷收尾为正常 stop

  • 仅当流已输出内容text-delta / reasoning-delta / tool-call-delta)且

结尾错误代码为 TRANSPORT / STREAM_CLOSED 且错误信息明确是「缺少终止事件」 (如 Stream ended without finish_reason)时才改写;

  • 真实传输故障(如 SocketError: other side closed不受影响,照常失败
  • 无内容的空响应也照常失败,不会被误吞。

修复后 muse-spark-1.2 直连即可正常使用,无需代理、不触发重试。

安装

# 本地路径
dsh plugin --profile web add /path/to/dsh-model-fix

# 或发布后从 GitHub / npm
# dsh plugin --profile web add github:bitterSmilezzz/dsh-model-fix
# dsh plugin --profile web add dsh-model-fix

安装后重启目标 profile(如 dsh web)生效。

配置

cordis.patch.ymlconfig 两个字段:

字段默认说明
modelPattern^muse-spark对模型 id 测试的正则;只修复匹配的模型
providers[]provider 路由键白名单(如 opencode-go3);空 = 所有 provider 中匹配的模型
- id: model-fix
  name: dsh-model-fix
  config:
    modelPattern: '^muse-spark'
    providers: []

开发

pnpm install
pnpm verify    # typecheck + build + node --test

验证矩阵

  • 单元测试:tests/fix.test.mjs 覆盖缺陷识别、内容保留、空响应放行、真实故障放行等 10 例。
  • 真实端点集成验证:用 pi-ai 同款 SDK 直连 muse-spark-1.2,内容经本插件转换后

结尾由 error(Stream ended without finish_reason) 变为 {"kind":"stop"}