core/v1.8.5

maximhq/bifrostcore/v1.8.5Sep 8, 2026by akshaydeo

Upgrading?

AI Summary

A feature-rich release adding new providers (Databricks, GitHub Copilot), virtual MCP server support, and extensive fixes for Bedrock, reasoning handling, and streaming.

Key Highlights

  • New Databricks provider
  • New GitHub Copilot provider
  • Virtual MCP server support
  • Project governance dimension in request context
  • Native raw request redaction for Anthropic and Gemini

New Features

  • Databricks provider (Model Serving and Unity AI Gateway)
  • GitHub Copilot provider with installation tokens
  • Virtual MCP server support
  • Project governance dimension
  • Native raw request redaction
  • Semantic complexity routing contracts and vector stores
  • Multiple fixes for Bedrock Converse, reasoning blocks, and streaming

Full Release Notes

## Core Release v1.8.5

- fix: map forced tool choice `any` to `required` on OpenAI Responses and Chat egress (#6887) [@Atharva-Kanherkar](https://github.com/Atharva-Kanherkar)
- [fix]: preserve max reasoning effort for GPT-6 Astra [@nettee](https://github.com/nettee)
- fix: give a Bedrock message a placeholder text block instead of a null `content` field when it has no text and no tool calls - `BedrockMessage.Content` has no `omitempty`, so a message with empty text and no tool calls (or an empty `tool_calls` array) serialized as `content:null`, which Converse rejects with "Member must not be null" (#2765)
- [fix]: marshal required nullable response fields as null [@PSR94](https://github.com/PSR94)
- fix: accept top-level arrays from OpenAI-compatible model APIs [@dani29](https://github.com/dani29)
- feat: add Baseten to Hugging Face inference provider discovery [@nicolastoulemont](https://github.com/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`, with `cache_control_injection_points` for role/index targeting, and extended to translate the marker into `prompt_cache_breakpoint` plus 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_reasoning` with an Anthropic-family fallback (#6624)
- fix: render reasoning the upstream actually returned on Bedrock Converse-shaped responses (`/bedrock` converse 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 emits `reasoningText` for exposed text and keeps `redactedContent` for opaque blocks, while replays to Bedrock are unchanged [@akshaydeo](https://github.com/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 `AllowOnAllVirtualKeys` to `AllowByDefault` with backward-compatible wire aliases (#6306, #6307, #6308, #6641, #6642, #6649)
- feat: add `allow_all_providers` to 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`, `BifrostGuardrailDebug` and `BifrostRoutingDebug` to `*Metadata` with type aliases, and rename the `routing_debug` field to `routing_metadata` (#6164, #6166, #6177, #6317, #6722, #6727)
- feat: support native raw request redaction for Anthropic and Gemini passthrough and add `RawStreamTextCodec` with 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 `MCPConnectionFailure` on client state (#6794)
- feat: remove the plugin `version` field 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_marker` for custom providers (#6799, #6802, #6948, #6960)
- fix: alias assistant `reasoning_content` for Groq and Cerebras instead of stripping it (#6949)
- fix: populate `summary_index`, summary text and signatures on `reasoning_summary_*` stream events for Anthropic, Bedrock and Gemini (#6902)
- fix: derive chat `finish_reason` from the Responses terminal state and incomplete details (#6901)
- fix: emit proper terminal events for Anthropic `response.incomplete` and `response.failed` instead of truncating, and synthesize a missing terminal text suffix from `output_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 `thoughtSignature` parts with empty text on native GenAI (#6745)
- fix: use `max_tokens` instead of `max_completion_tokens` for Ollama (#6607)
- fix: send rerank documents as Cohere v2 strings, not objects (thanks [@AdityaPainuli](https://github.com/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_control` breakpoints 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

```bash
go get github.com/maximhq/bifrost/core@v1.8.5
```

---
_This release was automatically created from version file: `core/version`_

Related Repositories