transports/v1.6.7
maximhq/bifrosttransports/v1.6.7Jul 30, 2026by akshaydeo
AI Summary
This release introduces virtual key budget overrides, user-scoped routing and pricing, and a background model catalog refresh mechanism. It also adds guardrail integrations (Lakera, Repello Argus) and improves streaming error handling.
Key Highlights
- Virtual Key Budget Overrides for temporary limit management
- User Scope for Routing and Pricing with CEL variables
- Background Model Catalog Refresh to sync upstream model changes
- Guardrail Integrations: Lakera and Repello Argus
- Stream Truncation Detection for better error handling
New Features
- Virtual Key Budget Overrides with override_mode and override_cycles_total
- User Scope for Routing and Pricing via user_id CEL variable
- Virtual Keys user_id Filter (enterprise-only)
- Access Profile Config Schema updates (blacklisted_models, weight, model_budgets)
- Ranking Limit Control with all/limit query params
- Dashboard Export Scope respecting per-tab settings
- Cache Hit Type Filter for dashboard URL state
- Async Entity Selectors for Teams, Customers, and Virtual Keys
- Background Model Catalog Refresh on live_models_sync_interval
- Bedrock Mantle Count Tokens API support
- Responses Retrieve Stream method
- Routing Info Headers for streaming and inference APIs
- Stream Truncation Detection (SSETruncation interface)
- Model Reasoning Metadata schema field
- Bedrock Batch Role ARN configuration
- Connector Latency Data export
- OTel Export Timeout setting
- Database Connection Controls (conn_max_idle_time, cache_ttl)
- Matview Cached Tokens
- SSO Additional Scopes configuration
- Partitioned Sidekiq Claiming
- Lakera Guardrail integration
- Repello Argus Guardrail integration
- Team Customer Attachment support
- Provider Config Card component
- CopyableId component
- Model Limit Deep Links via URL query params
Full Release Notes
## Bifrost HTTP Transport Release v1.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_amount` on top of `max_limit` and runs either for a finite number of reset cycles or until explicitly removed, configured via the new `override_mode`, `override_cycles_total`, and `override_anchor_reset` fields. - **User Scope for Routing and Pricing**: Routing rules and pricing overrides can now be scoped to individual users, with a `user_id` CEL 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_id` Filter**: Added a `user_id` filter to the virtual keys list (enterprise-only; OSS fails closed). - **Access Profile Config Schema**: `config.schema.json` now accepts `blacklisted_models` (a denylist that wins over `allowed_models`), a `weight` seed for weighted routing, and `model_budgets` for 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 `RankingLimit` filter with `all`/`limit` query 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_types` filter to dashboard URL state and query params. - **Async Entity Selectors**: Teams, customers, and virtual keys are now loaded through async `TeamSelector`/`CustomerSelector`/`VirtualKeySelector` components instead of preloading full lists, and the customer list returns a server-computed `virtual_key_count` rather than a full `VirtualKeys` preload. - **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, `0` disables), so models an upstream starts serving after boot no longer stay invisible until restart. `RestartLiveModelRefresher` is 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 `SSETruncation` interface 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 `ModelReasoning` schema field and provider-qualified model ID resolution for model-parameters lookup, plus a required `model` query param and 404 response on `getModelParameters`. - **Bedrock Batch Role ARN**: Added `batch_role_arn` to Bedrock key config, a service role ARN passed to Bedrock batch jobs for S3 access that takes priority over any `role_arn` in the request. - **Connector Latency Data**: Bifrost latency and overhead duration are now exported to connectors. - **OTel Export Timeout**: Added an `export_timeout` setting (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, and `matview_refresh_timeout` bounding 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.json` now accepts `additionalScopes`, requesting extra OAuth scopes on top of the base `openid`/`profile`/`email`/`offline_access` set, for Custom Authorization Servers that gate claims such as `groups` behind 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**: `updateTeam` now accepts `customer_id`/`customer_ids` attachment and returns an `UpdateTeamResponse` schema. - **Provider Config Card**: Extracted the provider config accordion into a reusable `ProviderConfigCard` component with shared `budgetOutline` helpers. - **Copyable IDs**: Added a `CopyableId` component 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**: `*StreamRequest` now returns a closed non-nil channel for empty streams instead of `(nil, nil)`, which previously hung consumers on a nil-channel receive (thanks [@kharkevich](https://github.com/kharkevich)!) - **pprof Content-Type**: pprof endpoints now set `application/octet-stream` for scraper compatibility (thanks [@tcx4c70](https://github.com/tcx4c70)!) - **Tool Search Wire Shape**: Preserved the `tool_search` Responses API wire shape (thanks [@devonpmack](https://github.com/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_id` to the matview `scopeProjection` so 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_text` user 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: null` is now converted to `false`. - **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-parent` and consistent padding across workspace pages. - **Empty State Flash**: Pricing overrides and model limits views now show `FullPageLoader` on initial fetch instead of flashing an empty state. - **Chart Legend Ordering**: Replaced `pickTopSeries` with `computeDisplaySeries` so chart and legend series order stay in sync. - **Connector Form Whitespace**: Connector form fields now trim whitespace. - **Trial Expiry Parsing**: `parseTrialExpiry` now 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 `hideSearchIcon` prop to `ModelMultiselect`. - **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](https://github.com/maximhq/bifrost/issues/4215): HuggingFace models show provider ID twice in `/v1/models`, which breaks requests - [#4851](https://github.com/maximhq/bifrost/issues/4851): v1.6.2 and v1.6.3 governance rate-limit reset causes high CPU in `BumpRateLimitUsage`/`updateRateLimitReferences` - [#5329](https://github.com/maximhq/bifrost/issues/5329): `/api/logs` returns an incorrect `total_count` for time ranges of 24 hours or longer - [#5433](https://github.com/maximhq/bifrost/issues/5433): `/genai` endpoint rejects valid `minLength`/`maxLength` in tool schemas (400 INVALID_ARGUMENT) - [#5504](https://github.com/maximhq/bifrost/issues/5504): vLLM streaming Responses API hangs forever, chunks are silently discarded and the request never completes - [#5546](https://github.com/maximhq/bifrost/issues/5546): Upstream SSE stream death swallowed into a clean `[DONE]`, so dead streams appear successful - [#5551](https://github.com/maximhq/bifrost/issues/5551): `transports/bifrost-http/lib` test package does not compile on dev (`MockConfigStore` missing `UpdateBudgetOverride`) - [#5552](https://github.com/maximhq/bifrost/issues/5552): Refresh the live model catalog in the background (models added after boot stay invisible until restart) - [#5554](https://github.com/maximhq/bifrost/issues/5554): Provider reload wipes the live model catalog before refetching, so a transient list-models failure empties it - [#5555](https://github.com/maximhq/bifrost/issues/5555): `*StreamRequest` returns `(nil, nil)` for empty streams, so consumers hang forever on a nil-channel receive ### Installation #### Docker ```bash docker run -p 8080:8080 maximhq/bifrost:v1.6.7 ``` #### Binary Download ```bash npx @maximhq/bifrost --transport-version v1.6.7 ``` ### Docker Images - **`maximhq/bifrost:v1.6.7`** - This specific version - **`maximhq/bifrost:latest`** - Latest version (updated with this release) --- _This release was automatically created with dependencies: core `v1.7.5`, framework `v1.5.5`. All plugins have been validated and updated._