• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lsm / neokai / 27522318674 / 1
82%
dev: 82%

Build:
DEFAULT BRANCH: dev
Ran 15 Jun 2026 03:35AM UTC
Files 351
Run time 13s
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

15 Jun 2026 03:32AM UTC coverage: 22.282% (-0.004%) from 22.286%
27522318674.1

push

github

web-flow
Inject chat_template_kwargs in OpenAI Chat bridge (#2111)

* feat(custom-endpoint): inject chat_template_kwargs in OpenAI bridge

Qwen3 / vLLM templates read a Jinja `chat_template_kwargs` field that the
OpenAI Chat schema does not define. The Claude Agent SDK has no way to
send it, so llama.cpp burns 150+ tokens on `<think>` blocks even for
"2+2?".

Add per-model `chatTemplateKwargs` to CustomEndpointModelCapabilities.
The custom-endpoint provider forwards it into the bridge config; the
OpenAI Chat bridge merges it into every `/v1/chat/completions` request
body before forwarding upstream. The bridge cache key now includes the
serialised kwargs so two models with different kwargs get distinct
bridges instead of silently sharing one model's settings.

- packages/shared: optional `chatTemplateKwargs?: Record<string, unknown>`
  on CustomEndpointModelCapabilities. No default; undefined = no injection.
- packages/daemon openai-chat-bridge: new config/request field +
  `buildChatRequest` param + capture in server factory.
- packages/daemon custom-endpoint-provider: cache key + factory spread.
- tests: 3 bridge tests (inject / omit / no-overwrite) + 3 provider tests
  (forward / distinct cache key / omit).

* fix(custom-endpoint): persist chatTemplateKwargs through editor round-trip

editorToConfig had a hard-coded capability-keys array that omitted
chatTemplateKwargs. Opening an endpoint in the Providers UI and
clicking Save (even with no edits) would silently strip the field,
disabling injection on the next registry sync.

Add 'chatTemplateKwargs' to the serialised keys. The existing
`resolved[k] !== baseDefaults[k]` comparison handles it correctly:
baseDefaults (built from resolveCapabilities) never includes the
field, so an explicitly-set value is preserved and an unset value
is dropped.

Test: existingToEditor → editorToConfig preserves
{ enable_thinking: false } on a Qwen3 model.

22828 of 102452 relevant lines covered (22.28%)

11.66 hits per line

Source Files on job daemon-online-rpc-4 - 27522318674.1
  • Tree
  • List 351
  • Changed 3
  • Source Changed 3
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Build 27522318674
  • 6caaf04b on github
  • Prev Job for on dev (#27511086514.13)
  • Next Job for on dev (#27542861454.10)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc