Skip to main content
v2.4.0

Changelog

v2.4.0 moves the enterprise gateway onto OSS transports v2.4.0. Relays (governed calls to non-LLM APIs) get enterprise access control: relay grants on access profiles and projects, Relays and RelayLogs RBAC resources, and DAC-scoped Relay Logs. Okta Cross App Access lets AI apps exchange an Okta identity assertion for a Bifrost token that acts as the user. Audit logs record typed events with before/after diffs, sign with rotatable keys, and move to the log store when it can hold them. Admins can view the gateway as any user in read-only mode. The OSS release adds Relays, Warp Topics, the MiniMax, BytePlus and AWS SageMaker providers, and MCP prompts and resources.

✨ Features

  • Relay Access Control - Access profiles, user and entity profiles, and projects accept relay_grants, so relays are granted the same way as agents and MCP servers. New RBAC resources Relays (Create, View, Update, Delete) and RelayLogs (View, Delete): Admin gets all of them, Developer and Viewer get View. Relay Logs reads and deletes are DAC-scoped like request logs, and fetching a relay’s OpenAPI spec needs Relays:Update. The access profile and project sheets edit relay access, Home shows relays, GET /api/relays/{name}/access-profiles lists who holds a relay, and log connectors export relay calls. Docs
  • Okta Cross App Access (ID-JAG) - An AI app can exchange an Okta identity assertion (ID-JAG) at /oauth2/token for a Bifrost token that acts as, and is attributed to, the named user. It is set on the Okta SSO provider (crossAppAccess: enabled, accessTokenTtl, provisionUsers) and needs Bifrost’s OAuth server enabled. Clients are managed under User Provisioning (/api/scim/idjag/clients) with mcp and llm scopes; a token with the llm scope works on inference routes as its user. Each assertion can be redeemed once, and disabling or rescoping a client refuses its tokens at once on every node. Docs
  • Audit Log Events and Diffs - Audit rows now name what happened (for example virtual_key.updated, user.access_profiles_removed, auth.login) and store a before/after diff, shown in the detail view. Rows carry the request ID, session ID, auth method and on-behalf-of user, and return a severity. Routine reads are skipped, and test or preview calls are recorded as reads. New events cover agent sign-in, refresh and sign-out, background jobs, identity sync, identity-driven team and business unit changes, and node startup. Docs
  • Audit Signature v2 and Key Rotation - v2 signatures cover every stored field instead of seven, in the format v2:<key id>:<hex>. audit_logs.hmac_keys with active_key_id lets you rotate keys while older keys keep verifying their rows, and v1 rows still verify. With no key configured, Bifrost now generates one shared key, stored encrypted in the config store, instead of a random key per node per boot that never verified after a restart. Docs
  • Audit Events in the Log Store - When the log store can hold them, new audit events go to its enterprise_audit_events table. The config store’s table becomes a read-only Legacy view in the Audit Logs page, and retention and archival still apply to it.
  • View as User - Admins with the new Users:ViewAs permission (granted to Admin by migration) can open the gateway as a chosen user, in a new tab, to check what that user sees. RBAC, DAC scope and /me resolve as that user. Only GET, HEAD and OPTIONS pass; writes and API-key callers get 403. Starting a view writes a user.view_as_started audit row.
  • First-Match Access Profile Resolution - SSO providers accept accessProfileResolutionStrategy. all (default) grants every matching attribute rule, as before. order grants only the first matching rule, and each rule can grant one or more access profiles. Under order, a SCIM push also removes the login’s attribute grant. The SSO mapping editor has the option. Docs
  • Skip User Virtual Key Creation and Deletion - Two client settings, skip_access_profile_user_virtual_key_creation and skip_access_profile_user_virtual_key_deletion, stop an access profile from creating a user’s first virtual key, or from deleting the user’s keys when the last profile goes. Existing keys are still adopted and governed while the user holds a profile. Docs
  • Per-Project Content Logging - Projects have a content-logging setting that overrides the virtual key’s, set from the project sheet. Docs
  • Guardrail Updates - Docs
    • Prompt guardrails can use a decision model, and the rule is phrased as a yes/no question.
    • New per-rule profileExecutionMode. chained runs profiles in order, and each one sees the payload as the earlier profiles redacted it, so a local PII redactor can run before an external check. independent (default) keeps the current behaviour.
    • Lakera requests accept configurable metadata headers.
    • The CEL rule builder has a business unit condition.
    • Background output-monitor checks emit their own trace span. Gray Swan observe-mode and below-threshold results, and outcome-specific Bedrock assessments, are recorded as detections.
  • Edge Server Support - Docs
    • Admins can let users pick their own Cursor default model and Antigravity CLI helper model, optionally from a fixed list (app_setting_policies on PUT /api/edge/config). Choices are stored per user and served through /api/agent/app-settings.
    • Model picker lists: a global list plus per-app overrides set the models each app’s picker shows, in order. append_remaining shows the rest of the catalog after them. Edge settings can suggest the newest models per provider from the model catalog.
    • Edge can sign in with a virtual key alone (fleet switch virtual_key_auth_disabled). A virtual key never creates a user session.
    • Edge sign-in uses proof-bound (DPoP, RFC 9449) refresh tokens. Old and new Edge clients and gateways work together during a rolling upgrade.
    • OpenCode can be turned on or off for capture like the other apps, and the Edge settings pages are reorganized.
  • Codex Users Identified by Gateway Cookie - On /chatgpt_passthrough, the user is identified by Codex’s auth-openid gateway cookie or a virtual key, and the ChatGPT token is forwarded unchanged. The cookie is never sent upstream. A ChatGPT token with x-bf-vk now passes under every dual-credential setting.
  • Stored IdP Sign-In for Token Exchange - MCP token exchange refreshes and uses the user’s stored identity provider sign-in, and Edge sessions are recorded for it. Token exchanges go only to the identity provider’s hosts, and the authorization server URL is checked when the MCP client is saved.
  • Cluster Sync for MCP Prompts and Resources - Discovered MCP prompts and resources and their prompts_to_expose / resources_to_expose allow-lists sync across enterprise nodes.
  • Warp Topics Scoped by DAC - Warp topic reads follow the caller’s data access scope. Docs
  • Image Provenance and SBOM - Every pushed enterprise image has SLSA provenance and an SBOM attached.

