DeepSeek Harness Hub
← 返回列表

Fruffel/dsh-llm-llamacpp

DeepSeek Harnessspec-screened在 GitHub 查看 ↗
未验证

一个用于 DeepSeek Harness 的 llama-cpp 提供程序:它是

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/11 · 已提供中文文档

DeepSeek Harness 的 llama.cpp 提供程序:从运行中的 llama-server 发现模型目录和上下文窗口(pi-llama 的想法,harness 侧)

综合分
29.4
GitHub 分
29.4
用户评分
★ Stars
0
周下载量
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add Fruffel/dsh-llm-llamacpp
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

dsh-llm-llamacpp

一个用于 DeepSeek Harness 的 llama-cpp 提供程序:它是
huggingface/pi-llama 在 harness 一侧的孪生实现。

一个正在运行的 llama-server 就是全部配置。该插件从 GET /v1/models 读取模型
目录,并且——这正是本练习的重点——从服务器本身读取上下文
窗口,因此压缩、token 计量器以及 GUI 的
上下文显示都会根据服务器当前加载的内容自动调整大小。
替换服务器背后的模型后,下一轮就已经知道新的
窗口;这里无需编辑任何内容。

GET /props     → default_generation_settings.n_ctx  ← 权威上下文窗口
chat_template                      ← 决定思考能力
GET /v1/models → data[].meta.n_ctx                  ← /props 缺失时的回退
row contextWindow                                   ← 你固定的覆盖值,优先于以上两者

这两个事实都来自同一次探测,并且该探测与 1.5 秒的
截止时间赛跑:缓慢或不可达的服务器只会一次性带来一点延迟,而绝不会
影响答案——下一次调用会发现它已被缓存。上下文窗口缓存 60 秒,
模板能力则在模型保持不变期间一直缓存。

安装

该插件是一个自包含的包:将此目录复制到运行
harness 的机器上的任意位置,并从 profile 的补丁文件中挂载它。

- insert:
- id: llm-llamacpp
name: /absolute/path/to/dsh-llm-llamacpp/index.mjs
config:
baseURL: http://localhost:8080/v1

Web profile 会实时重载 cordis.patch.yml,因此该提供程序无需
重启即可出现。journalctl --user -u dsh-web -f 会显示挂载情况和任何诊断信息。

发布变更

此仓库是事实来源;部署会挂载它的一个检出副本。
在开发它的机器上,部署是一个 dsh-ops 检出副本,其
plugins.conf 指定了此仓库,因此循环如下:

in this checkout
git commit && git push
in the deployment
bin/dsh-plugins.sh --update      # fast-forwards the clone under plugins/
bin/dsh-install-assets.sh        # copies the package into the profile layer
systemctl --user restart dsh-web # the harness keeps the module it imported

配置编辑(新的 baseURL)无需重启即可生效——profile
会重载其补丁层,并且该值按请求读取。代码编辑则
不会:harness 会保留它导入的模块,因此 index.mjs、client.mjs 和
lib/.mjs 需要重启。

harness 需要从宿主机获得两样东西:

harnessRoot —— harness 检出副本所在的位置。该插件从它导入
harness 自身的 LlmAdapter、LlmError 和 attributionHeaders,以便
错误标识和归属信息与运行时预期的完全一致。该
字段之所以存在,是因为默认值是某台机器的构建路径;请将其设置为你自己的路径。
* Node 22+,harness 已经要求这一点。

配置卡片
Web GUI 会就地编辑此提供方。设置 → 模型会显示一行
llama.cpp,其卡片在被请求之前保持关闭:一行状态会
报告所配置的端点是否有响应——有响应时显示绿点,没有响应时显示
红点,旁边附上原因——以及该端点是哪个,
以及它提供多少个模型。点击该行——它自己的 Configure
控件,而不是页面的 Edit 按钮(后者会为此系列打开 Host 的通用编辑器)
——会展开一张包含以下所有字段的卡片、一个 Test connection
按钮(它会查询正在输入的端点,并报告它找到的模型和
上下文窗口),以及 Reset to composition(它会清除该部分,
使该行自身的值再次生效)。

那个点是卡片自己的,而且是有意为之:llama.cpp 会忽略
凭据,因此页面自己的凭据点永远不会为此系列亮起,而且
除了实时探测之外,没有什么能说明路由背后的服务器是否已启动。该
探测与 Test connection 按钮所做的 llm/discoverModels 调用相同,
因此该点和模型列表不可能不一致;它在卡片
出现时运行一次,并在每次保存或重置后再次运行。

该卡片是本包的浏览器部分(client.mjs,在 package.json 中声明为
dsh.client),以 llm-llamacpp 键注册到 settings.models.provider-card
槽位中。编辑会落到设置文档中的 llm-llamacpp,并
到达下一个请求——无需重启。只有对插件自身代码的更改才需要
重启。

Configure

harness/cordis.patch.web.yml 中的一行(安装程序会将其渲染为
~/.dsh/profiles/web/cordis.patch.yml):

- insert:
- id: llm-llamacpp
name: ./dsh-llm-llamacpp/index.mjs
config:
baseURL: http://localhost:18080/v1   # ← the one knob
displayName: llama.cpp

