插件目录 / AI Models / dsh-llm-gateway-compat
dsh-llm-gateway-compat
已验证 · 实测可装 snowshadow
功能简介
钉住流式 tool-call 空 `id`/`name`,并把 `developer` / `max_completion_tokens` 的 400 写进官方 `llm-pi-ai` `compat` 后重试。可选 Chat Completions adapter 提供 extraBody 和 `api-key` header。
可用 — 实测通过,早期项目
钉住流式 tool-call 空 `id`/`name`,并把 `developer` / `max_completion_tokens` 的 400 写进官方 `llm-pi-ai` `compat` 后重试。可选 Chat Completions adapter 提供 extraBody 和 `api-key` header。 实测能干净安装、正常启动。早期项目,但功能可用。
「已验证」表示我们的自动化 CI 在干净 profile 里实际执行了 dsh plugin add 并启动成功——仅此而已。功能描述与版本兼容性均为作者声明。这不是安全审计,也不代表对第三方代码的背书。
README
dsh-llm-gateway-compat
English | 中文
A community bundle compatible with DeepSeek Harness (DSH). It stops empty streamed tool-call identity from wiping the call, turns the two most common request 400s into an llm-pi-ai compat write plus one retry, and can own Chat Completions routes that default to system / max_tokens.
This is not an official DeepSeek package. It is not endorsed by DeepSeek.
What it does
Streamed tool-call identity (v0.1)
Wraps llm/stream so later SSE fragments with empty id / name cannot overwrite a nonempty value. Synthesizes compat_call_<index> when no id ever arrives. Official DeepSeek streams stay unchanged when identity is already stable.
Request dialect 400s (v0.2)
On agent/request-error, classifies developer-role and max_completion_tokens refusals, writes the matching field into official llm-pi-ai settings, retries the same step once, and injects a logged plugin notice. Generic 400s are not retried.
Chat Completions adapter (v0.3)
Optional routes under llm-gateway-compat.providers. Each route is a direct POST {baseURL}/chat/completions adapter with gateway-safe defaults:
- system prompt is always
role: system - output cap is always
max_tokens - empty tool-call id/name never overwrite, even if stream sanitizing is off
extraBodyfor fields the harness vocabulary does not own (user,prompt_cache_key)- extra headers,
Authorization: Beareror DashScopeapi-key - thinking dialect:
reasoning_content(default),thinking,think-tags, ornone
Route ids must not collide with llm-deepseek or llm-pi-ai. Pick a new id such as dashscope-compat.
Install
From npm (recommended — ships built lib/, no install-time build):
dsh plugin --profile web add dsh-llm-gateway-compat
Restart dsh web.
From GitHub, pnpm fetches sources and runs prepare. pnpm ≥10 refuses that script until the profile allowlists it:
dsh plugin --profile web add github:snowshadow/dsh-llm-gateway-compat
If the first add fails, put this in that profile's pnpm-workspace.yaml and re-run add:
allowBuilds:
dsh-llm-gateway-compat: true
Pin a commit (github:snowshadow/dsh-llm-gateway-compat#<sha>) so a later push cannot change what runs. Only allow packages whose source you trust.
Config
Plugin switches (also live under $DSH_HOME/settings.yaml as llm-gateway-compat:):
| key | default | meaning |
|---|---|---|
enabled |
true |
master switch for stream wrapping and 400 recovery |
diagnose |
true |
classify known gateway 400s and inject a YAML snippet |
autoApplyCompat |
true |
persist the matching llm-pi-ai compat field and retry once |
providers |
{} |
Chat Completions routes this plugin owns |
One gateway route:
# $DSH_HOME/settings.yaml
llm-gateway-compat:
providers:
dashscope-compat:
displayName: DashScope
baseURL: https://dashscope.aliyuncs.com/compatible-mode/v1
apiKeyEnv: DASHSCOPE_API_KEY
authHeader: bearer
thinkingFormat: reasoning_content
extraBody:
user: harness
models:
- id: deepseek-v4-flash
name: DeepSeek V4 Flash
Export DASHSCOPE_API_KEY in the environment that launches dsh. Include /v1 (or /compatible-mode/v1) in baseURL when the gateway requires it. Then select the dashscope-compat / deepseek-v4-flash route in the model picker.
Provider fields:
| key | default | meaning |
|---|---|---|
baseURL |
required | origin plus path prefix; /chat/completions is appended |
apiKeyEnv |
required | environment variable holding the raw key |
authHeader |
bearer |
bearer or api-key |
models |
[] |
advisory catalog; unlisted ids still resolve as text-only |
extraBody |
— | merged under harness-owned fields; max_completion_tokens is stripped |
headers |
— | extra request headers; User-Agent still comes from harness attribution |
thinkingFormat |
reasoning_content |
history + stream reasoning dialect |
includeUsage |
true |
send stream_options.include_usage |
Develop
pnpm install
pnpm test
pnpm run build
Known limitations
- Cannot recover a tool name the gateway never emitted.
- Image input is refused (
UNSUPPORTED_CONTENT). think-tagsis applied on replayed assistant history, not on partial streamed tags.- No idle-stream watchdog; caller
AbortSignalis honored. - Auto-apply only writes
supportsDeveloperRole: falseandmaxTokensField: max_tokensonllm-pi-airoutes. - There is no Web settings card; edit
settings.yamlor the profile patch.
License
MIT
安装
装一次目录插件,之后本站所有插件都能让 DeepSeek Harness 自动找、自动装:
dsh plugin add dshbase-catalog 然后对 agent 说「帮我装 dsh-llm-gateway-compat」,它会在目录里找到并自动安装。文档:dshbase-catalog · 已验证场景包。
Web profile:
dsh plugin --profile web add dsh-llm-gateway-compat Headless(CLI)profile:
dsh plugin --profile headless add dsh-llm-gateway-compat 包信息
npm:dsh-llm-gateway-compat · 版本 0.3.0 · 实测环境 dsh 0.1.0-rc.6
实测报告
端到端验证通过:dsh 0.1.0-rc.6 上 L1 安装 + L2 加载 + L3 运行问答。