Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

dsh-llm-opencodex

把本机 OpenCodex 代理(http://127.0.0.1:10100,LaunchAgent com.opencodex.proxy 常驻)的模型 (GPT-5.x / Claude / Grok / Gemini / DeepSeek)以 provider 形式接入 DeepSeek Harness(DSH)

这是一个正式的 DSH 插件(Cordis 插件包,模式同官方 @deepseek-ai/dsh-llm-deepseek): 以 provider 适配器注册路由 opencodex,自带模型目录,开箱即用。

仓库内容

路径 说明
dsh-llm-opencodex/ 插件包:package.json + lib/index.js(适配器 + 插件入口)
install-local.sh 一键安装脚本(链接插件包 + 写入 profile patch 行,幂等)
LICENSE MIT

插件能力:OpenAI 兼容 chat-completions 适配器 —— 流式、工具调用、reasoning_effortreasoning_content 透传、图片输入(走 DSH 附件服务)、usage、错误映射、空闲看门狗、重试策略。

安装

# 一键(默认 web profile;其它 profile:./install-local.sh <profile>)
./install-local.sh

# 然后重启 DSH Web 使插件加载:
#   kill $(lsof -tiTCP:3080 -sTCP:LISTEN) && dsh --profile web

手动安装等价于三步:

# 1) 让 profile 能解析插件包
ln -sfn $PWD/dsh-llm-opencodex ~/.dsh/profiles/node_modules/dsh-llm-opencodex

# 2) 在 ~/.dsh/profiles/web/cordis.patch.yml 末尾追加(注意必须是 insert: 形式):
#    - insert:
#        - id: llm-opencodex
#          name: 'dsh-llm-opencodex'

# 3) 重启 DSH Web

重要:如果你之前用设置文件方式配过 opencodex(~/.dsh/settings.yaml 里的 llm-pi-ai.providers.opencodex 节),必须先删除该节 —— 否则 pi-ai 与插件会重复注册 opencodex 路由,启动失败(DUPLICATE_ADAPTER)。

配置(可选,热重载)

默认值已开箱可用(baseURL: http://127.0.0.1:10100/v1authHeader: Bearer opencodex-local, 30 个模型的目录)。需要覆盖时,在 ~/.dsh/settings.yamlllm-opencodex: 节,改完即生效:

llm-opencodex:
  baseURL: "http://127.0.0.1:10100/v1"     # 必须带 /v1(见下方「关键点」)
  authHeader: "Bearer opencodex-local"      # 本机代理不校验 token;静态占位即可
  # apiKeyEnv: "OPENCODEX_API_KEY"          # 可选:改用真实凭据(Bearer <key> 覆盖 authHeader)
  models:
    - id: "gpt-5.6-sol"                     # 只覆盖需要改的模型,其余沿用内置默认
      contextWindow: 372000
      input: ["text", "image"]
      reasoningEfforts: {low: low, medium: medium, high: high, xhigh: xhigh, max: max}
      defaultReasoningEffort: low

环境变量 OPENCODEX_BASE_URL 可覆盖 baseURL(仅受信任的启动层)。

验证

BASE=http://127.0.0.1:3080   # 按实际 DSH Web 端口改

# provider 已激活(settingsNs 应为 llm-opencodex,证明来自插件)
curl -s -X POST $BASE/api/llm.providers -H 'content-type: application/json' \
  -d "{\"type\":\"client-request\",\"rpcId\":\"$(uuidgen|tr A-Z a-z)\",\"method\":\"llm.providers\",\"payload\":{}}"

# 模型目录(应有 id="opencodex" 的分组,约 30 个模型;failures 为空)
curl -s -X POST $BASE/api/llm.models -H 'content-type: application/json' \
  -d "{\"type\":\"client-request\",\"rpcId\":\"$(uuidgen|tr A-Z a-z)\",\"method\":\"llm.models\",\"payload\":{}}"

之后在 Web 的模型选择器 / 设置 → Models 里选「OpenCodex (local proxy)」下的模型即可。

卸载

rm ~/.dsh/profiles/node_modules/dsh-llm-opencodex            # 删符号链接
# 从 ~/.dsh/profiles/web/cordis.patch.yml 删除 insert 块,重启 DSH Web

故障排查

现象 原因 处理
Stream ended without finish_reason baseURL 缺 /v1,请求打到 dashboard HTML llm-opencodex.baseURL.../v1 或设 OPENCODEX_BASE_URL
启动报 DUPLICATE_ADAPTER llm-pi-ai.providers.opencodex 设置节冲突 删除该设置节后重启
401 Not logged in to anthropic 上游 Claude 未登录 OAuth ocx login anthropic(无需改 DSH)
gpt-5.3-codex-spark 报 400 模型已被上游下线 models: 里删掉该条目
偶发 502 upstream_server_error opencodex 上游瞬时故障 重试;持续失败看 ~/.opencodex/service.log
改了设置没生效 YAML 语法错 / 设置路径不对 校验 YAML;确认 $DSH_HOME;看 llm.modelsfailures

关键点

  • baseURL 必须带 /v1:适配器请求 <baseURL>/chat/completions,缺 /v1 会打到 opencodex 的 dashboard HTML 而不是 API。
  • 插件与 llm-pi-ai 设置节二选一,不要同时启用。
  • 模型走 OpenCodex 背后的真实上游账号,使用消耗对应配额(ChatGPT / Claude / Grok 等)。
  • 目录随 OpenCodex /v1/models 变化:改 models: 节即可覆盖,无需改插件。

About

Integrate the local OpenCodex proxy's models (GPT-5.x / Claude / Grok / Gemini / DeepSeek) into DeepSeek Harness (DSH) as an llm-pi-ai provider

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages