- NPX
- Docker
✨ Features
- Sarvam AI Provider - Added Sarvam AI as a first-class provider with chat, text-to-speech, and speech-to-text support (thanks @Purvi09!)
- ElevenLabs Sound Effects - Added text-to-sound generation support via
/v1/sound-generation(thanks @SecretSun!) - Bedrock Project Scoping - Added optional
project_idto Bedrock and Bedrock Mantle key configs with per-alias overrides for Bedrock, Bedrock Mantle, and Vertex, plus UI support - Trace Redaction - Phase-scoped redaction and revealing, transient redaction data field for guardrails, and trace content redaction before connector export
- Durable Background Jobs - New
sidekiqbackground-job table, store methods, and runner with recovery and reaper; cost recalculation migrated to a durable, resumable job with polling instead of SSE - Audit Log Object Storage - S3/GCS object storage config schema for audit log archival
- Alerting Configuration - Alerting schema in
config.schema.jsonwith declarative channels and CEL-based rules, Helm chart support, and enterprise fallback pages - Model Catalog Pricing - Added pricing data to the model catalog (thanks @johnbrett!)
- Canonical Model Names - Dashboard model rankings now show canonical model names instead of inference-profile IDs (thanks @satyamkrishna!)
- OAuth2 Hardening - Allowlist for private-use redirect URI schemes (RFC 8252 §7.1) and a
shouldSweepgate on the OAuth2 sweep worker - Mirrored Schema Support -
schema_url/BIFROST_SCHEMA_URLfor mirrored schema locations in isolated deployments - Vertex Single-Region Config - Enforce single-region configuration in Vertex key config
- Helm Chart Updates -
bifrost.alerting, audit-log object storage,postgresql.external.portstring support, andbifrost.mcp.toolGroups[*].id
🐞 Fixed
- Governance Rate-Limit Reset CPU - Guards against invalid reset timeouts, parallelized resting-budget flows only when absolutely required, and fixed the calendar-based alignment qualifier
- Masked Key Persistence - Never persist masked provider key previews to config storage (thanks @eyeveil!)
- OpenShift Arbitrary UIDs - Build-time group-0 ownership with no runtime chown (thanks @eyeveil!)
- Passthrough Virtual Key Attribution - Passthrough calls via the Azure
api-keyheader now attribute to the virtual key (thanks @eyeveil!) - Rerank for Custom Providers -
/v1/reranknow works with custom OpenAI-compatible providers (thanks @eyeveil!) - Responses Stream Usage - Persist stream usage when providers omit or reuse sequence numbers (thanks @eyeveil!)
- Wildcard allowed_models Repair - Repair bare wildcard
allowed_modelsrows that broke admin provider updates (thanks @eyeveil!) - Streaming Error Panic - Nil-safe tracing span lookup prevents panics on streaming errors (thanks @eyeveil!)
- Anthropic Tool ID Sanitization - Sanitize
tool_use/tool_resultids to Anthropic’s charset (thanks @Shaik-Sirajuddin!) - Realtime Transcription Sessions - Support GA transcription-type sessions in
POST /v1/realtime/client_secrets(thanks @Shaik-Sirajuddin!) - Diarized Transcription - Support
diarized_jsonsegments and ElevenLabs speaker passthrough (thanks @Shaik-Sirajuddin!) - Model Discovery - Skip disabled keys when scheduling model-discovery fetches (thanks @Shaik-Sirajuddin!)
- MCP Timeout Placeholder - Show the real global default in the MCP tool execution timeout placeholder (thanks @Shaik-Sirajuddin!)
- Redacted Thinking Round-Trip - Round-trip Anthropic
redacted_thinkingblocks on the Responses surface (thanks @fus3r!) - Streaming Accumulation - Preserve citation annotations and
finish_reasonin the accumulated streaming response (thanks @fus3r!) - Gemini Grounded Streaming - Reset web-search flag when recycling pooled stream state so
web_search_callitems keep emitting (thanks @fus3r!) - Vertex gs:// Images - Pass through
gs://image URLs on Vertex Gemini - Bedrock Truncation Signal - Signal
max_output_tokenstruncation on the Responses API (thanks @jeremym-tanium!) - Bedrock Reasoning Config - Preserve
reasoning_configon cross-provider translation so fallbacks keep extended thinking (thanks @Purvi09!) - Anthropic tool_search - Forward and rebuild server-side
tool_searchon the Responses path (thanks @ws4charlie!) - OpenAI Responses Input - Strip
rolefrom non-message input items (thanks @nettee!) and serialize compaction requestinputcorrectly (thanks @mcclurmc!) - additional_tools Support - Added
additional_toolsmessage type support, preserving nested tool types on/v1/responses - Plugin Stream Errors - Emit structured plugin stream errors on integration routes (thanks @jeffhos!)
- Pooled Object Hygiene - Zero pooled ChannelMessage references on release and sweep orphaned deferred spans in trace store TTL cleanup (thanks @citrocat!)
- Hybrid Log Token Usage - Rebuild token usage from denormalized columns in hybrid log list (thanks @G-XD!)
- MCP Tool Ordering - Deterministic MCP tool ordering for prompt cache stability
- MCP Inline-Auth Links - Warn callers not to truncate the
#t=temp-token fragment (thanks @MarcusPeng!) - Gemini Fixes - Web search options map to Google Search grounding, file upload MIME types preserved, and video reference fields map to instances (thanks @vojthor!)
- OpenAI Parameters - Honor service tier in chat completion and cap max reasoning effort
- Anthropic Costing - Correct inference geo cost and cache rate for fast mode
- SecretVar Parsing - Parse
SecretVarJSON withref/env_varfields even whenvalueis absent - Telemetry - Forward request id and trace id, reduce metrics cardinality explosion risk, and send status codes on OTEL metrics
- Dashboard - Preserve active time period when applying dimension filters, adjust bucket size thresholds for month-range durations, show user popover with
preferred_usernamefallback, and filter provider-level keys from the prompt manager selector (thanks @rlex!) - API Key Provider Selection - Fixed provider selection for API keys
- Azure Auth Headers - Pass Azure auth headers in helpers
- Stream Delta Schema - Added
ExtraContenttoChatStreamResponseChoiceDelta(thanks @nghodkicisco!)
🐙 Closed GitHub Issues
- #2347 - MCP tool ordering is non-deterministic, breaking prefix-based prompt caching
- #3455 - Segfault/nil dereference panic in Bedrock provider
- #4318 - allowed_models persisted as bare ”*” string blocks subsequent provider updates
- #4353 - config.db corruption from masked-key preview in provider_configs JSON column
- #4367 - Image incompatible with OpenShift arbitrary UIDs
- #4402 - Vertex provider drops image blocks whose URL uses gs:// scheme
- #4477 - Passthrough calls using a Virtual Key log as actual key
- #4679 - Bedrock Responses API does not signal max_output_tokens truncation
- #4689 - Custom providers cannot set budget
- #4712 - ElevenLabs sound effects (/v1/sound-generation)
- #4780 - Anthropic server-side tool_search results are dropped on /v1/responses
- #4834 - /v1/rerank is not available with custom providers
- #4846 - Responses stream usage present in response.completed but not persisted in LLM Logs
- #4851 - Governance rate-limit reset causes high CPU in BumpRateLimitUsage
- #4870 - Pooled ChannelMessage retains request body, context, and undelivered response while idle
- #4940 - Show canonical model names instead of Bedrock inference-profile IDs in Model Rankings
- #4963 - Streaming finish_reason dropped from the accumulated (logged) response
- #5002 - gpt-4o-transcribe-diarize transcription fails due to string segment IDs
- #5013 - OpenAI /responses/compact input serialized as a JSON object causing 400
- #5027 - MCP Tool Execution Timeout placeholder shows 0 instead of real global default
- #5036 - Plugin StreamInterceptionError is flattened on integration routes
- #5037 - Disabled keys break provider model discovery
- #5051 - Add Sarvam AI provider (chat + TTS/STT)
- #5061 - Streaming responses drop citation annotations from the accumulated message
- #5093 - Streaming /v1/responses drops Anthropic redacted_thinking blocks
- #5097 - Anthropic rejects replayed tool_use/tool_result ids from non-conforming upstream providers
- #5100 - additional_tools loses nested tool types on /v1/responses
- #5101 - Chat-to-Responses tool replay sends role on function_call input items
- #5108 - Bedrock reasoning_config silently dropped on cross-provider translation
- #5113 - Gemini/Vertex streaming stops emitting web_search_call items after first grounded request
- feat: add Sarvam AI provider with chat, text-to-speech, and speech-to-text support (thanks @Purvi09!)
- feat: add ElevenLabs sound effects (text-to-sound) support (thanks @SecretSun!)
- feat: add
ProjectIDto Bedrock and Bedrock Mantle key configs with per-alias overrides for Bedrock, Bedrock Mantle, and Vertex - feat: add
additional_toolsmessage type support - feat: force single-region config in Vertex key config
- feat: phase-scoped redaction and revealing with transient redaction data field, plus
ClearPausedStreamBufferfor pause-accumulate stream flows - fix: map web search options to Google Search grounding in the Gemini API
- fix: parse
SecretVarJSON withref/env_varfields even whenvalueis absent - fix: cap max reasoning effort in OpenAI
- fix: honor service tier in OpenAI chat completion
- fix: support GA transcription-type sessions in POST /v1/realtime/client_secrets (thanks @Shaik-Sirajuddin!)
- fix: support diarized_json transcription segments and ElevenLabs speaker passthrough (thanks @Shaik-Sirajuddin!)
- fix: sanitize tool_use/tool_result ids to Anthropic’s charset (thanks @Shaik-Sirajuddin!)
- fix: never persist masked provider key previews (thanks @eyeveil!)
- fix: make tracing span lookup nil-safe to prevent panic on streaming errors (thanks @eyeveil!)
- fix: enable rerank for custom OpenAI-compatible providers (thanks @eyeveil!)
- fix: forward and rebuild Anthropic server-side tool_search on the Responses path (thanks @ws4charlie!)
- fix: zero pooled ChannelMessage references on release to avoid pinning request bodies (thanks @citrocat!)
- fix: round-trip Anthropic
redacted_thinkingblocks on the responses surface so multi-turn tool use with redacted reasoning can be replayed (thanks @fus3r!) - fix: reset
HasEmittedWebSearchwhen recycling pooled Gemini responses stream state so grounded streaming requests keep emittingweb_search_callitems (thanks @fus3r!) - fix: omit role from OpenAI Responses non-message items (thanks @nettee!)
- fix: serialize OpenAI compaction request
inputcorrectly (thanks @mcclurmc!) - fix: preserve
reasoning_configon Bedrock cross-provider translation (thanks @Purvi09!) - fix: preserve Gemini file upload MIME types for GenAI file URI completions
- fix: Gemini video reference fields map to instances (thanks @vojthor!)
- fix: accept object-valued tool-call arguments (e.g. tool_search_call) on the Responses API streaming path
- fix: recover from idle-timeout timer-goroutine panic that could crash the process
- fix: deterministic MCP tool ordering for prompt cache stability
- fix: pass through
gs://image URLs on Vertex Gemini - fix: signal Bedrock max_output_tokens truncation on Responses API (thanks @jeremym-tanium!)
- fix: warn callers not to truncate the
#t=temp-token fragment on MCP inline-auth links (thanks @MarcusPeng!) - fix: add
ExtraContentto ChatStreamResponseChoiceDelta (thanks @nghodkicisco!) - fix: correct inference geo cost on Anthropic and cache rate for fast mode
- fix: send MIME type when specified
- fix: send status code on OTEL metrics
- fix: reduce telemetry metrics cardinality explosion risk
- fix: race conditions in tracer span locks
- fix: pass container block from Anthropic API
- fix: pass Azure auth headers in helpers
- chore: upgrade ClickHouse client library
- feat: add durable background-job
sidekiqtable, store methods, and runner with recovery and reaper - feat: pass created-by user ID and runner ID through sidekiq job lifecycle, add
GetInFlightSidekiqJobByKindto config store interface - feat: show canonical model names in dashboard model rankings (thanks @satyamkrishna!)
- feat: redact trace content before connector export with transient redaction data field
- feat: force single-region config in Vertex key config
- fix: persist Responses stream usage when providers omit or reuse sequence numbers (thanks @eyeveil!)
- fix: fold streamed output_text.annotation.added events into the accumulated responses message so citations survive in logging, observability, and cache (thanks @fus3r!)
- fix: keep the streaming finish_reason in the accumulated response when a provider forwards it on a content chunk (thanks @fus3r!)
- fix: sweep orphaned deferred spans in trace store TTL cleanup (thanks @citrocat!)
- fix: rebuild token usage from denormalized columns in hybrid log list (thanks @G-XD!)
- fix: repair bare wildcard allowed_models rows that break admin provider updates (thanks @eyeveil!)
- fix: use AutoMigrate and add
runner_id/created_by_user_idcolumns to sidekiq table migration - fix: match model filter on canonical_model_name and restore routing info for cost recalculation
- fix: forward ScopedDB from HybridLogStore
- fix: race conditions in tracer span locks
- chore: upgrade ClickHouse client library
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- fix: parallelize resting-budget flows only when absolutely required to reduce lock contention
- fix: add guards against invalid rate-limit reset timeouts
- fix: calendar-based alignment qualifier for budget periods
- fix: attribute passthrough virtual keys sent via Azure api-key header (thanks @eyeveil!)
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- feat: migrate cost recalculation to durable background sidekiq job with resume and dedup
- feat: redact trace content before connector export
- fix: match model filter on canonical_model_name and restore routing info for cost recalculation
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- fix: send status code on OTEL metrics
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- chore: upgraded core to v1.6.4 and framework to v1.4.4
- feat: add missing connector attributes
- fix: reduce metrics cardinality explosion risk
- fix: forward request id and trace id through telemetry
- chore: upgraded core to v1.6.4 and framework to v1.4.4

