Core Release v1.7.11
- fix: retry after an unverifiable reasoning refusal on chat-shaped requests too -
/v1/chat/completionsand/v1/messagescarry replayed reasoning onreasoning_details, but the fail-soft strip only handled Responses-shaped items, so a router that switched models mid-conversation returned "messages.N.content.0: Invalidsignatureinthinkingblock" straight to the client instead of retrying without the signature - fix: strip thinking signatures off Responses content blocks, not just
encrypted_contenton the reasoning item - a message could need the strip withencrypted_contentalready absent, and only reasoning items are dropped when nothing survives so an ordinary message keeps its own content - fix: stop sending
reasoning.contentto non-gpt-oss OpenAI/Azure reasoning models, which cap the array at zero entries and reject a populated one with "Invalid 'input[N].content': array too long. Expected an array with maximum length 0"; replayed Anthropic thinking blocks translate intoreasoning_textblocks and were hitting this.summary+encrypted_contentalready carry everything OpenAI accepts - fix: stop clearing
reasoning_effortfor current-generation Grok models - the rule substring-matched "grok-3-mini", sogrok-4.5,grok-4.6andgrok-4.20-multi-agentall silently lost the field and answered at the wrong reasoning depth, cost and latency. Replaced with an exact-match deny-list (SupportsGrokReasoningEffort) that normalizes routing prefixes,-latestand xAI's 4-digit date suffixes - fix: keep
reasoning_effort: "xhigh"forgrok-4.6andgrok-4.20-multi-agent- the shared OpenAI-dialect normalizer downgraded it to "high" before the xAI compat pass ran, so the value was lost even with the deny-list corrected.grok-4.5still downgrades on purpose, matching xAI's documented upstream coercion - fix: emit
content_part.added,output_text.delta,output_text.doneandcontent_part.donewhen a tool-based structured-output call is reassembled into a message on the Responses streaming path - onlyoutput_item.added/donewere emitted, so every consumer reading incremental events rather than the item snapshot saw a stream with no text at all. A schema-constrainedstreamGenerateContentto Bedrock Mantle returned{"candidates":[{"content":{"role":"model"},"finishReason":"STOP"}]}with tokens billed. Affects Vertex, Bedrock Mantle and Azure Claude, the three providers that emulate structured output with a forced tool call - feat: inline URL-sourced images and documents for AWS-hosted Claude on the native-Anthropic path - Bedrock Mantle rejects
{"source":{"type":"url"}}with "URL content sources are not yet supported for this model". Fetches go through the SSRF-safe dialer with a size cap, and a failed fetch aborts the request rather than silently dropping an attachment. Brings the native-Anthropic surface to parity with Bedrock's Converse path - feat: bedrock vpc endpoints support (#6064)
- feat: add
use_idp_credentialsto token-exchange config so SSO login app credentials can be reused for providers like Microsoft Entra ID (#6068) - feat: add w3c trace id to context (#5945)
- feat: persist and resync MCP tool discoveries uniformly across all client types via a hash-gated core callback
- feat: add per user oauth mcp support for config.json
- feat: add a context path for skipping auth resolution on trusted internal callers
- feat: cost accounting for prompt guardrails (#4931)
- fix: path normalization auth bypass (#5763)
- fix: preserve minimal reasoning effort for GPT-5-family OpenAI models (thanks @jitokim!) (#6046)
- fix: map truncated Gemini responses to the MAX_TOKENS finish reason (thanks @AdityaPainuli!) (#5979)
- fix: omit absent tool-call function name on streaming deltas instead of emitting null (thanks @AdityaPainuli!) (#5966)
- fix: bedrock files handling in inference (#5947)
- fix: cost in usd ticks for xai usage (#5950)
- fix: add anthropic error branch when stripping encrypted reasoning content
- fix: discover tools synchronously for per-call MCP clients, fix shared-OAuth reconnect and verify errors
- fix: break lock-order inversion in ConnectionCheckerManager, close a data race in the performCheck test
- fix: rebuild ephemeral client fresh across the whole connect+init retry
- fix: preserve last-known tool maps across close-first reconnects
- fix: bind MCP connect attempts to entry identity and guard AddClient's discovery path
- fix: pin needs_session_stickiness across config.json reconciliation so an unrelated file edit cannot revert it to per-call
- fix: restrict Reauthorize to shared OAuth clients
- fix: reject inactive tokens in ValidateToken, document the shared vs per-identity oauth token lookup contract
- fix: don't silently drop stored oauth scopes on decode failure, skip rotation instead
- fix: gate SSE OnConnectionLost on connection identity
- fix: close the verify-headers double-submit race, preserve TLS, timeout and per-user-header fields on OAuth-completion updates
- fix: repair shared connections regardless of destructive hint, fail closed on missing tool annotations, dedupe background reconnect
- fix: configure bounded http.Server timeouts and a request-body limit
- fix: guard nil ConfigStore, propagate resource, surface pending-bootstrap cleanup failure
- chore: dependabot dependency updates (#6040)
Installation
go get github.com/maximhq/bifrost/core@v1.7.11This release was automatically created from version file: core/version