Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/scripts/run-migration-tests.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1239,6 +1239,11 @@ append_dynamic_columns_postgres() {
echo "UPDATE config_client SET mcp_disable_auto_tool_inject = false WHERE id = 1;" >> "$output_file"
fi

# config_client.whitelisted_routes_json (added in v1.5.0)
if column_exists_postgres "config_client" "whitelisted_routes_json"; then
echo "UPDATE config_client SET whitelisted_routes_json = '[]' WHERE id = 1;" >> "$output_file"
fi

# governance_virtual_key_provider_configs.allow_all_keys (added in v1.5.0)
# vk-migration-test-1 has a key in the join table, so old behavior was restricted to that key -> allow_all_keys=false
# vk-migration-test-2 has no key rows, so old "empty=allow-all" semantics -> allow_all_keys=true
Expand Down
21 changes: 19 additions & 2 deletions core/changelog.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,19 @@
- feat: add model alias support
- refactor: standardize extra fields handling for all providers
- feat: add Fireworks AI as a first-class provider (thanks [@ivanetchart](https://github.com/ivanetchart)!)
- feat: add realtime provider interfaces, schemas, and engine hooks
- feat: add session log storage and realtime request normalization
- feat: add per-user OAuth consent flow with identity selection and MCP authentication
- feat: add IsSet method to EnvVar and improve provider auth validation
- feat: add support for tracking userId, teamId, customerId, and businessUnitId
- feat: add prompts plugin with direct key header resolver
- feat: add embeddings, image gen, edit and variation to bedrock
- feat: allow path whitelisting from security config
- fix: auto-redact env-backed values in EnvVar JSON serialization
- fix: bedrock tool choice conversion to auto
- fix: MCP tool logs not being captured correctly
- fix: preserve explicit empty tool parameter schemas for openai passthrough
- fix: correct SigV4 service name for bedrock agent runtime rerank
- fix: include raw model ID in list-models output alongside aliases
- fix: vertex endpoint correction
- fix: bedrock streaming retry for retryable AWS exceptions and stale connections
- fix: thinking budget validation for gemini models
- fix: add empty arguments guard in bedrock utils
2 changes: 1 addition & 1 deletion core/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
16 changes: 16 additions & 0 deletions framework/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
- feat: add per-user OAuth consent flow with identity selection and MCP authentication
- feat: add access profiles for fine-grained permission control
- feat: add user level OAuth for MCP gateway
- feat: add IsSet method to EnvVar and improve provider auth validation
- feat: add session log storage and realtime request normalization
- feat: add support for tracking userId, teamId, customerId, and businessUnitId
- feat: add prompts plugin with direct key header resolver
- feat: add Fireworks AI provider support (thanks [@ivanetchart](https://github.com/ivanetchart)!)
- feat: add sorting and CSV export to virtual keys table
- feat: allow path whitelisting from security config
- fix: auto-redact env-backed values in EnvVar JSON serialization
- fix: MCP tool logs not being captured correctly
- fix: SQLite migration connections and error handling
- fix: disable SQLite foreign key checks during migration
- fix: add retry mechanism to model catalog pricing sync lock
- fix: increases buffer size for custom plugin installs from URLs
8 changes: 5 additions & 3 deletions framework/modelcatalog/overrides_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func TestGetPricing_AppliesOverrideAfterFallbackResolution(t *testing.T) {
assert.Equal(t, 7.0, pricing.InputCostPerToken)
}

func TestGetPricing_DeploymentLookupUsesRequestedModelForOverrideMatching(t *testing.T) {
func TestGetPricing_DeploymentLookupUsesResolvedModelForOverrideMatching(t *testing.T) {
mc := newTestCatalog(nil, nil)
mc.logger = noOpLogger{}
mc.pricingData[makeKey("dep-gpt4o", "openai", "chat")] = configstoreTables.TableModelPricing{
Expand All @@ -143,16 +143,18 @@ func TestGetPricing_DeploymentLookupUsesRequestedModelForOverrideMatching(t *tes
providerID := "openai"
require.NoError(t, mc.SetPricingOverrides([]configstoreTables.TablePricingOverride{
{
ID: "requested-model-override",
ID: "resolved-model-override",
ScopeKind: string(ScopeKindProvider),
ProviderID: &providerID,
MatchType: string(MatchTypeExact),
Pattern: "gpt-4o",
Pattern: "dep-gpt4o",
RequestTypes: []schemas.RequestType{schemas.ChatCompletionRequest},
PricingPatchJSON: `{"input_cost_per_token":7}`,
},
}))

// Override pattern matches the resolved model name ("dep-gpt4o"), not the
// originally requested name ("gpt-4o"), because resolved model has priority.
pricing := mc.resolvePricing("openai", "gpt-4o", "dep-gpt4o", schemas.ChatCompletionRequest, PricingLookupScopes{Provider: "openai"})
require.NotNil(t, pricing)
require.NotNil(t, pricing.InputCostPerToken)
Expand Down
7 changes: 4 additions & 3 deletions framework/modelcatalog/pricing_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1230,16 +1230,17 @@ func TestResolvePricing_DeploymentFallback(t *testing.T) {
assert.Equal(t, 0.000005, derefF(p.InputCostPerToken))
}

func TestResolvePricing_ModelFoundDirectly(t *testing.T) {
func TestResolvePricing_ResolvedModelHasPriority(t *testing.T) {
mc := testCatalogWithPricing(map[string]configstoreTables.TableModelPricing{
makeKey("gpt-4o", "openai", "chat"): chatPricing(0.000005, 0.000015),
makeKey("my-deployment", "openai", "chat"): chatPricing(0.000001, 0.000002),
})

// Model found directly — doesn't fall back to deployment
// Resolved model ("my-deployment") is looked up first and has priority
// over the originally requested model ("gpt-4o").
p := mc.resolvePricing("openai", "gpt-4o", "my-deployment", schemas.ChatCompletionRequest, PricingLookupScopes{})
require.NotNil(t, p)
assert.Equal(t, 0.000005, derefF(p.InputCostPerToken))
assert.Equal(t, 0.000001, derefF(p.InputCostPerToken))
}

func TestResolvePricing_NothingFound(t *testing.T) {
Expand Down
2 changes: 1 addition & 1 deletion framework/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.3.0
1.3.1
6 changes: 5 additions & 1 deletion plugins/governance/changelog.md
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
- fix: preseve routing rule targets for genai and bedrock paths for vk level provider load balancing
- feat: add realtime WebSocket, WebRTC, and client secret handlers
- feat: add access profiles for fine-grained permission control
- feat: add support for tracking userId, teamId, customerId, and businessUnitId
- fix: SQLite migration connections and error handling + vk not found message
- fix: preserve routing rule targets for genai and bedrock paths
2 changes: 1 addition & 1 deletion plugins/governance/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
1 change: 1 addition & 0 deletions plugins/jsonparser/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- chore: upgraded core to v1.5.1 and framework to v1.3.1
2 changes: 1 addition & 1 deletion plugins/jsonparser/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
1 change: 1 addition & 0 deletions plugins/litellmcompat/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- chore: upgraded core to v1.5.1 and framework to v1.3.1
2 changes: 1 addition & 1 deletion plugins/litellmcompat/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.1.0
0.1.1
4 changes: 4 additions & 0 deletions plugins/logging/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- feat: add realtime turn logging
- feat: add support for tracking userId, teamId, customerId, and businessUnitId
- feat: allow path whitelisting from security config
- fix: MCP tool logs not being captured correctly
2 changes: 1 addition & 1 deletion plugins/logging/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
4 changes: 4 additions & 0 deletions plugins/maxim/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
- feat: add per-user OAuth consent flow with identity selection and MCP authentication
- feat: add support for image generation requests
- feat: add realtime turn logging
- feat: add support for tracking userId, teamId, customerId, and businessUnitId
2 changes: 1 addition & 1 deletion plugins/maxim/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.6.0
1.6.1
1 change: 1 addition & 0 deletions plugins/mocker/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- chore: upgraded core to v1.5.1 and framework to v1.3.1
2 changes: 1 addition & 1 deletion plugins/mocker/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
1 change: 1 addition & 0 deletions plugins/otel/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- chore: upgraded core to v1.5.1 and framework to v1.3.1
2 changes: 1 addition & 1 deletion plugins/otel/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.2.0
1.2.1
3 changes: 3 additions & 0 deletions plugins/prompts/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- feat: add prompts plugin with direct key header resolver
- feat: add per-user OAuth consent flow with identity selection and MCP authentication
- feat: add selective message inclusion when committing prompt sessions
2 changes: 1 addition & 1 deletion plugins/prompts/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.0.0
1.0.1
1 change: 1 addition & 0 deletions plugins/semanticcache/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- chore: upgraded core to v1.5.1 and framework to v1.3.1
2 changes: 1 addition & 1 deletion plugins/semanticcache/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
1 change: 1 addition & 0 deletions plugins/telemetry/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
- chore: upgraded core to v1.5.1 and framework to v1.3.1
2 changes: 1 addition & 1 deletion plugins/telemetry/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0
1.5.1
41 changes: 28 additions & 13 deletions transports/changelog.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@
- feat: add support for chaining routing rules
- feat: add routing tree UI to better visualize routing rules
- feat: add model alias — keys now support a top-level `aliases` field mapping any model name to a provider-specific identifier (Azure deployment names, Bedrock inference profile ARNs, Vertex endpoints, Replicate model slugs, fine-tuned model IDs, etc.). The original model name is preserved and returned alongside the resolved identifier in every response. Breaking changes: see below.
- fix: preseve routing rule targets for genai and bedrock paths for vk level provider load balancing
## ✨ Features

<Warning>
**This release contains 4 breaking changes** related to model aliasing. See the [v1.5.0 Migration Guide](/migration-guides/v1.5.0#breaking-change-9-provider-deployments-removed-migrate-to-aliases) for full before/after examples and migration instructions.
</Warning>
- **Realtime Support** — Add WebSocket, WebRTC, and client secret handlers with session state management and transport context helpers
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Model alias and routing rule chaining

- **Fireworks AI Provider** — Add Fireworks AI as a first-class provider with native completions, responses, embeddings, and image generations (thanks [@ivanetchart](https://github.com/ivanetchart)!)
- **Per-User OAuth Consent** — Add per-user OAuth consent flow with identity selection and MCP authentication
- **Prompts Plugin** — New prompts plugin with direct key header resolver and selective message inclusion when committing prompt sessions
- **Access Profiles** — Add access profiles for fine-grained permission control
- **Bedrock Embeddings & Image Gen** — Add embeddings, image gen, edit and variation support to Bedrock
- **EnvVar Improvements** — Add IsSet method to EnvVar and auto-redact env-backed values in JSON serialization
- **Logging Tracking Fields** — Add support for tracking userId, teamId, customerId, and businessUnitId in logging
- **Virtual Keys Export** — Add sorting and CSV export to virtual keys table
- **Path Whitelisting** — Allow path whitelisting from security config
- **Server Bootstrap Timer** — Add server bootstrap timer for startup diagnostics

| # | Breaking Change | Affected |
|---|---|---|
| [9](/migration-guides/v1.5.0#breaking-change-9-provider-deployments-removed-migrate-to-aliases) | `deployments` removed from `azure_key_config`, `vertex_key_config`, `bedrock_key_config`, `replicate_key_config` — use top-level `aliases` | `config.json` |
| [9](/migration-guides/v1.5.0#breaking-change-9-provider-deployments-removed-migrate-to-aliases) | `replicate_key_config.deployments` replaced by `replicate_key_config.use_deployments_endpoint` (bool) | `config.json` |
| [10](/migration-guides/v1.5.0#breaking-change-10-go-sdk-extrafields-model-fields-renamed) | `BifrostResponseExtraFields.ModelRequested` → `OriginalModelRequested` + `ResolvedModelUsed` | Go SDK |
| [11](/migration-guides/v1.5.0#breaking-change-11-go-sdk-streamaccumulatorresult-field-renamed) | `StreamAccumulatorResult.Model` → `RequestedModel` + `ResolvedModel` | Go SDK |
## 🐞 Fixed

- **Bedrock Tool Choice** — Fix bedrock tool choice conversion to auto
- **Bedrock Streaming Retries** — Retry retryable AWS exceptions and stale/closed-connection errors in bedrock streaming
- **Bedrock SigV4 Service** — Correct SigV4 service name for agent runtime rerank
- **MCP Tool Logs** — Fix MCP tool logs not being captured correctly
- **Routing Rule Targets** — Preserve routing rule targets for genai and bedrock paths
- **Provider Budget Duplication** — Fix provider level multiline budget duplication issue
- **Vertex Endpoint** — Fix vertex endpoint correction
- **Gemini Thinking Budget** — Fix thinking budget validation for gemini models
- **SQLite Migrations** — Fix SQLite migration connections, error handling, and disable foreign key checks during migration
- **Tool Parameter Schemas** — Preserve explicit empty tool parameter schemas for openai passthrough
- **List Models Output** — Include raw model ID in list-models output alongside aliases
- **Config Schema** — Fix config schema for bedrock key config
- **Data Race Fix** — Fix race in data reading from fasthttp request for integrations
- **Model Listing** — Unify /api/models and /api/models/details listing behavior
2 changes: 1 addition & 1 deletion transports/version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
1.5.0-prerelease1
1.5.0-prerelease2
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Users } from "lucide-react";
import { Building2, Users } from "lucide-react";
import ContactUsView from "../views/contactUsView";

export function BusinessUnitsView() {
Expand All @@ -7,8 +7,8 @@ export function BusinessUnitsView() {
<ContactUsView
className="mx-auto min-h-[80vh]"
testIdPrefix="business-units-governance"
icon={<Users className="h-[5.5rem] w-[5.5rem]" strokeWidth={1} />}
title="Unlock advanced governance"
icon={<Building2 className="h-[5.5rem] w-[5.5rem]" strokeWidth={1} />}
title="Unlock business units & advanced governance"
description="Manage users, business units with our enterprise-grade governance. This feature is part of the Bifrost enterprise license."
readmeLink="https://docs.getbifrost.ai/enterprise/advanced-governance"
/>
Expand Down
4 changes: 2 additions & 2 deletions ui/components/sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -532,10 +532,10 @@ export default function AppSidebar() {
hasAccess: hasMCPGatewayAccess,
},
{
title: "Virtual MCP Servers",
title: "Tool Groups",
url: "/workspace/mcp-tool-groups",
icon: ToolCase,
description: "Virtual MCP servers",
description: "Tool Groups",
hasAccess: hasMCPGatewayAccess,
},
{
Expand Down
Loading