v1.94.0rc1 - Router Plugins, MCP Client-Held Credentials & Shared DataTable UI
Deploy this versionโ
- Docker
- Pip
docker run \
-e STORE_MODEL_IN_DB=True \
-p 4000:4000 \
docker.litellm.ai/berriai/litellm:1.94.0-rc.1
pip install litellm==1.94.0rc1
Key Highlightsโ
- Breaking change: user budgets now apply on team keys by default - a user's personal
max_budgetis now enforced whenever they call through a team key, so it stacks with the team and team-member budgets instead of being skipped as before. If you relied on personal budgets being ignored on team keys, setgeneral_settings.skip_user_budget_on_team_key: trueto restore the previous behavior - PR #32005. - Router plugin pipeline and Auto-Router v2 - a new
Router(plugins=[...])extension point, resolvable from proxy YAML config, plus soft-floor adaptive mode, opt-in (now default) session affinity, multi-model tier random-pick, and user-triggered escalation keywords for the complexity router. - MCP client-held credentials mature - interactive SSO sign-in for
dcr_bridgeoauth_delegateDCR clients, client-held refresh envelopes, gateway-bound envelopes minted at the token endpoint, issuer-anchored OAuth discovery (RFC 8414 ยง3.3) to close the authorization-server mix-up, and ID-JAG support for MCP egress. - Shared DataTable dashboard migration - Virtual Keys, Teams, Guardrails, Tags, Vector Stores, Prompts, Skills, AI Hub, MCP Toolsets, and Policy Attachments all move onto the shared composable DataTable.
- Python 3.14 support - the
requires-pythoncap moves to<3.15, pyo3 rises to 0.29 so the native Rust bridge compiles, and redisvl / pypdf / openapi-core are unblocked on 3.14. - Per-model prompt cache minimums -
prompt_cache_min_tokensis now recorded across the Anthropic and Bedrock Claude cost map entries, and the router resolves the real per-model minimum instead of a flat 1024.
New Models / Updated Modelsโ
New Model Support (5 new pricing entries)โ
| Provider | Model | Context Window | Input ($/1M tokens) | Output ($/1M tokens) | Features |
|---|---|---|---|---|---|
| Google AI Studio | gemini/gemini-omni-flash-preview | 1.05M | $1.50 | $9.00 (video output $17.50) | Reasoning, vision, audio input, video input/output |
| Google Vertex AI | gemini-omni-flash-preview | 1.05M | $1.50 | $9.00 (video output $17.50) | Reasoning, vision, audio input, video input/output |
| Amazon Bedrock (Mantle) | bedrock_mantle/openai.gpt-5.6-sol | 272K | $5.50 | $33.00 | Reasoning, vision, function calling, prompt caching, Responses API |
| Amazon Bedrock (Mantle) | bedrock_mantle/openai.gpt-5.6-terra | 272K | $2.75 | $16.50 | Reasoning, vision, function calling, prompt caching, Responses API |
| Amazon Bedrock (Mantle) | bedrock_mantle/openai.gpt-5.6-luna | 272K | $1.10 | $6.60 | Reasoning, vision, function calling, prompt caching, Responses API |
Beyond the new entries, this release records prompt_cache_min_tokens on the Anthropic and Bedrock Claude families (512-4096 depending on the model), marks the gpt-realtime family as mode: realtime rather than chat, flags Gemini image-generation models as non-reasoning, and corrects the Fireworks glm-5p2 prompt-cache read price.
Featuresโ
- Anthropic
- Amazon Bedrock
- Google AI Studio / Vertex AI
- Add
gemini-omni-flash-previewwith video output token pricing - PR #33274
- Add
- Fireworks AI
- Map the LiteLLM session id to the
x-session-affinityheader for prompt caching - PR #33717
- Map the LiteLLM session id to the
Bug Fixesโ
- Anthropic
- Emit
message_startexactly once in the Responses stream adapter - PR #32667 - Translate raw adaptive thinking for pre-4.6 models on Chat Completions and Bedrock Converse - PR #32944
- Drop the incompatible
temperatureparam when downgrading adaptive thinking for pre-4.6 models on pass-through - PR #33244 - Stop a 500 on a combined thinking-plus-signature streaming chunk - PR #33505
- Self-heal on missing thinking-signature errors from Bedrock and Vertex - PR #33719
- Drop empty
content_block_deltaevents in the Anthropic adapter - PR #33315 - Honor the messages request timeout - PR #33418
- Unblock
lite autorouteproxy deps, adaptive thinking, and thinking-plus-signature streaming in the CLI - PR #33507
- Emit
- Google Vertex AI
- Amazon Bedrock
- Forward AWS credential kwargs into
litellm_paramsso the responses bridge keeps WIF auth - PR #32956
- Forward AWS credential kwargs into
- Fireworks AI
- OpenAI
- Mark realtime-only
gpt-realtimemodels asmode: realtime- PR #33728
- Mark realtime-only
LLM API Endpointsโ
Featuresโ
- General
- Add an
x-litellm-model-nameresponse header carrying the deployment model string - PR #33698
- Add an
Bugsโ
- Responses API
- Pass-through
- General
Management Endpoints / UIโ
Featuresโ
- UI (shared DataTable migration)
- Rebuild the Virtual Keys and Teams tables on the shared DataTable - PR #32991, PR #33128
- Migrate the guardrails, tags, and policy attachments tables onto the shared DataTable - PR #33303, PR #33314, PR #33827
- Migrate the vector stores, prompts, and skills tables, plus five more simple tables - PR #33343, PR #33548
- Migrate the AI Hub, public hub, and MCP Toolsets tables - PR #33629
- UI
- Convert the endpoint usage charts to shadcn/recharts - PR #32723
- Adopt
openapi-react-query($api) and convertuseCustomers- PR #32949 - Working Test Connection for the complexity auto router, and adaptive routing settings in Auto-Router v2 - PR #32950, PR #33146
- Require an embedding model for the semantic auto router - PR #33313
- Configure Anthropic automatic prompt caching from the Admin UI - PR #33581
- Show the exact license expiration date in the usage cards - PR #33478
- Move Caching out of Experimental into Developer Tools - PR #33432
- Add a reusable
BetaBadgeand use it for the Projects sidebar item - PR #33449 - Add a personal Logs view scoped to the current user in the chat UI - PR #33829
- Left-anchor the Create Key and Create Team CTAs - PR #33248
- Consolidate the Add/Edit credential modals into one
CredentialModal- PR #32572 - Colocate the mcp-servers view while keeping the shared
mcp_toolssurface - PR #32968 - Standardize debounce waits behind a shared
DEBOUNCE_WAIT_MSconstant and migrate value and callback debounces to react-pacer - PR #33040, PR #33042, PR #33043, PR #33041 - Remove the unmounted
UsageIndicatorand the Hide Usage Indicator flag - PR #33482
- Auth & Management
Bugsโ
- UI
- Address Virtual Keys redesign review nits - PR #33112
- Drop
w-fullfrom page-content wrappers to remove 32px horizontal overflow - PR #33118 - Render the sidebar scrollbar with the shadcn
ScrollArea- PR #33124 - Show and allow editing team model aliases after team creation - PR #33047
- Respect
litellm_key_header_namein BYOK credential save and workflow-run fetches - PR #33103 - Stop credential edit from persisting the masked API key - PR #33797
- Resolve chat routes at render time so navigation works under
server_root_path- PR #33446 - Navigate to
/ui/login/with a trailing slash via hard navigation - PR #33561 - Show all teams in the policy attachment form for admins - PR #33628
- Remove the Chat item from the dashboard left nav - PR #33647
- Migrate tag deletion to the shared
DeleteResourceModal- PR #33795 - Stop sending the complexity-router pseudo-model to
/health/test_connection- PR #33498 - Filter embedding models out of the complexity tab dropdowns, require all tiers, and validate inline - PR #32978
- Auth & Management
- Route the master key to team-scoped models - PR #32926
- Stop unrecognized model namespaces slipping through provider wildcard keys - PR #32979
- Persist
key_typeso the UI shows the correct key scope instead of "All Proxy Models" - PR #33115 - Enforce a minimum custom key length and mask short keys in
key_name- PR #33462 - Paginate through all pages when fetching SSO service principal group assignments - PR #33149
- Scope the JWT enterprise gate to actual JWTs - PR #33296
- Stop enforcing the UI session budget on CLI login tokens - PR #33312
- Surface actionable CLI SSO errors when the CLI and proxy versions skew - PR #33309
- Resolve team wildcard credentials for vector store files - PR #33649
- Make CLI output ASCII-only so it does not crash legacy Windows consoles - PR #33465
AI Integrationsโ
Loggingโ
- OpenTelemetry
- Langfuse
- Build a per-request OTLP exporter from key- and team-level dynamic Langfuse credentials - PR #32437
- Prometheus
- S3
- Sanitize slashes in the response-id-derived object key file name - PR #33271
- General
- Add user- and team-level spend and budget to
StandardLoggingPayloadmetadata - PR #33459 - Add structured budget fields to budget rejection failure logs - PR #33460
- Preserve callback order in
get_combined_callback_list- PR #33005 - Classify async
anthropic_messagesandgenerate_contentas async - PR #33589 - Redact the async complete streaming response for custom callbacks - PR #33106
- Redact assistant tool call arguments in spend logs - PR #33111
- Never log raw virtual keys in key insertion debug output - PR #33268
- Add user- and team-level spend and budget to
Guardrailsโ
- Straiker
- Add the Straiker guardrail integration - PR #33781
- Compresr
- Add the Compresr guardrail for query-aware context compression - PR #33295
- Bedrock Guardrails
- Add a resource-less
InvokeGuardrailChecksdetect-only mode - PR #33299
- Add a resource-less
- Model Armor
- Restore reference attachments via
skip_unscannable_attachmentsand remove the attachment count cap - PR #33554
- Restore reference attachments via
- Lasso
- Send
source.typefor Used By attribution - PR #33090
- Send
- LLM Guard
- Apply the sanitized prompt returned by the moderation API to the request - PR #33331
- General
- Streaming text transformation in
generic_guardrail_api- PR #33110 - Forward optional metadata on
POST /guardrails/apply_guardrail- PR #33067 - Run
apply_guardrail-style model-levelpre_callguardrails at the deployment hook - PR #33136 - Show YAML-defined guardrails in the Guardrail Monitor - PR #32853
- Walk
custom_tool_call_outputitems in the shared content helpers - PR #32969 - Use
StandardLoggingGuardrailInformationin the xecguard logging hook, and sanitize the scan result before recording it - PR #32911, PR #32935 - Remove the stray docstring from the singulr module for consistency - PR #33800
- Streaming text transformation in
Spend Tracking, Budgets and Rate Limitingโ
- Budgets
- Rate Limiting
- Enforce
max_parallel_requestsas a per-slot concurrency gauge - PR #32441
- Enforce
- Cost Tracking
- Use the provider-reported usage cost for OpenRouter streams - PR #32255
- Track cost for unmanaged Bedrock batches and generalize the flag - PR #32315
- Track unauthenticated pass-through requests in spend logs - PR #32410
- Track LLM completion usage and spend for
/v1/rag/query- PR #32438 - Bill partial streamed spend when the client disconnects mid-stream - PR #33736
- Remove the dead user-cache lookup with a
Nonekey in the spend-update path - PR #33555
MCP Gatewayโ
- Client-Forwarded Credentials (
dcr_bridge/oauth_delegate)- Interactive SSO sign-in for
dcr_bridgeoauth_delegateDCR clients - PR #32946 - Mint a gateway-bound envelope at the token endpoint, and add a client-held refresh envelope for the flow - PR #32828, PR #32980
- Extract the
dcr_bridgetoken flow intobridge_token_flow.py- PR #33141 - Persist
config.yamlDCR clients in a server-scoped store so refresh survives token expiry - PR #33768 - Surface rejected delegate-auth upstream tokens as a connect-time 401, and relay upstream OAuth token and DCR rejections instead of a generic 500 - PR #32741, PR #33113
- Make the preemptive-401 OAuth challenge decision mode-aware - PR #33586
- Interactive SSO sign-in for
- OAuth & Identity
- Issuer-anchored OAuth discovery (RFC 8414 ยง3.3) to close the authorization-server mix-up - PR #33450
- Add ID-JAG (identity assertion authorization grant) support for MCP egress - PR #31516
- Persist discovered OAuth endpoints and keep the last known good set on a failed re-discovery - PR #33286
- Discover missing OAuth scopes and
token_urlwhenauthorization_urlis set manually - PR #33317 - Cap the per-user OAuth token cache TTL at the token's own lifetime - PR #33346
- Tools & Permissions
- Per-server outcomes for aggregate
tools/listand truthful single-server REST statuses - PR #33153 - Expand toolset grants in the shared permission primitives so
tools/callhonors them - PR #33612 - Index authed request-time tools missing from the semantic filter startup index - PR #33318
- Keep the MCP reference intact when the semantic filter narrows tools - PR #33584
- Per-server outcomes for aggregate
Performance / Loadbalancing / Reliability improvementsโ
- Routing
- Add a
Router(plugins=[...])routing-plugin pipeline, resolve auto-router routing plugins from proxy YAML config, and resolverouter_settings.pluginsdotted paths from installed packages - PR #32972, PR #33251, PR #33644 - Soft-floor adaptive mode and random-pick multi-model tiers for the complexity router - PR #32947, PR #32967
- Opt-in session affinity for the complexity router, then enabled by default, with the session id derived from Anthropic
metadata.user_id- PR #33126, PR #33500, PR #33723 - User-triggered escalation keywords, and per-tier semantic keyword prompts in the configure wizard - PR #33656, PR #33508
- Honor a per-request
routing_strategyfrom key/teamrouter_settings, and apply team/keyenable_tag_filteringto tag routing - PR #33429, PR #33436 - Tag-aware pre-routing strategy selection for a shared
model_name- PR #33691 - Resolve the prompt cache minimum per model instead of a flat 1024 - PR #33637
- Enforce context-window pre-call checks for Responses API input - PR #33706
- Correct the Responses API
tool_choiceshape and propagate aliaslitellm_paramsin the auto router - PR #32974 - Return an empty dict from
_classifier_call_metadatawhen metadata is absent - PR #33452 - Cast
model_infocost values to float in_set_model_group_info- PR #33556
- Add a
- Reliability
- Route Azure Anthropic
/messagesthrough Rust behindrust:true- PR #33616 - Stop pinning large request payloads past request end - PR #33455
- Stop a stale auth cache re-publish to Redis so key updates propagate across replicas - PR #33565
- Honor the
sslvalue instead of key presence when building the async Redis connection pool - PR #32590 - Reap orphaned Prisma query-engine processes when a worker dies - PR #33424
- Route Azure Anthropic
- Deployment
Documentation Updatesโ
- Add a QA runbook section to the PR template - PR #32965
- Add a router plugin reference catalog - PR #33746
- Align the e2e skip-vs-fail docs with the hard-fail contract and scope the no-unit-tests rule - PR #33755
- Add provider coding standards and provider abstraction standards for litellm-rust, and require the official Rust Style Guide in the agent rules - PR #33833, PR #33865, PR #33867
PR roll-up by ownership areaโ
PRs by ownership area (total: 236)
- Other (CI / chore / tests / build / version bumps): 69
- UI: 39
- Performance / Routing / Reliability: 26
- Models & Providers: 21
- MCP: 17
- Guardrails: 14
- Logging: 13
- Auth & Management: 13
- Spend / Budgets / Rate Limits: 9
- LLM API Endpoints: 9
- Docs: 6
End-to-End Testingโ
We are investing heavily in end-to-end testing to cut regressions and make LiteLLM more stable release over release. Every version is now exercised by a live suite that runs against a real deployed proxy and hits real provider endpoints, not mocks, so the behavior we validate is the behavior you get in production. Our goal is to reach 95% coverage this week and hold that bar going forward, so that fewer regressions ever reach a release.
This run executed 264 tests over roughly 58 minutes against a live gateway spanning Anthropic, Azure, Azure OpenAI, Amazon Bedrock (Converse and Invoke), Google Vertex AI, and OpenAI.
| Result | Count |
|---|---|
| Passed | 263 |
| Failed | 1 |
Coverage spans access control, batches, the Claude Code surface (streaming and non-streaming messaging, tool use, vision, thinking, prompt caching, structured outputs, PDF input, and web search), the Realtime API, embeddings, rerank, image generation, OCR, the Responses API and /v1/messages, logging into Datadog, OpenTelemetry, and Prometheus, key/team/user/organization management, the MCP gateway, budgets, rate limits, spend tracking, and routing. Against our internal coverage registry the suite currently exercises 43.0% of tracked cells (168/391), with quota management already at 95.0% and core LLM endpoints at 72.4%.
The one failure, test_sustains_throughput_slo_under_load, is a load-generation scenario that intentionally pushes the proxy past its configured throughput ceiling. It is unrelated to functional correctness and is expected to trip under that traffic.
The full run is attached here: v1.94.0rc1 e2e report.
New Contributorsโ
- @Napuh made their first contribution in PR #32667
Full Changelogโ
https://github.com/BerriAI/litellm/compare/v1.93.0-rc.1...v1.94.0-rc.1