v1.94.0
BerriAI/litellmv1.94.0Jul 28, 2026by yuneng-berri
AI Summary
A major feature release introducing Complexity Router v2, Anthropic automatic prompt caching, and a comprehensive UI migration to shadcn components. Adds support for GPT-5.6, Grok-4.3, and Gemini Omni Flash.
Key Highlights
- Complexity Router v2 with adaptive mode, plugins, and session affinity
- Anthropic automatic prompt caching support
- UI migration to shadcn components and shared DataTables
- New models: GPT-5.6, Grok-4.3, Gemini Omni Flash
- Guardrails: Straiker integration
New Features
- Complexity Router v2 with adaptive mode and session affinity
- Add Router(plugins=[...]) routing-plugin pipeline
- Add Anthropic automatic prompt caching for cache_control injection
- Migrate UI to shadcn components and shared DataTables
- Add GPT-5.6 support
- Add Grok-4.3 support via /openai/v1 frontier path
- Add Gemini Omni Flash pricing with video output tokens
- Add Straiker guardrail integration
Full Release Notes
## Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.94.0 ``` **Verify using the release tag (convenience):** Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/v1.94.0/cosign.pub \ ghcr.io/berriai/litellm:v1.94.0 ``` Expected output: ``` The following checks were performed on each of these signatures: - The cosign claims were validated - The signatures were verified against the specified public key ``` --- ## What's Changed * feat(ui): working Test Connection for the complexity auto router by @akapur99 in https://github.com/BerriAI/litellm/pull/32950 * fix(xecguard): use StandardLoggingGuardrailInformation in logging hook by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32911 * feat(ui): adopt openapi-react-query ($api) and convert useCustomers by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32949 * refactor(ui): colocate the mcp-servers view, keeping the shared mcp_tools surface by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32968 * refactor(ui): convert endpoint usage charts to shadcn/recharts by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32723 * fix(proxy-auth): stop unrecognized model namespaces slipping through provider wildcard keys by @mateo-berri in https://github.com/BerriAI/litellm/pull/32979 * feat(router): random-pick multi-model complexity tiers by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/32967 * fix(xecguard): sanitize scan result before recording it for logging by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32935 * fix(auto_router): filter embedding models in complexity tab dropdowns, require all tiers, inline validation by @akapur99 in https://github.com/BerriAI/litellm/pull/32978 * fix(anthropic): translate raw adaptive thinking for pre-4.6 models on chat completions and Bedrock Converse by @akapur99 in https://github.com/BerriAI/litellm/pull/32944 * feat(router): add Router(plugins=[...]) routing-plugin pipeline by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/32972 * feat(router): soft-floor adaptive mode for complexity router by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/32947 * docs(github): add QA runbook section to the PR template by @mateo-berri in https://github.com/BerriAI/litellm/pull/32965 * fix(model_cost): add supports_reasoning: false to Gemini image generation models by @mateo-berri in https://github.com/BerriAI/litellm/pull/32836 * build(dev-env): add make bootstrap and unprovisioned-checkout preflight to pre-commit by @mateo-berri in https://github.com/BerriAI/litellm/pull/32981 * ci(ui): report only error-level knip findings in CI by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32971 * feat(batches): track cost for unmanaged Bedrock batches, generalize the flag by @Sameerlite in https://github.com/BerriAI/litellm/pull/32315 * fix(guardrails): walk custom_tool_call_output items in _content_utils by @yucheng-berri in https://github.com/BerriAI/litellm/pull/32969 * fix: show and allow editing team model aliases after team creation by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33047 * chore(deps): bump pillow to 12.3.0 to resolve osv-scan CVEs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33093 * feat(mcp): mint gateway-bound envelope at the token endpoint for dcr_bridge oauth_delegate by @tin-berri in https://github.com/BerriAI/litellm/pull/32828 * fix(mcp): surface rejected delegate-auth upstream tokens as connect-time 401 by @tin-berri in https://github.com/BerriAI/litellm/pull/32741 * fix(proxy): track unauthenticated pass-through requests in spend logs by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32410 * feat(lasso): send source.type for Used By attribution by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33090 * fix(responses): continue MCP gateway tool turns from the final response and surface failures by @thibault-linktree in https://github.com/BerriAI/litellm/pull/33025 * fix(responses): continue MCP gateway tool turns from the final response and surface failures by @tin-berri in https://github.com/BerriAI/litellm/pull/33099 * fix(completion): forward aws credential kwargs into litellm_params so the responses bridge keeps WIF auth by @mateo-berri in https://github.com/BerriAI/litellm/pull/32956 * fix(ui): respect litellm_key_header_name in BYOK credential save and workflow runs fetches by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33103 * refactor(ui): standardize debounce waits behind shared DEBOUNCE_WAIT_MS constant by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33040 * feat(ui): rebuild the Virtual Keys table on the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32991 * fix: redact async complete streaming response for custom callbacks by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33106 * build(ui): bump @tanstack/react-pacer from 0.2.0 to 0.22.1 by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33041 * fix(ui): address Virtual Keys redesign review nits by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33112 * fix(openai/responses): clamp max_output_tokens below API minimum by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33098 * fix(prometheus): read v3 rate limiter remaining values for per-key model gauges by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33119 * fix(ui): drop w-full from page-content wrappers to remove 32px horizontal overflow by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33118 * refactor(ui): migrate straightforward value debounces to react-pacer by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33042 * feat(mcp): interactive SSO sign-in for dcr_bridge oauth_delegate DCR clients by @tin-berri in https://github.com/BerriAI/litellm/pull/32946 * test(proxy): add regression tests for management_endpoints edge cases by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32976 * fix(auto-router): correct Responses API tool_choice shape and propagate alias litellm_params by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/32974 * fix(ui): render the sidebar scrollbar with shadcn ScrollArea by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33124 * refactor(ui): migrate callback debounce sites to react-pacer with regression tests by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33043 * chore: add CODEOWNERS for ui and proxy UI build artifacts by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33131 * feat(mcp): client-held refresh envelope for the dcr_bridge oauth_delegate flow by @tin-berri in https://github.com/BerriAI/litellm/pull/32980 * feat(ui): rebuild the Teams table on the shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33128 * fix(mcp): relay upstream OAuth token and DCR rejections instead of a generic 500 by @tin-berri in https://github.com/BerriAI/litellm/pull/33113 * fix(keys): persist key_type so the UI shows correct key scope instead of "All Proxy Models" by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33115 * feat(router): opt-in session affinity for complexity router by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/33126 * feat(prometheus): expose video duration and image count consumption metrics by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33138 * test(e2e): otel trace completeness on /chat/completions by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33132 * fix(sso): paginate through all pages when fetching service principal group assignments by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33149 * test(e2e): otel trace completeness on /v1/messages by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33133 * feat(ui): add adaptive routing settings to Auto-Router v2 by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/33146 * refactor(mcp): extract the dcr_bridge token flow into bridge_token_flow.py by @tin-berri in https://github.com/BerriAI/litellm/pull/33141 * chore: bump litellm 1.93.0 -> 1.94.0, litellm-enterprise 0.1.49 -> 0.1.50, litellm-proxy-extras 0.4.76 -> 0.4.77 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33229 * fix(proxy): route master key to team-scoped models by @kunal2002 in https://github.com/BerriAI/litellm/pull/32926 * chore(deps): pin httplib2 and setuptools transitive floors by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33233 * feat(ui): left-anchor the Create Key and Create Team CTAs by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33248 * fix(anthropic/passthrough): drop incompatible temperature when downgrading adaptive thinking for pre-4.6 models by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33244 * fix(guardrails): run apply_guardrail-style model-level pre_call guardrails at deployment hook by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33136 * fix(proxy)!: enforce user budget on team keys (read-time + reservation) with UI opt-out by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32005 * fix(e2e): bound spend-log snapshots to a /spend/logs/v2 window by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33265 * test(e2e): cover key rpm/tpm rate limiting, window reset, and pacing headers by @mateo-berri in https://github.com/BerriAI/litellm/pull/32914 * fix(anthropic): use native output capability by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/33235 * fix(ci): retry setup-uv installs to survive transient manifest fetch failures by @mateo-berri in https://github.com/BerriAI/litellm/pull/33279 * fix(proxy): never log raw virtual keys in key insertion debug output by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33268 * fix(bedrock_mantle): route xai.grok-4.3 via /openai/v1 frontier path by @marty-sullivan in https://github.com/BerriAI/litellm/pull/33027 * feat(pricing): add gemini-omni-flash-preview with video output token pricing by @mateo-berri in https://github.com/BerriAI/litellm/pull/33274 * fix(auth): scope the JWT enterprise gate to actual JWTs by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33296 * fix(s3): sanitize slashes in response-id-derived object key file name by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33271 * refactor(ui): migrate guardrails table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33303 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33308 * feat(guardrails): streaming text transformation in generic_guardrail_api by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33110 * test(e2e): cover model-aware mid-conversation system handling on Bedrock Invoke /v1/messages by @mateo-berri in https://github.com/BerriAI/litellm/pull/32963 * test(claude_code): move the Claude Code compatibility matrix under tests/e2e by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/32548 * chore(ci): sync litellm_internal_staging into daily OSS branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33337 * feat(bedrock guardrails): add resource-less InvokeGuardrailChecks (detect-only) mode by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33299 * Revert "chore(ci): sync litellm_internal_staging into daily OSS branch" by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33339 * fix(websearch): intercept web search on the Responses API by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33129 * fix(anthropic-adapter): drop empty content_block_delta events by @mateo-berri in https://github.com/BerriAI/litellm/pull/33315 * fix(mcp): persist discovered OAuth endpoints and keep last known good on failed re-discovery by @tin-berri in https://github.com/BerriAI/litellm/pull/33286 * test(e2e): otel trace completeness on streaming chat, messages, and responses (LIT-3787) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33234 * feat(router): resolve auto-router routing plugins from proxy YAML config by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/33251 * test(e2e): failed request error span carries the full untruncated message and status (LIT-4179) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33304 * refactor(ui): migrate tags table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33314 * fix(cli): surface actionable CLI SSO errors when CLI and proxy versions skew by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33309 * feat(bedrock_mantle): add GPT-5.6 sol/terra/luna to model cost map by @mateo-berri in https://github.com/BerriAI/litellm/pull/33412 * chore(codeowners): exempt generated schema.d.ts from UI ownership by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33411 * feat(proxy): push-based OTLP billable-request metering for enterprise deployments by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31592 * fix(mcp): cap per-user OAuth token cache TTL at the token's own lifetime by @tin-berri in https://github.com/BerriAI/litellm/pull/33346 * feat(ui): move Caching out of Experimental into Developer Tools by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33432 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33425 * chore(ci): merge daily internal staging branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33335 * feat(guardrails): add Compresr guardrail for query-aware context compression by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33295 * fix(logging): preserve callback order in get_combined_callback_list by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33005 * fix(logging): redact assistant tool call arguments in spend logs by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33111 * fix(anthropic): honor messages request timeout by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33418 * fix(llm_guard): apply sanitized prompt returned by moderation API to request by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33331 * fix(logging): stop pinning large request payloads past request end by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33455 * feat(guardrails): forward optional metadata on POST /guardrails/apply_guardrail by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33067 * build: raise requires-python cap to <3.15 so Python 3.14 installs current releases by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33438 * feat(ui): add reusable BetaBadge and use it for Projects sidebar item by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33449 * fix(mcp): discover missing OAuth scopes and token_url when authorization_url is set manually by @tin-berri in https://github.com/BerriAI/litellm/pull/33317 * feat(ui): show exact license expiration date in usage cards by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33478 * test(claude_code): rename misleading REPO_ROOT to SUITE_ROOT in test_v0_layout by @mateo-berri in https://github.com/BerriAI/litellm/pull/33472 * build(deps): update ddtrace to the 4.x line by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33484 * fix(complexity_router): return empty dict from _classifier_call_metadata when metadata is absent by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33452 * fix(ui/chat): resolve chat routes at render time so navigation works under server_root_path by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33446 * fix(key management): enforce minimum custom key length and mask short keys in key_name by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33462 * chore(ui): remove unmounted UsageIndicator and the Hide Usage Indicator flag by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33482 * test(e2e/claude_code): add passthrough matrix row for the big-3 clouds and Anthropic API by @mateo-berri in https://github.com/BerriAI/litellm/pull/33473 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33491 * fix(ui): stop sending the complexity-router pseudo-model to /health/test_connection by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/33498 * feat(cli): add lite up/down to ambiently route Claude Code through the proxy by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/33231 * feat(complexity_router): enable session_affinity by default by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33500 * fix(anthropic): stop 500 on combined thinking+signature streaming chunk by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33505 * feat(autoroute): prompt for semantic keywords per tier in configure wizard by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33508 * fix(cli/anthropic): unblock lite autoroute proxy deps, adaptive thinking, and thinking+signature streaming by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33507 * test(ocr): use mistral-document-ai-2512 in azure_ai OCR tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/33489 * fix(guardrails): show YAML-defined guardrails in the Guardrail Monitor by @yuneng-berri in https://github.com/BerriAI/litellm/pull/32853 * refactor(ui): migrate policies, deleted keys, deleted teams, budgets, and search tools tables onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33357 * refactor(ui): migrate vector stores, prompts, and skills tables onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33343 * test(e2e): datadog log delivery for successful chat, messages, and responses (LIT-4447) by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33415 * fix(cli): make CLI output ASCII-only so it doesn't crash legacy Windows consoles by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33465 * fix: remove dead user-cache lookup with None key in spend-update path by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33555 * feat(helm): add per-component PodDisruptionBudget and topologySpreadConstraints to componentized chart by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33430 * fix(e2e/claude_code): unblock stage collection, align proxy env names, register compat models by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33433 * fix(mcp): index authed request-time tools missing from the semantic filter startup index by @tin-berri in https://github.com/BerriAI/litellm/pull/33318 * fix(streaming): use provider-reported usage cost for OpenRouter streams by @mateo-berri in https://github.com/BerriAI/litellm/pull/32255 * feat(mcp): issuer-anchored OAuth discovery (RFC 8414 §3.3) to close the authorization-server mix-up by @tin-berri in https://github.com/BerriAI/litellm/pull/33450 * feat(logging): add user and team level spend and budget to StandardLoggingPayload metadata by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33459 * fix(router): cast model_info cost values to float in _set_model_group_info by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33556 * chore(e2e): establish litellm_e2e_staging integration line by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33502 * fix(ui): navigate to /ui/login/ with trailing slash via hard navigation by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33561 * feat(logging): add structured budget fields to budget rejection failure logs by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33460 * fix(streaming): surface upstream connection resets instead of empty 200 streams by @mateo-berri in https://github.com/BerriAI/litellm/pull/33222 * fix(proxy_cli): reap orphaned prisma query-engine processes when a worker dies by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33424 * test(reasoning_effort_grid): enable azure fable-5 and opus-4-8 grid cells by @mateo-berri in https://github.com/BerriAI/litellm/pull/33485 * build(deps): bump uvicorn lock to 0.51.0 so worker health-check and jitter flags take effect by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33574 * fix(proxy): coerce default_internal_user_params.max_budget to float on config load by @yassin-berriai in https://github.com/BerriAI/litellm/pull/32434 * fix(router): honor per-request routing_strategy from key/team router_settings by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33429 * fix(redis): honor ssl value instead of key presence when building async connection pool by @yassin-berriai in https://github.com/BerriAI/litellm/pull/32590 * fix(langfuse_otel): build per-request OTLP exporter from key and team dynamic Langfuse credentials by @yassin-berriai in https://github.com/BerriAI/litellm/pull/32437 * ci: run zizmor and proxy-db unit tests on PRs targeting litellm_ branches by @mateo-berri in https://github.com/BerriAI/litellm/pull/33568 * fix(router): apply team/key enable_tag_filtering to tag routing by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33436 * feat(proxy): add disable_auto_add_proxy_admin_to_teams flag by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33563 * fix(proxy): stop stale auth cache re-publish to Redis so key updates propagate across replicas by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33565 * feat(e2e): emit structured E2E_RESULT lines for package status history by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33578 * chore: bump litellm-enterprise 0.1.50 -> 0.1.51, litellm-proxy-extras 0.4.77 -> 0.4.78 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33571 * fix(docker): restore litellm-proxy-extras source dir in runtime images by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33592 * feat(ui): require embedding model for semantic auto router by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33313 * feat(scim): ingest and round-trip SCIM entitlements and roles user attributes by @tin-berri in https://github.com/BerriAI/litellm/pull/33587 * refactor(ui): migrate 5 simple tables onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33548 * fix(model_armor): restore reference attachments via skip_unscannable_attachments and remove the attachment count cap by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33554 * fix(mcp): keep the MCP reference intact when the semantic filter narrows tools by @tin-berri in https://github.com/BerriAI/litellm/pull/33584 * fix(sso): stop enforcing UI session budget on CLI login tokens by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33312 * test: e2e staging leftovers by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33613 * test(e2e/claude_code): add GPT-5.6 Sol/Terra/Luna columns for OpenAI, Azure OpenAI, and Bedrock Mantle by @mateo-berri in https://github.com/BerriAI/litellm/pull/33474 * test(e2e): otel streaming spans record a real ttft below span duration by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33588 * fix(mcp): make the preemptive-401 OAuth challenge decision mode-aware by @tin-berri in https://github.com/BerriAI/litellm/pull/33586 * fix(ui): show all teams in policy attachment form for admins by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33628 * refactor(ui): migrate AI Hub, public hub, and MCP Toolsets tables onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33629 * test(e2e): datadog log delivery for streamed routes, read back from the real datadog api by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33566 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33640 * fix(vertex_ai): surface Gemini grounding toolUsePromptTokenCount in Usage by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33533 * test(e2e): harness fixes for stage job green (skips + router/UI/budget) by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33634 * fix(router): resolve prompt cache minimum per model instead of a flat 1024 by @tin-berri in https://github.com/BerriAI/litellm/pull/33637 * fix(logging): classify async anthropic_messages and generate_content as async by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33589 * fix(ui): remove Chat item from dashboard leftnav by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33647 * fix(router): tag-aware pre-routing strategy selection for shared model_name by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33691 * fix(proxy): enforce max_parallel_requests as a per-slot concurrency gauge by @yassin-berriai in https://github.com/BerriAI/litellm/pull/32441 * fix(proxy): stop treating upstream model body field as a LiteLLM model on auth-enforced pass-through routes by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33710 * fix(mcp): expand toolset grants in shared permission primitives so tools/call honors them by @tin-berri in https://github.com/BerriAI/litellm/pull/33612 * feat(complexity-router): user-triggered escalation keywords by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33656 * fix(fireworks_ai): bill prompt-cache hits at cache_read rate by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33714 * fix(pricing): mark realtime-only gpt-realtime models as mode realtime by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33728 * fix(rag): track LLM completion usage and spend for /v1/rag/query by @yassin-berriai in https://github.com/BerriAI/litellm/pull/32438 * feat(anthropic): add enable_anthropic_prompt_caching for automatic cache_control injection by @tin-berri in https://github.com/BerriAI/litellm/pull/33573 * fix(anthropic): self-heal on missing thinking-signature errors from Bedrock/Vertex by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33719 * fix(proxy): resolve router_settings.plugins dotted paths and load plugins from installed packages by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33644 * test(e2e): budget refusals are 429 for bare keys and team caps block every team key by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33632 * feat(router): add router plugin reference catalog by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33746 * test(e2e): assert an org budget block is a 429 naming the organization by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33638 * fix(proxy): bill partial streamed spend when the client disconnects mid-stream by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33736 * test(e2e): delete unreferenced Grafana panel docs by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33743 * docs(tests/e2e): align skip-vs-fail docs with the hard-fail contract and scope the no-unit-tests rule by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33755 * refactor(e2e): replace bespoke result reporter with standard JUnit report by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33758 * test(e2e): user budget across keys and team member budget isolation by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33745 * refactor(e2e): remove bob_the_builder; drive remediation from a Grafana alert (provisioned outside the repo) by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33749 * feat(mcp): per-server outcomes for aggregate tools/list and truthful single-server REST statuses by @tin-berri in https://github.com/BerriAI/litellm/pull/33153 * test(e2e): mcp suite for key-without-access denial by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33752 * chore(ci): merge oss branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33784 * chore(ci): merge oss branch - July 17th by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33793 * fix(ui): migrate tag deletion to shared DeleteResourceModal by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33795 * build(rust): raise pyo3 to 0.29 so the native bridge compiles on Python 3.14 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33798 * chore(guardrails): remove docstring from singulr module for consistency by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33800 * fix(ui): stop credential edit from persisting the masked api key by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33797 * build(deps): allow redisvl, pypdf, and openapi-core on Python 3.14 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33801 * test(proxy): make streaming-cancel mocks awaitable for the disconnect slot release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33802 * test(e2e): a member's team budget cuts off only that member's key by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33718 * test(e2e): a user's max_budget follows the person across personal and team keys by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33762 * test(e2e): skip flaky OpenAI GPT cells; raise multi-window max_tokens by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33799 * chore: remove accidentally committed dist tarball and ignore dist/ by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33805 * fix(passthrough): stop classifying plain 'predict'/'search' paths as Vertex by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33658 * build(deps): bump mcp lock to 1.28.1 to clear image-scan findings by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33803 * test(pricing): pin the realtime mode assertion to the bundled cost map by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33806 * fix(proxy): derive session id from Anthropic metadata.user_id for session affinity by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33723 * test(e2e): budget reset diagonal for team, org, user, and #32005 team-member keys by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/33771 * fix(proxy): source /v1/models token limits from the cost map instead of Router.get_model_group_info by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33721 * fix(fireworks_ai): correct glm-5p2 prompt-cache read price to $0.14/1M by @tin-berri in https://github.com/BerriAI/litellm/pull/33796 * feat(proxy): add x-litellm-model-name response header with deployment model string by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33698 * feat: add Straiker guardrail integration by @yucheng-berri in https://github.com/BerriAI/litellm/pull/33781 * fix(vertex_ai): exclude Gemini Google Search grounding tokens from input token billing by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33742 * feat(fireworks_ai): map litellm session id to x-session-affinity header for prompt caching by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33717 * feat(ui): configure Anthropic automatic prompt caching from the Admin UI by @tin-berri in https://github.com/BerriAI/litellm/pull/33581 * fix(router): enforce context-window pre-call checks for Responses API input by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33706 * fix(otel): restore proxy-level error.* attributes on v2 failure spans (LIT-4179) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33664 * fix(mcp): persist config.yaml DCR clients in a server-scoped store so refresh survives token expiry by @tin-berri in https://github.com/BerriAI/litellm/pull/33768 * refactor(ui): consolidate Add/Edit credential modals into one CredentialModal by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/32572 * feat(mcp): add ID-JAG (identity assertion authorization grant) support for MCP egress by @yassin-berriai in https://github.com/BerriAI/litellm/pull/31516 * refactor(ui): migrate policy attachments table onto shared DataTable by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33827 * docs(litellm-rust): add provider coding standards by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33833 * test(e2e): rename Gateway to ProxyClient and expose it as a session-scoped pytest fixture by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33750 * feat(messages): route Azure Anthropic /messages through Rust behind rust:true by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33616 * test(e2e): add Locust throughput load test that runs last by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33748 * fix(proxy): resolve team wildcard credentials for vector store files by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/33649 * refactor(e2e): fold claude_code HTTP probes onto shared ProxyClient methods by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33760 * test(e2e): harden stage flakes for batches, UI, and MCP by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33831 * fix(e2e): migrate load suite from e2e_gateway to ProxyClient by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/33839 * chore(e2e): remove tests/e2e/docker-compose.yml by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33837 * test(e2e): cover /v1/responses openai basic nonstream and stream by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33830 * test(e2e): cover /v1/responses openai cost_logged and tool_use by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33835 * test(e2e): cover /v1/responses OpenAI vision and Anthropic basic by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33838 * test(e2e): spendlog cost for streaming /v1/messages via responses bridge by @yassin-berriai in https://github.com/BerriAI/litellm/pull/33753 * fix(docker): bake prisma CLI and engines at a fixed path so fresh-DB migrations work for any uid offline by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33853 * feat(chat-ui): add personal Logs view scoped to the current user by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33829 * chore: bump litellm-proxy-extras 0.4.78 -> 0.4.79 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33855 * docs(litellm-rust): require the official Rust Style Guide in agent rules by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33867 * fix(router): treat malformed configured token limits as absent on /v1/models by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33864 * chore: rebuild admin UI bundle for the rc release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33857 * docs(rust): add provider abstraction standards by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33865 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/33868 * chore(release): backport #33929 to rc/1.94.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34033 * chore(release): backport #33810, #33733 to rc/1.94.0 and bump litellm-proxy-extras to 0.4.79.post1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34215 * chore(ui): rebuild Next.js bundle on rc/1.94.0 so the Cost Optimization page ships by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34216 * chore(release): backport auth, CLI SSO and guardrail fixes to rc/1.94.0 and refresh flagged dependencies by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34640 * chore(release): backport #33899, #33978, #34582, #34675 to rc/1.94.0 and bump litellm-proxy-extras to 0.4.79.post2 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34855 * fix(ui): backport cache leakage card layout fix to rc/1.94.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34964 * fix(ui): add missing cost-optimization page description on rc/1.94.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34967 * feat(ui): mark Cost Optimization as beta in the left nav (#34984) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34987 * chore: rebuild Admin UI bundle for v1.94.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34982 * fix(cost-optimization): backport the savings chart axis fix and methodology popovers to rc/1.94.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34994 * chore: rebuild Admin UI bundle for rc/1.94.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/34995 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.93.0...v1.94.0