Skip to content

fix(helm): add missing azure_key_config fields to schema - #3996

Merged
akshaydeo merged 1 commit into
maximhq:devfrom
axelray-dev:fix/helm-azure-key-config-schema
Jun 3, 2026
Merged

akshaydeo merged 1 commit into
maximhq:devfrom
axelray-dev:fix/helm-azure-key-config-schema

Conversation

@axelray-dev

@axelray-dev axelray-dev commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Summary

The Helm chart's values.schema.json is missing four fields in the azure_key_config object that exist in the Go AzureKeyConfig struct. This causes Helm schema validation to reject valid Azure configurations that include client_id, client_secret, tenant_id, or scopes.

Changes

Added the following fields to azure_key_config in helm-charts/bifrost/values.schema.json (both $defs.providerKey and $defs.virtualKeyProviderConfig paths):

  • client_id (string) - Azure client ID for authentication
  • client_secret (string) - Azure client secret for authentication
  • tenant_id (string) - Azure tenant ID for authentication
  • scopes (array of strings) - Azure scopes for authentication

These match the Go struct in core/schemas/account.go:

type AzureKeyConfig struct {
    Endpoint     EnvVar   `json:"endpoint"`
    ClientID     *EnvVar  `json:"client_id,omitempty"`
    ClientSecret *EnvVar  `json:"client_secret,omitempty"`
    TenantID     *EnvVar  `json:"tenant_id,omitempty"`
    Scopes       []string `json:"scopes,omitempty"`
}

How to test

  1. Validate the JSON schema is well-formed:

    python3 -c "import json; json.load(open('helm-charts/bifrost/values.schema.json'))"
  2. Verify the new fields appear in both azure_key_config locations:

    python3 -c "
    import json
    data = json.load(open('helm-charts/bifrost/values.schema.json'))
    akc1 = data['\$defs']['providerKey']['properties']['azure_key_config']['properties']
    akc2 = data['\$defs']['virtualKeyProviderConfig']['properties']['keys']['items']['properties']['azure_key_config']['properties']
    for f in ['client_id', 'client_secret', 'tenant_id', 'scopes']:
        assert f in akc1, f'Missing {f} in providerKey'
        assert f in akc2, f'Missing {f} in virtualKeyProviderConfig'
    print('All fields present in both locations')
    "
  3. Test Helm chart rendering with an azure_key_config that includes the new fields:

    helm template bifrost helm-charts/bifrost --set 'azure.keys[0].azure_key_config.client_id=test'

Type of change

  • Bug fix

Affected areas

  • Docs (Helm chart schema)

Breaking changes

  • No

Related issues

Fixes #3990

Summary by CodeRabbit

  • Chores
    • Extended Helm chart configuration schema to support Azure OAuth credentials (client_id, client_secret, tenant_id, scopes) for provider-level and per-key configurations. Validation now enforces that endpoint stays required and that the three credential fields must be supplied together if any is provided, ensuring consistent Azure auth validation.

@coderabbitai

coderabbitai Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: e5f4f7c6-23f1-49da-b74e-8532f17b8826

📥 Commits

Reviewing files that changed from the base of the PR and between b5accd6 and 840080d.

📒 Files selected for processing (1)
  • helm-charts/bifrost/values.schema.json

📝 Walkthrough

Walkthrough

Schema additions: client_id, client_secret, tenant_id, and scopes were added to both providerKey.azure_key_config and virtualKeyProviderConfig.keys[].azure_key_config, plus dependentRequired rules requiring the three credential fields to be present together when any is provided.

Changes

Azure Provider Key Configuration

Layer / File(s) Summary
Azure OAuth credential fields and validation
helm-charts/bifrost/values.schema.json
Adds client_id, client_secret, tenant_id, and scopes to both providerKey.azure_key_config and virtualKeyProviderConfig.keys[].azure_key_config, and adds dependentRequired rules requiring the three credential fields together.

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers:

  • akshaydeo
  • danpiths

