- NPX
- Docker
1.6.7
✨ Features
- Virtual Key Budget Overrides: Added temporary budget overrides for virtual keys across the database schema, governance store, admin APIs, and UI. An override adds
override_amounton top ofmax_limitand runs either for a finite number of reset cycles or until explicitly removed, configured via the newoverride_mode,override_cycles_total, andoverride_anchor_resetfields. - User Scope for Routing and Pricing: Routing rules and pricing overrides can now be scoped to individual users, with a
user_idCEL variable in routing rules, an enterprise user picker in the pricing overrides UI, and streaming request-type options in the routing rules UI. - Virtual Keys
user_idFilter: Added auser_idfilter to the virtual keys list (enterprise-only; OSS fails closed). - Access Profile Config Schema:
config.schema.jsonnow acceptsblacklisted_models(a denylist that wins overallowed_models), aweightseed for weighted routing, andmodel_budgetsfor per-model budgets and rate limits on access profile provider configs. These keys previously failed schema validation because the object rejects unknown properties. - Ranking Limit Control: Added a
RankingLimitfilter withall/limitquery params to cap or remove ranking row limits, and dashboard PDF/CSV exports now use uncapped snapshots. - Dashboard Export Scope: CSV and PDF exports now respect per-tab export scope instead of exporting a fixed view.
- Cache Hit Type Filter: Added a
cache_hit_typesfilter to dashboard URL state and query params. - Async Entity Selectors: Teams, customers, and virtual keys are now loaded through async
TeamSelector/CustomerSelector/VirtualKeySelectorcomponents instead of preloading full lists, and the customer list returns a server-computedvirtual_key_countrather than a fullVirtualKeyspreload. - Background Model Catalog Refresh: Each provider’s list-models response is now re-fetched in the background on the new
live_models_sync_interval(default 1 hour,0disables), so models an upstream starts serving after boot no longer stay invisible until restart.RestartLiveModelRefresheris exported for custom boot paths. - Bedrock Mantle Count Tokens: Added count-tokens API support for Bedrock Mantle.
- Responses Retrieve Stream: Added a retrieve-stream method for the Responses API.
- Routing Info Headers: Routing info headers are now emitted for streaming responses, inference and integration APIs, and error/passthrough paths.
- Stream Truncation Detection: Added an
SSETruncationinterface and EOF handler support across all providers, so upstream stream death surfaces as an error instead of a clean[DONE]. - Model Reasoning Metadata: Added a
ModelReasoningschema field and provider-qualified model ID resolution for model-parameters lookup, plus a requiredmodelquery param and 404 response ongetModelParameters. - Bedrock Batch Role ARN: Added
batch_role_arnto Bedrock key config, a service role ARN passed to Bedrock batch jobs for S3 access that takes priority over anyrole_arnin the request. - Connector Latency Data: Bifrost latency and overhead duration are now exported to connectors.
- OTel Export Timeout: Added an
export_timeoutsetting (default 5s) bounding how long a slow or unreachable collector can hold an export goroutine, which previously had no timeout on gRPC exports. - Database Connection Controls: Added
conn_max_idle_time(default 5m) to both the config and logs stores,cache_ttl(default 60s) for password-command credential resolution so the command no longer runs on every new physical connection, andmatview_refresh_timeoutbounding a single materialized view refresh pass. - Matview Cached Tokens: Added cached tokens to the materialized view and enabled matview refresh on the fly.
- SSO Additional Scopes:
config.schema.jsonnow acceptsadditionalScopes, requesting extra OAuth scopes on top of the baseopenid/profile/email/offline_accessset, for Custom Authorization Servers that gate claims such asgroupsbehind a scope Bifrost does not request by default. - Partitioned Sidekiq Claiming: Added partitioned sidekiq job claiming with FIFO ordering per key.
- Lakera Guardrail: Added Lakera as a guardrail integration with configuration docs and UI branding.
- Repello Argus Guardrail: Added Repello Argus as a guardrail integration with configuration docs and UI branding.
- Team Customer Attachment:
updateTeamnow acceptscustomer_id/customer_idsattachment and returns anUpdateTeamResponseschema. - Provider Config Card: Extracted the provider config accordion into a reusable
ProviderConfigCardcomponent with sharedbudgetOutlinehelpers. - Copyable IDs: Added a
CopyableIdcomponent to customer, team, and virtual key detail sheets. - Model Limit Deep Links: The model limit edit sheet is now driven by a URL query param, with a fallback fetch for configs that are not on the current page.
🐞 Fixed
- Empty Stream Nil Channel:
*StreamRequestnow returns a closed non-nil channel for empty streams instead of(nil, nil), which previously hung consumers on a nil-channel receive (thanks @kharkevich!) - pprof Content-Type: pprof endpoints now set
application/octet-streamfor scraper compatibility (thanks @tcx4c70!) - Tool Search Wire Shape: Preserved the
tool_searchResponses API wire shape (thanks @devonpmack!) - vLLM Responses Streaming: vLLM responses-stream chunks and completion events are now forwarded instead of silently discarded, and stream truncation is handled correctly.
- Gemini Tool Schema Constraints: Valid integer constraints in tool schemas are no longer rejected with a 400 INVALID_ARGUMENT.
- HuggingFace Model IDs: Backfilled HuggingFace model IDs no longer duplicate the inference-provider segment.
- Log Count Accuracy: The hybrid matview count no longer over-counts boundary buckets in paginated log search.
- Matview Scope Projection: Added
customer_id/business_unit_idto the matviewscopeProjectionso team-data DAC scope resolves without column errors. - Matview Shape Gate Revert: Reverted the matview read-path shape check that gated reads during rolling deploys.
- Multinode Override Counts: Corrected override counts for multinode setups, resolving high CPU in governance rate-limit reset.
- Live Reload Model List: Provider reload no longer wipes the live model catalog before refetching, so a transient list-models failure cannot empty it.
- Azure Responses API Version: Removed the default preview api-version for GA Azure Responses endpoints.
- Bedrock Mantle Claude Models: Structured outputs are now set to false for Claude models, and additional tools are merged into the tools list.
- Count Tokens: Corrected count-tokens request building and dropped unsupported fields from Vertex count-tokens requests.
- GenAI API: Fixed image search for the GenAI search tool, honored
IncludeServerSideToolInvocations, and followed redirects for downloads in GenAI passthrough. - Responses Tool Unmarshal: Lifted the chat-completions function wrapper when unmarshaling Responses API tools.
- Complexity Extraction: Governance complexity extraction now accepts
output_textuser blocks. - Budget and Rate Limit Dumps: Budget and rate limit dumps are now written in batches.
- MCP Tool Log Scope: Query scope is now applied to single MCP tool log lookups.
- Connector Error Forwarding: Fixed error forwarding to connectors and corrected connector UI redaction storage.
- Filter Data Cache: Scoped the filterdata cache per caller and added item-budget admission control.
- Done Marker for Error Frames: Corrected the
[DONE]marker emitted for error frames. - Replicate Image Generation: Input images are now handled in image generation requests.
- SDK Compatibility:
strict: nullis now converted tofalse. - Model Router Cost: Added handling for model router cost calculation.
- User Detail Budget: The models/limits budget now shows in the user detail sheet.
- DB Connection Control: Database connection limits are now applied across all cases.
- Workspace Page Padding: Added
no-padding-parentand consistent padding across workspace pages. - Empty State Flash: Pricing overrides and model limits views now show
FullPageLoaderon initial fetch instead of flashing an empty state. - Chart Legend Ordering: Replaced
pickTopSerieswithcomputeDisplaySeriesso chart and legend series order stay in sync. - Connector Form Whitespace: Connector form fields now trim whitespace.
- Trial Expiry Parsing:
parseTrialExpirynow supports RFC3339 timestamps, and banner background colors were updated. - Marketplace Copy URL: Fixed the copy-URL action for the skills repo marketplace.
- Model Multiselect: Added the enterprise-ui Tailwind source path and a
hideSearchIconprop toModelMultiselect. - Budget Delete Affordance: Softened the budget line delete button color with a hover state.
- Deployment Override Selects: Replaced boolean switches with tri-state selects for deployment-level overrides.
🔧 Maintenance
- Go 1.26.5: Upgraded the toolchain and all builder images to Go 1.26.5.
- Test Coverage: Restored previously skipped framework and semanticcache tests, expanded the provider harness with count-tokens, response-header, and responses-lifecycle cases, and added OTel error-scenario coverage.
🐙 Closed GitHub Issues
- #4215: HuggingFace models show provider ID twice in
/v1/models, which breaks requests - #4851: v1.6.2 and v1.6.3 governance rate-limit reset causes high CPU in
BumpRateLimitUsage/updateRateLimitReferences - #5329:
/api/logsreturns an incorrecttotal_countfor time ranges of 24 hours or longer - #5433:
/genaiendpoint rejects validminLength/maxLengthin tool schemas (400 INVALID_ARGUMENT) - #5504: vLLM streaming Responses API hangs forever, chunks are silently discarded and the request never completes
- #5546: Upstream SSE stream death swallowed into a clean
[DONE], so dead streams appear successful - #5551:
transports/bifrost-http/libtest package does not compile on dev (MockConfigStoremissingUpdateBudgetOverride) - #5552: Refresh the live model catalog in the background (models added after boot stay invisible until restart)
- #5554: Provider reload wipes the live model catalog before refetching, so a transient list-models failure empties it
- #5555:
*StreamRequestreturns(nil, nil)for empty streams, so consumers hang forever on a nil-channel receive
1.7.5
- feat: added count tokens API support for Bedrock Mantle
- feat: added
SSETruncationinterface and EOF handler support across all providers so upstream stream death surfaces as an error instead of a clean[DONE] - feat: added responses retrieve stream method
- feat: added routing info headers for streaming responses
- feat: added
ModelReasoningschema field and provider-qualified model ID resolution for model-parameters lookup - feat: added Bedrock batch role ARN to key config
- feat: added Bifrost latency data to connectors
- fix: corrected image search handling for the GenAI search tool
- fix: corrected count tokens request building
- fix: dropped unsupported fields from Vertex count tokens requests
- fix: lifted the chat-completions function wrapper in Responses tool unmarshal
- fix: merged additional tools into tools for Bedrock Mantle
- fix: set structured outputs to false for Claude models on Bedrock Mantle
- fix: corrected vLLM stream truncation
- fix: converted
strict: nulltofalsefor SDK compatibility - fix: followed redirects for downloads in GenAI passthrough
- fix: honored the
IncludeServerSideToolInvocationsfield in the GenAI API - fix: returned a closed non-nil channel for empty streams instead of
(nil, nil)so consumers no longer hang on a nil-channel receive (thanks @kharkevich!) - fix: corrected routing info headers on streaming fallbacks
- fix: corrected Replicate harness test and Gemini extra param handling
- fix: avoided duplicating the inference-provider segment in backfilled HuggingFace model IDs
- fix: removed the default preview api-version for GA Azure Responses endpoints
- fix: forwarded vLLM responses-stream chunks and completion events instead of silently discarding them
- fix: corrected error forwarding to connectors
- fix: preserved the
tool_searchResponses API wire shape (thanks @devonpmack!) - fix: corrected Gemini tool schema integer constraint handling
- fix: handled input images in image generation for Replicate
- chore: upgraded Go to 1.26.5
- chore: replaced deprecated HuggingFace model in core tests
1.5.5
- feat: added virtual key budget overrides across DB schema, governance store, and APIs
- feat: added user scope kinds to pricing overrides
- feat: added user scope and
user_idCEL variable to routing rules - feat: added
user_idfilter to the virtual keys list (enterprise-only, OSS fails closed) - feat: added
RankingLimitfilter withall/limitquery params to cap or remove ranking row limits - feat: replaced the full
VirtualKeyspreload withvirtual_key_counton the paginated customer list - feat: added partitioned sidekiq job claiming with FIFO ordering per key
- feat: added responses retrieve stream method
- feat: added
ModelReasoningschema field and provider-qualified model ID resolution for model-parameters lookup - feat: added Bedrock batch role ARN to key config
- feat: added Bifrost latency data to connectors
- feat: added cached tokens to the matview and allowed matview refresh on the fly
- fix: added
customer_id/business_unit_idto matviewscopeProjectionso team-data DAC scope resolves without column errors - fix: corrected hybrid matview count to prevent boundary bucket over-counting in paginated log search
- fix: reverted the matview read-path shape check that gated reads during rolling deploys
- fix: applied query scope to single MCP tool log lookup
- fix: corrected override counts for multinode setups
- fix: stopped live reload from wiping the model list before sync
- fix: added handling for model router cost calculation
- fix: showed models/limits budget in the user detail sheet
- fix: preserved the
tool_searchResponses API wire shape (thanks @devonpmack!) - feat: added
conn_max_idle_timeto the config and logs stores so idle physical connections are closed on a bound rather than left to the idle cap alone - feat: added
cache_ttlfor password-command credential resolution so the command no longer runs on every new physical connection - feat: added
matview_refresh_timeoutbounding a single materialized view refresh pass, so one stuck refresh no longer leaves views permanently stale across replicas - feat: added
live_models_sync_intervalfor background provider model-list refresh - fix: added OTel export timeouts
- chore: upgraded Go to 1.26.5
- chore: upgraded core to v1.7.5
0.1.31
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.6.9
- feat: added streaming request type options to routing rules UI
- feat: added user scope and
user_idCEL variable to routing rules - feat: added budget override support to the governance store
- feat: added responses retrieve stream method support
- fix: batched writes for budget and rate limit dumps
- fix: accepted
output_textuser blocks in complexity extraction - fix: corrected override counts for multinode setups, resolving high CPU in rate limit reset
- fix: controlled DB connections for all cases
- chore: upgraded Go to 1.26.5
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.5.32
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.6.5
- feat: added user scope kinds to pricing overrides
- feat: added responses retrieve stream method support
- fix: controlled DB connections for all cases
- chore: upgraded Go to 1.26.5
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.6.32
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.5.32
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.0.13
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.4.4
- feat: added export timeouts to bound OTel export duration
- feat: added Bifrost latency data to connectors
- chore: refactored overhead duration export for connectors
- chore: upgraded Go to 1.26.5
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.0.32
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.5.32
- fix: restored previously skipped streaming and no-store test cases
- chore: upgraded Go to 1.26.5
- chore: upgraded core to v1.7.5 and framework to v1.5.5
1.5.32
- chore: upgraded core to v1.7.5 and framework to v1.5.5