🌎 Open Source Features

  • Relays - New relays call non-LLM APIs (Tavily, AWS Textract, Azure Speech and others) through /relay/{name}/{path} with one stored credential, per-route pricing and usage mapping, and streaming. Virtual keys get relay_grants, and relay calls are charged to the caller’s virtual key, team and customer budgets. Relay Logs record metadata, route-matched headers and (with content logging on) streamed response bodies. Routes can be imported from an OpenAPI document. Relays sync from config.json. Docs
  • Warp Topics - Warp groups logged requests into topics and broader themes, files each request under a topic as it is indexed, discovers new topics from unmatched requests, and counts topics over a time window with trends and metrics. Logs can be filtered by topic. Docs
  • MiniMax Provider - New minimax provider for chat completions, Responses, image generation, async video generation, text-to-speech and speech-to-text, with thinking passthrough. Docs
  • BytePlus Provider - New byteplus provider for BytePlus ModelArk: Seed chat completions, the native Responses API, embeddings, Seedream image generation and editing, and async Seedance video generation. Docs
  • AWS SageMaker Provider - New sagemaker provider for real-time endpoints. Chat goes through SageMaker’s OpenAI-compatible route (vLLM, SGLang, LMI, llama.cpp containers), and /sagemaker_passthrough forwards raw InvokeEndpoint and InvokeEndpointWithResponseStream calls.
  • Azure Speech and Live APIs - Azure keys reach Azure AI Speech for SSML text-to-speech and fast transcription (use_speech_endpoints), Azure Voice Live realtime sessions (use_voice_live_endpoints), and GPT Live. A new /azure route group lets Azure AI Speech clients and the Azure OpenAI SDK use Bifrost as their Azure resource.
  • Bedrock Nova Sonic Realtime - Amazon Nova Sonic speech-to-speech on the OpenAI Realtime-compatible surface, translated onto Bedrock’s signed HTTP/2 event stream.
  • MCP Prompts and Resources - Bifrost discovers the prompts, resources and resource templates an upstream MCP server offers and serves them on /mcp, with completion/complete. Each server gets prompts_to_expose and resources_to_expose allow-lists, narrowed by virtual keys and Virtual MCPs like tools.
  • MCP Protocol 2026-07-28 - mcp-go moves to v1.3.0. A global and per-server max protocol version setting caps what Bifrost offers upstream. Tool results keep images, audio and structured content, and tool output schemas, titles, icons and annotations reach clients.
    The MCP gateway now validates Origin as the Streamable HTTP spec requires. Browser requests to /mcp from an origin that is not allowed get a 403. Requests with no Origin header (CLIs, SDKs, server-side clients) are unaffected.
  • MCP OAuth CIMD and Issuer Binding - Upstream MCP OAuth publishes a Client ID Metadata Document at /api/oauth/client-metadata.json and registers with it. Each MCP client’s credentials are bound to the authorization server that issued them (RFC 8414, RFC 9207). The OAuth issuer URL is editable under Settings > Security.
  • Native Decisions on More Providers - /v1/decisions runs natively on vLLM, SGLang, Databricks System One and Azure gpt-6-luna. OpenAI decisions accept conversation items, JSON parts and prompt caching.
  • GitHub Copilot Token Auth - GitHub Copilot keys take a fine-grained PAT or a GitHub OAuth token in value, and the UI signs in with GitHub through the device flow. Claude models go to Copilot’s native /v1/messages, OpenAI models to /responses. Docs
    The GitHub App installation mode is removed. github_copilot_key_config is no longer accepted, and a GitHub Copilot key without a token in value is refused at setup. Replace App-based keys with a PAT or OAuth token before upgrading.
  • Passthrough Route Allowlist - Each provider has a passthrough route policy that controls which routes /openai_passthrough, /anthropic_passthrough, /azure_passthrough, /genai_passthrough and the other passthrough endpoints forward.
  • Codex with ChatGPT Sign-In - /chatgpt_passthrough forwards GET /backend-api/codex/models, so Codex signed in with ChatGPT runs through Bifrost with the virtual key in x-bf-vk. Each responses turn is still checked against the key.
  • Vertex OpenAI-Format Endpoints - A Vertex alias can point at a custom Vertex endpoint (vLLM or another container) that accepts OpenAI chat completions, through vertex_endpoint with raw_predict or predict.
  • Azure Blob Storage - Log payload and skills-file storage on Azure Blob with default Azure identity or connection-string authentication, JSON/gzip and Parquet.
  • Log CSV Export - The Logs page exports the filtered logs to CSV.
  • Fallback Chain in Log Details - Log details show a banner and timeline for the fallback chain a request went through.
  • Hide the Setup Checklist - A new disable_onboarding flag hides the setup checklist on stateless and provider-less deployments.
  • Developer Role and Mid-Conversation System Messages - Models whose datasheet row sets supports_developer_role to false get developer messages as system, and later system messages are folded in for models that reject them.
  • Gemini 4 Thinking Level and Continuation - A thinking budget sent to Gemini 4 models becomes thinkingLevel (up to 1024 is low, up to 8192 is medium, larger is high). Hops that end with finishReason: CONTINUATION carry their continuationToken.
  • Provider Additions - Fireworks Responses honours disable_store. /v1/models?provider=databricks lists the key’s configured models and aliases. strict on a tool reaches Converse toolSpec.strict for Claude on Bedrock. The model catalog keeps each model’s creation time.
  • Platform Hooks - Plugins can carry opted-in HTTP metadata into native realtime turns. HoldTraceFlush delays trace export until background writers finish, and SetSpanStartTime gives late-opened spans their real duration. The ClickHouse log store gets the user agent mappings table.

