Skip to main content
v2.2.3

Changelog

v2.2.3 moves the enterprise gateway onto OSS transports v2.2.3. Routing-rule fallbacks can now pin a provider key, and the enterprise adaptive load balancer keeps those pins, so one rule can retry the same provider and model on a different key. The OSS release also adds OpenAI async tool execution and GPT-6 prompt cache breakpoints.

✨ Features

  • Pinned Keys Survive Load-Balanced Fallbacks - The adaptive load balancer now keeps the key_id pin on each configured routing-rule fallback. Configured fallbacks are deduplicated on provider, model and key, so two fallbacks on the same provider and model with different keys both stay in the chain. Auto-appended healthy fallbacks are still deduplicated on provider and model, and a fallback that repeats the primary attempt (same provider, model and effective key) is dropped. Docs

🌎 Open Source Features

  • Pinned Keys on Routing Fallbacks - Each routing-rule fallback can pin a provider key via key_id, or provider_key_name in config.json, and the rule editor lets you pick or clear a key per fallback. Unpinned fallbacks keep the provider/model string form, so existing rules keep their config hash. Docs
  • OpenAI Async Tool Execution - The async flag on Responses tools and tool calls, output_schema on function tools and tunnel_id on MCP tools are forwarded to OpenAI. async is stripped for models without support, and the datasheet supports_async_tools field can override this.
  • GPT-6 Prompt Cache Breakpoints - Prompt-cache breakpoints now cover the GPT-6 family on OpenAI, Azure, Bedrock and Bedrock Mantle. The datasheet supports_prompt_cache_breakpoint field can override this.
  • GPT-6 Sol and Luna Reasoning Off - reasoning.effort: "none" is forwarded for gpt-6-sol and gpt-6-luna. Other GPT-6 models keep reasoning on.

🐞 Fixed

  • Health-Aware Session Affinity Route Matching - A session’s route binding is followed only when the chain offers the same provider and model. A binding for the same provider on a different model is dropped as stale, and the drop is logged with the full provider and model.
  • OpenAI Sampling Parameters on Reasoning Models (OSS) - temperature, top_logprobs and logprobs are stripped alongside top_p when the model and effort do not support them; an omitted reasoning.effort counts as none only for models that default to no reasoning.
  • Responses API Wire Shapes (OSS) - Structured MCP tool-call errors, object-form conversation, array-form MCP allowed_tools, approval_request_id on MCP approval responses, and in/nin file search filters now decode and re-encode correctly. Go SDK callers: ResponsesMCPApprovalResponse.ApprovalResponseID is now ApprovalRequestID, and ResponsesToolMessage.Error and ResponsesParameters.Conversation are now union types.
  • OpenRouter Anthropic Cache Breakpoints (OSS) - Anthropic models routed through OpenRouter keep their cache_control breakpoints.
  • Session Affinity with Pinned Keys (OSS) - When session affinity reorders the chain, a routing rule’s key pin moves with its provider.
  • Session Affinity Route Matching (OSS) - A session’s route is matched on provider and model together, and bindings the request followed into a failure are dropped.
  • Databricks Gemini System Prompts (OSS) - Multiple system and developer messages are merged into one for Gemini models on Databricks.
  • Bedrock Encrypted Reasoning Replay (OSS) - Bedrock’s “encrypted reasoning was created for a different account or model” error now triggers the strip-and-retry path.
  • Decisions on Bedrock Mantle (OSS) - Decision emulation sends tool_choice: "auto" for gpt-oss models on Bedrock Mantle, and leaked parameter tags with surrounding whitespace are recovered.
  • Gemini Transcription Usage (OSS) - Usage is reported even when the transcript is empty.
  • Routing Rule Enabled State (OSS) - Syncing or updating a routing rule that omits enabled keeps the stored value instead of writing NULL.
  • Telemetry User Labels Toggle (OSS) - user_labels_enabled is now saved with the telemetry config.

📀 Base OSS version

transports/v2.2.3 (pinned as github.com/maximhq/bifrost/transports v1.6.12-0.20260924184142-ca3c81e26eed), with core v1.10.3, framework v1.7.4, governance v1.8.3, and logging v1.8.3.

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