dsh-freemodels-opencode:接入 OpenCode 免费车道并测试连通性

前言

DeepSeek Harness(DSH)通过插件扩展能力。接入第三方模型时,往往需要从上游清单中过滤付费项、确认哪些可用、再决定是否启用。OpenCode Zen 免费车道有大量模型,但上游返回的 86 个模型中大部分是付费的,手动筛选既繁琐又容易漏掉变化。dsh-freemodels-opencode 插件把 OpenCode 免费车道接入 DSH,提供一键刷新清单、勾选启用、连通性测试与人工评级排序的能力,让模型选择和验证过程更可控。

这是什么

dsh-freemodels-opencode 是一个 DSH 插件,维护者为 xiean676,分类为联网工具。它把 OpenCode Zen 免费车道的模型接入 DSH 的模型选择器,解决”这堆模型到底哪个能用”的问题。插件独立实现 provider opencode,与原插件 @opencode2dsh/dsh-plugin 可以共存。

核心功能

  • 刷新模型:从上游重新拉取模型清单,包含 models.dev 的上下文窗口与弃用标记。
  • 勾选启用:勾上的模型才会以 provider opencode 出现在模型选择器里;不勾选则不显示。
  • 测试连通性:对单个或全部已勾选模型发送真实尺寸请求,给出九档结论。
  • 按能力排序:每个模型带人工评级徽章(S/A/B/C),卡片和选择器按同一顺序排列。

安装与启用

桌面版安装命令:

dsh plugin --profile desktop add dsh-freemodels-opencode

从源码安装:

git clone https://github.com/xiean676/dsh-freemodels-opencode.git
cd dsh-freemodels-opencode
npm install --ignore-scripts
npm run build
dsh plugin --profile desktop add .

安装完成后重启 DSH,进入 设置 → 模型 页面,滚动到最底部即可看到「opencode 免费模型」卡片。

如果卡片显示”读不到插件状态”,说明桌面端没有把 webServer 服务暴露给插件,此时勾选和探测功能不可用,但 provider 本身仍然可用(使用上次保存的勾选状态)。

典型用法

  1. 点 刷新模型:拉取最新的模型清单。首次安装会自动执行一次。
  2. 勾选需要的模型:只有被勾选的模型才会出现在模型选择器里。
  3. 单模型测试:点某个模型右边的 测试,发送一个真实尺寸请求(96 token 上限)。几百毫秒到几十秒会给出结论。
  4. 批量测试:点 测试已勾选(N),串行测试已勾选的模型。遇到「需付费」「车道额度用尽」或带较长 retry-after 的「被限流」会立即停止,避免继续消耗额度。

批量测试会先弹出确认对话框:「确认测试 N 个模型?」,因为它会真的发起 N 次请求。同一个模型在 60 秒内不会重复测试,重复点击只会显示”刚测过”。

探测结论与应对

插件给出九档结论与对应建议:

结论 含义 建议
可用 上游完整响应了请求 使用该模型
被限流 429 FreeUsageLimitError,额度暂时用完 等到建议的时间点再测
车道额度用尽 403 FreeTierError,按客户端指纹拒绝 换模型或等上游放开
需付费 401/403 AuthError,匿名车道无凭据 换免费车道模型
区域受限 403 RegionError,当前出口 IP 被拒 换网络出口
上游不提供 400,模型 id 不存在或协议不匹配 不选该模型
上游临时故障 5xx Upstream request failed 等待后重测
刚测过 60 秒内测过同一模型 等待一分钟后重测
未测出 超时或空响应 重测

「被限流」与「可用」分开,因为探测请求从 ping 改成了真实任务(96 token 上限),能证明整条链路刚刚完整响应过一次。结论只在当前会话里存在,不落盘,避免限流过期后仍然显示”不可用”。

排序与评级

卡片上方提供三个排序按钮:

  • 按能力:按人工评级从高到低,评级相同再按上下文窗口,与模型选择器顺序一致。
  • 按名称:按模型名字母排序。
  • 按上下文:按上下文窗口从大到小排序。

左边的 S/A/B/C 徽章是人工评级,不是跑分结果。评级基于模型”干长活儿稳不稳”的判断:S(90+)、A(80+)、B(70+)、C。鼠标悬停可查看具体理由。想调整顺序,编辑 src/rank.ts 文件。