baseURL 按以下顺序解析:此行,然后是环境中的 LLAMA_BASE_URL,
然后是 http://localhost:8080/v1。没有尾部 /v1 的值会
被加上一个,因此 http://host:8080 和 http://host:8080/v1 是同一个端点。

| 字段 | 默认值 | 含义 |
| --- | --- | --- |
| baseURL | 环境变量 LLAMA_BASE_URL,然后是 http://localhost:8080/v1 | llama.cpp API 基础地址 |
| apiKey | 环境变量 LLAMA_API_KEY,然后是 no-key | Bearer 令牌;除非设置了 llama-server --api-key,否则会被忽略 |
| headers | 无 | 额外请求头,用于服务器前面的代理 |
| displayName | llama.cpp | 提供方选择器中的名称 |
| contextWindow | 自动发现 | 固定的上下文大小 |
| discoverContext | true | 询问 /props;从不响应的服务器仍可提供聊天 |
| maxTokens | 从上下文窗口推导 | 每个请求通告的输出上限 |
| temperature | 无 | 当请求未指定时应用 |
| probeTimeoutMs | 1500 | 在请求不等待它而继续之前,/props 可以花费多长时间 |
| logLevel | silent | info 会记录启动时发现的内容 |
| harnessRoot | 此构建的检出目录 | 从中加载 LLM 接缝的 Harness |
除了 displayName 和 harnessRoot 之外,卡片上的每个字段都可编辑,
这两个字段保持在组合层:显示名称属于声明该路由的那一行,
而检出路径是机器的属性,不是端点的属性。

每个字段同时也是 llm-llamacpp 设置分区 的基础层,
因此 Settings 和 Models 页面可以编辑实时端点,而无需改动组合或重启任何东西。解析是按调用进行的:设置变更会作用于下一个请求。

使用

路由 id 是 llama-cpp,模型 id 是服务器所通告的任意值
(GET /v1/models,例如 GGUF 别名)。将其选为会话模型,或在 ~/.dsh/settings.yaml 中将其设为默认值:

agent-default-model:
provider: llama-cpp
model: Qwen3-8B-Q4_K_M

重新加载

Web 配置文件会实时重新加载 cordis.patch.yml,因此 配置 编辑(新的
baseURL)会作用于下一个请求,无需重启。编辑插件自身的
代码 则不会:harness 的模块图会保留它导入的版本,因此
更改后的 index.mjs/lib/.mjs 需要先运行 npm run assets,再
重启 dsh-web 才能生效。

注意事项与限制

仅文本。 携带图片或文件附件的消息会失败并返回
UNSUPPORTED_CONTENT,而不是静默丢弃它。视觉模型会在目录中报告
其模态,但此处未实现投影。
* 思考。 llama.cpp 没有 effort 阶梯,因此读取
enable_thinking 的模板会通告 off | low | medium | high | max,其中 off
发送 enable_thinking: false,其他每个级别都发送 true;默认
为 off。没有该开关的模板完全不通告任何推理,harness
随后会拒绝显式的 effort,而不是静默忽略它。
在 Qwen3.8-27B 上实测:off 用 2 个 token 作答且无推理,high
在给出相同答案前花费 33 个推理 token。
* 不带 /v1 的基础 URL 会被补上一个,因此 http://host:8080 和
http://host:8080/v1 指向同一台服务器。如果其他东西已经占用了
你想要的端口(llama-server --port 18080),失败会是来自那个其他服务的
404 或挂起,而不是来自此插件。
* 目录缓存 5 秒,发现的上下文窗口缓存 60 秒;重启后的服务器
会在那之后的下一个请求中被识别。

验证

npm test                    # 44 tests, no network, no model
npm run mock                # a stand-in llama-server on 127.0.0.1:18080
npm run check:server -- http://desktop:8080/v1 off   # against a real server
npm run check:card -- "http://127.0.0.1:3080/?token="   # the GUI card

check:card 通过 CDP 驱动无头 Chrome,经过 Settings → Models:它
读取 llama.cpp 行显示的关闭状态行,打开卡片,读取
渲染出的字段,按下 Test connection,保存一个值,然后重置——并且
如果其中任何一项没有发生就会失败。它需要一个 Chrome/Chromium 二进制文件
(CHROME=/path/to/chrome 会覆盖自动发现;Playwright 安装的 Chromium
也可以正常工作)。

npm test 覆盖了纯 wire 辅助函数、分块翻译契约、
针对模拟 llama.cpp 端点的适配器(流式传输、工具调用、错误、
上下文发现、回退、推理能力、冷启动思考)、
插件自身的 apply() 针对 llm 和 settings 服务的桩 —
以及浏览器部分,在 jsdom 中通过页面所使用的同一个
__ModuleLoader__ 接缝针对桩远程对象进行渲染(在被请求前保持关闭、端点的点、
它揭示的字段,以及写入触发的重新探测)。
模拟服务器故意在目录中声明 8192,而在
/props 上声明 40960,因此解析出 40960 就证明上下文来自服务器。

test/verify-against-server.mjs 是另一半:它通过适配器驱动一个真实的
llama-server,并打印出它发现了什么,以及一轮对话实际产生了什么,按思考模式分别展示。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入 DPharness 群聊

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

点击加入 QQ 群
DPharness 群聊二维码,手机 QQ 扫码进群
扫码进群