⚙️ Upgrade Notes

  • GitHub Copilot App mode removed - Replace App-based GitHub Copilot keys with a PAT or OAuth token before upgrading; see the Warning above.
  • MCP gateway checks Origin - Browser requests to /mcp from an origin that is not allowed get 403.
  • Audit log export needs AuditLogs:Download - Roles that exported audit logs with only View need this permission.
  • Adopted keys lose their own grants - When an access profile adopts a virtual key, the key’s own agent grants, Virtual MCP assignments and relay grants are removed, and allow_all_providers is cleared. Migrations apply this to keys adopted before the upgrade, so a key that outlives its profile does not regain access the profile never gave.
  • Audit storage moves - When the log store can hold audit events, new events are written there and the old config-store rows are shown as a Legacy view.

🐞 Fixed

  • Startup on Unknown Grants - A virtual key in config.json whose agent_grants or relay_grants names an agent or relay that is not stored is created with a warning instead of stopping startup.
  • Token Expiry Clock Skew - Token expiry tolerates clock skew, and an expired bearer gets an RFC 6750 challenge.
  • JWT Validation Cache Race - Callers no longer get the cache’s shared claims map, which they could change.
  • Dashboard Cookie Sessions - Cookie sessions exchange the stored sign-in instead of the cookie’s token.
  • User-Mode MCP Consent - User-mode MCP consent is refused for API-key requests.
  • VK Temporary Token Flow - Per-user headers are whitelisted so the virtual key temporary token flow completes.
  • Azure Subscription Key - The middleware accepts Ocp-Apim-Subscription-Key.
  • Refusals Charged to Keys - Keys are no longer charged for caller-fault refusals that core retries with the reasoning token stripped.
  • Budget Alerts with Extensions - Budget alerts account for budget extensions.
  • Access Profile Budget Overrides - Budget overrides apply to the target user, not the profile template.
  • Budget Requests List - The list cache is keyed by caller, so one user’s list is never served to another.
  • Batched Virtual Key Reload - Virtual MCP assignments converge in memory after a batched reload.
  • Entity-Owned Keys - Keys owned by a governed team, business unit or customer are managed like any entity key, and governed key fields match case-insensitively.
  • Business Unit Key Attribution - Requests with a business unit’s key are attributed to the unit and its customers.
  • SCIM Group Pushes - Removals apply by ID, and additions apply only while a rule maps the target. Business unit membership sync now matches teams on removal, resolve failure and manual assign.
  • Customer Team Count - The team count covers only teams the caller can see.
  • Relay Deletion - A deleted relay is removed from every in-memory holder at once, and relay_logs counts as a logs-store table.
  • RBAC Routes - /api/rss maps to Notifications, with writes gated on Settings update. UI action gates match the permissions the API checks, and RBAC-dependent queries are skipped when not allowed.
  • Audit Attribution and Verification - SSO logouts are attributed to the session user, anonymous password-logout rows are skipped, and agent sign-out rows name the user. Legacy v1 signatures verify across time zones and when the database dropped nanoseconds, and a mismatch is explained.
  • Home Budgets - Profile budget burn is measured on the user’s total spend, access profile budgets are pooled in the overview, and My Access lists MCP servers and agents allowed by default.
  • Org Chart Performance - Org chart log reads are batched and bounded by the gateway timeout.
  • Guardrail Sampling - Rule sampling is an independent random draw per request instead of a cluster-synced counter.
  • Guardrail Spans and Overhead - Monitor-mode checks are left out of request overhead, span timings are set directly, and a stream gets one output span instead of one per chunk.
  • Guardrail Output Rules - Stale output rules are cleared across fallbacks and nested MCP calls, and Bedrock camelCase usage is decoded.
  • Guardrail Media Prompts - Video, speech and transcription prompts are extracted and redacted instead of sending raw audio.
  • Guardrail Config Validation - Rule and config validation is stricter, secrets are redacted, and rule writes are atomic.
  • Guardrail CEL Values - Numeric-looking header, substring and identity values are quoted, and incomplete conditions are omitted.
  • Guardrail Judge Fields - Judge provider and model are no longer flagged as required when the judge type is toggled.
  • Cross App Access Card - The card follows the provider save and fits its table.
  • OSS: Anthropic and Bedrock - Sonnet 5.5 passthrough keeps reasoning and sampling settings, message_delta keeps its delta, web search on Chat Completions no longer leaks an orphan tool_calls delta, advisor passes are billed, Bedrock connection failures return a retryable 502, tool-use streams end with stop_reason: tool_use, and prompt caching holds across tool turns.
  • OSS: Gemini Tool-Call IDs - Gemini and Vertex receive the tool-call ID they issued instead of a ~500-character ID.
  • OSS: OpenAI-Compatible Streams - extra_content-only chunks are forwarded, native web_search_call replay keeps id and status, and input_image in tool outputs gets a default detail.
  • OSS: Responses WebSocket and Realtime - Responses WebSocket accepts response.interrupt and stays on one key; an audio commit no longer blocks the next response.create.
  • OSS: List Models - Paginated providers are no longer cut off in aggregate listings, and /anthropic/v1/models includes max_input_tokens.
  • OSS: Pricing - Datasheet sync stores one deterministic price for shared Bedrock model names, image models over chat are priced from their image row, and compat keeps sampling params on rows without model_parameters.
  • OSS: MCP OAuth and Sessions - Protected resource metadata must match the server URL, abandoned installs are swept, expired tokens without refresh are marked needs_reauth, and 404 means a dead session only on revisions with sessions.
  • OSS: Platform - Held streams commit as soon as output starts, materialized view refreshes stop with their pod, config reload keeps the runtime classifier, framework/logstore builds without cgo, and the npx launcher verifies the binary checksum.
  • OSS: UI - The providers page shows a load error instead of onboarding, and the date range picker uses the active timezone.

