Repository navigation
Releases
Releases · SnowNight777/dsh-llm-gateway
v0.1.1
修了什么
- 配置区现在真的会出现:
Config的每个字段补上 schemastery 的.volatile()标记。
dsh-settings的volatileForm()会整条丢弃「一个 volatile 字段都没有」的条目 —— 条目不进
namespaces,浏览器半侧的whileServed永远等不到,插件页的「配置」块也就永远不会出现。 - 修掉
.volatile()引入的加载失败:volatile 字段在 cordis 传入的 config 上不是值,而是一个
accessor({ get() })。直接展开会让server.listen(对象)抛 TypeError、插件 fiber 落进
failed(插件页显示「异常」)。新增readConfig()逐字段读取并对 accessor 取值。 - 安装自检:只登记
dsh.profile.bundles、不在dependencies里的「游离安装」会在宿主日志告警,
/healthz暴露installation字段。 - README 安装节重写;
package.json加files白名单;新增build-and-pack.ps1。
安装
按 README「安装」一节:作为 profile 依赖安装(建议打包安装)。
v0.1.0
首个发行版。把 DSH 已配置的 provider / model 以 OpenAI 兼容接口暴露到本机回环,供任意本地程序调用。
安装
在 profile 的 package.json 里加一行依赖,跑一次 pnpm install:
{
"dependencies": {
"dsh-llm-gateway": "file:/abs/path/to/dsh-llm-gateway"
}
}然后重启 DSH(bundle 清单变更必须重启)。日志出现
[llm-gateway] gateway listening on http://127.0.0.1:8790/v1 即为就绪。
接口
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /v1/models |
全部 provider/model;裸 id 唯一时同时以裸 id 列出,并带 input_modalities、alias 等元数据 |
| POST | /v1/chat/completions |
OpenAI 兼容,流式与非流式 |
| GET | /healthz |
网关状态与目录统计 |
能力
- 工具调用:
tools完整转发,tool_calls按 OpenAI 约定分片返回;role:'tool'回执与
assistant.tool_calls历史都能正确落回 DSH 的消息形状。 - 图片输入:
image_url支持 data URL 与 http(s) 链接,图片经 DSH 的 attachments 服务落盘后交给模型;
/v1/models里input_modalities含image的模型可直接用。 - thinking 双向:非流式响应带
reasoning_content,请求也可回传;reasoning_effort原样透传。 - usage 带明细:除三个基本数字外,还给出
prompt_tokens_details.cached_tokens与
completion_tokens_details.reasoning_tokens。 - 错误码有据可依:按 DSH 的稳定 code 映射状态(401 / 429 / 400 / 404),
Retry-After一并透传。
几条刻意的设计
- 没有去路的参数一律
400,不静默忽略——top_p、seed、response_format这些在 DSH 的调用配置里
没有去处,与其让客户端以为生效了,不如直接说清。 - 未知模型
404、歧义裸 id400,不会静默换一个模型给你答案。 - 上游或附件服务拒绝时透传原话(如
INVALID_IMAGE),不替它改口。
已知边界
- 默认只绑回环且不鉴权;要把
host改到局域网或公网,必须同时配apiKeys。 - 音频、视频 part 不支持,返回
400 unsupported_content。 - 图片依赖 DSH 挂载的 attachment provider,没挂载时返回
501。 - thinking 模型的多轮请求必须回传
reasoning_content,否则上游会以400拒绝(这是模型的要求)。 reasoning_tokens字段已实现,但取不取得到取决于上游是否上报。- 不维护服务端会话,多轮靠客户端把历史塞回
messages。
完整说明见 README。