Skip to content

updated docs + helm changes - #5924

Closed
Madhuvod wants to merge 1 commit into
08-06-make_embedding_incrementalfrom
08-07-_docs_updated_docs_helm_for_complexity_router
Closed

updated docs + helm changes#5924
Madhuvod wants to merge 1 commit into
08-06-make_embedding_incrementalfrom
08-07-_docs_updated_docs_helm_for_complexity_router

Conversation

@Madhuvod

@Madhuvod Madhuvod commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Replaces the Complexity Router's lexical keyword scorer with a semantic (embedding-based) classifier. Instead of matching weighted keyword lists, Bifrost now embeds each incoming request and assigns it the tier of its nearest reference phrase. The lexical scorer is fully retired; existing configurations continue to load but no tier is published until an embedding provider and model are configured.

Changes

  • Semantic classifier replaces lexical scorer. Classification now embeds the latest user message (or the last message_history_count user messages) and finds the nearest reference phrase across Simple, Medium, and Complex tiers. Numeric tier_boundaries, conversation blending, and Complex keyword overrides no longer apply.
  • New semantic configuration block. Adds provider, embedding_model, dimension, timeout (default 1.5s), min_similarity, message_history_count, count_toward_budgets, and vector_store (embedded or vector_store) to complexity_analyzer_config. Without this block, complexity_tier is never published and complexity rules fall through.
  • Reference phrases replace keyword lists. The simple_keywords, medium_keywords, and complex_keywords fields now hold whole example prompts rather than individual scoring keywords. 150 built-in defaults (50 per tier) are shipped, balanced across use cases and writing styles.
  • Classifier warmup and status endpoint. Reference phrases are embedded in the background on configuration change. A new GET /api/governance/complexity-analyzer-status endpoint reports disabled, warming, ready, or failed, with progress counters and a serving_previous flag so the last good generation keeps routing while a new one warms.
  • complexity_mechanism updated. The value is now semantic for new requests; lexical appears only on historical log rows. complexity_score now reflects the nearest-phrase similarity rather than a weighted keyword score.
  • Two new Prometheus counters. bifrost_routing_embedding_requests_total and bifrost_routing_embedding_cost_total track embedding overhead from semantic routing, labeled by provider, model, and phase (request vs warmup).
  • Helm updated for semantic configuration. complexityAnalyzerConfig gains the semantic block with full schema validation. tier_boundaries is retained for backward compatibility but marked legacy. complex_reasoning boundary is accepted but ignored. vectorStore.type now accepts chromem, and a chromem section is added to values.yaml and _helpers.tpl.
  • Legacy configurations remain loadable. Old four-list keyword shapes and complex_reasoning boundaries parse without error. User-added entries are mapped from four tiers to three (Code + Technical → Medium, Reasoning → Complex). No tier is published until the semantic block is added.
  • Documentation rewritten. The complexity router page is restructured around the semantic model, with a dedicated migration guide under "Lexical keyword classifier (retired)", updated configuration tables, troubleshooting steps, and new screenshots. Helm governance docs, routing rules docs, Prometheus docs, and telemetry docs are updated to match. Stale architecture diagrams are removed.
  • OpenAPI spec updated. ComplexitySemanticConfig and ComplexitySemanticStatus schemas are added. All complexity_mechanisms filter descriptions updated. resetComplexityAnalyzerConfig now preserves the embedding configuration. config.schema.json removes the fallback field and updates the default timeout to 1500ms.

Type of change

  • Bug fix
  • Feature
  • Refactor
  • Documentation
  • Chore/CI

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (React)
  • Docs

How to test