🐰 I hopped through schema lines, nibbling missing keys,
client_id and secret tucked in with ease,
tenant_id joins, scopes sing in a row,
Two azure spots fixed — now validation will go! 🥕

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the main change: adding missing Azure key configuration fields to the Helm schema.
Description check ✅ Passed The description covers the summary, changes made, testing steps, type of change, affected areas, and related issue. All major sections from the template are adequately addressed.
Linked Issues check ✅ Passed The PR fully addresses issue #3990 by adding all four missing fields (client_id, client_secret, tenant_id, scopes) to both azure_key_config locations in the schema, with additional dependentRequired constraints.
Out of Scope Changes check ✅ Passed All changes are focused on schema updates directly related to issue #3990. No unrelated modifications or scope creep detected in the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@axelray-dev
axelray-dev marked this pull request as ready for review June 2, 2026 14:58
@axelray-dev
axelray-dev requested a review from a team as a code owner June 2, 2026 14:59
@axelray-dev
axelray-dev marked this pull request as draft June 2, 2026 16:25
@axelray-dev
axelray-dev force-pushed the fix/helm-azure-key-config-schema branch from 62070df to b5accd6 Compare June 2, 2026 16:27
@CLAassistant

CLAassistant commented Jun 2, 2026

Copy link
Copy Markdown

CLA assistant check
All committers have signed the CLA.

@axelray-dev
axelray-dev changed the base branch from main to dev June 2, 2026 16:27
@axelray-dev
axelray-dev marked this pull request as ready for review June 2, 2026 18:24
@greptile-apps

greptile-apps Bot commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

Confidence Score: 5/5

Schema-only change that strictly expands what the Helm validator accepts; no runtime logic is touched.

The new fields and their types match the Go struct and transports/config.schema.json exactly. The dependentRequired co-occurrence rules are correctly applied in both schema locations and the previously missing required: ["endpoint"] in virtualKeyProviderConfig is now also corrected. There are no logic changes and no regressions possible from adding previously-absent-but-valid fields.

No files require special attention.

Important Files Changed

Filename Overview
helm-charts/bifrost/values.schema.json Adds missing client_id, client_secret, tenant_id, and scopes fields to azure_key_config in both $defs.providerKey and $defs.virtualKeyProviderConfig; also adds dependentRequired co-occurrence constraints in both locations and fixes the missing required: ["endpoint"] in the virtualKeyProviderConfig path.

Reviews (2): Last reviewed commit: "fix(helm): add missing azure_key_config ..." | Re-trigger Greptile

Comment thread helm-charts/bifrost/values.schema.json

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
helm-charts/bifrost/values.schema.json (1)

3517-3556: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Keep the Helm Azure schema aligned with the runtime contract.

These additions expose the missing fields, but the Helm schema still diverges from transports/config.schema.json:2448-2490: client_id, client_secret, and tenant_id are supposed to be mutually dependent, and the virtual-key keys[].azure_key_config block should also require endpoint. As written, Helm will still accept partial or endpoint-less Azure OAuth configs that the runtime schema rejects.

Suggested fix
         "azure_key_config": {
           "type": "object",
           "properties": {
             "endpoint": {
               "type": "string",
               "description": "Azure endpoint (can use env. prefix)"
             },
             "client_id": {
               "type": "string",
               "description": "Azure client ID for authentication (can use env. prefix)"
             },
             "client_secret": {
               "type": "string",
               "description": "Azure client secret for authentication (can use env. prefix)"
             },
             "tenant_id": {
               "type": "string",
               "description": "Azure tenant ID for authentication (can use env. prefix)"
             },
             "scopes": {
               "type": "array",
               "items": {
                 "type": "string"
               },
               "description": "Azure scopes for authentication"
             },
             "deployments": {
               "type": "object",
               "additionalProperties": {
                 "type": "string"
               },
               "description": "Model to deployment mappings"
             },
             "api_version": {
               "type": "string",
               "description": "Azure API version"
             }
           },
           "required": ["endpoint"],
+          "dependentRequired": {
+            "client_id": ["client_secret", "tenant_id"],
+            "client_secret": ["client_id", "tenant_id"],
+            "tenant_id": ["client_id", "client_secret"]
+          },
           "additionalProperties": false
         },
               "azure_key_config": {
                 "type": "object",
                 "properties": {
                   "endpoint": {
                     "type": "string",
                     "description": "Azure endpoint (can use env. prefix)"
                   },
                   "client_id": {
                     "type": "string",
                     "description": "Azure client ID for authentication (can use env. prefix)"
                   },
                   "client_secret": {
                     "type": "string",
                     "description": "Azure client secret for authentication (can use env. prefix)"
                   },
                   "tenant_id": {
                     "type": "string",
                     "description": "Azure tenant ID for authentication (can use env. prefix)"
                   },
                   "scopes": {
                     "type": "array",
                     "items": {
                       "type": "string"
                     },
                     "description": "Azure scopes for authentication"
                   },
                   "deployments": {
                     "type": "object",
                     "additionalProperties": {
                       "type": "string"
                     },
                     "description": "Model to deployment mappings"
                   },
                   "api_version": {
                     "type": "string",
                     "description": "Azure API version"
                   }
                 },
+                "required": ["endpoint"],
+                "dependentRequired": {
+                  "client_id": ["client_secret", "tenant_id"],
+                  "client_secret": ["client_id", "tenant_id"],
+                  "tenant_id": ["client_id", "client_secret"]
+                },
                 "additionalProperties": false
               },

