• v2.2.3-ew-2 223b9a5509

    v2.2.3-ew-2
    All checks were successful
    Docker Build / docker (push) Successful in 9m22s
    Docker Release / release (push) Successful in 8m4s
    Stable

    engel75 released this 2026-09-29 09:13:31 +02:00 | -3470 commits to 1.4.23-ew since this release

    EW 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 from extra_fields.provider_response_headers AND the HTTP response headers — on success, error and all streaming paths. The sanitizer lives in the fork-owned core/providers/ew/ package (zero upstream-conflict surface).
    • system_fingerprint is emptied instead of forwarded (revealed the partner vLLM build).
    • raw_request / raw_response are 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.key and the routing-info-key response header are gone for EW — gated at BuildRoutingInfo via ResolveBaseProvider, so EW-based custom providers are covered too.
    • Branding: all 16 routed-identity response header constants plus x-bifrost-trace-id renamed to x-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-2

    Verified: 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
  • v2.2.3-ew-1 2eb0f494c3

    v2.2.3-ew-1
    All checks were successful
    Docker Build / docker (push) Successful in 9m55s
    Docker Release / release (push) Successful in 7m55s
    Stable

    engel75 released this 2026-09-25 11:38:15 +02:00 | -3462 commits to 1.4.23-ew since this release

    Port 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
  • v2.2.2-ew-2 9b8c373cb0

    v2.2.2-ew-2
    All checks were successful
    Docker Build / docker (push) Successful in 9m53s
    Docker Release / release (push) Successful in 8m30s
    Stable

    engel75 released this 2026-09-24 15:23:47 +02:00 | -3417 commits to 1.4.23-ew since this release

    Fix: 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
  • v2.2.2-ew-1 fca2f7a19e

    v2.2.2-ew-1
    Some checks failed
    Docker Build / docker (push) Has been cancelled
    Docker Release / release (push) Successful in 7m55s
    Stable

    engel75 released this 2026-09-23 10:41:13 +02:00 | -3414 commits to 1.4.23-ew since this release

    Port 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
  • v2.2.1-ew-2 85dd24faf9

    v2.2.1-ew-2
    All checks were successful
    Docker Build / docker (push) Successful in 9m19s
    Docker Release / release (push) Successful in 7m35s
    Stable

    engel75 released this 2026-09-23 08:22:51 +02:00 | -3338 commits to 1.4.23-ew since this release

    Fix 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
  • v2.2.1-ew-1 d55a69d4a9

    Release v2.2.1-ew-1
    Some checks failed
    Docker Build / docker (push) Has been cancelled
    Docker Release / release (push) Successful in 7m48s
    Stable

    engel75 released this 2026-09-21 09:27:21 +02:00 | 5 commits to 2.2.1-ew1 since this release

    Release 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
  • v1.6.11-ew-1 21a532bec7

    Release v1.6.11-ew-1
    All checks were successful
    Docker Build / docker (push) Successful in 7m29s
    Docker Release / release (push) Successful in 7m27s
    Stable

    engel75 released this 2026-09-08 14:46:53 +02:00 | 0 commits to 1.6.11-ew1 since this release

    Release 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
  • v1.6.10-ew-1 446f4a63bc

    Release v1.6.10-ew-1
    All checks were successful
    Docker Build / docker (push) Successful in 6m49s
    Docker Release / release (push) Successful in 7m23s
    Stable

    engel75 released this 2026-08-14 17:45:55 +02:00 | 0 commits to 1.6.10-ew1 since this release

    Release 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
  • v1.6.9-ew-1 39526582d5

    v1.6.9-ew-1
    All checks were successful
    Docker Build / docker (push) Successful in 11m53s
    Docker Release / release (push) Successful in 8m0s
    Stable

    engel75 released this 2026-08-08 15:20:29 +02:00 | -2278 commits to 1.4.23-ew since this release

    Port to upstream transports/v1.6.9

    Base: transports/v1.6.9 (55 upstream commits since v1.6.8)
    32 commits cherry-picked from 1.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 + ResolveBaseProvider for 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:15 vet 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.go error)
    • ✅ 4 test suites green + Spec 09 image-edit tests green
    • ✅ Docker smoke: 112 symbol matches, 102 Spec-09 symbols, version v1.6.9-ew1-test correct
    • ✅ Migration order verified (no new upstream migrations)

    Follow-ups

    None.

    Downloads
  • v1.6.8-ew-1 0787a10e43

    v1.6.8-ew-1
    All checks were successful
    Docker Build / docker (push) Successful in 11m1s
    Docker Release / release (push) Successful in 6m56s
    Stable

    engel75 released this 2026-08-08 15:03:22 +02:00 | -2222 commits to 1.4.23-ew since this release

    Port to upstream transports/v1.6.8

    Base: transports/v1.6.8 (48 upstream commits since v1.6.7)
    31 commits cherry-picked from 1.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-test correct
    • ✅ Migration order verified (3 new upstream migrations before 2 EW migrations)

    Follow-ups

    None.

    Downloads