cqnxnzg/dsh-llm-openai-compatible ↗★ 0
dsh-llm-openai-compatible
Universal OpenAI-compatible LLM provider plugin for DeepSeek Harness (万能插头) — point any local or remote OpenAI-compatible endpoint at the harness and chat with it
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:cqnxnzg/dsh-llm-openai-compatible说明文档
阅读完整 README ↗配置
最小配置(本地 vLLM 等)
默认 baseURL = http://127.0.0.1:8000/v1,默认模型目录里有几个常见本地模型 id。打开 Settings → Plugins → llm-openai-compatible,把 models[].id 改成你本地服务实际提供的模型 id(见下文「UNKNOWN_MODEL 怎么消除」),保存即可在模型选择器里选中聊天。
配置字段(全部可选)
| 字段 | 默认 | 说明 |
|---|---|---|
apiKeyEnv | OPENAI_API_KEY | 凭据引用(环境变量名);未配置/为空 → 匿名请求(本地端点可用) |
baseURL | http://127.0.0.1:8000/v1 | OpenAI 兼容端点;自动归一化到 /v1 |
models | 4 个示例模型 | 端点实际服务的模型目录;未列出则请求报 UNKNOWN_MODEL |
maxTokens | — | 全局默认输出上限;模型行未声明时兜底 |
defaultContextWindow | 131072 | 模型未声明 contextWindow 时的上下文容量 |
streamIdleTimeoutMs | 300000 | 流式读取空闲超时 |
retryPolicy | 正常默认 | 重试策略(见下) |
models[].* 字段语义:
| 字段 | 说明 |
|---|---|
id | 端点接受的模型 id(必须与端点实际服务的一致,否则 UNKNOWN_MODEL) |
name | 选择器显示名;省略用 id |
description | 选择器里的补充说明(可选) |
contextWindow | 该模型上下文容量(token) |
maxTokens | 该模型专属输出上限,优先于全局 maxTokens;请求级 maxTokens 又优先于它 |
vision | true = 接受图片输入(请求带图时输入模态含 image) |
thinking | true = 支持原生思考;选择器可调 thinking 等级(off/low/medium/high/max) |
defaultEffort | 聊天选择器的默认思考等级;需 thinking: true 且等级在支持集合内才生效 |
tools | 遗留能力标志,运行时忽略,仍被解码 |
retryPolicy 可配置值(省略 = 正常默认:最多重试 2 次,重试码 EMPTY_RESPONSE/RATE_LIMIT/SERVER/TIMEOUT/TRANSPORT,退避 initialDelayMs: 500 / maxDelayMs: 10000 / jitterRatio: 0.1):
retryPolicy:
mode: normal # normal | always
maxRetries: 3 # normal 模式:最大重试次数
retryableCodes: [RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT] # normal 模式:可重试错误码
backoff:
initialDelayMs: 500
maxDelayMs: 10000
jitterRatio: 0.1
### 最小配置(本地 vLLM 等)
默认 `baseURL = http://127.0.0.1:8000/v1`,默认模型目录里有几个常见本地模型 id。打开 **Settings → Plugins → llm-openai-compatible**,把 `models[].id` 改成你本地服务**实际提供**的模型 id(见下文「UNKNOWN_MODEL 怎么消除」),保存即可在模型选择器里选中聊天。
### 配置字段(全部可选)
| 字段 | 默认 | 说明 |
|---|---|---|
| `apiKeyEnv` | `OPENAI_API_KEY` | 凭据引用(环境变量名);未配置/为空 → 匿名请求(本地端点可用) |
| `baseURL` | `http://127.0.0.1:8000/v1` | OpenAI 兼容端点;自动归一化到 `/v1` |
| `models` | 4 个示例模型 | 端点实际服务的模型目录;未列出则请求报 `UNKNOWN_MODEL` |
| `maxTokens` | — | **全局**默认输出上限;模型行未声明时兜底 |
| `defaultContextWindow` | `131072` | 模型未声明 contextWindow 时的上下文容量 |
| `streamIdleTimeoutMs` | `300000` | 流式读取空闲超时 |
| `retryPolicy` | 正常默认 | 重试策略(见下) |
**`models[].*` 字段语义:**
| 字段 | 说明 |
|---|---|
| `id` | 端点接受的模型 id(**必须**与端点实际服务的一致,否则 `UNKNOWN_MODEL`) |
| `name` | 选择器显示名;省略用 `id` |
| `description` | 选择器里的补充说明(可选) |
| `contextWindow` | 该模型上下文容量(token) |
| `maxTokens` | **该模型专属**输出上限,优先于全局 `maxTokens`;请求级 `maxTokens` 又优先于它 |
| `vision` | `true` = 接受图片输入(请求带图时输入模态含 image) |
| `thinking` | `true` = 支持原生思考;选择器可调 thinking 等级(off/low/medium/high/max) |
| `defaultEffort` | 聊天选择器的默认思考等级;需 `thinking: true` 且等级在支持集合内才生效 |
| `tools` | 遗留能力标志,运行时忽略,仍被解码 |
**`retryPolicy` 可配置值**(省略 = 正常默认:最多重试 2 次,重试码 `EMPTY_RESPONSE`/`RATE_LIMIT`/`SERVER`/`TIMEOUT`/`TRANSPORT`,退避 `initialDelayMs: 500` / `maxDelayMs: 10000` / `jitterRatio: 0.1`):
```yaml
retryPolicy:
mode: normal # normal | always
maxRetries: 3 # normal 模式:最大重试次数
retryableCodes: [RATE_LIMIT, SERVER, TIMEOUT, TRANSPORT] # normal 模式:可重试错误码
backoff:
initialDelayMs: 500
maxDelayMs: 10000
jitterRatio: 0.1