Also applies to: 4263-4301

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@helm-charts/bifrost/values.schema.json` around lines 3517 - 3556, Update the
azure_key_config schema to match the runtime contract by making client_id,
client_secret, and tenant_id mutually dependent and ensuring endpoint is
required when azure_key_config is used under keys[].azure_key_config;
specifically add a dependentRequired (or equivalent allOf/if-then) constraint on
"client_id" to require ["client_secret","tenant_id"] (and symmetric checks or a
single dependentRequired on each key) and enforce "required":["endpoint"] for
the azure_key_config object used in keys entries so Helm rejects partial or
endpoint-less Azure OAuth configs (refer to azure_key_config, client_id,
client_secret, tenant_id, and keys[].azure_key_config).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@helm-charts/bifrost/values.schema.json`:
- Around line 3517-3556: Update the azure_key_config schema to match the runtime
contract by making client_id, client_secret, and tenant_id mutually dependent
and ensuring endpoint is required when azure_key_config is used under
keys[].azure_key_config; specifically add a dependentRequired (or equivalent
allOf/if-then) constraint on "client_id" to require
["client_secret","tenant_id"] (and symmetric checks or a single
dependentRequired on each key) and enforce "required":["endpoint"] for the
azure_key_config object used in keys entries so Helm rejects partial or
endpoint-less Azure OAuth configs (refer to azure_key_config, client_id,
client_secret, tenant_id, and keys[].azure_key_config).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: e3a859f6-ef5b-4e41-8678-7b43d6bfd5b7

📥 Commits

Reviewing files that changed from the base of the PR and between 8c60820 and b5accd6.

📒 Files selected for processing (1)
  • helm-charts/bifrost/values.schema.json

@akshaydeo

akshaydeo commented Jun 2, 2026

Copy link
Copy Markdown
Contributor

@axelray-dev ❤️ for the PR - could you check the comments and resolve 🙇

@axelray-dev
axelray-dev marked this pull request as draft June 3, 2026 00:38
@axelray-dev
axelray-dev force-pushed the fix/helm-azure-key-config-schema branch from b5accd6 to d81ec9a Compare June 3, 2026 00:40
Add client_id, client_secret, tenant_id, and scopes to the
azure_key_config object in values.schema.json. These fields
exist in the Go AzureKeyConfig struct (core/schemas/account.go)
but were missing from the Helm chart schema, causing schema
validation to reject valid azure_key_config configurations.

Fixes maximhq#3990
@axelray-dev
axelray-dev force-pushed the fix/helm-azure-key-config-schema branch from d81ec9a to 840080d Compare June 3, 2026 00:52
@axelray-dev

Copy link
Copy Markdown
Contributor Author

@akshaydeo Thanks for the nudge. I have resolved both review comments:

  1. Added dependentRequired constraints to both azure_key_config locations (providerKey and virtualKeyProviderConfig), ensuring client_id, client_secret, and tenant_id are mutually required when any one is provided. This matches the constraint in transports/config.schema.json.

  2. Added "required": ["endpoint"] to the virtual-key azure_key_config block, which was missing compared to the providerKey location.

Both changes align the Helm chart schema with the runtime contract so partial service-principal configs are caught at schema-validation time rather than silently falling through to DefaultAzureCredential.

@axelray-dev
axelray-dev marked this pull request as ready for review June 3, 2026 00:56
@akshaydeo
akshaydeo merged commit 55f71e8 into maximhq:dev Jun 3, 2026
5 checks passed
akshaydeo pushed a commit that referenced this pull request Jun 4, 2026
Add client_id, client_secret, tenant_id, and scopes to the
azure_key_config object in values.schema.json. These fields
exist in the Go AzureKeyConfig struct (core/schemas/account.go)
but were missing from the Helm chart schema, causing schema
validation to reject valid azure_key_config configurations.

