Skip to main content
v2.2.2

Changelog

v2.2.2 moves the enterprise gateway onto OSS transports v2.2.2. Session affinity is now health-aware in enterprise: a session bound to a provider or key that is failing on the node, or that the circuit breaker holds back, is dropped and re-routed instead of being sent back to the failing route. The OSS release adds the typesafe provider with a /v1/decisions endpoint, provider-level session affinity for Claude Code, Codex CLI and OpenCode sessions, and Claude Opus 5.5 support.

✨ Features

  • Health-Aware Session Affinity - Enterprise registers its own session affinity on top of the one OSS ships. A route binding to a provider whose direction is Failed on this node is dropped and the routing decision stands, and a key binding is dropped when the key’s route is Failed or the circuit breaker removes it from the eligible pool, so key selection picks again. Each drop is written to the routing engine log. Health is node-local while bindings are shared across the cluster, so the node that sees the failure drops the binding and the next served request rebinds it. Without the adaptive load balancer or the circuit breaker, behaviour is identical to OSS. Docs

🌎 Open Source Features

  • Typesafe Provider and Decisions API - A new typesafe provider, a /v1/decisions endpoint and a /typesafe integration. Providers without native decision support answer decision requests through forced tool-calling on their chat model, as primary or as fallback; probabilities are normalized to sum to exactly 1 and the chosen option must be the most likely one. Decision requests are priced from the datasheet under a new decisions usage type and logged with their answers. Docs
  • Provider-Level Session Affinity - A session, identified by x-bf-session-id or the session header Claude Code, Codex CLI and OpenCode already send, stays on the provider and key that last served it. Bindings are updated from the request outcome, affinity only reorders the chain that routing built and never restores a provider that routing excluded, and the x-bf-session-affinity header opts a request out. The logs UI shows affinity as a routing engine. Docs
  • Claude Opus 5.5 Support - Computer use sends computer_toolset_20260801 on the Anthropic API and Vertex, while Bedrock and Azure keep computer_20251124, and toolset_name is carried on both halves of each call/result pair across typed, raw passthrough and streaming paths. Disabled thinking and forced tool choice are rejected for Opus 5.5 and later, which the datasheet supports_reasoning_disable field can override.
  • Claude Code Auto-Mode Safeguards Passthrough - safeguards and safeguard_results are forwarded byte-for-byte on requests, responses and stream events to the direct Anthropic provider and stripped for every other provider. The dangerous-tool-use and auto-mode-classifier betas are gated the same way, and unknown Anthropic SSE events are forwarded raw on the Anthropic passthrough.

🐞 Fixed

  • Allow-All Providers on Access Profiles and Projects - Access profiles and projects with allow-all providers now create a provider permit for every configured provider, so requests are no longer refused for providers without an explicit entry.
  • Held Responses Stream Raw Payloads - When guardrails rewrite held Responses stream chunks, the raw provider response is dropped instead of patched, so a raw copy can no longer carry unredacted tool arguments or fail the stream on a shape mismatch.
  • Blocked Models With All Models Allowed - The access profile grant details view renders the Blocked Models row correctly when the profile allows all models.
  • Allow-All Provider Access on Virtual Keys (OSS) - Virtual keys that allow every provider now list models from, and route to, every configured provider; the governance routing log names providers excluded for having no weight.
  • OpenAI-Family Stream Errors After Startup Events (OSS) - Stream errors that arrive after response.created, in_progress or an empty role delta now reach retry and fallback for OpenAI models on every host (OpenAI, Bedrock, Bedrock Mantle, Vertex, custom providers), not only Azure.
  • Kimi and DeepSeek With Claude Code (OSS) - Tool-schema regex patterns are rewritten for Moonshot and DeepSeek models only, and kimi-k3 on Bedrock no longer returns an empty stream.
  • Anthropic Billing Header Leak (OSS) - Claude Code’s x-anthropic-billing-header system block is stripped at ingress and restored only for Anthropic-family attempts, so it no longer pollutes GPT or Gemini prompts.
  • Anthropic allowed_tools and parallel_tool_calls (OSS) - OpenAI-style allowed_tools restrictions and parallel_tool_calls are now carried into Anthropic requests instead of being silently dropped.
  • MCP Egress Proxy (OSS) - MCP HTTP/SSE connections honor HTTP_PROXY, HTTPS_PROXY and NO_PROXY again, and link-local or unspecified destinations are refused before the proxy is dialed.
  • OpenAI computer Tool (OSS) - The bare {"type":"computer"} tool is no longer rewritten to computer_use_preview, fixing computer use on GPT-6 Astra and GPT-5.6.
  • Streaming Memory Leaks (OSS) - The request context is cancelled on every stream exit path, and empty-thinking-block stripping and Anthropic beta-header gating no longer re-encode or fully decode the body.
  • Streaming Gate Replay Buffer (OSS) - Full-hold replay buffer size accounting uses cached estimates instead of marshalling every chunk.
  • Bedrock cachePoint Leak (OSS) - Bedrock cachePoint markers are stripped copy-on-write for non-Bedrock providers and kept for Bedrock fallbacks, and the compat plugin no longer mutates the shared request.
  • Bedrock Empty JSON Keys (OSS) - Tool results containing an empty-string object key are sent as text, so Converse no longer rejects them.
  • Bedrock cache_control on String Content (OSS) - InvokeModel keeps every cache_control when any message’s content is a plain string.
  • Web Search Source Names (OSS) - Responses web search API sources keep their name and no longer emit an empty url.
  • Grok 4.7 xhigh Reasoning (OSS) - xhigh reasoning effort is no longer downgraded to high.
  • OpenAI Chat Stream Framing (OSS) - Bundled raw finish and usage frames on the OpenAI chat stream passthrough each get their own data: prefix.
  • Responses Deep Copy (OSS) - DeepCopyResponsesMessage deep copies cache controls, provider-native parts, tool fields and annotations, so copies no longer share pointers with the original.
  • Request Preparation Performance (OSS) - Responses requests are decoded once instead of several times, and the compat plugin clones only the fields it writes.

🗄️ Database Migrations

  • No new database migrations in this release.

🐙 Closed OSS Issues

  • #7223 - MCP client HTTP transport ignores HTTP_PROXY/HTTPS_PROXY and fails on any deployment behind an egress proxy
  • #7336 - Bedrock InvokeModel drops message-level cache_control when any historical message content is a JSON string
  • #7356 - Responses web search API source name is dropped during round-trip
  • #7402 - Grok 4.7 xhigh reasoning effort is silently downgraded to high
  • #7411 - Redundant JSON decoding in Responses request preparation
  • #7425 - Responses: {"type":"computer"} is rewritten to computer_use_preview, breaking GPT-6 Astra / GPT-5.6 computer use

📀 Base OSS version

transports/v2.2.2 (pinned as github.com/maximhq/bifrost/transports v1.6.12-0.20260923045635-fdeef8e3f31a), with core v1.10.1, framework v1.7.3, governance v1.8.2, and logging v1.8.2.

🔌 If you are compiling plugin against this release - use following deps