🗄️ Database Migrations

Enterprise

  • ent_add_users_view_as_permission - Adds the Users:ViewAs permission and grants it to Admin. Rollback is a no-op, so the grant stays.
  • ent_add_relay_rbac_resources - Seeds the Relays and RelayLogs RBAC resources and their role permissions. Rollback is a no-op.
  • ent_add_relay_grants - Creates enterprise_access_profile_relay_grants, enterprise_user_access_profile_relay_grants, enterprise_entity_access_profile_relay_grants and enterprise_project_relay_grants, with cascading foreign keys. Reversible: rollback drops the four tables.
  • ent_strip_adopted_vk_own_relay_access - Deletes relay grants from virtual keys that an access profile has adopted. Non-reversible.
  • ent_clear_adopted_user_vk_allow_all_providers - Sets allow_all_providers to false on user keys adopted by an access profile. Non-reversible: which keys had the flag is not recorded.
  • ent_strip_adopted_vk_own_agent_and_virtual_mcp_access - Deletes agent grants and Virtual MCP assignments from adopted keys, and clears allow_all_providers on keys governed by an entity’s access profile. Non-reversible.
  • ent_add_idjag_clients_table - Creates enterprise_idjag_clients for Cross App Access clients. Reversible: rollback drops the table.
  • ent_add_idjag_redemptions_table - Creates enterprise_idjag_redemptions for single-use assertions. Reversible: rollback drops the table.
  • ent_add_agent_dpop - Adds dpop_thumbprint to agent auth codes, dpop_thumbprint, client_id and refresh_mode to agent sessions, and creates enterprise_agent_dpop_proofs. Non-reversible: dropping them could make bound sessions eligible for legacy refresh.
  • ent_add_user_app_settings_table - Creates enterprise_user_app_settings (one row per user and setting). Reversible: rollback drops the table.
  • ent_add_project_disable_content_logging_column - Adds disable_content_logging to enterprise_projects. Reversible: rollback drops the column.
  • ent_add_guardrail_rule_profile_execution_mode_column - Adds profile_execution_mode to enterprise_guardrail_rules. Reversible: rollback drops the column.
  • ent_add_audit_log_actor_context_columns - Adds request_id, session_id, auth_method and on_behalf_of_id to enterprise_audit_logs. Non-reversible.
  • ent_add_audit_log_event_name_columns - Adds event_name and changes to enterprise_audit_logs. Reversible: rollback drops both columns.
  • ent_add_audit_settings_state_table - Creates enterprise_audit_settings_state. Non-reversible.
  • ent_widen_audit_log_signature_column - Widens enterprise_audit_logs.signature to varchar(160) for v2 signatures. Non-reversible: v2 signatures do not fit the old width.
  • ent_add_audit_log_request_id_index - Builds idx_audit_request_id on enterprise_audit_logs concurrently, in the background after startup. Reversible: rollback drops the index.
  • ent_add_audit_log_event_name_index - Builds idx_audit_event_name_time on enterprise_audit_logs concurrently, in the background after startup. Reversible: rollback drops the index.
  • ent_logs_add_audit_events_table (log store) - Creates enterprise_audit_events (also in ClickHouse). Reversible: rollback drops the table.