未在人工表里的新模型会走关键词启发式打分(基于版本号和 flash/preview 等档位词),分数上限为 63,低于最低人工分(64),因此不会顶掉人工评级模型。启发式按 - / _ / . 分词后整词匹配,避免早期版本中子串匹配导致的误判。

推理档位

免费模型全部声明支持推理档位,但各自能选的档位不同。space-bunny-free / beam-free 支持 low/medium/high/xhigh/max;nemotron-3.5-super-vl-free 支持 none → xhigh;deepseek-v4.1-flash-free / glm-5.3-flash-free 支持 low/high/max;big-pickle / mimo-v2.6-flash-free / longcat-2.5-preview-free / nemotron-3.5-lightning-free 上游未声明,插件默认提供 off/low/high/max 四档。

默认四档是实测可接受的写法,故意去掉了 medium 档(写错会导致每次都硬 400)。档位配置在 src/adapter.ts 的 DEFAULT_EFFORT_LADDER。DSH 自带的 dsh-thinking-slider 插件补齐四档功能不适用于此 provider,因为 opencode 是本插件自己的 provider。

如果模型在 DSH 里看不到档位选项,先点 刷新模型 重新拉取元数据,再重启 DSH。档位来自 models.dev 元数据,目录未刷新就不会出现在选择器里。

models.dev 是一个 5.8 MB 的大文档,解析需要约 15 秒。插件将超时放宽到 90 秒并重试一次,即使失败也会沿用上次成功拉取的档位和上下文窗口,避免需要重新配置。点「刷新模型」只拉 Zen 清单(秒回),models.dev 元数据在后台补全,卡片会在 15 秒 / 60 秒 / 150 秒自动跟进刷新。

Zen 清单拉取本身也可能失败(如 DNS 解析间歇性超时)。插件增加了 1 次重试 + 1.5 秒退避,超时放宽到 45 秒,并将错误翻译成人话(DNS 失败 / 连接重置 / TLS 协商失败 / 证书校验失败 / 请求超时),而不是只显示 fetch failed。

会话失败时的重试策略

在 DSH 会话中发送消息时,如果遇到限流,插件会声明自己的重试策略:

  • RATE_LIMIT 不重试:限流窗口是分钟到小时级,重试没有意义。
  • AUTH、LANE_EXHAUSTED、REGION_BLOCKED、MODEL_UNAVAILABLE 不重试:这些原因换 key、换模型或等待都无法自动解决。
  • 只对 EMPTY_RESPONSE、TIMEOUT、TRANSPORT 重试 1 次。

这样避免对限流错误重复重试,浪费额度。失败消息会带上上游给出的等待窗口(如「opencode: Rate limit exceeded. Please try again later.(上游建议 20 小时后再试)」),不需要猜测。

实现与维护

插件源码结构如下:

文件 作用
src/zen-ids.ts 免费车道要求的 ses_* 会话 id 与 7 个伪装头
src/rank.ts 人工评级表与能力排序(调整顺序只需改此文件)
src/catalog.ts 拉取 Zen 清单 + models.dev 元数据,过滤付费模型后合并
src/probe.ts 单模型探测与九档分类,永不抛异常,流式判级
src/net-errors.ts 将 fetch failed 翻译成人话
src/store.ts $DSH_HOME/data/dsh-freemodels-opencode/state.json,串行写、原子替换
src/adapter.ts provider opencode 的 LlmAdapter,只列勾选模型,流式转发
src/bridge.ts 四条同源路由:/status /refresh /select /probe(探测走 NDJSON 流式返回)
src/index.ts 宿主入口:注册 adapter、加载清单、挂路由
src/client/ 浏览器入口 + 卡片

模型清单的权威由插件自己提供:LlmAdapter.listModels() 返回勾选集,勾选为空时返回 [],于是模型选择器不显示任何模型。选择器顺序也由 rank.ts 的能力序决定,任一变化都会触发重新发布。

适用场景与注意

适合需要接入 OpenCode 免费车道、希望批量测试模型可用性、依赖人工评级排序的开发者。

插件以当前 DSH 进程权限运行,安装前应检查源码与许可证。许可证为 MIT,第三方依赖来自 opencode2dsh 项目。

结尾

dsh-freemodels-opencode 通过清单过滤、勾选控制、连通性测试与人工评级排序,让 OpenCode 免费车道在 DSH 中更易用。如需更多信息,可访问插件目录页或 GitHub 仓库。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye