Core Release v1.8.5
- fix: map forced tool choice
anytorequiredon OpenAI Responses and Chat egress (#6887) @Atharva-Kanherkar - [fix]: preserve max reasoning effort for GPT-6 Astra @nettee
- fix: give a Bedrock message a placeholder text block instead of a null
contentfield when it has no text and no tool calls -BedrockMessage.Contenthas noomitempty, so a message with empty text and no tool calls (or an emptytool_callsarray) serialized ascontent:null, which Converse rejects with "Member must not be null" (#2765) - [fix]: marshal required nullable response fields as null @PSR94
- fix: accept top-level arrays from OpenAI-compatible model APIs @dani29
- feat: add Baseten to Hugging Face inference provider discovery @nicolastoulemont
- fix: strip the encrypted reasoning signature when the upstream reports the field as unsupported (e.g. Bedrock Converse replaying a Claude signature onto a non-Anthropic model after a mid-conversation model switch), extending the existing unverifiable-signature fail-soft
- fix: clear Anthropic raw-body passthrough based on the resolved provider and model pair, so non-Claude models on multi-family providers (Vertex, Azure, Bedrock Mantle) convert the request instead of passing the Anthropic payload through
- feat: optionally synthesize prompt-cache breakpoints for requests that carry none, so agentic clients that emit no cache markers (Codex and similar) stop paying the cache-write rate on every turn; off by default per provider via
prompt_cache.auto_inject, withcache_control_injection_pointsfor role/index targeting, and extended to translate the marker intoprompt_cache_breakpointplus explicit cache mode on the gpt-5.6 family - fix: drop unsigned reasoning blocks from Bedrock Converse replays to Claude, which verifies the thinking signature and rejects a block without one in every serialisation; Nova and MiniMax keep receiving unsigned blocks with the field omitted. Gated on a new datasheet capability
bedrock_requires_signed_reasoningwith an Anthropic-family fallback (#6624) - fix: render reasoning the upstream actually returned on Bedrock Converse-shaped responses (
/bedrockconverse and the framework drop-ins that reuse it): a native Grok or OpenAI reasoning summary with no encrypted content was resolved through the request-direction redacted shape and silently dropped, so clients saw text only; the response direction now emitsreasoningTextfor exposed text and keepsredactedContentfor opaque blocks, while replays to Bedrock are unchanged @akshaydeo - feat: add Databricks as a first-class provider covering Model Serving and Unity AI Gateway with PAT or OAuth M2M auth, per-model parameter sanitization from datasheet capabilities, Claude reasoning translation, remote image inlining, Responses-to-chat fallback and surfaced upstream errors (#6665, #6676, #6770, #6958)
- feat: add GitHub Copilot provider that mints installation tokens server-to-server from GitHub App credentials, with chat completions, Responses and list models (#6352, #6353, #6356)
- feat: add virtual MCP server support, endpoint slugs for direct MCP servers, and config.json wiring for
mcp.virtual_mcps(#6746, #6791, #6904) - feat: add the project governance dimension to request context, schemas and log payloads (#6702, #6705)
- feat: settle per-request identity onto a grant at context conversion and rename
AllowOnAllVirtualKeystoAllowByDefaultwith backward-compatible wire aliases (#6306, #6307, #6308, #6641, #6642, #6649) - feat: add
allow_all_providersto virtual key schemas (#6662) - feat: add semantic complexity routing contracts, vector store and embedding executor, LLM classifier fallback, session-aware routing and the 750-phrase limit; rename
BifrostCacheDebug,BifrostGuardrailDebugandBifrostRoutingDebugto*Metadatawith type aliases, and rename therouting_debugfield torouting_metadata(#6164, #6166, #6177, #6317, #6722, #6727) - feat: support native raw request redaction for Anthropic and Gemini passthrough and add
RawStreamTextCodecwith a paused buffer transform for native SSE redaction (#6365, #6386) - feat: route Azure DeepSeek Responses requests from coding harnesses to chat completions, fall back for models without a Responses endpoint, and gate it on
compat.azure_deepseek(#6326, #6737) - feat: split converter processing into individual span buckets and add the overhead spans export toggle (#6588, #6945)
- feat: persist the served model from the provider response (#6693)
- feat: record
MCPConnectionFailureon client state (#6794) - feat: remove the plugin
versionfield in favour of hash-based reconciliation (#6250) - fix: patch fasthttp to remove races when closing streams, drain abandoned streams so upstream connections return to the pool, terminate streams that send only heartbeats after usage, and add
does_not_send_done_markerfor custom providers (#6799, #6802, #6948, #6960) - fix: alias assistant
reasoning_contentfor Groq and Cerebras instead of stripping it (#6949) - fix: populate
summary_index, summary text and signatures onreasoning_summary_*stream events for Anthropic, Bedrock and Gemini (#6902) - fix: derive chat
finish_reasonfrom the Responses terminal state and incomplete details (#6901) - fix: emit proper terminal events for Anthropic
response.incompleteandresponse.failedinstead of truncating, and synthesize a missing terminal text suffix fromoutput_text.done(#6159, #6805) - fix: route Anthropic-on-Vertex passthrough usage and stream terminal detection through the Anthropic parsers (#6639)
- fix: remove raw body passthrough when the provider does not support the output config format (#6798)
- fix: route Bedrock models to Converse (#6655)
- fix: keep standalone
thoughtSignatureparts with empty text on native GenAI (#6745) - fix: use
max_tokensinstead ofmax_completion_tokensfor Ollama (#6607) - fix: send rerank documents as Cohere v2 strings, not objects (thanks @AdityaPainuli!) (#6654)
- fix: handle reasoning efforts for Azure providers (#6877)
- fix: thinking block modification error on replay (#6854)
- fix: skip custom providers in list models when the request is not allowed to use them (#6853)
- fix: pass the MIME type in file responses (#6684)
- fix: retry video job polling and record video debug data (#6728)
- fix: translate
cache_controlbreakpoints for OpenRouter Claude models on the Responses API (#6692) - fix: block Teredo addresses in the dial-time SSRF guard and run MCP auth through SSRF checks (#6757, #6760)
Installation
go get github.com/maximhq/bifrost/core@v1.8.5This release was automatically created from version file: core/version