Leafyezi233/dsh-model-gateway ↗★ 0
@leaf233/dsh-model-gateway
Model relay station for DeepSeek Harness (模型中转站): serve any registered DSH LLM provider (e.g. @tnnevol/dsh-codebuddy) over an OpenAI-compatible /v1 API, so other projects can call those models with a standard OpenAI client. 适合需要将DSH内部模型暴露给其他标准OpenAI客户端调用的用户。
インストール
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:Leafyezi233/dsh-model-gatewayドキュメント
README 全文を読む ↗配置项
| 字段 | 默认 | 说明 |
|---|---|---|
lanPort | false | false 关闭;端口号开启独立监听;0 让系统分配一个空闲端口 |
lanHost | 0.0.0.0 | 监听地址。只想给某一个网卡用时填该网卡的 IP |
lanPort 是整数(0–65535)或 false,其他值会在加载时直接报错,而不是等到运行时才发现。
配置(可选)
在 profiles/web/cordis.patch.yml 里按 id 覆盖:
- id: dsh-model-gateway
inject:
- llm
- webServer
config:
# 挂载点,默认 /v1
path: /v1
# 固定密钥:配了就校验,没配就放行。支持 Authorization: Bearer 和 x-api-key。
# 与设置页创建的密钥同时生效;配置里存在固定密钥时,设置页无法关闭鉴权。
apiKeys:
- sk-your-key
# 只暴露这些 provider,默认全部
# 填 [dsh-model-gateway] 可以让外部只看到分组、看不到底层模型。
# 这是「对外」的过滤,不影响 DSH 自己能看到什么。
providers:
- codebuddy
# 裸模型名的优先 provider
defaultProvider: codebuddy
# 跨域响应头,默认 true
cors: true
# 密钥存储路径,默认 /model-relay-keys.json
keysFile: /path/to/keys.json
# 分组存储路径,默认 /model-relay-groups.json
groupsFile: /path/to/groups.json
# 局域网独立监听端口(详见上文"局域网访问");false 或不写即关闭
lanPort: 3081
# 监听地址,默认 0.0.0.0
lanHost: 0.0.0.0
# 统计持久化,默认 true;false 恢复 0.4.x 的纯内存行为
statsPersist: true
# 统计存储路径,默认 /model-relay-stats.json
# statsFile: /path/to/stats.json
# 天级统计保留天数,默认 90(可设 1–365)
# statsRetentionDays: 90
本插件不 patch
connection那一行。早期版本曾用 bundle patch 复写
connection的inject,想把它补成webRuntime+webServer。这个做法是错的:loader patch 是整值替换(dsh-app-boot的applyEntryPatches做的是target[key] = value),不合并,所以它不是"补充"而是"覆盖掉别人写的所有内容"。在真实组合里那一行还带着其他层的要求:
dsh-webgate会加上lanAccessHosts和从ctx.lanAccessHosts读的trustedHosts;connection自己声明inject: ["webServer", "credentials"]并直接读ctx.credentials构造 BrowserAuth。覆盖它会同时丢掉lanAccessHosts和credentials,导致 Connection 起不来——整个/api通道连同 Web 界面一起挂掉,不只是本插件的设置页。结论:
connection由 bundle 栈组合,插件只消费它的服务,不去定义它的依赖。需要 connection RPC 的插件各自声明inject即可,不需要(也不应该)由本插件代为维护那个并集。