Skip to content

feat: real-time governance updates via WebSocket and base model selection in UI#1532

Merged
Pratham-Mishra04 merged 1 commit intomainfrom
feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui
Feb 4, 2026
Merged

feat: real-time governance updates via WebSocket and base model selection in UI#1532
Pratham-Mishra04 merged 1 commit intomainfrom
feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui

Conversation

@danpiths
Copy link
Collaborator

@danpiths danpiths commented Feb 2, 2026

Summary

The frontend now receives real-time budget and rate-limit updates via WebSocket
instead of polling every 10 seconds. When a governance mutation occurs (e.g.
budget usage increases after an LLM call), the backend emits a minimal diff
({ budgets: { "id": {...} } } or { rate_limits: { "id": {...} } }). The
frontend merges this diff into the RTK Query cache using Immer draft mutations,
updating all affected views (model limits, provider governance, virtual keys)
immediately.

Also switches governance queries to from_memory=true for faster reads, removes
all 10-second polling intervals, adds base model selection support in the model
limits form, and fixes stale data in edit/detail sheets.

  • Re-enable sidebar navigation — restore "Budgets & Limits" and "Routing
    Rules" menu items in the sidebar that were temporarily hidden, and restore the
    Network icon import.

  • Disabled state UX for governance-dependent items — when governance is
    disabled, show governance-dependent sidebar items and provider config tabs as
    disabled with tooltips explaining how to enable them, instead of hiding them
    completely.