go test ./...
  1. Configure complexity_analyzer_config with a semantic block pointing to a valid embedding provider and model.
  2. Check GET /api/governance/complexity-analyzer-status — wait for state: ready.
  3. Send a request that matches a routing rule referencing complexity_tier. Confirm the routing decision log records complexity_mechanism: semantic, a similarity score, and the matched reference phrase.
  4. Set min_similarity above the returned score and confirm the tier is no longer published (complexity_mechanism: skipped).
  5. Remove the semantic block and confirm state: disabled and no tier is published.
  6. Load a legacy configuration with code_keywords/technical_keywords/reasoning_keywords and confirm startup succeeds without error.
  7. Verify bifrost_routing_embedding_requests_total and bifrost_routing_embedding_cost_total increment in Prometheus after classified requests.

Breaking changes

  • Yes
  • No

The lexical scorer no longer runs. Deployments that relied on keyword-based classification will publish no tier (complexity_mechanism: skipped) until a semantic block is added and an embedding provider is configured. Existing configurations load without error, so startup is safe. Any routing rules matching on "REASONING" should be updated to "COMPLEX". Custom keyword entries are preserved and mapped to the nearest tier but should be replaced with complete example phrases for accurate semantic matching.

Related issues

Security considerations

The classifier status endpoint (GET /api/governance/complexity-analyzer-status) never returns phrases, embeddings, or provider secrets. Embedding calls are bounded by a configurable timeout (default 1.5s) to prevent inline request-path blocking. The count_toward_budgets flag controls whether embedding usage is recorded against virtual-key budgets but is never enforced as a hard limit.

Checklist

  • I read docs/contributing/README.md and followed the guidelines
  • I added/updated tests where appropriate
  • I updated documentation where needed
  • I verified builds succeed (Go and UI)
  • I verified the CI pipeline passes locally if applicable

@coderabbitai

coderabbitai Bot commented Aug 6, 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: CHILL

Plan: Pro Plus

Run ID: d4682385-adf7-4112-9218-63701b8b4947

📥 Commits

Reviewing files that changed from the base of the PR and between 9d2c671 and e246f5f.

📒 Files selected for processing (1)
  • transports/schema_test/config_schema_test.go
🚧 Files skipped from review as they are similar to previous changes (1)
  • transports/schema_test/config_schema_test.go

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Added semantic, embedding-based Complexity Router configuration using reference phrases, similarity thresholds, history, budgets, and vector stores.
    • Added a status endpoint showing classifier readiness, warmup progress, errors, and previous-generation serving.
    • Added Prometheus metrics for embedding requests and costs.
    • Added chromem vector-store support, including persistence and compression options.
  • Documentation

    • Updated API, Helm, routing, telemetry, and observability documentation for semantic classification and migration from legacy settings.
  • Bug Fixes

    • Added validation coverage for incomplete semantic configurations.

Walkthrough

The PR documents semantic embedding classification, reference phrases, classifier status, OpenAPI contracts, Helm configuration, legacy compatibility, validation, and observability changes. It also documents Chromem vector-store support.

Changes

Semantic Complexity Routing

