Core Release v1.14.0
- feat: relays to non-LLM APIs with a single credential, per-route pricing and usage mapping, streaming, header matchers on any header name, and relay plugin hooks for access, budgets and logging
- feat: AWS SageMaker provider for real-time endpoints (OpenAI-compatible chat) plus InvokeEndpoint and InvokeEndpointWithResponseStream passthrough
- feat: MiniMax provider for chat, Responses, image generation, video generation, speech and transcription
- feat: BytePlus ModelArk provider for Seed chat, native Responses, multimodal embeddings, Seedream image generation, editing and streaming, and Seedance video generation with task options
- feat: Azure AI Speech text-to-speech and transcription (use_speech_endpoints), Voice Live realtime sessions (use_voice_live_endpoints) and GPT Live, with voices in list models, Ocp-Apim-Subscription-Key support, the served model and billing header, and Whisper usage derived from audio duration
- feat: Bedrock Nova Sonic realtime through the OpenAI Realtime translator and a RealtimeConnector for providers that do not speak WebSocket
- feat: mcp-go v1.3.0 with a global and per-server max protocol version, upstream prompts, resources and resource templates, tool output schemas, titles, icons and multimodal results, tools/list_changed notifications, CIMD client registration, and HTTP connection reuse for per-call clients
- feat: GitHub Copilot keys take a PAT or OAuth token, Claude models route to /v1/messages, and OpenAI models get native Responses and embeddings
The GitHub App installation mode and GithubCopilotKeyConfig are removed. A GitHub Copilot key needs a token in value.
- feat: native decisions on vLLM, SGLang, Databricks System One and Azure gpt-6-luna; OpenAI decisions accept conversation items, JSON parts and prompt caching
- feat: per-provider passthrough route allowlist, reachable for custom providers through x-model-provider
- feat: Vertex aliases route to custom OpenAI-format Vertex endpoints through vertex_endpoint
- feat: Gemini 4 receives a thinking budget as thinkingLevel (up to 1024 low, up to 8192 medium, higher high)
- feat: Gemini long-decode continuation tokens are passed through
- feat: Fireworks Responses requests honour disable_store
- feat: Databricks lists the key's models and aliases in /v1/models
- feat: developer messages are sent as system to models whose datasheet row sets supports_developer_role to false, and mid-conversation system messages are folded for models that reject them (thanks @salarali!)
- feat: opted-in metadata propagates to realtime and Live units
- feat: Tracer.HoldTraceFlush and Span.SetStartTime
- fix: anthropic - native Sonnet 5.5 requests forward the caller's reasoning and sampling settings on both the typed and raw paths (thanks @valentinyanakiev!)
- fix: anthropic - streaming message_delta keeps its required delta object and reports only the usage the upstream sent (thanks @valentinyanakiev!)
- fix: deepseek - document content is rejected before egress on the Anthropic endpoint (thanks @valentinyanakiev!)
- fix: omit synthetic reasoning signature on bridged Chat Completions thinking blocks (thanks @rxchitrx!)
- fix: Gemini/Vertex tool-call ids reach the provider without the embedded thought signature - functionCall.id and functionResponse.id are sent as the base id Gemini issued, so the model no longer sees (and copies) a ~500-char id carrying the base64 signature as text; the signature still travels in thoughtSignature (thanks @Vivek1898!)
- fix: Bedrock streams report a connection lost after the 200 as a 502 from upstream, so Anthropic clients get a retryable api_error instead of invalid_request_error (thanks @dinhxuanvu!)
- fix: Bedrock requests that fail to connect report a 502 from upstream with type provider_connection_failed instead of resolving to 400 (thanks @dinhxuanvu!)
- fix: OpenAI-compatible chat streams forward deltas that carry only extra_content (thanks @Javtor!)
- fix: Bedrock chat tool messages whose content is a single text block render like the equivalent string, so the prompt cache holds across turns; the block's cache_control still becomes the cachePoint after the toolResult
- fix: Anthropic web search on chat completions keeps the streamed server_tool_use query server-side instead of emitting an orphan tool_calls delta, and web_search_result_location citations map to annotations[].url_citation (thanks @brianhadley2026!)
- fix: OpenAI Responses requests keep the id and status of a native web_search_call, which OpenAI and Codex backends require on replay (thanks @pcbeingused333!)
- fix: Bedrock invoke-with-response-stream ends a tool-call turn with stop_reason tool_use instead of end_turn, matching the non-streaming invoke response (thanks @pcbeingused333!)
- fix: OpenAI passthrough with a caller ChatGPT/Codex token no longer swaps in a stored OpenAI API key, which the ChatGPT backend refused with api_key_not_supported
- fix: gemini - image generation usage counts thoughtsTokenCount in output tokens (as image reasoning_tokens) and round-trips it on /genai responses
- fix: Anthropic advisor iterations are billed at the advisor model's rate
- fix: Bedrock forwards tool strict to Converse toolSpec.strict for Claude, no longer rewrites the fallback-credit beta date, and drops the tool-schema pattern zai.glm-5.3 rejects
- fix: input_image blocks inside tool outputs get the default detail
- fix: Responses reasoning delta events keep their required delta field
- fix: tool_addition / tool_removal blocks are stripped where the mid-conversation tool changes beta is unsupported, and thinking.display updates gets its beta or is downgraded
- fix: Responses WebSocket accepts response.interrupt
- fix: realtime turn lifecycles, logs and upstream errors are corrected, and the client socket closes when the upstream ends
- fix: OpenRouter image generation returns images from message.images and streamed delta.images
- fix: Databricks sends the output ceiling as max_tokens and reasoning_effort as output_config.effort on adaptive-only Claude
- fix: unprefixed models on native decision routes are left to routing instead of being pinned to OpenAI or Typesafe
- fix: ListAllModels bounds each list-models page instead of the whole walk, aliases allowed only by regex entries are listed, and Vertex OAuth keys with deployments or allowlists list the Model Garden catalog
- fix: Vertex no longer refuses non-chat operations on aliases with a custom endpoint
- fix: held streams commit as soon as the upstream produces output
- fix: streaming spans carry token usage, chunk count and TTFC, plugin post-hook spans have real durations, background spans stay out of the overhead breakdown, and multi-turn MCP code-mode requests keep upstream time across turns
- fix: MCP returns a clear error on upstream input_required, treats a 404 as a dead session only on revisions with sessions, and refreshes a rejected credential in the background when an auth retry is skipped
Installation
go get github.com/maximhq/bifrost/core@v1.14.0This release was automatically created from version file: core/version