Rolling back ent_add_audit_log_event_name_columns drops the changes column and permanently deletes every stored before/after audit diff. Rolling back ent_add_relay_grants deletes every relay grant on access profiles and projects.

Open Source

  • add_client_config_skip_access_profile_user_virtual_key_lifecycle_columns - Adds two client config columns that control access-profile user virtual key creation and deletion. Reversible: rolls back by dropping both columns.
  • add_passthrough_json_column - Adds the per-provider passthrough route allowlist. Non-reversible: dropping it would delete every provider’s passthrough allowlist.
  • add_warp_topic_discovery_min_requests_column - Adds the Warp topic discovery threshold. Reversible: without the column discovery runs at the default.
  • add_azure_use_speech_endpoints_column - Adds the Azure key use_speech_endpoints flag. Reversible: rolls back by dropping the column.
  • add_azure_use_voice_live_endpoints_column - Adds the Azure key use_voice_live_endpoints flag. Reversible: rolls back by dropping the column.
  • add_sagemaker_key_columns - Adds the SageMaker key config columns. Reversible: rolls back by dropping the columns.
  • widen_oauth2_client_id_columns - Widens OAuth client_id columns beyond varchar(255) for CIMD URLs. Non-reversible: longer client IDs may already be stored.
  • add_oauth2_refresh_token_client_display_name_column - Adds a client display name to OAuth refresh tokens. Reversible: rolls back by dropping the column.
  • add_mcp_max_protocol_version_columns - Adds the global and per-server MCP protocol cap. Non-reversible: dropping the columns would delete every configured cap.
  • add_mcp_client_discovered_resources_prompts_columns - Stores discovered MCP resources, resource templates and prompts. Reversible: rolls back by dropping the columns.
  • add_mcp_client_expose_lists_columns - Adds prompts_to_expose and resources_to_expose. Non-reversible: dropping the allow-lists would expose every prompt and resource they restrict.
  • add_oauth_issuer_binding_columns - Binds MCP OAuth credentials to their issuing authorization server. Reversible: rolls back by dropping the columns.
  • add_mcp_client_discovered_tool_details_column - Stores discovered MCP tool titles, icons and output schemas. Reversible: rolls back by dropping the column.
  • add_relays_tables - Creates the relay, route and virtual key grant tables. Non-reversible: dropping them would delete relay endpoints, their credentials and virtual key grants.
  • add_video_token_pricing_column - Adds output_cost_per_video_token. Non-reversible: dropping it would delete custom per-token video prices and bill token-metered video at $0.
  • add_voice_live_pricing_columns - Adds Azure Voice Live pricing columns. Non-reversible: dropping them would delete every Voice Live rate an operator set.
  • logs_add_warp_topic_tables - Creates the Warp topic, assignment and unmatched tables in the log store. Non-reversible once populated: topics outlive the requests they were built from and cannot be rebuilt from the logs.
  • logs_add_warp_vector_deletes_table - Creates the pending vector deletes table. Non-reversible while it holds rows: they list deleted logs whose vectors are still in the vector store.
  • mcp_tool_logs_add_method_column - Adds method to MCP tool logs for prompt and resource reads. Reversible: rolls back by dropping the column.
  • add_relay_logs_table - Creates the relay logs table (also created in ClickHouse). Non-reversible: it holds recorded call history and charges.
