github maximhq/bifrost core/v1.12.0
Core v1.12.0

4 hours ago

Core Release v1.12.0

  • feat: agent gateway runtime with A2A request, event and trace contracts, card discovery, A2A plugin pipeline, streaming, durable push delivery and opt-in private push callbacks; schemas.Tracer gains ReleaseTrace
  • feat: gpt live session schemas, live provider interface and openai implementation, with sideband attach routes, the live_sideband request type and delegation error recording
  • feat: add cloudflare workers ai provider with chat, responses, embeddings, model listing and native clef decisions
  • feat: inject any number of named provider-configured mcp tools into chat and responses requests, past tool filters, and execute them server side including streaming
  • feat: oauth_key_config mints bearer tokens for openai-compatible providers through a shared token cache, also used by databricks and github copilot
  • feat: normalise decision requests and answers to an openai-style list shape (map form deprecated) and add openai decision converters for the openai-format route
  • feat: native decision support for openai, perplexity, ollama and openrouter
  • feat: emulate decisions through responses only when the request is marked by convert_decision_to_responses
  • feat: Typesafe can back a custom provider (base_provider_type "typesafe") with its own name, keys, allowed_requests, request_path_overrides and keyless listing @akshaydeo
  • feat: complexity router decision classifier support: RequestType on routing calls and decision cost tracking
  • feat: multimodal embedding input with per-item params for cohere, gemini, vertex, bedrock nova/titan and parasail
  • feat: shell and apply_patch tools, allowed_callers translation and gemini code execution on the responses api
  • feat: add ModelRetrieve operation for openai, anthropic, cohere, gemini, mistral and ollama
  • feat: xai realtime provider with client-secret minting; realtime events keep their own copy of raw bytes
  • feat: bedrock passthrough for InvokeAgent, knowledge-base Retrieve and ApplyGuardrail; pass through azure content filter annotations
  • feat: vertex aws workload identity federation and sdk-chain resolution for aws external_account json
  • feat: add ToolUsage.WebSearch usage and deprecate NumSearchQueries
  • feat: add IgnoreProviderCost to provider config
  • feat: add BifrostContextKeyCompatForceReasoningOnlyToResponses
  • feat: route chat requests with reasoning.mode to the responses api on openai and azure, and carry reasoning.summary through chat to responses conversion
  • feat: stamp the deepseek served model and read server_side_model from the datasheet
  • feat: classify provider failures (including timeout and cancelled), rotate keys past permanent per-key failures and carry provider retry hints on errors
  • feat: per-attempt first-token deadline for stream attempts with fallback handover
  • feat: requested_provider and requested_model on RoutingInfo and as reserved context keys
  • feat: Access.AllowsEveryModel for provider-wide model grants
  • feat: passthrough body model fields for governance checks
  • feat: require_public_target on MCP clients, enforced on every dial
  • feat: allowlisted private dialer for MCP OAuth
  • feat: capture, aggregate and inject upstream MCP server instructions, with per-client and total byte caps
  • feat: RefreshMCPClientTools for on-demand tool rediscovery
  • feat: detect dead MCP sessions on tool calls and reconnect; retry probe timeouts but not dead sessions or auth failures
  • feat: bound code mode execution with step, memory, source, log, tool-call, value and nesting limits
  • feat: process-wide HTTP client factory so MCP, OAuth, catalog sync and OTLP follow the global API proxy
  • feat: BifrostContextKeyGovernanceDisableContentLogging and bifrost.content_logging.disabled span attribute
  • feat: BifrostContextKeyLoadBalancerAttempt and LoadBalancerMetadataPrefix
  • feat: add HTTPTransportResponseHeadersHook and pooled HTTPResponseMetadata to HTTP transport plugins
  • feat: add Warp config schema, log embedding configuration, multi-model selection and agent error codes
  • feat: add BifrostContextKeyCacheLookup to carry the cache lookup outcome before a response exists
  • feat: add RawPayloadConsumer and raw request/response fields on LLM spans
  • feat: add StripTraceAttributes for per-connector attribute denylists
  • feat: add bifrost.cost.* attributes and BifrostContext.CalculateCostBreakdown for plugins
  • feat: add bifrost.app span attribute derived from User-Agent
  • feat: add TraceSessionID and TraceDimensions accessors for connector metric tags
  • feat: add typed LLMSpanData, SpanEnrichment and connector demand interfaces
  • feat: expose failure identity for pre-dispatch errors
  • feat: add BifrostGuardrailDetection for detect-only guardrail policy matches
  • feat: Bedrock guardrail selective evaluation: guardContent blocks (text and image) survive conversion, guardrailConfig accepts a validated tagSuffix and streamProcessingMode, InvokeModel reads X-Amzn-Bedrock-Guardrail* headers, and the same guard_content marker is available on Chat Completions content blocks (#7696) @akshaydeo
  • chore: deprecate attribution context keys in favour of ctx.Grant() accessors
  • fix: gpt-5.6+ requests carrying cache_control are no longer switched to prompt_cache_options.mode "explicit"; markers still become prompt_cache_breakpoint (at most three in implicit mode, four when the caller sets explicit mode) @akshaydeo
  • fix: report truncated Content-Length response streams and discard incomplete connections (thanks @Constantine3!)
  • fix: a tool_result flagged is_error keeps its status "incomplete" marker on the OpenAI Responses wire (#8195) (thanks @shreyanshj10!)
  • fix: Responses to chat conversion maps output_text to text on multi-part assistant turns (#8196) (thanks @shreyanshj10!)
  • fix: preserve cache_control, citations, prompt_cache_breakpoint and cachePoint in deepCopyChatContentBlock (#8215) (thanks @Shashank2985!)
  • fix: Anthropic-compatible responses report stop_reason "stop_sequence" with the matched stop_sequence for Claude on Anthropic and Vertex, streaming and non-streaming (thanks @jimseiwert!)
  • fix: Anthropic error envelope always uses a documented error.type, mapped from google.rpc status names or the HTTP status when needed (thanks @jimseiwert!)
  • fix: Gemini/Vertex Responses conversion keeps function tools declared without input_schema and orders function responses to match the preceding calls (thanks @jimseiwert!)
  • fix: chat streams converted from a Responses upstream send the assistant role exactly once, on the first chunk (#7693) (thanks @hmdsefi!)
  • fix: preserve Mistral streaming text arrays and reject unsupported content blocks (thanks @xujiantop-crypto!)
  • fix: map chat completion n to Gemini candidateCount (#7388) (thanks @axelray-dev!)
  • fix: record output items before closing open items on Gemini streaming Responses when parts and finishReason share a frame (#7341) (thanks @wofiporia!)
  • fix: strip the Claude Code billing header again when an effort-only system message comes first, and restore it in place for Anthropic attempts (#8039) @akshaydeo
  • fix: infer http status for stream errors and key-selection failures
  • fix: skip catalog-inferred fallbacks on caller-fault errors; forward raw gemini logprobs
  • fix: refuse aggregate model listing with a direct key, return the provider's error for a refused direct key, and bind no session key for direct keys
  • fix: restore primary provider headers after exhausted fallbacks and name plugin-answered fallbacks in stream routing headers
  • fix: apply the global proxy to providers without their own and honour multi-entry no_proxy lists
  • fix: route every provider egress stack, auth client and url fetch through proxy_config, with https and ipv6 proxies
  • fix: build passthrough urls that stay on the provider host
  • fix: keep replicate file list pagination on the configured file endpoint
  • fix: validate azure realtime endpoint before use and contain websocket session panics
  • fix: fit output tokens and thinking budget per attempt after key selection
  • fix: clamp max_tokens and rewrite adaptive thinking for pre-adaptive claude models
  • fix: send custom tools as function tools when the datasheet marks them unsupported
  • fix: read default reasoning effort from the datasheet when deciding to strip sampling params
  • fix: add opt-out capability for reasoning.summary
  • fix: clear paired item ids when stripping rejected reasoning
  • fix: downgrade json_schema response_format to json_object on deepseek
  • fix: keep gemini responses-path parity for json mode, native tools, candidateCount, logprobs and urlContextMetadata
  • fix: normalize root schema compositions for claude tools on bedrock converse
  • fix: per-model tool schema policy for kimi on chat and responses
  • fix: carry anthropic mid-conversation tool changes through the responses representation
  • fix: disable genai raw-body passthrough for non-google providers and model garden models on vertex
  • fix: keep the vertex passthrough api version and poll veo operations in their own region
  • fix: preserve safeguard_results in streamed message_delta
  • fix: error on bedrock converse streams missing messageStop
  • fix: emit cachePoint after cached document blocks on bedrock converse
  • fix: keep reasoning item ids and encrypted tokens through bedrock converse and chat-to-responses replays; forward store
  • fix: preserve thinking block order for bare claude model ids
  • fix: computer tool actions array, computer tool muxing and server tool cache_control
  • fix: omit null logprobs on history output_text and keep stream extra_fields on the openai responses drop-in
  • fix: send only OpenAI embedding params to OpenAI-compatible providers; label Cohere embeddings_by_type
  • fix: gemini $ref tool outputs, vertex express auth and image/transcription extra params on fallbacks
  • fix: fan out gemini embedding taskType and title per entry
  • fix: capture raw request on bedrock and vertex embeddings
  • fix: forward anthropic extra params through bedrock conversion (thanks @wangrat!)
  • fix: accept matching reasoning_effort and reasoning.effort (thanks @Daltonganger!)
  • fix: align typesafe validation and fidelity with the typesafe sdk
  • fix: bound per-provider model list polls and resume pagination after the last returned id (thanks @novai42!)
  • fix: allow empty copilot key values for github app auth and distinguish 422 permission errors
  • fix: cohere replay thinking order, decisions tool_choice gate, served tier on chat bridge, bare sonar routing, mcp server_label, legacy prompt framing
  • fix: hold back retried stream errors from post-hooks
  • fix: end large-response previews on a utf-8 boundary
  • fix: float weighted key selection that ignores negative or non-finite weights
  • fix: session affinity skips direct-key fallbacks and caller key pins, drops bindings to removed keys in single-key pools, and falls back to sibling keys when a session-bound key is rejected outright
  • fix: read the message context before abandoning delivery
  • fix: route code-mode tool results through PostMCPHook before logging
  • fix: MCP agent loop keeps earlier turns, the turn-1 route and caller cache points
  • fix: keep the live MCP connection on a failed make-before-break re-dial and reconnect after a failed live-connection check
  • fix: preserve pending_verification through EnableClient and the connection checker
  • fix: report a rejected inbound bearer token separately from a missing one in token exchange
  • fix: treat only masked placeholders as keep-stored for OAuth credentials
  • fix: redact x-bf-vk in captured request headers
  • fix: add BifrostError.EffectiveHTTPStatus as the single source for the status a caller received
  • fix: add span attribute helpers for chat tools export
  • fix: defer trace completion for abandoned deliveries

Installation

go get github.com/maximhq/bifrost/core@v1.12.0

This release was automatically created from version file: core/version

Don't miss a new bifrost release

NewReleases is sending notifications on new releases.