Devotd Github
新发现推理与服务

joakimpalm-zen/xyntetik-runner R2.14 — 已知模板选项的处理变更

在 2026-11-07 的提交(合并 PR #672,R2.14)中,xyntetik-runner 不再静默忽略已知的 `chat_template_kwargs` 键,而是会原样应用它们,或以 400 拒绝请求。

仓库信息joakimpalm-zen/xyntetik-runner ↗

在 2026-11-07 的提交(合并 PR #672,R2.14)中,xyntetik-runner 不再静默忽略已知的 `chat_template_kwargs` 键,而是会原样应用它们,或以 400 拒绝请求。

GitHub 项目说明: Local inference you can prove. A single-binary GGUF engine in C: serves, scores, and trains LoRA through the quantized weights it deploys, byte-reproducibly. Tool calls survive the token limit; every run replays as a signed receipt. CPU/CUDA/Metal, OpenAI- and Anthropic-compatible.

星标
★ 28
复刻
1
语言
C
许可证
Apache-2.0
最新版本
v1.4.1
查看原始来源 ↗在 GitHub 查看 ↗

joakimpalm-zen/xyntetik-runner 是一个用 C 编写的单二进制 GGUF 引擎。它同时处理服务与评分、使用所部署量化权重的 LoRA 训练,并在 CPU/CUDA/Metal 上提供 OpenAI 与 Anthropic 兼容的 API。2026-11-07 的最新提交(合并 PR #672,R2.14)所触及的对象是 `chat_template_kwargs`。它是随请求附带、会被传递给模型聊天模板(把消息组装成提示词字符串的 Jinja 模板)的一组选项。本次变更的要点是:已知键不再被悄悄丢弃,而是要么被应用,要么被拒绝。

Runner 会对每个模型家族使用自身的渲染器来渲染模板,不会直接解释文件中的 Jinja。因此,某个键只有在该渲染器真正处理它的位置才会生效。R2.14 在这里作了区分。现在会被应用的是 LFM2 和 LFM2-24B 的 `preserve_thinking`、Qwen 3.8 的 `preserve_thinking: false`(默认保留所有思考)、Apertus 的 `enable_thinking`、Granite 4.2 的 `reasoning_effort: low`。反之,在文件中的模板把该键作为变量读取的位置,请求会以 400(`unsupported_template_kwarg`)被拒绝。这些包括 Responses 和 Messages 的 `preserve_thinking`、Messages 的 `reasoning_effort` 与 `reasoning_strength`、以及 `add_generation_prompt: false`。Spark 现在也会像其自身模板那样拒绝 `reasoning_effort: xhigh`。MANUAL 中已用表格整理出各键在哪个模型家族、哪个接口面(Chat Completions、Responses)上生效。该提交在 18 个文件中新增 654 行、删除 90 行,并一并包含 `tests/test_known_kwargs.py` 以及 `docs/compat-reports/r2.14-known-kwargs-2026-11-06/` 下的审计日志(前后对比)。

不过,这些并不全是实测结果。CHANGELOG 写明与 33 个参考实现做过比较,但有 19 个模型家族无法在本主机上与参考实现对照,因此不是通过实测、而只是用拒绝规则加以覆盖。R2.14 记录在 CHANGELOG 的 Unreleased 条目下,所以它并不是已发布的发行版。null 的 `preserve_thinking` 被视为缺失值,但 Qwen 3.8 的模板会将其当作 false 处理,这一差异依然存在。对于一个一直在追踪“开启与关闭思考控制的开关会悄悄产生不同结果”这一问题、并按模型家族保持一致性的项目而言,这可以视为一项改进。不过,仅凭这一次提交很难确认那 19 个模型家族的实测一致性。