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

lsm / neokai / 26006380712 / 22
81%
dev: 81%

Build:
DEFAULT BRANCH: dev
Ran 17 May 2026 11:56PM UTC
Files 141
Run time 4s
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

17 May 2026 11:53PM UTC coverage: 56.841% (-2.3%) from 59.123%
26006380712.22

push

github

web-flow
feat(providers): add custom OpenAI-compatible endpoint support (#1929)

* feat(providers): add custom OpenAI-compatible endpoint support

Adds backend support for user-defined OpenAI-compatible endpoints (LM Studio,
vLLM, LiteLLM, self-hosted deployments, etc.) without requiring an external
proxy.

Each endpoint is persisted as JSON under `settings.customEndpoints` and
registered in the provider registry as `custom:<endpointId>`. Traffic is
routed through an embedded Anthropic Messages ↔ OpenAI Chat Completions
bridge that handles message translation, streaming tool_calls accumulation,
graceful image dropping when vision isn't supported, and per-model
capability gating.

Backend only — UI for endpoint management ships in a follow-up PR.

Acceptance criteria covered:
- Tool use works end-to-end via tool_calls deltas → Anthropic tool_use blocks
- Streaming works for both Anthropic and OpenAI-compatible providers
- Unsupported features (vision, tool use) are silently dropped per model
- Built-in Anthropic provider behaviour is unchanged
- Existing Ollama provider keeps working; new bridge is for generic OAI-compat

* fix(providers): bind custom-endpoint bridge to loopback + honour live thinkingModes

Addresses review feedback on #1929:

P1 — Security: the OpenAI Chat Completions bridge was binding to 0.0.0.0
because `Bun.serve({ port: 0 })` defaults the hostname. On multi-user hosts
another local user could probe ephemeral ports and reach the bridge with the
configured upstream API key. Now explicitly binds to 127.0.0.1.

P1 — Correctness: `addSessionStateOptions` resolved provider thinking mode
exclusively from the static `PROVIDER_THINKING_MODES` map, which doesn't list
`custom:*` providers and therefore defaulted to `'granular'`. That emitted
`thinking: { type: 'enabled', ... }` for endpoints whose capabilities report
`thinkingModes: 'off'`. The bridge silently dropped the field, but the SDK
could error expecting matching reasoning blocks back. Now pr... (continued)

15986 of 28124 relevant lines covered (56.84%)

32.88 hits per line

Source Files on job daemon-4-space-storage - 26006380712.22
  • Tree
  • List 141
  • Changed 4
  • Source Changed 4
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Build 26006380712
  • e3a699ba on github
  • Prev Job for on dev (#26006208895.5)
  • Next Job for on dev (#26006495016.3)
  • 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