Fixes #3990
@akshaydeo akshaydeo mentioned this pull request Jun 7, 2026
akshaydeo pushed a commit that referenced this pull request Jun 7, 2026
Add client_id, client_secret, tenant_id, and scopes to the
azure_key_config object in values.schema.json. These fields
exist in the Go AzureKeyConfig struct (core/schemas/account.go)
but were missing from the Helm chart schema, causing schema
validation to reject valid azure_key_config configurations.

Fixes #3990
akshaydeo added a commit that referenced this pull request Jun 7, 2026
## ✨ Features

- **OpenAI Compaction** — Added OpenAI conversation compaction support
across core, framework, logging, and the API surface (#4053)
- **Multi-Customer & Org Hierarchy** — Logs and usage tracking now
support multiple customers, teams, and business units, including
business unit CRUD, team assignment, and governance endpoints in the
OpenAPI spec (#4066, #4041, #4082)
- **Provider-Level Governance** — Budgets & limits are now scope-aware
and can be applied at the virtual-key top level and per provider, wired
from the model configs table, with UI filters for scope and providers
(#3938, #3937, #3939, #3981, #3962)
- **Customer Budgets** — Customers support multiple budgets and
`calendar_aligned` budget windows (#3998, #3997)
- **Virtual Key Attribution & Controls** — Added a `created_by` user
attribution column and a `blacklisted_models` column for virtual key
provider configs (#3672, #3653)
- **Request Header Capture** — OTel and Maxim observability plugins
capture `request_headers` by pattern, with wildcard support (e.g.
`x-custom-*`); logging gained the same wildcard header capture (#4012,
#3958)
- **OTel Content Controls & Collectors** — New `disable_content_logging`
option drops message/tool content from exported spans, plus support for
multiple OTel collectors (#4064, #3894)
- **xAI x_search** — Added xAI `x_search` tool support (#3976)
- **URL Validation** — Added fetch URL validation with private-network
configuration and link-local blocking (#3947, #3991)
- **File Scheme Pricing URLs** — Pricing source URLs now accept the
`file://` scheme for air-gapped and self-hosted deployments (#4045)
- **Paginated Virtual Keys** — Virtual key fetching is paginated to
handle deployments with very large numbers of keys (#3957)
- **Client IP Resolution** — Resolve client IP from
`X-Forwarded-For`/`X-Real-IP` headers
- **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM
provisioning fields
- **Helm/Config Schema** — Added `roles` RBAC governance config and
`per_user_oauth` MCP auth to the Helm chart and config schema (#4004,
#4009)
- **Log Navigation UI** — Added a "View logs" menu item to customer,
team, and virtual key tables, clickable links in log detail views, a
customer detail sheet, and a reusable `BudgetDisplay` component (#4073,
#4054, #4026, #4055)
- **Faster First Paint** — Added an inline loading shell to `#root`
before React mounts (#4063)
- **Materialized View Alias** — Added an `alias` column to the
materialized view with filter support (#4078)

## 🐞 Fixed

- **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF
(#4092)
- **Mantle Model Matching** — Broadened Mantle model matching to all
`gpt` variants (#4091)
- **Empty Thinking Blocks** — Strip thinking blocks when the signature
is empty (#4079)
- **OpenAI Stream Usage** — Removed usage from the `responses.created`
event in the OpenAI stream (#4080)
- **Prompt Cache Key** — Set the prompt cache key from the Anthropic
integration (#4086)
- **Upstream Failure Status** — Map upstream connection failures to 502
instead of 400 (#3929) (thanks
[@chris-colinsky](https://github.com/chris-colinsky)!)
- **Gemini Schema Constraints** — Accept numeric schema integer
constraints for Gemini (#3994) (thanks
[@yanhao98](https://github.com/yanhao98)!)
- **Files Provider Param** — Accept the `?provider=` query param on `GET
/v1/files` (#3971) (thanks [@alexef](https://github.com/alexef)!)
- **Optional Batch Model** — Made the `model` field optional on `POST
/v1/batches` (#3973) (thanks [@alexef](https://github.com/alexef)!)
- **Helm Azure Config** — Added missing `azure_key_config` fields to the
Helm schema (#3996) (thanks
[@axelray-dev](https://github.com/axelray-dev)!)
- **Text Completion Chunk Model** — Added the missing `Model` field to
`TextCompletionChunkResponse` (#3970) (thanks
[@kuishou68](https://github.com/kuishou68)!)
- **MCP Inline stdio Env** — MCP stdio server configs accept inline
environment variable assignments (#3861) (thanks
[@Shushmitaaaa](https://github.com/Shushmitaaaa)!)
- **Orphaned Tool Results** — Orphaned tool results in the OpenAI to
Anthropic conversion flow are no longer rejected by the Anthropic API
(#3919)
- **Node Usage Reconciliation** — Added a monotonic `inc_number` log
cursor so node usage reconciliation does not skip late async log writes
(#3664)
- **Bedrock Output Assessments** — Corrected the type of
`outputAssessments` in Bedrock responses (#4028)
- **Model Pool Pricing Reloads** — Preserve non-pricing model pool
entries across pricing reloads (#3999)
- **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for
ghost node reconciliation (#4088)
- **VK Double Usage Counting** — Fixed double usage counting when
creating a virtual key (#4070)
- **Model Config Lifecycle** — Cascade deletes for model configs and
removal of stale in-memory model configs (#4051, #4043)
- **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to
250k chars to stay within the tsvector limit (#4057)
- **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to
prevent threshold drift (#4023)
- **Passthrough** — Fixed passthrough budgets, gated passthrough models
per VK, model extraction for Azure passthrough, and restricted
fallbacks/provider selection to the VK boundary (#3941, #3988, #3983,
#3924)
- **Provider Response Headers** — Strip provider response headers and
add a content-type filter (#3955, #4024)
- **Stream Handling** — Drain non-SSE stream readers and retry stale
connections (#3956, #3967)
- **Azure Claude** — Strip Azure diagnostic property for Claude models
(#3925)
- **Compat max_tokens** — Preserve chat `max_tokens` during param
filtering (#3992)
- **Raw Request Flag** — Removed the raw request flag from providers
that don't support it (#4058)
- **UI Fixes** — Standardized page container layout, virtual key model
configs UI, and dashboard chart tooltips (#4046, #4052, #4044)

## 🔧 Maintenance

- **Dependency Upgrades** — Bumped transitive `golang.org/x`
dependencies (crypto, net, sys, text) for Docker Scout CVE remediation
and `recharts` to 3.8.1; cascaded version bumps across all modules
(#3900, #4003)
akhsaul pushed a commit to akhsaul/bifrost that referenced this pull request Aug 27, 2026
Add client_id, client_secret, tenant_id, and scopes to the
azure_key_config object in values.schema.json. These fields
exist in the Go AzureKeyConfig struct (core/schemas/account.go)
but were missing from the Helm chart schema, causing schema
validation to reject valid azure_key_config configurations.

Fixes maximhq#3990
akhsaul pushed a commit to akhsaul/bifrost that referenced this pull request Aug 27, 2026
## ✨ Features

- **OpenAI Compaction** — Added OpenAI conversation compaction support
across core, framework, logging, and the API surface (maximhq#4053)
- **Multi-Customer & Org Hierarchy** — Logs and usage tracking now
support multiple customers, teams, and business units, including
business unit CRUD, team assignment, and governance endpoints in the
OpenAPI spec (maximhq#4066, maximhq#4041, maximhq#4082)
- **Provider-Level Governance** — Budgets & limits are now scope-aware
and can be applied at the virtual-key top level and per provider, wired
from the model configs table, with UI filters for scope and providers
(maximhq#3938, maximhq#3937, maximhq#3939, maximhq#3981, maximhq#3962)
- **Customer Budgets** — Customers support multiple budgets and
`calendar_aligned` budget windows (maximhq#3998, maximhq#3997)
- **Virtual Key Attribution & Controls** — Added a `created_by` user
attribution column and a `blacklisted_models` column for virtual key
provider configs (maximhq#3672, maximhq#3653)
- **Request Header Capture** — OTel and Maxim observability plugins
capture `request_headers` by pattern, with wildcard support (e.g.
`x-custom-*`); logging gained the same wildcard header capture (maximhq#4012,
maximhq#3958)
- **OTel Content Controls & Collectors** — New `disable_content_logging`
option drops message/tool content from exported spans, plus support for
multiple OTel collectors (maximhq#4064, maximhq#3894)
- **xAI x_search** — Added xAI `x_search` tool support (maximhq#3976)
- **URL Validation** — Added fetch URL validation with private-network
configuration and link-local blocking (maximhq#3947, maximhq#3991)
- **File Scheme Pricing URLs** — Pricing source URLs now accept the
`file://` scheme for air-gapped and self-hosted deployments (maximhq#4045)
- **Paginated Virtual Keys** — Virtual key fetching is paginated to
handle deployments with very large numbers of keys (maximhq#3957)
- **Client IP Resolution** — Resolve client IP from
`X-Forwarded-For`/`X-Real-IP` headers
- **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM
provisioning fields
- **Helm/Config Schema** — Added `roles` RBAC governance config and
`per_user_oauth` MCP auth to the Helm chart and config schema (maximhq#4004,
maximhq#4009)
- **Log Navigation UI** — Added a "View logs" menu item to customer,
team, and virtual key tables, clickable links in log detail views, a
customer detail sheet, and a reusable `BudgetDisplay` component (maximhq#4073,
maximhq#4054, maximhq#4026, maximhq#4055)
- **Faster First Paint** — Added an inline loading shell to `#root`
before React mounts (maximhq#4063)
- **Materialized View Alias** — Added an `alias` column to the
materialized view with filter support (maximhq#4078)

## 🐞 Fixed

- **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF
(maximhq#4092)
- **Mantle Model Matching** — Broadened Mantle model matching to all
`gpt` variants (maximhq#4091)
- **Empty Thinking Blocks** — Strip thinking blocks when the signature
is empty (maximhq#4079)
- **OpenAI Stream Usage** — Removed usage from the `responses.created`
event in the OpenAI stream (maximhq#4080)
- **Prompt Cache Key** — Set the prompt cache key from the Anthropic
integration (maximhq#4086)
- **Upstream Failure Status** — Map upstream connection failures to 502
instead of 400 (maximhq#3929) (thanks
[@chris-colinsky](https://github.com/chris-colinsky)!)
- **Gemini Schema Constraints** — Accept numeric schema integer
constraints for Gemini (maximhq#3994) (thanks
[@yanhao98](https://github.com/yanhao98)!)
- **Files Provider Param** — Accept the `?provider=` query param on `GET
/v1/files` (maximhq#3971) (thanks [@alexef](https://github.com/alexef)!)
- **Optional Batch Model** — Made the `model` field optional on `POST
/v1/batches` (maximhq#3973) (thanks [@alexef](https://github.com/alexef)!)
- **Helm Azure Config** — Added missing `azure_key_config` fields to the
Helm schema (maximhq#3996) (thanks
[@axelray-dev](https://github.com/axelray-dev)!)
- **Text Completion Chunk Model** — Added the missing `Model` field to
`TextCompletionChunkResponse` (maximhq#3970) (thanks
[@kuishou68](https://github.com/kuishou68)!)
- **MCP Inline stdio Env** — MCP stdio server configs accept inline
environment variable assignments (maximhq#3861) (thanks
[@Shushmitaaaa](https://github.com/Shushmitaaaa)!)
- **Orphaned Tool Results** — Orphaned tool results in the OpenAI to
Anthropic conversion flow are no longer rejected by the Anthropic API
(maximhq#3919)
- **Node Usage Reconciliation** — Added a monotonic `inc_number` log
cursor so node usage reconciliation does not skip late async log writes
(maximhq#3664)
- **Bedrock Output Assessments** — Corrected the type of
`outputAssessments` in Bedrock responses (maximhq#4028)
- **Model Pool Pricing Reloads** — Preserve non-pricing model pool
entries across pricing reloads (maximhq#3999)
- **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for
ghost node reconciliation (maximhq#4088)
- **VK Double Usage Counting** — Fixed double usage counting when
creating a virtual key (maximhq#4070)
- **Model Config Lifecycle** — Cascade deletes for model configs and
removal of stale in-memory model configs (maximhq#4051, maximhq#4043)
- **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to
250k chars to stay within the tsvector limit (maximhq#4057)
- **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to
prevent threshold drift (maximhq#4023)
- **Passthrough** — Fixed passthrough budgets, gated passthrough models
per VK, model extraction for Azure passthrough, and restricted
fallbacks/provider selection to the VK boundary (maximhq#3941, maximhq#3988, maximhq#3983,
maximhq#3924)
- **Provider Response Headers** — Strip provider response headers and
add a content-type filter (maximhq#3955, maximhq#4024)
- **Stream Handling** — Drain non-SSE stream readers and retry stale
connections (maximhq#3956, maximhq#3967)
- **Azure Claude** — Strip Azure diagnostic property for Claude models
(maximhq#3925)
- **Compat max_tokens** — Preserve chat `max_tokens` during param
filtering (maximhq#3992)
- **Raw Request Flag** — Removed the raw request flag from providers
that don't support it (maximhq#4058)
- **UI Fixes** — Standardized page container layout, virtual key model
configs UI, and dashboard chart tooltips (maximhq#4046, maximhq#4052, maximhq#4044)

## 🔧 Maintenance

- **Dependency Upgrades** — Bumped transitive `golang.org/x`
dependencies (crypto, net, sys, text) for Docker Scout CVE remediation
and `recharts` to 3.8.1; cascaded version bumps across all modules
(maximhq#3900, maximhq#4003)
occcat pushed a commit to occcat/bifrost that referenced this pull request Sep 2, 2026
Add client_id, client_secret, tenant_id, and scopes to the
azure_key_config object in values.schema.json. These fields
exist in the Go AzureKeyConfig struct (core/schemas/account.go)
but were missing from the Helm chart schema, causing schema
validation to reject valid azure_key_config configurations.

Fixes maximhq#3990
occcat pushed a commit to occcat/bifrost that referenced this pull request Sep 2, 2026
## ✨ Features

- **OpenAI Compaction** — Added OpenAI conversation compaction support
across core, framework, logging, and the API surface (maximhq#4053)
- **Multi-Customer & Org Hierarchy** — Logs and usage tracking now
support multiple customers, teams, and business units, including
business unit CRUD, team assignment, and governance endpoints in the
OpenAPI spec (maximhq#4066, maximhq#4041, maximhq#4082)
- **Provider-Level Governance** — Budgets & limits are now scope-aware
and can be applied at the virtual-key top level and per provider, wired
from the model configs table, with UI filters for scope and providers
(maximhq#3938, maximhq#3937, maximhq#3939, maximhq#3981, maximhq#3962)
- **Customer Budgets** — Customers support multiple budgets and
`calendar_aligned` budget windows (maximhq#3998, maximhq#3997)
- **Virtual Key Attribution & Controls** — Added a `created_by` user
attribution column and a `blacklisted_models` column for virtual key
provider configs (maximhq#3672, maximhq#3653)
- **Request Header Capture** — OTel and Maxim observability plugins
capture `request_headers` by pattern, with wildcard support (e.g.
`x-custom-*`); logging gained the same wildcard header capture (maximhq#4012,
maximhq#3958)
- **OTel Content Controls & Collectors** — New `disable_content_logging`
option drops message/tool content from exported spans, plus support for
multiple OTel collectors (maximhq#4064, maximhq#3894)
- **xAI x_search** — Added xAI `x_search` tool support (maximhq#3976)
- **URL Validation** — Added fetch URL validation with private-network
configuration and link-local blocking (maximhq#3947, maximhq#3991)
- **File Scheme Pricing URLs** — Pricing source URLs now accept the
`file://` scheme for air-gapped and self-hosted deployments (maximhq#4045)
- **Paginated Virtual Keys** — Virtual key fetching is paginated to
handle deployments with very large numbers of keys (maximhq#3957)
- **Client IP Resolution** — Resolve client IP from
`X-Forwarded-For`/`X-Real-IP` headers
- **SCIM Provisioning** — Added `attributeType`/`attributeValue` SCIM
provisioning fields
- **Helm/Config Schema** — Added `roles` RBAC governance config and
`per_user_oauth` MCP auth to the Helm chart and config schema (maximhq#4004,
maximhq#4009)
- **Log Navigation UI** — Added a "View logs" menu item to customer,
team, and virtual key tables, clickable links in log detail views, a
customer detail sheet, and a reusable `BudgetDisplay` component (maximhq#4073,
maximhq#4054, maximhq#4026, maximhq#4055)
- **Faster First Paint** — Added an inline loading shell to `#root`
before React mounts (maximhq#4063)
- **Materialized View Alias** — Added an `alias` column to the
materialized view with filter support (maximhq#4078)

## 🐞 Fixed

- **Fetch URL IP Checks** — Hardened fetch URL IP checks against SSRF
(maximhq#4092)
- **Mantle Model Matching** — Broadened Mantle model matching to all
`gpt` variants (maximhq#4091)
- **Empty Thinking Blocks** — Strip thinking blocks when the signature
is empty (maximhq#4079)
- **OpenAI Stream Usage** — Removed usage from the `responses.created`
event in the OpenAI stream (maximhq#4080)
- **Prompt Cache Key** — Set the prompt cache key from the Anthropic
integration (maximhq#4086)
- **Upstream Failure Status** — Map upstream connection failures to 502
instead of 400 (maximhq#3929) (thanks
[@chris-colinsky](https://github.com/chris-colinsky)!)
- **Gemini Schema Constraints** — Accept numeric schema integer
constraints for Gemini (maximhq#3994) (thanks
[@yanhao98](https://github.com/yanhao98)!)
- **Files Provider Param** — Accept the `?provider=` query param on `GET
/v1/files` (maximhq#3971) (thanks [@alexef](https://github.com/alexef)!)
- **Optional Batch Model** — Made the `model` field optional on `POST
/v1/batches` (maximhq#3973) (thanks [@alexef](https://github.com/alexef)!)
- **Helm Azure Config** — Added missing `azure_key_config` fields to the
Helm schema (maximhq#3996) (thanks
[@axelray-dev](https://github.com/axelray-dev)!)
- **Text Completion Chunk Model** — Added the missing `Model` field to
`TextCompletionChunkResponse` (maximhq#3970) (thanks
[@kuishou68](https://github.com/kuishou68)!)
- **MCP Inline stdio Env** — MCP stdio server configs accept inline
environment variable assignments (maximhq#3861) (thanks
[@Shushmitaaaa](https://github.com/Shushmitaaaa)!)
- **Orphaned Tool Results** — Orphaned tool results in the OpenAI to
Anthropic conversion flow are no longer rejected by the Anthropic API
(maximhq#3919)
- **Node Usage Reconciliation** — Added a monotonic `inc_number` log
cursor so node usage reconciliation does not skip late async log writes
(maximhq#3664)
- **Bedrock Output Assessments** — Corrected the type of
`outputAssessments` in Bedrock responses (maximhq#4028)
- **Model Pool Pricing Reloads** — Preserve non-pricing model pool
entries across pricing reloads (maximhq#3999)
- **Ghost Node Reconciliation** — Replicate the VK hierarchy flow for
ghost node reconciliation (maximhq#4088)
- **VK Double Usage Counting** — Fixed double usage counting when
creating a virtual key (maximhq#4070)
- **Model Config Lifecycle** — Cascade deletes for model configs and
removal of stale in-memory model configs (maximhq#4051, maximhq#4043)
- **FTS Index Cap** — Reduced the FTS index `left()` cap from 800k to
250k chars to stay within the tsvector limit (maximhq#4057)
- **Sync Worker Drift** — Reduced the sync worker ticker period to 5m to
prevent threshold drift (maximhq#4023)
- **Passthrough** — Fixed passthrough budgets, gated passthrough models
per VK, model extraction for Azure passthrough, and restricted
fallbacks/provider selection to the VK boundary (maximhq#3941, maximhq#3988, maximhq#3983,
maximhq#3924)
- **Provider Response Headers** — Strip provider response headers and
add a content-type filter (maximhq#3955, maximhq#4024)
- **Stream Handling** — Drain non-SSE stream readers and retry stale
connections (maximhq#3956, maximhq#3967)
- **Azure Claude** — Strip Azure diagnostic property for Claude models
(maximhq#3925)
- **Compat max_tokens** — Preserve chat `max_tokens` during param
filtering (maximhq#3992)
- **Raw Request Flag** — Removed the raw request flag from providers
that don't support it (maximhq#4058)
- **UI Fixes** — Standardized page container layout, virtual key model
configs UI, and dashboard chart tooltips (maximhq#4046, maximhq#4052, maximhq#4044)

## 🔧 Maintenance

- **Dependency Upgrades** — Bumped transitive `golang.org/x`
dependencies (crypto, net, sys, text) for Docker Scout CVE remediation
and `recharts` to 3.8.1; cascaded version bumps across all modules
(maximhq#3900, maximhq#4003)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Helm schema for azure is missing client_id,client_secret,tenant_id and scopes

3 participants