v2.1.45
Changelog
-
Removed
bifrost.agents[].tenantandbifrost.agents[].extension_urisfrom registration configuration; Agent Gateway discovers supported extensions from the upstream agent card. -
Added
bifrost.client.a2aPrivateAllowlist, rendered asclient.a2a_private_allowlist, to permit private destinations for Agent Gateway card discovery, OAuth, and runtime connections. Link-local and cloud metadata destinations remain blocked. -
Added
bifrost.agents[].credential_origins, rendered asagents[].credential_origins, to permit additional HTTP(S) origins for agent runtime requests. The agent card origin is permitted automatically. -
Added
bifrost.client.skillsExternalClientUrl(client.skills_external_client_url) for the public skills marketplace URL, including environment and vault references. When unset, marketplace serving is disabled; skill management and downloads remain available. -
Updated
bifrost.client.a2aExternalClientUrl(client.a2a_external_client_url) to accept secret-reference objects and document that an unset URL disables all Agent Gateway protocol endpoints while management remains available. -
Added
nodeSelector,tolerationsandaffinityto the chart-managed Redis (vectorStore.redis.master.*), Qdrant (vectorStore.qdrant.*) and Weaviate (vectorStore.weaviate.*) deployments, matchingpostgresql.primary.*. Lets these stateful pods be pinned to dedicated or non-spot nodes. Defaults are empty and render nothing. Pod-spec only, no config.json change. Closes #3440. -
Added
azure-key-vaultas astorage.configStore.vaultStore.typeoption (storage.configStore.vaultStore.azure:vaultUrl,tenantId,clientId,clientSecret). Renders intoconfig_store.vault_store.azure. OmitclientId/clientSecretto useDefaultAzureCredential(workload identity, managed identity, orAZURE_*env vars) instead of a service principal. -
Added Kubernetes auth for the
hashicorp-vaultvault store backend:storage.configStore.vaultStore.hashicorp.kubernetesRole,.kubernetesMountPath(defaultkubernetes),.kubernetesTokenPath(default/var/run/secrets/kubernetes.io/serviceaccount/token). Renders intoconfig_store.vault_store.hashicorp.kubernetes_role/kubernetes_mount_path/kubernetes_token_path, letting a pod authenticate with its own service account token instead of a static token or AppRole. Tokens issued via AppRole or Kubernetes auth are now renewed in the background. -
Added
auto_rotation_intervalandnext_rotation_attobifrost.accessProfiles[](and toaccess_profilesin config.schema.json). Renders intoaccess_profiles[].auto_rotation_interval/next_rotation_at, scheduling automatic rotation of a profile’s managed virtual keys ("30d","12h"; 1h-365d). Previously the schema rejected the field, so it could only be set from the dashboard or API. Settingnext_rotation_atrequires an enabled (non-zero)auto_rotation_interval. -
Added
bifrost.loadBalancer.rerouteTarget,historyEnabled,historyRetentionDaysandsnapshotPersistIntervalSeconds. They render intoload_balancer_config.reroute_target,history_enabled,history_retention_daysandsnapshot_persist_interval_seconds; previously these settings had no Helm path. -
Removed
bifrost.loadBalancer.trackerConfigandbootstrap, and theenabled: truethe chart rendered intoload_balancer_config. Bifrost ignores all three.bifrost.loadBalancer.enabledstill decides whetherload_balancer_configis rendered. -
circuitBreakerConfigpolicies:default_cooldownaccepts any Go duration (e.g.1m30s) or integer nanoseconds,condition.operatoris case-insensitive, setting bothheader_valueandheader_containson a signal is rejected, and name, provider and model fields must be non-empty. -
Routing rules: targets and object fallbacks accept
key_id, setting it together withprovider_key_nameis rejected as config load rejects it, a target key selector requiresprovider, rules acceptchain_rule, and the example invalues.yamlno longer uses invalid values (model: "", barefallbacks: ["openai"]). -
A provider key’s
weightis now optional, as documented; the chart already defaults it to 1. -
Documented
enabledon provider keys (bifrost.providers.<name>.keys[].enabled, renders intoproviders.<name>.keys[].enabled; also added to config.schema.json). Setfalseto keep a key configured but skip it in key selection, the same as the UI’s Enabled toggle. New keys default totrue; omitting it on an existing key keeps the stored value. Bifrost now saves the value from config.json on restart, so a key whose field was previously unset can be disabled from values; previously the stored value won. -
Added
output_modetobifrost.guardrails.rules[], rendered asguardrails_config.guardrail_rules[].output_mode(enforcedefault, ormonitor). A monitor rule delivers the response untouched, evaluates it in the background, and records matches on the request’s log without enforcing them; it requiresapply_tooutputorboth. -
Added
bifrost.plugins.datadog.config.llmobs_gateway_mode(llmobs_gateway_mode), defaultfalse. Follows Datadog’s proxy-service pattern for LLM Observability: abifrost.requestworkflow span per request with the LLM span nested under it, so filtering on that name lists gateway requests rather than raw model calls, plus MCP tool spans so an agentic request shows the tools it ran. Changes the exported LLM Observability span shape, so it is opt-in. -
Added
bifrost.plugins.datadog.config.otel_llmobs_conversion(otel_llmobs_conversion), one ofdisabled(default),inheritorenabled. Controls whether Datadog builds its own LLM Observability spans from Bifrost’s APM trace. Datadog resolves this across the whole trace, so the default opt-out also suppresses conversion for upstream services sharing the trace;inheritleaves the decision to them. Withinheritorenabledand LLM Observability still on, Bifrost leavesgen_ai.*off its own APM spans so nothing is counted twice. Migrate before upgrading: a config that still setsdd_llmobs_enabledthroughcustom_tagsis now refused, and the Datadog plugin will not load until that tag is replaced by this setting. -
Added
bifrost.governance.virtualKeys[].metadata(metadata), custom key/value metadata copied onto every log entry the key produces, so logs and spend can be filtered by it. Up to 50 entries; keys may use letters, digits,.,_and-. The field existed in Bifrost but had no Helm path, so it could not be set from a declarative install.