All new migrations only add columns or tables, so older binaries ignore them during a rolling upgrade.

🐙 Closed OSS Issues

  • #5649 - defaultImageDetail fix (#5352) doesn’t cover images inside function_call_output (tool results), Responses API to self-host vLLM still fails
  • #7189 - Realtime audio commit blocks subsequent response.create with active-response error
  • #7319 - /anthropic/v1/models omits max_input_tokens - integration list-models route never enriches from the model catalog
  • #7655 - Anthropic web search on /v1/chat/completions leaks the search query as an orphan tool_calls delta and drops citations
  • #8152 - Allow setup checklist to be dismissed persistently on stateless / provider-less deployments
  • #8268 - Providers page shows the “no providers configured” onboarding screen when the providers request fails
  • #8382 - Bifrost 2.2.6 strips web_search_call.status from Responses history, breaking Codex replay
  • #8489 - Datasheet sync stores a random price when bedrock and bedrock_mantle rows share a model name
  • #8546 - Gemini/Vertex receives the full _ts_-embedded call id as functionCall.id, so the model sees (and copies) ~500-char ids
  • #8547 - Abandoned shared OAuth MCP installs leave oauth_configs rows pending forever
  • #8549 - thinking blocks bridged from Chat Completions reasoning_content get a synthetic brid_ signature
  • #8550 - Bedrock invoke-with-response-stream reports stop_reason: "end_turn" for tool-use turns
  • #8594 - Export filtered logs to CSV from the Logs page
  • #8759 - GET /v1/models omits models from a paginated provider in aggregate listings
  • #8765 - Bedrock datasheet rows without model_parameters make compat drop all sampling params and substitute the model default max_tokens
  • #8801 - Bedrock: a tool message with one text block renders as text, but the same content as a string renders as json, which breaks prompt caching across turns
  • #8824 - framework/logstore no longer builds with CGO_ENABLED=0
  • #8934 - OpenAI-compatible chat streams drop chunks whose delta carries only extra_content
  • #8963 - Bedrock stream dropped mid-response reaches Anthropic clients as invalid_request_error
  • #8970 - Bedrock returns HTTP 400 when it can’t connect to the provider

📀 Base OSS version

transports/v2.4.0

🔌 If you are compiling plugin against this release - use following deps