- Add tests for getTestSourceOptions (2 tests)
- Add null guards to selectAntOption test helper
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Memoize promptsForSource with useMemo for consistency
- Extract getTestSourceOptions to pipeline_utils.tsx, removing
direct getFrameworks import from pipeline_test_drawer.tsx
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Move testSourceOptions into component with useMemo (was module-scope)
- Remove dead mockPassPrompt/mockFailPrompt constants from test file
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add missing marginTop: 8 to Current expiry Text element to
restore the mt-2 spacing from the original div.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Wrap compliance-dataset loop in try/finally so isRunning resets
consistently with the quick-chat branch
- Add 4 tests covering the compliance-dataset execution path:
matched/total count, mismatch indicator, per-prompt errors,
and call count verification
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add missing display: block and marginTop: 8 to the grace period
recommendation Text element, matching the original div styling.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The original <div> was block-level by default. The replacement
<Text type="secondary"> renders inline, causing it to flow into
the preceding form field. Add display: "block" to match the
sibling New expiry element.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace inline color "#52c41a" with antd's native
<Text type="success"> for the new expiry message.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract the PipelineTestPanel component (~420 lines) and shared utilities
from the 1583-line pipeline_flow_builder.tsx into separate files.
New files:
- pipeline_icons.tsx: icons, constants, and utility functions
- pipeline_test_drawer.tsx: PipelineTestPanel component
- pipeline_icons.test.ts: 19 tests for utility functions
- pipeline_test_drawer.test.tsx: 11 tests for PipelineTestPanel
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace Tremor Button, Grid, Col, Text, TextInput, Title with antd
equivalents (Button, Typography, Input). Use antd Button loading prop
instead of manual "Regenerating..." text. Replace Tailwind utility
classes with inline styles to match antd patterns.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Vitest + RTL unit tests for WorkerDropdown, AccessGroupSelector,
MemberTable, ModelSelector, and AutoRotationView (37 tests total).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add `if: github.repository == 'BerriAI/litellm'` guard to scheduled
jobs in stale.yml, codeql.yml, and create_daily_staging_branch.yml.
This matches the existing pattern in auto_update_price_and_context_window.yml
and prevents these workflows from running unnecessarily on fork repositories.
Verify that spend_logs_metadata is correctly merged into combined_metadata
and flows through to Prometheus custom labels. Tests cover: basic extraction,
precedence when keys overlap, all three metadata sources combined, and None
handling.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add spend_logs_metadata to combined_metadata in Prometheus logger so
custom metadata from x-litellm-spend-logs-metadata header can be used
in Prometheus custom labels.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Thread project_alias alongside project_id through the metadata pipeline so
callbacks receive the human-readable project name. DRY up duplicate metadata
dict construction in proxy_track_cost_callback and pass_through_endpoints by
reusing get_sanitized_user_information_from_key — future metadata fields only
need adding in one place.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Two independent bugs prevented post-call OpenAI Moderation guardrail
results from reaching downstream logging callbacks (Langfuse, Datadog).
Bug 1: process_output_response() created a throwaway request_data dict,
so guardrail info written by @log_guardrail_information was discarded.
Fixed by threading the real request_data from the unified guardrail
dispatcher through all 13 BaseTranslation handlers, with litellm_metadata
injection preserved for third-party guardrails (Zscaler, Prompt Security).
Also extended to process_output_streaming_response for consistency.
Bug 2: The @log_guardrail_information decorator collapsed the full
moderation API response (categories, scores, flagged status) to "allow".
Fixed by overriding _process_response/_process_error on
OpenAIModerationGuardrail to stash and log the full response, following
the established Model Armor pattern.
- Use Select.Option with font-medium alias + Text secondary ID to match OrganizationDropdown
- Default page size to 20
- Add useInfiniteTeams mock to AddModelForm tests
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- OldTeams: refresh table via fetchTeamsV2 after team create instead of appending
- TeamDropdown: rewrite with useInfiniteTeams for paginated fetch, scroll-to-load, and debounced search
- Update all TeamDropdown consumers to use the new self-fetching API
- Dashboard layout: switch from Sidebar2 to SidebarProvider (leftnav)
- Leftnav: add MIGRATED_PAGES routing for path-based navigation (api-reference)
- Navbar: remove chat button
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New docs page covering the HA control plane architecture where each
worker instance has its own DB, Redis, and master key. Includes a
React component diagram, setup configs, SSO notes, and local testing
instructions.