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