-
v2.2.3-ew-2
Stablereleased this
2026-09-29 09:13:31 +02:00 | -3470 commits to 1.4.23-ew since this releaseEW Response Sanitizer + x-ewcs Header Branding: partner infrastructure data no longer reaches customers, and all routed-identity response headers now carry the x-ewcs-* branding.
- Header denylist for the EW provider:
x-litellm-*,llm_provider-*,x-ratelimit-*are filtered fromextra_fields.provider_response_headersAND the HTTP response headers — on success, error and all streaming paths. The sanitizer lives in the fork-ownedcore/providers/ew/package (zero upstream-conflict surface). system_fingerprintis emptied instead of forwarded (revealed the partner vLLM build).raw_request/raw_responseare never delivered for EW — unary and all five stream chunk shapes (chat, text completion, responses stream, speech stream, error), regardless of send-back-raw configuration.- Internal key name withheld:
extra_fields.routing_info.keyand the routing-info-key response header are gone for EW — gated atBuildRoutingInfoviaResolveBaseProvider, so EW-based custom providers are covered too. - Branding: all 16 routed-identity response header constants plus
x-bifrost-trace-idrenamed tox-ewcs-*(all providers); provider-harness contract and docs updated.x-bf-*request headers intentionally unchanged. - Tests: 13 sanitizer unit tests,
TestRoutingInfoKeyWithheldForEW(gjson marshal proof), empty-key header-skip case, harness case 8.5.S (FEATURE="sanitization", live run against the partner environment). - Docs:
specs/10-ew-response-sanitizer-ewcs-headers.md(mechanisms, what-NOT-to-change, port notes).
Commits:
4fd52e37c,fac94934f,2be33ee2e,e000e4b71,6d2842ad2,c56272b48,d4cc8b3dd,223b9a550
Image: forge.engelmann.me/engel75/bifrost:v2.2.3-ew-2Verified: go build + vet + make build LOCAL=1; go test (core/providers/ew 13/13, core, schemas, transports lib+handlers suites); wire smoke on a locally booted gateway (x-ewcs-request-type / x-ewcs-provider present, zero x-bifrost-* headers on the wire); harness augment/filter checks (8.5.S resolves to exactly 1 request).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Header denylist for the EW provider:
-
v2.2.3-ew-1
Stablereleased this
2026-09-25 11:38:15 +02:00 | -3462 commits to 1.4.23-ew since this releasePort of the EW fork to upstream transports/v2.2.3 (Bifrost HTTP v2.2.3: pinned keys on routing fallbacks, OpenAI async tool execution, GPT-6 support, Bedrock encrypted-content replay, decision-emulation fixes).
- 59 cherry-picks from 2.2.2-ew1, all clean — first >30-pick port with zero conflicts; byte-identity verified against the 144-file upstream delta.
- One follow-up fix: upstream renamed the keys-table add button to 'Add {Label}'; the EW UI contract test caught it in the step-7b smoke run and now pins the new wording (
eef019189). - No provider-interface changes (Decision stub from v2.2.2 still valid), no new DB migrations (EW migrations stay last), no deprecations — Specs 01/02/03/04/09 all remain valid.
- Upstream pinned-key fallbacks coexist with the EW per-key toggles: pinned keys still pass through the EW ModelName/toggle filter.
Verified: go build + vet + make build LOCAL=1; Go suites (TestAuth, integrations, core/providers/ew, configstore, schemas usage); provider-harness augment/filter checks (639 requests; 8.5.R and 8.5.Q filterable); UI smoke with embedded UI (39 passed incl. ew.spec.ts 4/4 after fix; 5 pre-existing failures unchanged per 2026-09-23 baseline); docker image symbol check (112 matches) and exact version string.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v2.2.2-ew-2
Stablereleased this
2026-09-24 15:23:47 +02:00 | -3417 commits to 1.4.23-ew since this releaseFix: sglang usage.reasoning_tokens reach chat/completions responses again.
SGLang upstreams report reasoning tokens as a TOP-LEVEL usage.reasoning_tokens
field (sglang protocol.py UsageInfo) and send no completion_tokens_details
object at all. Bifrost only modeled the OpenAI-spec nested shape, so the value
was silently dropped at the first JSON decode and never reached clients — for
the SGL and EW providers, streaming and non-streaming alike.- BifrostLLMUsage.UnmarshalJSON folds the top-level field into
usage.completion_tokens_details.reasoning_tokens (ChatPromptTokensDetails
cached_tokens alias precedent). Nested OpenAI-spec values keep precedence;
zero values never synthesize an empty details object; the top-level key
never leaks to the wire. - The fold flows into every decode path of the shared struct: streaming
chunks, non-streaming responses, passthrough usage, and the Responses API
(ToResponsesResponseUsage). Reasoning-model cost accounting in governance
is now correct for sglang backends (previously under-billed).
Verified: red/green unit tests (core/schemas/usage_test.go), full schemas
suite, go vet, consumer suites (openai provider incl. xAI nested-shape tests,
streaming, mocker, semanticcache, governance), provider-harness augment/filter
checks with new 8.5.R EW wire case (run locally: FEATURE="reasoning_tokens").Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
0 downloads
- BifrostLLMUsage.UnmarshalJSON folds the top-level field into
-
v2.2.2-ew-1
Stablereleased this
2026-09-23 10:41:13 +02:00 | -3414 commits to 1.4.23-ew since this releasePort of the EW fork to upstream transports/v2.2.2 (
fdeef8e3f).55 commits carried from 2.2.1-ew1, 2 pick conflicts resolved per runbook patterns
(apiKeysFormFragment.tsx — upstream diff whitespace-only, keep-fork-side;
integrations/openai.go — adopt upstream stream-converter refactor, keep Spec-03 envelope),
1 adaptation commit: Decision stub for the new Provider interface method (Typesafe-only).Upstream highlights carried in: session affinity, typesafe provider + decisions endpoint,
Opus 5.5 support. No upstream DB migrations this release.Verified: builds + vet, 4 runbook test suites + Spec-04/09 targeted guards, UI build,
E2E providers flow with 0 new failures (ew.spec.ts 4/4), docker symbol check (112 matches),
exact version string, enddiff probe clean.Image: forge.engelmann.me/engel75/bifrost:v2.2.2-ew-1
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
v2.2.1-ew-2
Stablereleased this
2026-09-23 08:22:51 +02:00 | -3338 commits to 1.4.23-ew since this releaseFix release on top of v2.2.1-ew-1: restore the API key field in the EW key form (Add new model).
The field was accidentally hidden since v2.1.1-ew-1 (!isEW in the generic API-key hide-guard of apiKeysFormFragment.tsx) although the EW provider sends key.value as a Bearer token (core/providers/ew/ew.go). The form now renders "API Key (Optional)" above the EW credential section; no other provider's behavior changes.
UI-only change, no Go/migration delta. Regression-pinned by an E2E test (providers.spec.ts, EW Provider suite), verified red without / green with the fix.
Image: forge.engelmann.me/engel75/bifrost:v2.2.1-ew-2 (built by docker-release run #144 from tag commit
85dd24faf, banner version verified).Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
-
Release v2.2.1-ew-1
Stablereleased this
2026-09-21 09:27:21 +02:00 | 5 commits to 2.2.1-ew1 since this releaseRelease v2.2.1-ew-1
Port of the EW fork to upstream transports/v2.2.1.
Base: transports/v2.2.1 (68 upstream commits / 244 files since v2.2.0,
security-focused patch release; core v1.9.1, framework v1.7.1).
48 commits cherry-picked from 2.2.0-ew1, 2 conflicts (both known runbook
patterns), ZERO adaptation commits - lightest port since 2.1.1.Conflicts resolved:
- migrations.go (Spec 01 pick): upstream's
migrate_vk_standalone_limits_to_model_configs (#7291) placed before
EW's add_ew_key_config_columns + add_ew_allowed_requests_column
(EW migrations remain last) - core/schemas/bifrost.go (Spec 04 pick): upstream's
BifrostContextKeyBillingNonce (#7303) merged into the context-key
block below our BifrostContextKeyAuthRouteWhitelisted
Upstream v2.2.1 notable changes:
- Security: EscapeResourceID (#7307, resource-ID path injection),
Bedrock S3 SSRF validation (#7315), BillingNonce (#7303),
ephemeral realtime token minting (#7317) - Fixed: non-streaming caller hang (#7308/#7313), empty reasoning
chunks (#7318), Claude Code thread continuations (#7274), Gemini
Flash-Lite minimal thinking (#7288), config.json VK limits under UI
edits (#7291) + migration, Bedrock service tier gating (#7266),
Anthropic tool schema normalization (#7265) - Features: VK assignees + expanded search, user attribution in
Prometheus metrics, SupportsPromptCacheBreakpoints model cap,
MCP observed latency, OAuth passthrough for passthrough endpoints - No Go version bump (1.27.0), no provider interface changes
EW fork features carried forward (Specs 01-06, 09):
- 01: EW provider (SGLang/OpenAI-compatible)
- 02: Per-key API toggles (allowed_requests)
- 03: OpenAI error envelope
- 04: Whitelisted inference routes
- 05: Docker / Forgejo CI
- 06: Migration strategy (EW migrations always last)
- 09: EW image-edit passthrough
Verification:
- go build + vet: clean
- 4 test suites: all green (TestAuth, integrations, EW, configstore)
- make build LOCAL=1: OK
- Docker: 111 EW symbol matches (>= 50), version v2.2.1-ew1-test exact
- Migration order: migrate_vk_standalone_limits_to_model_configs before
the 2 EW migrations (last in sequence) - End-diff probe: branch diff vs 2.2.0-ew1 == exact upstream diff
(244 files, +15722/-1475)
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- migrations.go (Spec 01 pick): upstream's
-
Release v1.6.11-ew-1
Stablereleased this
2026-09-08 14:46:53 +02:00 | 0 commits to 1.6.11-ew1 since this releaseRelease v1.6.11-ew-1
Port of the EW fork to upstream transports/v1.6.11.
Base: transports/v1.6.11 (23 upstream commits since v1.6.10).
34 commits cherry-picked from 1.6.10-ew1, ZERO conflicts
(all 3 overlap files auto-merged; merge-tree pre-verified exit 0).Upstream v1.6.11 notable changes:
- Quarterly-budget UI polish (QuarterStartSelect horizontal layout,
fiscalQuarterNote helper, entity selector contentClassName) - core updates #6110 (the only substantive code commit):
stripUnverifiableReasoning family (Anthropic thinking-signature healing),
HTTP 529 same-key retry in transientServerStatusCodes,
grok reasoning_effort deny-listing, Bedrock Mantle URL source inlining,
fetch error redaction (RedactURLForError), websocket/wsrealtime fixes - Plugin version bumps (core v1.7.10, framework v1.5.10)
- NO new migrations, NO interface/signature changes (no EW adaptation commit
needed for the first time since v1.5.10), NO Go version bump (1.26.5),
NO Dockerfile changes
EW fork features carried forward (Specs 01-06, 09):
- 01: EW provider (SGLang/OpenAI-compatible)
- 02: Per-key API toggles (allowed_requests)
- 03: OpenAI error envelope
- 04: Whitelisted inference routes
- 05: Docker / Forgejo CI
- 06: Migration strategy (EW migrations always last)
- 09: EW image-edit passthrough
Verification:
- go vet: clean (70 packages)
- 5 test suites green (TestAuth, integrations, EW, configstore, Spec 09 guard)
- Docker: 112 EW symbols, 102 Spec 09 symbols, version v1.6.11-ew1-test
- Migration order: EW migrations last, no upstream migration after them
- Final wave F1-F4: all APPROVE
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Quarterly-budget UI polish (QuarterStartSelect horizontal layout,
-
Release v1.6.10-ew-1
Stablereleased this
2026-08-14 17:45:55 +02:00 | 0 commits to 1.6.10-ew1 since this releaseRelease v1.6.10-ew-1
Port of the EW fork to upstream transports/v1.6.10.
Base: transports/v1.6.10 (40 upstream commits since v1.6.9).
33 commits cherry-picked from 1.6.9-ew1, 1 conflict (migrations.go).Upstream v1.6.10 notable changes:
- Quarterly budget reset (add_budget_reset_config_column migration)
- Per-model budget support
- Reasoning bugfixes
- ResolveChatFileURLs in HandleOpenAIChatCompletion (benign for EW, signatures unchanged)
Conflict resolution:
- migrations.go: upstream add_budget_reset_config_column placed before EW's
add_ew_key_config_columns + add_ew_allowed_requests_column (EW migrations remain last)
EW fork features carried forward (Specs 01-06, 09):
- 01: EW provider (SGLang/OpenAI-compatible)
- 02: Per-key API toggles (allowed_requests)
- 03: OpenAI error envelope
- 04: Whitelisted inference routes
- 05: Docker / Forgejo CI
- 06: Migration strategy (EW migrations always last)
- 09: EW image-edit passthrough
Verification:
- go vet: clean
- 4 test suites: all green (TestAuth, integrations, EW, configstore)
- Docker: 112 EW symbols, 102 Spec 09 symbols, version v1.6.10-ew-1
- Migration order: add_budget_reset_config_column before EW migrations (last 2)
- No Go version bump
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.6.9-ew-1
Stablereleased this
2026-08-08 15:20:29 +02:00 | -2278 commits to 1.4.23-ew since this releasePort to upstream transports/v1.6.9
Base:
transports/v1.6.9(55 upstream commits since v1.6.8)
32 commits cherry-picked from1.6.8-ew1— zero conflicts (all auto-merged)Upstream v1.6.9 notable changes
- Encrypted-reasoning fail-soft in
executeRequestWithRetries— no overlap with our EW code BifrostContextKeyBaseProviderType+ResolveBaseProviderfor custom provider family resolution- Budget/RateLimit usage carry-forward (prevents config.json force-sync from zeroing live accounting)
OpenAIChatAssistantMessage:ReasoningAlias+ReasoningDetails(inbound-only)- TracingMiddleware: W3C traceparent header fix
tracer_test.go:42:15vet error fixed upstream- No new migrations
EW fork features carried forward
Spec Feature 01 EW provider (SGLang/OpenAI-compatible) 02 Per-key API toggles 03 OpenAI-conformant error envelope 04 WhitelistedRoutes inference bypass 05 Docker / Forgejo CI 06 Migration strategy (idempotent, last in sequence) 09 EW image-edit parameter passthrough + ExtraParams + dual mask Verification
- ✅ Build OK, vet completely clean (upstream fixed pre-existing
tracer_test.goerror) - ✅ 4 test suites green + Spec 09 image-edit tests green
- ✅ Docker smoke: 112 symbol matches, 102 Spec-09 symbols, version
v1.6.9-ew1-testcorrect - ✅ Migration order verified (no new upstream migrations)
Follow-ups
None.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Encrypted-reasoning fail-soft in
-
v1.6.8-ew-1
Stablereleased this
2026-08-08 15:03:22 +02:00 | -2222 commits to 1.4.23-ew since this releasePort to upstream transports/v1.6.8
Base:
transports/v1.6.8(48 upstream commits since v1.6.7)
31 commits cherry-picked from1.6.7-ew2— zero conflicts (all auto-merged)Upstream v1.6.8 notable changes
- SSE heartbeat in
handleStreamingResponse(lib.StartSSEHeartbeat) — no overlap with our Gate 2 - 3 new migrations (budget_override_anchor, live_models_sync_interval, pricing_override_user_id) — all before our 2 EW migrations
- Router heartbeat + anthropic integration test additions
EW fork features carried forward
Spec Feature 01 EW provider (SGLang/OpenAI-compatible) 02 Per-key API toggles 03 OpenAI-conformant error envelope 04 WhitelistedRoutes inference bypass 05 Docker / Forgejo CI 06 Migration strategy (idempotent, last in sequence) 09 EW image-edit parameter passthrough + ExtraParams + dual mask Verification
- ✅ Build OK, vet clean (only pre-existing upstream
tracer_test.go:42:15) - ✅ 4 test suites green + Spec 09 image-edit tests green
- ✅ Docker smoke: 112 symbol matches, 101 Spec-09 symbols, version
v1.6.8-ew1-testcorrect - ✅ Migration order verified (3 new upstream migrations before 2 EW migrations)
Follow-ups
None.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- SSE heartbeat in