Changes

  • useStoreSync.tsx: Subscribe to governance_update WebSocket events and
    merge budget/rate-limit diffs into getModelConfigs, getProviderGovernance,
    and getVirtualKeys RTK Query caches using Immer draft mutations (mutate
    draft, don't return)
  • governanceApi.ts: Switch getVirtualKeys, getModelConfigs, and
    getProviderGovernance queries to use from_memory=true query parameter
  • baseApi.ts: Add BaseModels tag type
  • providersApi.ts: Add getBaseModels query endpoint for
    GET /api/models/base
  • modelMultiselect.tsx: Support loadModelsOnEmptyProvider="base_models"
    mode — when no provider is selected, loads distinct base model names instead
    of all models from all providers. Adds useLazyGetBaseModelsQuery integration
    with search/filter support.
  • modelLimitSheet.tsx: Use loadModelsOnEmptyProvider="base_models" for
    the model selector (governance configs should use canonical base model names)
  • modelLimitsTable.tsx: Store editingModelConfigId (string) instead of
    full ModelConfig object in state; derive current object via useMemo from
    props so it stays reactive to RTK cache updates
  • modelLimitsView.tsx: Remove pollingInterval: 10000 and
    skipPollingIfUnfocused
  • governanceFormFragment.tsx: Remove pollingInterval: 10000 and
    skipPollingIfUnfocused
  • providerGovernanceTable.tsx: Remove pollingInterval: 10000 and
    skipPollingIfUnfocused
  • virtualKeysTable.tsx: Store editingVirtualKeyId and
    selectedVirtualKeyId (strings) instead of full objects; derive via useMemo
    from props for live updates
  • Re-enable "Budgets & Limits" sidebar nav item (/workspace/model-limits)
  • Re-enable "Routing Rules" sidebar nav item (/workspace/routing-rules)
  • Restore Network icon import from lucide-react
  • sidebar.tsx: Add disabled state styling for governance-dependent sidebar
    items (Budgets & Limits, Routing Rules) when governance is disabled — show
    items with muted styling, not-allowed cursor, and tooltip explaining how to
    enable governance. Remove pointer-events-none to allow hover effects.
  • modelProviderConfig.tsx: Show "Governance" tab in provider configuration
    even when governance is disabled, but display it as disabled with tooltip.
    Previously the tab was completely hidden.

Type of change

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

Affected areas

  • Core (Go)
  • Transports (HTTP)
  • Providers/Integrations
  • Plugins
  • UI (Next.js)
  • Docs

How to test

# UI build
cd ui
pnpm i || npm i
pnpm build || npm run build

Manual testing:

  1. Real-time budget updates: Open the Model Limits page. Make an LLM request
    through Bifrost. Observe that "Current Usage" values update immediately
    without page refresh.

  2. Real-time rate limit updates: Open the Provider Governance page for a
    provider with rate limits. Make an LLM request. Observe token/request usage
    bars update in real-time.

  3. Virtual keys live updates: Open a virtual key's detail sheet. Make
    requests using that virtual key. Budget and rate limit displays should update
    live.

  4. Edit sheet live data: Open the edit sheet for a model config. While the
    sheet is open, make LLM requests that affect that model's budget. The
    "Current Usage" in the edit sheet should reflect the latest value.

  5. Base model selection: Go to Model Limits → Add Model Limit. Leave the
    provider dropdown empty. The model selector should show distinct base model
    names (e.g. gpt-4o, claude-3-5-sonnet) instead of provider-specific
    variants.

  6. No polling: Open browser DevTools Network tab. Verify there are no
    repeated GET requests to /api/governance/* every 10 seconds. Updates should
    only arrive via WebSocket.

  7. Disabled governance sidebar items: Disable governance in Config →
    Governance. Verify that "Budgets & Limits" and "Routing Rules" sidebar items
    appear with muted/disabled styling. Hover over them to see tooltip explaining
    how to enable. Clicking should do nothing.

  8. Disabled governance tab in provider config: With governance disabled, go
    to Model Providers → select a provider. In "Provider level configuration",
    verify the "Governance" tab is visible but disabled/grayed out with a tooltip.

Screenshots/Recordings

N/A

Breaking changes

  • Yes
  • No

Related issues

N/A

Security considerations

No security implications. The WebSocket subscription consumes the same
governance data already accessible through authenticated GET endpoints. No new
data is exposed.

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
Copy link
Contributor

coderabbitai bot commented Feb 2, 2026

Caution

Review failed

The pull request is closed.

📝 Walkthrough

Summary by CodeRabbit

  • New Features

    • Cross-provider model matching for budget and rate-limit configurations
    • Real-time governance update notifications via WebSocket
    • Delete functionality for virtual keys
    • Governance feature gating for conditional UI visibility
  • Bug Fixes

    • Fixed preservation of model names with namespaces (e.g., meta-llama/Llama-3.1-8B)
    • Fixed model usage tracking when no virtual key is assigned
  • Performance Improvements

    • Optimized query efficiency by removing unnecessary polling for governance data
    • Implemented in-memory data reads for improved responsiveness

Walkthrough

Adds real-time handling for governance_update WebSocket events that merge budget/rate_limit diffs into RTK Query caches, removes explicit polling from governance queries, adds base-model support and a new getBaseModels API, converts several UI tables to ID-based state with useMemo, and passes "base_models" to ModelMultiselect when no provider is selected.

Changes

Cohort / File(s) Summary
Real-time sync
ui/hooks/useStoreSync.tsx
Subscribe to governance_update in addition to store_update; validate diffs and merge budgets/rate_limits into RTK Query caches (getModelConfigs, getProviderGovernance, getVirtualKeys); add unsubscribes and cleanup.
Polling config removals
ui/app/workspace/model-limits/views/modelLimitsView.tsx, ui/app/workspace/providers/fragments/governanceFormFragment.tsx, ui/app/workspace/providers/views/providerGovernanceTable.tsx
Removed pollingInterval and skipPollingIfUnfocused from governance query options; keep skip and refetchOnFocus.
ID-based state & memoization
ui/app/workspace/model-limits/views/modelLimitsTable.tsx, ui/app/workspace/virtual-keys/views/virtualKeysTable.tsx
Replace object-based editing/selection state with *Id fields and derive full objects via useMemo; update handlers and sheet props. virtualKeysTable adds delete mutation, toasts, and isDeleting handling.
ModelMultiselect & ModelLimitSheet
ui/components/ui/modelMultiselect.tsx, ui/app/workspace/model-limits/views/modelLimitSheet.tsx
ModelMultiselect prop loadModelsOnEmptyProvider widened to `boolean
APIs & cache tags
ui/lib/store/apis/providersApi.ts, ui/lib/store/apis/governanceApi.ts, ui/lib/store/apis/baseApi.ts
Add getBaseModels endpoint and types (GetBaseModelsRequest, ListBaseModelsResponse); export useGetBaseModelsQuery/useLazyGetBaseModelsQuery; three governance endpoints now include params: { from_memory: true }; add "BaseModels" to baseApi tagTypes.
Sidebar & provider UI
ui/components/sidebar.tsx, ui/app/workspace/providers/views/modelProviderConfig.tsx
Add isGovernanceEnabled prop to sidebar items and pass it through; gate governance-related submenu items and provider governance tab on isGovernanceEnabled and access.
Misc & changelogs
.gitignore, core/changelog.md, framework/changelog.md, plugins/governance/changelog.md, transports/changelog.md
Update .gitignore (add AI agent dirs); add/expand changelog entries and migration notes for base-model support, EventBroadcaster, and governance features.

Sequence Diagram(s)

sequenceDiagram
    participant UI as UI Component
    participant WS as WebSocket
    participant RTK as RTK Query Cache
    participant API as Backend API

    UI->>RTK: Register governance queries (modelConfigs, providers, virtualKeys)
    Note over UI,RTK: Explicit polling options removed

    rect rgba(0,128,0,0.5)
    WS->>RTK: governance_update (budgets & rate_limits)
    RTK->>RTK: Merge diffs into getModelConfigs cache
    RTK->>RTK: Merge diffs into getProviderGovernance cache
    RTK->>RTK: Merge diffs into getVirtualKeys cache (and provider_configs)
    RTK->>UI: Notify subscribers (components re-render)
    end

    rect rgba(0,0,128,0.5)
    UI->>API: useLazyGetBaseModelsQuery -> GET /models/base?query=...
    API-->>UI: List of base model names
    UI->>RTK: Populate/select options / re-render
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Poem

🐇 I nibbled webs of governance and thread,
Budgets and rates stitched real-time in my head.
When providers hide, base models hop in view,
IDs tidy drawers and the sidebar shows new.
Tiny hops, carrot cheers — the updates are through!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 14.29% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely summarizes the two main changes: real-time governance updates via WebSocket and base model selection support in the UI.
Description check ✅ Passed The pull request description follows the required template with all key sections completed: Summary, Changes, Type of change, Affected areas, How to test, Breaking changes, and Checklist. The description is comprehensive and provides clear context for the changes.

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

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui

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

@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 6fecb69 to 499cf07 Compare February 2, 2026 22:56
@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from 23aba08 to 86828b2 Compare February 2, 2026 22:56
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 499cf07 to cb53486 Compare February 2, 2026 23:34
@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from 86828b2 to 8210c71 Compare February 2, 2026 23:34
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from cb53486 to 7beaffe Compare February 2, 2026 23:41
@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from 8210c71 to b72c861 Compare February 2, 2026 23:41
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@ui/components/ui/modelMultiselect.tsx`:
- Around line 159-176: The refresh when provider is empty uses a lower limit (5)
causing the list to shrink; update the branch that calls getModels when
shouldLoadOnEmpty is true to use the same limit as initial load (20) by changing
the limit expression in that call (the getModels invocation inside the
shouldLoadOnEmpty branch) to use currentQuery ? 20 : 20 (i.e. 20) so it matches
the other paths (also keep getBaseModels unchanged); check the surrounding logic
in the handleChange/getModels/getBaseModels flow to ensure consistency with
provider, currentQuery, keys, and shouldUseBaseModels variables.

@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 7beaffe to 7e505cd Compare February 3, 2026 10:34
@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from b72c861 to fc2a474 Compare February 3, 2026 10:34
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@ui/components/sidebar.tsx`:
- Around line 427-440: The "Budgets & Limits" menu item is only RBAC-gated via
hasGovernanceAccess but also needs to be gated by the governance feature flag
(core_config.enable_governance) so it disappears when governance is disabled;
update SidebarItemView (where item.subItems are mapped) to filter out the
subitem with title "Budgets & Limits" (or url "/workspace/model-limits") when
isGovernanceEnabled (or core_config.enable_governance) is false — either pass
isGovernanceEnabled into SidebarItemView and filter item.subItems before
mapping, or apply the check inline during the map so that the Budgets & Limits
entry is not rendered unless both isGovernanceEnabled and hasGovernanceAccess
are true.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@ui/hooks/useStoreSync.tsx`:
- Around line 61-65: The code incorrectly iterates with
Object.values(draft.virtual_keys) even though draft.virtual_keys is a
VirtualKey[] per GetVirtualKeysResponse; change the loop in the updateQueryData
callback to iterate directly over the array (for (const vk of
draft.virtual_keys) { ... }) and update the preceding comment in
useStoreSync.tsx to describe that virtual_keys is an array (not a
map/from_memory) so the logic merges array elements into the virtual keys cache
correctly; keep the rest of the updateQueryData and dispatch usage unchanged.
🧹 Nitpick comments (1)
ui/components/ui/modelMultiselect.tsx (1)

171-176: Inconsistent limit in shouldLoadOnEmpty refresh path.

When shouldLoadOnEmpty is true (but not base_models mode), the refresh uses limit: 5 without a query (Line 175), while the initial load at Line 93 uses limit: 20. This can shrink the options list unexpectedly after selection.

Suggested fix for consistency
 			} else if (shouldLoadOnEmpty) {
 				getModels({
 					query: currentQuery || undefined,
 					keys: keys && keys.length > 0 ? keys : undefined,
-					limit: currentQuery ? 20 : 5,
+					limit: 20,
 				});
 			}

@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from fc2a474 to fed10d4 Compare February 3, 2026 11:57
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 7e505cd to f9286c2 Compare February 3, 2026 11:57
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from f9286c2 to 96bf11b Compare February 3, 2026 13:09
@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from fed10d4 to 74e5e7e Compare February 3, 2026 13:13
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 96bf11b to 663bfd1 Compare February 3, 2026 13:13
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@ui/components/sidebar.tsx`:
- Around line 431-444: The "Routing Rules" subitem isn't currently being hidden
when governance is disabled; update the subitem filtering logic in the sidebar
rendering (the code that inspects subItem.url) to treat
"/workspace/routing-rules" the same as "/workspace/model-limits": add a
conditional that returns/nulls the subitem when ((subItem.url ===
"/workspace/model-limits" || subItem.url === "/workspace/routing-rules") &&
!isGovernanceEnabled). Ensure you modify the branch that already checks
isGovernanceEnabled (referencing isGovernanceEnabled and subItem.url) so both
entries are gated consistently.

@Pratham-Mishra04 Pratham-Mishra04 force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 663bfd1 to d98d5dc Compare February 3, 2026 17:16
@Pratham-Mishra04 Pratham-Mishra04 force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from 74e5e7e to b4f2e3a Compare February 3, 2026 17:16
@Pratham-Mishra04 Pratham-Mishra04 mentioned this pull request Feb 3, 2026
18 tasks
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@ui/app/workspace/providers/views/modelProviderConfig.tsx`:
- Around line 59-60: The code reads coreConfig.client_config.enable_governance
directly which can throw if client_config is undefined; update the
isGovernanceEnabled assignment (the variable isGovernanceEnabled that uses
useGetCoreConfigQuery) to use optional chaining like
coreConfig?.client_config?.enable_governance and fall back to false to mirror
the pattern used elsewhere (e.g., providerGovernanceTable.tsx) so it safely
handles missing client_config.
🧹 Nitpick comments (2)
core/changelog.md (1)

2-2: Clarify relationship between model namespace fix and base model selection.

The model namespace preservation fix seems related to the base model selection feature mentioned in the PR summary. If preserving namespaces like meta-llama/Llama-3.1-8B was a prerequisite for base model selection to work correctly, consider expanding this changelog entry to make that relationship explicit, e.g.:

- fix: model names with namespaces (e.g., `meta-llama/Llama-3.1-8B`) are now correctly preserved instead of being incorrectly split as provider-prefixed models, enabling proper base model selection

This would help readers understand the context and impact of the fix.

ui/components/ui/modelMultiselect.tsx (1)

166-170: Simplify redundant ternary expression.

The expression currentQuery ? 20 : 20 always evaluates to 20, making the ternary unnecessary.

Suggested fix
 } else if (shouldUseBaseModels) {
 	getBaseModels({
 		query: currentQuery || undefined,
-		limit: currentQuery ? 20 : 20,
+		limit: 20,
 	});

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

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

⚠️ Outside diff range comments (1)
ui/app/workspace/virtual-keys/views/virtualKeysTable.tsx (1)

117-127: ⚠️ Potential issue | 🟡 Minor

Consider adding a null guard for the edit sheet similar to the detail sheet.

The detail sheet (line 127) correctly guards against a null selectedVirtualKey, which handles the case where the item is deleted while the sheet is open. However, VirtualKeySheet doesn't have an equivalent guard for editingVirtualKey in edit mode.

If a virtual key is deleted via a WebSocket update while the edit sheet is open, editingVirtualKey becomes null, and the sheet would unexpectedly switch to "add new" behavior.

🛡️ Suggested fix for consistency
-			{showVirtualKeySheet && (
+			{showVirtualKeySheet && (editingVirtualKeyId === null || editingVirtualKey !== null) && (
				<VirtualKeySheet
					virtualKey={editingVirtualKey}
					teams={teams}
					customers={customers}
					onSave={handleVirtualKeySaved}
					onCancel={() => setShowVirtualKeySheet(false)}
				/>
			)}

This ensures the sheet only renders when either adding a new key (editingVirtualKeyId === null) or when the editing key still exists in the cache.

🧹 Nitpick comments (3)
ui/app/workspace/providers/views/modelProviderConfig.tsx (1)

59-60: Consider aligning config query approach with providerGovernanceTable.tsx.

This component uses useGetCoreConfigQuery({}) without fromDB, while providerGovernanceTable.tsx uses useLazyGetCoreConfigQuery with { fromDB: true }. This could lead to transient UI inconsistencies if the cached config differs from the DB value—the tab might briefly appear or disappear before the child component's own check resolves.

If the intent is to use memory/cached data per the PR's from_memory=true migration, consider applying the same approach in providerGovernanceTable.tsx for consistency across the governance feature surface.

ui/hooks/useStoreSync.tsx (1)

27-29: Consider handling partial data more defensively.

If data is undefined or null, accessing data.data will throw. Consider adding a guard:

 const unsubGovUpdate = subscribe("governance_update", (data) => {
-    const { budgets, rate_limits } = data.data || {};
+    const { budgets, rate_limits } = data?.data || {};
     if (!budgets && !rate_limits) return;
ui/components/ui/modelMultiselect.tsx (1)

171-177: Inconsistent limit between initial load and refresh.

When shouldLoadOnEmpty is true (but not base_models mode), the initial load at Line 93 uses limit: 20, but the refresh after selection at Line 175 uses limit: currentQuery ? 20 : 5. This can cause the dropdown list to shrink after a selection.

Suggested fix
 			} else if (shouldLoadOnEmpty) {
 				getModels({
 					query: currentQuery || undefined,
 					keys: keys && keys.length > 0 ? keys : undefined,
-					limit: currentQuery ? 20 : 5,
+					limit: 20,
 				});
 			}

@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from b4f2e3a to 8236164 Compare February 3, 2026 18:12
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from d98d5dc to 5543680 Compare February 3, 2026 18:12
@danpiths danpiths force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 5543680 to 9477348 Compare February 3, 2026 18:45
@danpiths danpiths force-pushed the feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api branch from 8236164 to 75edfa0 Compare February 3, 2026 18:45
Copy link
Collaborator

Pratham-Mishra04 commented Feb 4, 2026

Merge activity

  • Feb 4, 7:46 AM UTC: A user started a stack merge that includes this pull request via Graphite.
  • Feb 4, 7:56 AM UTC: Graphite rebased this pull request as part of a merge.
  • Feb 4, 7:57 AM UTC: @Pratham-Mishra04 merged this pull request with Graphite.

@Pratham-Mishra04 Pratham-Mishra04 changed the base branch from feature/02-03-feat_add_from_memory_governance_endpoints_websocket_event_broadcasting_and_base_models_api to graphite-base/1532 February 4, 2026 07:52
@Pratham-Mishra04 Pratham-Mishra04 changed the base branch from graphite-base/1532 to main February 4, 2026 07:54
@Pratham-Mishra04 Pratham-Mishra04 force-pushed the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch from 9477348 to cc685c9 Compare February 4, 2026 07:55
@Pratham-Mishra04 Pratham-Mishra04 merged commit 9d00cc4 into main Feb 4, 2026
8 of 9 checks passed
@Pratham-Mishra04 Pratham-Mishra04 deleted the feature/02-03-feat_real-time_governance_updates_via_websocket_and_base_model_selection_in_ui branch February 4, 2026 07:57
@coderabbitai coderabbitai bot mentioned this pull request Feb 6, 2026
18 tasks
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