Layer / File(s) Summary
Semantic router behavior and observability
docs/features/governance/complexity-router.mdx, docs/providers/routing-rules.mdx, docs/features/observability/*, docs/features/telemetry.mdx, docs/deployment-guides/helm/governance.mdx
Documentation describes semantic classification, reference phrases, classifier states, routing behavior, telemetry, troubleshooting, migration, and Helm reconciliation.
Semantic governance API contracts
docs/openapi/openapi.json, docs/openapi/openapi.yaml, docs/openapi/paths/management/governance.yaml, docs/openapi/paths/management/logging.yaml, docs/openapi/schemas/management/governance.yaml, docs/openapi/schemas/management/logging.yaml
OpenAPI contracts define semantic configuration, classifier status, reset behavior, similarity scoring, semantic filters, and updated pricing metadata.
Helm semantic configuration and storage
helm-charts/bifrost/values.yaml, helm-charts/bifrost/values.schema.json, helm-charts/bifrost/templates/_helpers.tpl, helm-charts/bifrost/README.md
Helm configuration adds semantic analyzer settings, Chromem storage options, persistence, compression, and rendered configuration support.
Configuration compatibility and validation
transports/config.schema.json, transports/schema_test/config_schema_test.go, transports/bifrost-http/handlers/governance_test.go, framework/logstore/tables.go, plugins/governance/utils.go
Transport schemas retain legacy compatibility. Tests reject semantic configurations without keyword lists. Supporting declarations and comments are updated.

Estimated code review effort: 4 (Complex) | ~45 minutes

Mergeability Score: 🔵 Low · up to e246f

The PR moves complexity routing to semantic embeddings and updates its configuration schema. The current schema still permits a zero timeout and describes one legacy field as ignored even though it is retained for deprecation reporting, which could allow invalid configuration or confuse operators; the PR is otherwise mergeable with explicit owner follow-up.

Possibly related PRs

  • maximhq/bifrost#5680: Documents and exposes semantic classifier configuration and status behavior.
  • maximhq/bifrost#5602: Provides the three-list keyword configuration reused as semantic reference phrases.
  • maximhq/bifrost#5896: Relates to semantic classifier warmup, caching, and usage-accounting behavior.

Suggested reviewers: akshaydeo, impoiler, kohlivrinda

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title mentions documentation and Helm changes but is too generic to identify the primary semantic classifier migration. Use a specific title such as "Replace lexical Complexity Router scoring with semantic classification".
✅ Passed checks (4 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description check ✅ Passed The description is comprehensive and covers the purpose, changes, testing steps, breaking changes, security, and checklist.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 08-07-_docs_updated_docs_helm_for_complexity_router

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

Madhuvod commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

@Madhuvod
Madhuvod marked this pull request as ready for review August 6, 2026 19:45
@Madhuvod
Madhuvod requested a review from a team as a code owner August 6, 2026 19:45

@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.

Actionable comments posted: 5

Caution

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

⚠️ Outside diff range comments (2)
docs/openapi/openapi.json (1)

55622-55657: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

keywords rejects the legacy four-list shape.

transports/config.schema.json accepts the old four-list reference-phrase shape for compatibility, and treats complex_reasoning as deprecated and ignored. This schema sets additionalProperties: false on keywords and lists only the three tier arrays. A legacy payload that still carries complex_reasoning_keywords therefore fails documented validation while the transport still accepts it.

Add the deprecated fourth list as an optional, deprecated property, or relax additionalProperties. Apply the same change to the PUT request copy (Line 55783), the PUT response copy (Line 55916), and the reset response copy (Line 56090).

As per path instructions, "Treat transports/config.schema.json as the source of truth for config fields", and the referenced schema states that "the old four-list shape remains accepted" while "legacy complex_reasoning is deprecated and ignored".

🔧 Proposed fix for the GET response copy
                       "properties": {
                         "simple_keywords": {
                           "type": "array",
                           "description": "Reference phrases for the SIMPLE tier (50 built-in defaults)",
                           "items": {
                             "type": "string"
                           },
                           "minItems": 1
                         },
+                        "complex_reasoning_keywords": {
+                          "type": "array",
+                          "deprecated": true,
+                          "description": "Deprecated legacy fourth reference-phrase list. Still accepted so older configurations load, but ignored by semantic classification.",
+                          "items": {
+                            "type": "string"
+                          }
+                        },
🤖 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 `@docs/openapi/openapi.json` around lines 55622 - 55657, Update each OpenAPI
keywords schema copy in the GET response, PUT request, PUT response, and reset
response to accept the legacy optional complex_reasoning_keywords array, mark it
deprecated, and keep additionalProperties false. Match the property’s type and
compatibility behavior from transports/config.schema.json, while preserving the
existing three required tier arrays and treating the legacy field as ignored.

Sources: Coding guidelines, Path instructions

docs/openapi/schemas/management/governance.yaml (1)

2009-2107: 🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Align the OpenAPI configuration contract with transports/config.schema.json.

ComplexityTierBoundaries rejects legacy complex_reasoning. ComplexityKeywordConfig rejects the accepted legacy four-list shape. The transport schema accepts both for migration compatibility.

The semantic fields also omit source constraints. This schema accepts empty provider values, dimension: 1, negative timeouts, invalid similarity values, and invalid history counts. It also documents 1.5s, but the source schema accepts whole-number duration strings such as 1500ms.

Mirror the legacy branches, validation bounds, duration pattern, and "1500ms" default from transports/config.schema.json. This prevents OpenAPI clients from producing configurations that source validation rejects. As per coding guidelines, transports/config.schema.json is the source of truth for configuration fields. As per path instructions, docs must match config.schema.json and provider behavior.

🤖 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 `@docs/openapi/schemas/management/governance.yaml` around lines 2009 - 2107,
Align ComplexityTierBoundaries and ComplexityKeywordConfig with the
corresponding legacy-compatible branches in transports/config.schema.json,
including complex_reasoning and the accepted four-list keyword shape. Update
ComplexitySemanticConfig to mirror source validation constraints for provider,
dimension, timeout, min_similarity, and message_history_count, including the
whole-number duration pattern and 1500ms default. Treat
transports/config.schema.json as the authoritative contract and preserve its
provider-related constraints.

Sources: Coding guidelines, Path instructions

🧹 Nitpick comments (2)
docs/providers/routing-rules.mdx (1)

127-129: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add embedding failure and timeout to the unavailable-classification list.

docs/features/governance/complexity-router.mdx (Line 366) lists embedding failure and timeout as skip causes, and transports/config.schema.json treats a timeout as a skipped classification. This note omits both.

📝 Proposed wording
-If complexity classification is unavailable for a request (classifier not configured or not ready, unsupported input, or a match below the similarity floor), `complexity_tier` is treated as **unknown** by the evaluator — the rule does not match and evaluation falls through. Rules using other variables are unaffected.
+If complexity classification is unavailable for a request (classifier not configured or not ready, unsupported input, an embedding failure or timeout, or a match below the similarity floor), `complexity_tier` is treated as **unknown** by the evaluator — the rule does not match and evaluation falls through. Rules using other variables are unaffected.
🤖 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 `@docs/providers/routing-rules.mdx` around lines 127 - 129, Update the Note
describing unavailable complexity classification to include embedding failures
and timeouts alongside the existing classifier, unsupported-input, and
similarity-floor cases, while preserving the documented unknown-tier fallthrough
behavior.

Source: Coding guidelines

docs/openapi/openapi.json (1)

56209-56253: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Add error responses to the status endpoint.

The sibling governance endpoints in this file define 500 and 503 responses that reference BifrostError. getComplexityAnalyzerStatus defines only 200. Clients cannot see the documented failure contract. Add the same 500 and 503 responses for parity.

♻️ Proposed addition
                     "error": {
                       "type": "string",
                       "description": "Warmup failure detail when state=failed"
                     }
                   }
                 }
               }
             }
-          }
+          },
+          "500": {
+            "description": "Internal server error",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "`#/components/schemas/BifrostError`"
+                }
+              }
+            }
+          },
+          "503": {
+            "description": "Config store not available",
+            "content": {
+              "application/json": {
+                "schema": {
+                  "$ref": "`#/components/schemas/BifrostError`"
+                }
+              }
+            }
+          }
🤖 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 `@docs/openapi/openapi.json` around lines 56209 - 56253, Update the
getComplexityAnalyzerStatus endpoint responses to include the same documented
500 and 503 error responses as its sibling governance endpoints, referencing the
existing BifrostError schema. Preserve the current 200 response and status
schema unchanged.
🤖 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.

Inline comments:
In `@docs/deployment-guides/helm/governance.mdx`:
- Around line 397-417: Update the complexityAnalyzerConfig semantic timeout
value in the governance deployment example from "1.5s" to the schema-valid
"1500ms" format.

In `@docs/features/governance/complexity-router.mdx`:
- Line 312: Update the complexity_mechanism documentation in the table and
logs-filter guidance to include the historical lexical value, indicating that it
remains filterable for pre-upgrade data. Mirror the existing legacy-value
handling documented for REASONING without changing the current semantic and
skipped definitions.
- Line 52: Align the configuration schema with the validation described in
complexity-router.mdx: update transports/config.schema.json to enforce at most
2000 characters per phrase and prevent normalized duplicate phrases across
tiers, or explicitly document that framework/configstore/complexityconfig.go
applies these constraints during save. Ensure the schema or documentation also
reflects the requirement that every tier contains at least one phrase.

In `@docs/openapi/openapi.json`:
- Around line 55676-55679: Update the four inlined semantic.dimension schemas in
docs/openapi/openapi.json at lines 55676-55679, 55837-55839, 55970-55972, and
56144-56146 to include a minimum constraint of 2 alongside the existing integer
type and description, matching transports/config.schema.json.

In `@helm-charts/bifrost/values.schema.json`:
- Around line 2071-2082: Update the timeout string pattern in the schema’s
timeout definition to accept documented fractional duration values such as 1.5s
while retaining the supported units and existing numeric timeout validation.
Keep transports/config.schema.json and the Helm schema/documentation behavior in
parity.

---

Outside diff comments:
In `@docs/openapi/openapi.json`:
- Around line 55622-55657: Update each OpenAPI keywords schema copy in the GET
response, PUT request, PUT response, and reset response to accept the legacy
optional complex_reasoning_keywords array, mark it deprecated, and keep
additionalProperties false. Match the property’s type and compatibility behavior
from transports/config.schema.json, while preserving the existing three required
tier arrays and treating the legacy field as ignored.

In `@docs/openapi/schemas/management/governance.yaml`:
- Around line 2009-2107: Align ComplexityTierBoundaries and
ComplexityKeywordConfig with the corresponding legacy-compatible branches in
transports/config.schema.json, including complex_reasoning and the accepted
four-list keyword shape. Update ComplexitySemanticConfig to mirror source
validation constraints for provider, dimension, timeout, min_similarity, and
message_history_count, including the whole-number duration pattern and 1500ms
default. Treat transports/config.schema.json as the authoritative contract and
preserve its provider-related constraints.

---

Nitpick comments:
In `@docs/openapi/openapi.json`:
- Around line 56209-56253: Update the getComplexityAnalyzerStatus endpoint
responses to include the same documented 500 and 503 error responses as its
sibling governance endpoints, referencing the existing BifrostError schema.
Preserve the current 200 response and status schema unchanged.

In `@docs/providers/routing-rules.mdx`:
- Around line 127-129: Update the Note describing unavailable complexity
classification to include embedding failures and timeouts alongside the existing
classifier, unsupported-input, and similarity-floor cases, while preserving the
documented unknown-tier fallthrough behavior.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 39ff6b5d-3953-4545-8bf1-814ed3786291

📥 Commits

Reviewing files that changed from the base of the PR and between 2f5e2ce and e23bb9d.

⛔ Files ignored due to path filters (8)
  • docs/media/architecture-complexity-router.png is excluded by !**/*.png
  • docs/media/complexity-logic-architecture.png is excluded by !**/*.png
  • docs/media/ui-complexity-router-config.png is excluded by !**/*.png
  • docs/media/ui-complexity-router-embedding-configuration.png is excluded by !**/*.png
  • docs/media/ui-complexity-router-keywords.png is excluded by !**/*.png
  • docs/media/ui-complexity-router-semantic.png is excluded by !**/*.png
  • docs/media/ui-routing-logs-complexity.png is excluded by !**/*.png
  • docs/media/ui-routing-rule-complexity.png is excluded by !**/*.png
📒 Files selected for processing (16)
  • docs/deployment-guides/helm/governance.mdx
  • docs/features/governance/complexity-router.mdx
  • docs/features/observability/prometheus.mdx
  • docs/features/telemetry.mdx
  • docs/openapi/openapi.json
  • docs/openapi/openapi.yaml
  • docs/openapi/paths/management/governance.yaml
  • docs/openapi/paths/management/logging.yaml
  • docs/openapi/schemas/management/governance.yaml
  • docs/openapi/schemas/management/logging.yaml
  • docs/providers/routing-rules.mdx
  • helm-charts/bifrost/README.md
  • helm-charts/bifrost/templates/_helpers.tpl
  • helm-charts/bifrost/values.schema.json
  • helm-charts/bifrost/values.yaml
  • transports/config.schema.json

Comment thread docs/deployment-guides/helm/governance.mdx
Comment thread docs/features/governance/complexity-router.mdx Outdated
Comment thread docs/features/governance/complexity-router.mdx
Comment thread docs/openapi/openapi.json Outdated
Comment thread helm-charts/bifrost/values.schema.json
@Madhuvod
Madhuvod force-pushed the 08-07-_docs_updated_docs_helm_for_complexity_router branch from e23bb9d to dbd33bd Compare August 6, 2026 20:26
@coderabbitai

coderabbitai Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@kohlivrinda
kohlivrinda changed the base branch from graphite-base/5924 to 08-06-make_embedding_incremental August 12, 2026 09:56
@kohlivrinda
kohlivrinda changed the base branch from 08-06-make_embedding_incremental to graphite-base/5924 August 12, 2026 11:31
@kohlivrinda
kohlivrinda force-pushed the 08-07-_docs_updated_docs_helm_for_complexity_router branch from 1132530 to 070dfec Compare August 12, 2026 15:04
@kohlivrinda
kohlivrinda changed the base branch from graphite-base/5924 to 08-06-make_embedding_incremental August 12, 2026 15:05
@Madhuvod
Madhuvod force-pushed the 08-07-_docs_updated_docs_helm_for_complexity_router branch from 070dfec to 4f74cee Compare August 12, 2026 19:25
@Madhuvod
Madhuvod force-pushed the 08-06-make_embedding_incremental branch 2 times, most recently from 1413129 to 70ef74f Compare August 12, 2026 21:16
@Madhuvod
Madhuvod force-pushed the 08-07-_docs_updated_docs_helm_for_complexity_router branch from 4f74cee to 262bbf3 Compare August 12, 2026 21:16

@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)

2107-2184: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Align the default claim with schema validation. DefaultAnalyzerConfig() supplies 50 phrases only when the entire configuration is absent. Both schemas require keywords for any non-null configuration, and Helm forwards the supplied object unchanged. A semantic-only configuration therefore fails validation. Remove the default claim or make keywords optional and apply defaults before validation.

🤖 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 2107 - 2184, Update the
`keywords` schema definition to match `DefaultAnalyzerConfig()` behavior:
configurations that provide other fields without `keywords` must validate
successfully because defaults are only applied when the entire configuration is
absent. Remove the schema’s required `keywords` constraint while preserving
validation for supplied keyword objects and both supported shapes.

Source: Coding guidelines

🤖 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 2107-2184: Update the `keywords` schema definition to match
`DefaultAnalyzerConfig()` behavior: configurations that provide other fields
without `keywords` must validate successfully because defaults are only applied
when the entire configuration is absent. Remove the schema’s required `keywords`
constraint while preserving validation for supplied keyword objects and both
supported shapes.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a0ec2f4e-08c4-4584-bb1e-ec9d432dc83e

📥 Commits

Reviewing files that changed from the base of the PR and between 1132530 and 262bbf3.

📒 Files selected for processing (8)
  • docs/deployment-guides/helm/governance.mdx
  • docs/features/governance/complexity-router.mdx
  • docs/openapi/openapi.json
  • docs/openapi/schemas/management/governance.yaml
  • helm-charts/bifrost/README.md
  • helm-charts/bifrost/values.schema.json
  • helm-charts/bifrost/values.yaml
  • transports/config.schema.json
🚧 Files skipped from review as they are similar to previous changes (4)
  • helm-charts/bifrost/README.md
  • docs/deployment-guides/helm/governance.mdx
  • docs/openapi/schemas/management/governance.yaml
  • docs/openapi/openapi.json

@Madhuvod
Madhuvod force-pushed the 08-07-_docs_updated_docs_helm_for_complexity_router branch 2 times, most recently from a9a1ebe to 305ece4 Compare August 12, 2026 21:50

@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.

Actionable comments posted: 1

🤖 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.

Inline comments:
In `@transports/config.schema.json`:
- Around line 3614-3621: Update the complex_reasoning schema description to
limit the “ignored” claim to semantic classification, while stating that
compatibility loading may retain or record the field’s presence for
backward-compatible handling. Preserve the existing deprecation and
legacy-configuration compatibility context.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 9435b76b-2f52-4ba1-91b4-414b0d8353f4

📥 Commits

Reviewing files that changed from the base of the PR and between a9a1ebe and 305ece4.

📒 Files selected for processing (8)
  • docs/deployment-guides/helm/governance.mdx
  • docs/openapi/openapi.json
  • docs/openapi/schemas/management/governance.yaml
  • helm-charts/bifrost/values.schema.json
  • helm-charts/bifrost/values.yaml
  • transports/bifrost-http/handlers/governance_test.go
  • transports/config.schema.json
  • transports/schema_test/config_schema_test.go
🚧 Files skipped from review as they are similar to previous changes (6)
  • docs/openapi/schemas/management/governance.yaml
  • transports/bifrost-http/handlers/governance_test.go
  • helm-charts/bifrost/values.yaml
  • docs/deployment-guides/helm/governance.mdx
  • helm-charts/bifrost/values.schema.json
  • docs/openapi/openapi.json

Comment thread transports/config.schema.json
@Madhuvod
Madhuvod force-pushed the 08-06-make_embedding_incremental branch from 70ef74f to c365ed1 Compare August 12, 2026 22:06
@Madhuvod
Madhuvod force-pushed the 08-07-_docs_updated_docs_helm_for_complexity_router branch from 305ece4 to 9d2c671 Compare August 12, 2026 22:06

@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)
transports/config.schema.json (1)

3723-3735: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reject zero-valued string timeouts.

The pattern accepts 0ns, 0ms, and 0.0s, while the numeric form rejects 0. Runtime normalization falls back to the default for zero, but the schema still permits a value prohibited by the positive-timeout contract.

Reject zero-valued strings and add schema cases for 0ms, 0.0s, and 0.5s.

🤖 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 `@transports/config.schema.json` around lines 3723 - 3735, Update the timeout
schema’s string pattern to reject zero-valued duration strings while continuing
to accept positive values such as 0.5s. Add schema cases covering 0ms and 0.0s
as rejected inputs and 0.5s as an accepted input, alongside the existing numeric
positivity validation.

Source: Path instructions

🤖 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 `@transports/config.schema.json`:
- Around line 3723-3735: Update the timeout schema’s string pattern to reject
zero-valued duration strings while continuing to accept positive values such as
0.5s. Add schema cases covering 0ms and 0.0s as rejected inputs and 0.5s as an
accepted input, alongside the existing numeric positivity validation.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: a579222d-9936-4885-b122-695fabf9023c

📥 Commits

Reviewing files that changed from the base of the PR and between 305ece4 and 9d2c671.

📒 Files selected for processing (1)
  • transports/config.schema.json

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.

2 participants