Core Release v1.13.0
- feat: openapi MCP connection type, backed by an in-process server built through the new MCPConfig.InProcessServerFactory hook (#8307)
- feat: cache_control on chat assistant tool_calls reaches the Anthropic and Bedrock tool_use block (#8494)
- feat: native decisions on Azure (Microsoft-Decision-1) and Databricks (ai_decide), and Typesafe image assets by reference plus box questions (#8485, #8498, #8571)
- feat: Vertex keys accept use_session_routing to send the prompt cache key as sessionId (#8650)
- feat: NetworkConfig.ExtraHeaders values accept env. and vault. references and are fully redacted in API responses (#8618, #8619)
- feat: Mistral streamed thinking blocks map to reasoning, and assistant reasoning is dropped before sending to avoid 422 extra_forbidden (#8567)
- feat: code mode adds the json and math Starlark modules, returns failed tool calls as error values, trims replies to what the script prints and returns, and adds tracebacks and accurate error hints (#8605, #8606, #8607, #8692, #8693)
- feat: spans carry the stored prompt (bifrost.prompt.id/name/version), MCP client name and bifrost.mcp.tool.is_error, and the inbound W3C tracestate; A2A operations export complete observability data (#8575, #8681, #8682, #8683)
- feat: Antigravity CLI and Antigravity Desktop user agent detection (#8543)
- fix: Anthropic tool_reference blocks in a client tool_result survive for custom tool search (thanks @CMWR421!) (#7813)
- fix: Claude server tool search blocks replay unchanged (#8555)
- fix: Bedrock creates a cache point for Anthropic automatic caching and emits a standalone cachePoint after toolResult (#8573, #8595)
- fix: Bedrock Converse prompt_cache_options in additionalModelRequestFields reaches Params.PromptCacheOptions, so gpt-5.6 targets run in the caller's cache mode (#8554)
- fix: OpenRouter clamps cache_control markers to four for Claude models (#8512)
- fix: parallel_tool_calls false reaches Claude on every path (#8471)
- fix: Responses instructions are merged ahead of system and developer messages instead of dropped (#8515)
- fix: chat tool results convert to Responses input block types and keep an empty output (#8514, #8621)
- fix: Responses lifecycle events no longer send output null or an invalid item object (#8563)
- fix: configuration_update items are forwarded with their reasoning effort, and assistant messages with an id keep their status (#8599, #8634)
- fix: converted chat streams keep id, model and created on every chunk (#8699)
- fix: Gemini promptFeedback.blockReason returns an error instead of an empty completed response (#8564)
- fix: SGLang top-level usage.reasoning_tokens maps to completion_tokens_details (#8600)
- fix: Bedrock Converse responses keep stopReason and additionalModelResponseFields verbatim (#8704)
- fix: Azure deployments route forwards unknown chat fields (#8703)
- fix: custom OpenAI-base providers are gated on decisions by allowed requests alone, and stringified decision answer objects are recovered (#8617, #8626, #8705)
- fix: no_key_supports_model no longer stops the inferred fallback chain (#8706)
- fix: Agent Gateway OAuth caches bounded at 5,000 entries, A2A relay goroutine leak, destination permissions and credential boundaries (#8552, #8596, #8608, #8657)
- fix: code mode stubs render restored tool schemas, and nested tool results arrive as structured values (#8603, #8604)
- chore: Go 1.27.2 (#8570)
- [fix]: Gemini and Vertex batch results include thinking tokens (thoughtsTokenCount) in completion_tokens and report reasoning_tokens (#8684) @Shashank2985
- [fix]: Anthropic-compatible requests keep a client tool_use named web_search or web_fetch as a function call. Only server_tool_use blocks become web_search_call / web_fetch_call, so the tool_result is no longer orphaned and Bedrock stops rejecting the replay with "toolResult blocks ... exceeds the number of toolUse blocks" @jacob-pattern
- fix: OpenAI tool_search_call / tool_search_output items reach /anthropic clients - a client-executed search becomes a tool_use for the client's own search function, a hosted search becomes server_tool_use plus tool_search_tool_result
- fix: deferred tools on OpenAI gpt-5.4+ (and Azure / Bedrock gpt) get the tool_search OpenAI requires instead of a 400 - a client search function (Claude Code's ToolSearch) becomes a client-executed tool_search with its history replayed as tool_search_call / tool_search_output, otherwise the hosted tool_search is added (#8361)
- feat: gateway-run tool search for deferred tools on models with no tool search of their own (Gemini, older GPT, Bedrock non-Claude, ...) - the deferred tools are held back behind a bifrost_tool_search function that Bifrost resolves in the gateway (select: or BM25), at most 3 model calls per request (non-streaming)
- feat: the gateway-run tool search also serves streaming Responses requests, splicing the search turns into one client stream
- fix: preserve xhigh reasoning effort for OpenAI-compatible destinations (vLLM, Ollama, SGL, and custom providers) instead of rewriting it to high using OpenAI model-name rules @pranavthakur0-0 (#6193)
Installation
go get github.com/maximhq/bifrost/core@v1.13.0This release was automatically created from version file: core/version