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