版本发布 8
## 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.97.0-dev.2 ``` **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.97.0-dev.2/cosign.pub \ ghcr.io/berriai/litellm:v1.97.0-dev.2 ``` 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): add role capability gating, migrate Tool Policies route by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35812 * refactor(ui): inject the fetch client's base url instead of reading it at import by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35802 * chore: remove unused .flake8 config and flake8 dev dependency by @mateo-berri in https://github.com/BerriAI/litellm/pull/35888 * chore: stop advising pre-commit and bootstrap by @mateo-berri in https://github.com/BerriAI/litellm/pull/35884 * fix(auth): name enable_jwt_auth when a JWT-shaped key is rejected by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35831 * feat(auto-router): make reminder marker pair configurable by @akapur99 in https://github.com/BerriAI/litellm/pull/35874 * fix(UI): update anthropic model presets by @tin-berri in https://github.com/BerriAI/litellm/pull/35896 * fix(bootstrap): switch to the dashboard node floor via nvm or fnm by @mateo-berri in https://github.com/BerriAI/litellm/pull/35895 * perf(pre-commit): run python, dashboard, and gen-api checks concurrently by @mateo-berri in https://github.com/BerriAI/litellm/pull/35903 * feat(spend): derive a default auto-router savings baseline from the hardest tier by @tin-berri in https://github.com/BerriAI/litellm/pull/35907 * fix(http_handler): self-heal handler clients closed after cache eviction by @mateo-berri in https://github.com/BerriAI/litellm/pull/35862 * fix(cost_tracking): keep OpenAI prompt cache token details through usage reassembly by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34812 * fix(cost): bill gpt-5.6 prompt cache reads at the cache read rate by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34957 * fix(batches): account for Responses API usage by @rimysore in https://github.com/BerriAI/litellm/pull/35367 * ci: retry Codecov uploads and stop failing jobs on OIDC token flakes by @mateo-berri in https://github.com/BerriAI/litellm/pull/35251 * feat(complexity_router): let operators rename the four complexity tiers by @akapur99 in https://github.com/BerriAI/litellm/pull/35893 * chore(lint): zero stale ruff and LIT headroom and strip inert type: ignore comments by @mateo-berri in https://github.com/BerriAI/litellm/pull/35928 * chore(lint): zero out seven more purely local basedpyright rules by @mateo-berri in https://github.com/BerriAI/litellm/pull/35927 * chore(ui): zero stale headroom on local dashboard eslint budgets by @mateo-berri in https://github.com/BerriAI/litellm/pull/35929 * fix(managed-files): skip rows without file objects by @rimysore in https://github.com/BerriAI/litellm/pull/35365 * fix(router): redact fallback tracebacks at the call site and cover the sync deferred stream by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35843 * fix(migrations): recover from an interrupted Prisma toolchain install by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35832 * fix(lint): bring basedpyright rule counts back under their budget limits by @mateo-berri in https://github.com/BerriAI/litellm/pull/35962 * chore(ui): don't zero out stale headroom except no-console by @mateo-berri in https://github.com/BerriAI/litellm/pull/35964 * fix(proxy): give proxy_admin_viewer read parity with proxy_admin by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/35851 * refactor(ui): address UI lint budget issues by refactoring UI by @tin-berri in https://github.com/BerriAI/litellm/pull/35960 * fix(ci): make the env-key doc gate see get_secret_bool reads by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35833 * fix(caching): re-land evicted LLM client closing (#35492) atop self-healing handlers by @mateo-berri in https://github.com/BerriAI/litellm/pull/35870 * fix(proxy): keep the connected DB client when a startup health check fails by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35837 * chore(lint): remove litellm/types from the ruff lint exclusion by @mateo-berri in https://github.com/BerriAI/litellm/pull/35926 * feat(sgr): make the gateway middleware the source of truth for successful requests by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35717 * feat(auto-router): let operators replace the LLM classifier's system prompt by @akapur99 in https://github.com/BerriAI/litellm/pull/35855 * fix(docker): bake the pip image's prisma engines at a world-readable path by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35976 * fix(auth): return 403 from the OAuth2 enterprise gate by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35838 * fix(router): keep custom model_info across a price data reload by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35491 * fix(proxy): resolve pass-through credentials live from router deployments by @mateo-berri in https://github.com/BerriAI/litellm/pull/35916 * fix(ci): fetch only head and merge-base in lint jobs instead of every branch by @mateo-berri in https://github.com/BerriAI/litellm/pull/35982 * fix(autorouter): match CJK keyword_tier_rules that regex word boundaries miss by @akapur99 in https://github.com/BerriAI/litellm/pull/35984 * feat(spend): rebuild the auto-router benchmarks backend as a per-session rollup by @tin-berri in https://github.com/BerriAI/litellm/pull/35910 * refactor(ui): replace hand-rolled query-param routing with nuqs by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/35871 * fix(docker): bake the componentized prisma engines at /opt/prisma so any uid can start by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35989 * fix(migrations): keep the toolchain heal from raising on an unreadable nodeenv cache by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35986 * fix(bedrock): sign Bedrock managed-file S3 requests with S3SigV4Auth by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35983 * chore(typing): replace Any seams with real types across responses, proxy, and provider adapters by @mateo-berri in https://github.com/BerriAI/litellm/pull/35809 * fix(ai21): resolve the documented AI21_API_KEY instead of a misspelled name by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35985 * fix(docker): fail the image build when the generated prisma engine paths drift off /opt/prisma by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35979 * fix(jina_ai): resolve the documented JINA_API_KEY as a fallback by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35992 * fix(proxy): only treat a recoverable database outage as grounds to serve without one by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35864 * fix(ci): make every remaining CI checkout shallow by @mateo-berri in https://github.com/BerriAI/litellm/pull/35997 * fix(auto-router): stop the embedding model's context window from failing long requests by @akapur99 in https://github.com/BerriAI/litellm/pull/35956 * fix(ci): make the env-key doc gate see bare get_secret and get_secret_str reads by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35996 * fix(logging): extend secret redaction to records litellm does not emit directly by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35977 * test(utils): pin the register_model replay test to the recorded half by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35994 * fix(ci): run every helm test suite, not just the first one per file by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35993 * ci: fail the build when a test file or Dockerfile is invoked by no job by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35991 * fix(langfuse): stop a collected httpx handler from closing a shared client by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35981 * fix(bedrock): grant bedrock:CountTokens in OIDC session policy by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33145 * feat(pre-commit): save full lint output to a per-worktree log file by @mateo-berri in https://github.com/BerriAI/litellm/pull/36004 * feat(ui): match auto-router preset models against deployments' underlying model IDs by @tin-berri in https://github.com/BerriAI/litellm/pull/35972 * fix(core_helpers): map generic 'error' finish_reason to 'stop' by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/33972 * fix(proxy)!: apply request-parameter checks consistently across body, path and form inputs by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36011 * fix: rebuild models_by_provider in add_known_models so cost map reloads reach wildcard expansion by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36010 * feat(complexity_router): report LLM classifier cost per request via routing_decision and x-litellm-classifier-cost header by @tin-berri in https://github.com/BerriAI/litellm/pull/36015 * fix(model-prices): correct replicate model key typo by @AkashNaickar in https://github.com/BerriAI/litellm/pull/34800 * fix(proxy): register managed batch output files on terminal retrieve by @Souravrajvi0 in https://github.com/BerriAI/litellm/pull/34092 * perf(pre-commit): fetch basedpyright base counts from CI artifacts by @mateo-berri in https://github.com/BerriAI/litellm/pull/35970 * fix(ui): sync projects list page index to ?page= so back and reload keep the page by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36003 * fix(ui): link project page keys to their virtual key detail by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36002 * refactor(ui): drop unreferenced locals from dashboard route components by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35819 * fix(ui): opening a project now pushes ?project= so back and deep links work by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36001 * refactor(ui): drop unreferenced locals from shared dashboard components by @yuneng-berri in https://github.com/BerriAI/litellm/pull/35821 * refactor(ui): drop unreferenced locals from tests and narrow destructures by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36025 * fix(guardrails): allow litellm_content_filter to run on post_mcp_call by @mateo-berri in https://github.com/BerriAI/litellm/pull/35980 * fix(guardrails): scan /v1/messages tool traffic by @mateo-berri in https://github.com/BerriAI/litellm/pull/35999 * refactor(ui): drop dead locals and unused React state across the dashboard by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36026 * feat(ui): add the auto-router usage tab to cost optimization by @tin-berri in https://github.com/BerriAI/litellm/pull/35995 * fix(managed_files): derive unified output file ids deterministically so concurrent registrations converge by @mateo-berri in https://github.com/BerriAI/litellm/pull/36019 * fix(proxy): send keepalive pings on anthropic messages SSE streams during upstream silence by @mateo-berri in https://github.com/BerriAI/litellm/pull/36024 * fix(managed_files): return unified ids from unscoped file listing by @mateo-berri in https://github.com/BerriAI/litellm/pull/36031 * fix(arize_phoenix): lowercase OTLP/gRPC auth metadata key by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/34883 * fix(auto-router): accept every reminder marker pair a harness emits by @tin-berri in https://github.com/BerriAI/litellm/pull/36029 * fix(pricing): sync flex/priority tier keys to dated OpenAI snapshot variants by @mateo-berri in https://github.com/BerriAI/litellm/pull/35923 * fix(cost): bill reasoning tokens at the service tier output rate by @mateo-berri in https://github.com/BerriAI/litellm/pull/35925 * fix(proxy): include today's UTC bucket when a daily activity range ends at the caller's current day by @tin-berri in https://github.com/BerriAI/litellm/pull/36051 * fix: expired-miss share over all measured turns + cost-optimization tab labels by @tin-berri in https://github.com/BerriAI/litellm/pull/36037 * fix(router): include Bedrock batch/S3 fields and model in deployment credentials by @mpcusack-altos in https://github.com/BerriAI/litellm/pull/24548 * fix(batch): track cost for managed batches with no attributable key/u… by @elinacse in https://github.com/BerriAI/litellm/pull/35468 * feat(guardrails): add scan_only_tool_results to scope unified guardrails to tool results by @mateo-berri in https://github.com/BerriAI/litellm/pull/36014 * fix(cost): stop token-pricing the placeholder input on file content calls by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35140 * fix(proxy): fetch background responses through the router in CheckResponsesCost by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/35137 * fix(proxy): yaml store_prompts_in_spend_logs should take precedence over DB cached value by @Praveena-617 in https://github.com/BerriAI/litellm/pull/35769 * fix(lint): measure the basedpyright budget gate in a gate-owned venv by @mateo-berri in https://github.com/BerriAI/litellm/pull/36050 * docs: cap all GitHub comments at 15-25 words, curb semicolon splices by @mateo-berri in https://github.com/BerriAI/litellm/pull/36059 * chore(lint): name MappingProxyType in the mutable-collection fix messages by @mateo-berri in https://github.com/BerriAI/litellm/pull/36072 * test: roll back runtime model registrations between tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/36039 * refactor(types): cut 653 implicit and explicit Any diagnostics across 11 modules by @mateo-berri in https://github.com/BerriAI/litellm/pull/36054 * fix(proxy): stop resolving the UI session sentinel team on /search_tools/list by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36061 * fix(batches): persist managed file ids for cancelled/failed/expired batches by @mateo-berri in https://github.com/BerriAI/litellm/pull/36048 * fix(batches): register managed output files on batch cancel by @mateo-berri in https://github.com/BerriAI/litellm/pull/36034 * fix(proxy): allow non-admins to reach /user/daily/activity/aggregated by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36062 * fix(anthropic): coerce explicit additionalProperties to false in output_format schema by @dkindlund in https://github.com/BerriAI/litellm/pull/35811 * fix(batches): prevent managed file fallbacks by @rimysore in https://github.com/BerriAI/litellm/pull/35371 * chore: ignore the mechanical lint and typing sweeps in git blame by @mateo-berri in https://github.com/BerriAI/litellm/pull/36076 * fix(proxy): warn at startup when max_budget is set but no database is connected by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36041 * fix(proxy): promote caller metadata trace fields into litellm_metadata by @yucheng-berri in https://github.com/BerriAI/litellm/pull/35866 * feat(terraform): sync provider 0.3.0 from the mirror and cut 0.4.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36098 * fix(guardrails): honor configured timeout in Zscaler AI Guard by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36110 * fix(logging): fall back to litellm_metadata when metadata is empty by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36105 * fix(proxy): re-assert the authenticated identity on passthrough requests by @yucheng-berri in https://github.com/BerriAI/litellm/pull/36121 * chore: bump litellm-enterprise 0.1.53 -> 0.1.54, litellm-proxy-extras 0.4.83 -> 0.4.84 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36139 * fix(ui): match auto-router preset models against wildcard-expanded model groups by @tin-berri in https://github.com/BerriAI/litellm/pull/36111 * test(router): assert the auto-router max_input_chars kwarg by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36109 * fix(ui): allow clearing a key's budget reset from the Edit Key form by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/36140 * fix(managed_files): skip unparseable rows when listing managed files by @mateo-berri in https://github.com/BerriAI/litellm/pull/36021 * fix(a2a): stop writing per-caller headers onto the shared cached httpx client by @yassin-berriai in https://github.com/BerriAI/litellm/pull/35978 * build(deps): bump h2 to 4.4.1 and js-yaml to 4.3.1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36147 * chore: promote staging to main by @mateo-berri in https://github.com/BerriAI/litellm/pull/36057 ## New Contributors * @rimysore made their first contribution in https://github.com/BerriAI/litellm/pull/35367 * @AkashNaickar made their first contribution in https://github.com/BerriAI/litellm/pull/34800 * @Souravrajvi0 made their first contribution in https://github.com/BerriAI/litellm/pull/34092 * @elinacse made their first contribution in https://github.com/BerriAI/litellm/pull/35468 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.97.0-dev.1...v1.97.0-dev.2
## 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-rc.1 ``` **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-rc.1/cosign.pub \ ghcr.io/berriai/litellm:v1.94.0-rc.1 ``` 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 * 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 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.94.0-dev.3...v1.94.0-rc.1
## 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.85.5 ``` **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.85.5/cosign.pub \ ghcr.io/berriai/litellm:v1.85.5 ``` 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 * chore(release): backport #30064, #29991, #30009 to stable/1.85.x by @mateo-berri in https://github.com/BerriAI/litellm/pull/30149 * bump: version 1.85.5 on stable/1.85.x by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30172 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.85.4...v1.85.5
## 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.84.6 ``` **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.84.6/cosign.pub \ ghcr.io/berriai/litellm:v1.84.6 ``` 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 * bump: version 1.84.6 (backport CrowdStrike AIDR metadata capture + identity fix) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29994 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.84.5...v1.84.6
## 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.87.0-rc.1 ``` **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.87.0-rc.1/cosign.pub \ ghcr.io/berriai/litellm:v1.87.0-rc.1 ``` 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(gemini): add gemini-3.1-flash-lite model cost map by @Sameerlite in https://github.com/BerriAI/litellm/pull/28320 * fix(spend_counter): seed Redis counter via SET NX to prevent cross-pod double-seed by @milan-berri in https://github.com/BerriAI/litellm/pull/27854 * fix(proxy): normalize batch file IDs before ManagedObjectTable write by @Sameerlite in https://github.com/BerriAI/litellm/pull/28339 * fix(router): use forwarded model_id for native Azure container IDs by @Sameerlite in https://github.com/BerriAI/litellm/pull/27921 * fix(ui): restore log filter loading indicator by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28282 * test(e2e): migrate runner to uv, add All Proxy Models key test by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28313 * feat(ui): team passthrough routes create parity + edit load fix by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28098 * fix(mcp): JWT on tools/list and REST tools/call server resolution by @Sameerlite in https://github.com/BerriAI/litellm/pull/28227 * feat(interactions): migrate to Google Interactions API steps schema (May 2026) by @Sameerlite in https://github.com/BerriAI/litellm/pull/28153 * test(ui-e2e): admin key creation with a specific proxy model by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28365 * fix(vertex_ai): omit function_call id on Vertex Gemini 3.5+ tool turns by @Sameerlite in https://github.com/BerriAI/litellm/pull/28324 * feat(mcp): allow native MCP OAuth support for cursor by @Sameerlite in https://github.com/BerriAI/litellm/pull/28327 * fix(interactions): never drop streamed text deltas; always emit terminal completion by @mateo-berri in https://github.com/BerriAI/litellm/pull/28394 * fix(proxy): expose Prisma idle/connect timeout + extra DB URL params by @yassin-berriai in https://github.com/BerriAI/litellm/pull/28395 * Litellm oss staging 1 by @Sameerlite in https://github.com/BerriAI/litellm/pull/28337 * fix: serialize guardrail_response to JSON in OTEL traces by @yassin-berriai in https://github.com/BerriAI/litellm/pull/28362 * chore(ci): merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28314 * test(realtime): expect session.created as xAI realtime initial event by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28424 * feat(tests): behavior-pinning harness + Key Tier-1 matrix by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28321 * fix(proxy): hydrate wildcard discovery credentials (#28284) - CCI Run by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28419 * Litellm oss staging 04 21 2026 2 by @Sameerlite in https://github.com/BerriAI/litellm/pull/26569 * chore(ci): merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28290 * fix(vertex_gemma): strip `context_management` from request body by @mateo-berri in https://github.com/BerriAI/litellm/pull/28438 * fix(logging): recalculate cost after router retry failures by @milan-berri in https://github.com/BerriAI/litellm/pull/28476 * fix(otel): emit guardrail span on violation, surface status + categories by @yassin-berriai in https://github.com/BerriAI/litellm/pull/28364 * test(proxy): behavior-pinning matrix for team management endpoints by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28441 * test(vertex_ai): tolerate transient 500 in google maps grounding test by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28503 * fix(docker): restore npm to non_root builder image by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28519 * chore(ci): bump deps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28524 * build(deps-dev): bump black to 26.3.1 and apply formatting by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28525 * chore(deps): bump deps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28528 * test(e2e): forward LITELLM_LICENSE to UI e2e proxy by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28398 * Add granian as a ASGI compliant web server. Provider better throughput stability, by @harish-berri in https://github.com/BerriAI/litellm/pull/26027 * Fix conflicts and UI by @Sameerlite in https://github.com/BerriAI/litellm/pull/28477 * Add error_description and hint for oauth flows by @Sameerlite in https://github.com/BerriAI/litellm/pull/28471 * feat(mcp): Add tool call and tool list support via UI for Oauth mcps by @Sameerlite in https://github.com/BerriAI/litellm/pull/28454 * feat(proxy): persist allowlisted OIDC claims in CLI SSO poll by @Sameerlite in https://github.com/BerriAI/litellm/pull/28463 * fix(responses): use OpenAI SSEDecoder for Responses API streaming by @Sameerlite in https://github.com/BerriAI/litellm/pull/28566 * Litellm oss staging 2 by @Sameerlite in https://github.com/BerriAI/litellm/pull/28582 * [internal copy of #28269] Codex cli jwt team alias by @mateo-berri in https://github.com/BerriAI/litellm/pull/28621 * fix(check_licenses): read PEP 639 license-expression metadata by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28529 * test(proxy): behavior-pinning matrix for tier-2/3 key + team management endpoints by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28620 * chore(test): remove dead old Playwright e2e suite by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28632 * fix(sagemaker): send native Cohere embed payload to Cohere SageMaker endpoints by @milan-berri in https://github.com/BerriAI/litellm/pull/28613 * style: apply black formatting to fix lint CI (LIT-3274) (#28639) by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/28641 * fix(bedrock): decouple STS region from Bedrock aws_region_name by @milan-berri in https://github.com/BerriAI/litellm/pull/28245 * test(streaming): tolerate Vertex 429 wrapped in MidStreamFallbackError by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28669 * feat(guardrails): add Microsoft Purview DLP guardrail by @Sameerlite in https://github.com/BerriAI/litellm/pull/24966 * fix(mcp): forward upstream initialize instructions on cold gateway init by @milan-berri in https://github.com/BerriAI/litellm/pull/28231 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28680 * CI: copy of #25177 (OCI GenAI: embeddings, streaming/reasoning fixes, model catalog) by @mateo-berri in https://github.com/BerriAI/litellm/pull/28223 * Encrypt callback_vars in key/team metadata in DB by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27141 * perf: reduce per-request and per-chunk overhead across Anthropic streaming hot paths by @yassin-berriai in https://github.com/BerriAI/litellm/pull/28289 * feat(azure): add Speech STT config support by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27482 * test(proxy): phase-4 payload behavior pinning for tier-2/3 key + team management endpoints by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28681 * feat(prometheus): emit per-token-type detail metrics (LIT-3220) (#28372) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/28378 * fix(otel): stamp http.response.status_code on all error responses by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28405 * chore(ui): build ui by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28707 * fix(helm): drop main- prefix from default image tag by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28710 * test(model_prices): allow audio_transcription_config in schema by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28708 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28709 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.87.0-dev.1...v1.87.0-rc.1
## 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.86.0-rc.1 ``` **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.86.0-rc.1/cosign.pub \ ghcr.io/berriai/litellm:v1.86.0-rc.1 ``` 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 * fix: tighten budget field validation and authorization checks by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/27897 * fix(guardrails): improve CrowdStrike AIDR input handling by @kenany in https://github.com/BerriAI/litellm/pull/26658 * feat(lasso): add tool-calling support to LassoGuardrail by @vladpolevoi in https://github.com/BerriAI/litellm/pull/27648 * perf: optimize chat completions fast path by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27858 * ci(mutmut): enable mutate_only_covered_lines to fit in CI budget by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27910 * fix(rate-limit): stop v3 limiter from leaking internal stash to provider body by @mateo-berri in https://github.com/BerriAI/litellm/pull/27913 * fix: allow for allowlisted redirect URIs by @dennishenry in https://github.com/BerriAI/litellm/pull/27761 * Emit native web_search_tool_result blocks for Anthropic clients (Claude Desktop / Cowork citations) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27886 * test(vcr): classify cache verdicts, surface cost leaks, and fix the two biggest leakers by @mateo-berri in https://github.com/BerriAI/litellm/pull/27795 * chore(ci): remove unused GitHub Actions workflows and orphan files by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27957 * test(ui): preserve global Button/Tooltip mocks in per-file @tremor/react vi.mock by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27958 * fix(mcp): expose delegate_auth_to_upstream in MCP server list API by @Sameerlite in https://github.com/BerriAI/litellm/pull/27936 * feat(proxy): fix vector store retrieve/list/update/delete without model by @Sameerlite in https://github.com/BerriAI/litellm/pull/27929 * fix(managed_batches): convert raw output_file_id to managed ID in CheckBatchCost poller by @Sameerlite in https://github.com/BerriAI/litellm/pull/27984 * fix(vertex-ai): fix zero cost/usage on completed Vertex AI batch jobs by @Sameerlite in https://github.com/BerriAI/litellm/pull/27912 * ci: use --cov=./litellm so coverage paths resolve unambiguously in Codecov by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27960 * fix(mcp): delegate PKCE bypass for internal MCP servers by @Sameerlite in https://github.com/BerriAI/litellm/pull/27977 * Feat: Add Weighted-Routing Failover by @Sameerlite in https://github.com/BerriAI/litellm/pull/27980 * fix(bedrock-mantle): use /anthropic/v1/messages path for Mantle endpo… by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27976 * fix(utils): import get_secret at runtime by @Sameerlite in https://github.com/BerriAI/litellm/pull/28014 * chore(ci): modernize model references in tests and configs by @mateo-berri in https://github.com/BerriAI/litellm/pull/27856 * fix(proxy): make /config/update env-var encryption idempotent by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28022 * feat: support OTEL GenAI semconv by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27418 * test(proxy): isolate run_server CLI tests from prisma DB-setup path by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28029 * test(interactions): validate response fields against Interaction schema by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28037 * test(gemini): de-flake test_gemini_image_size_limit_exceeded by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28039 * feat: componentize gateway, ui-backend, and ui as separate services by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27557 * test(ci): add reasoning_effort grid e2e regression suite by @mateo-berri in https://github.com/BerriAI/litellm/pull/28036 * fix(ci): flag codecov uploads, enable carryforward, close coverage gaps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28028 * feat(otel): OTel-standard attributes on the proxy SERVER span (status code, route/path, preprocessing latency) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28040 * build(deps): pin openai==2.33.0 in uv.lock by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28088 * feat(model_catalog): add Azure AI Foundry GPT-5.4 model metadata by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/28030 * feat(otel): set http.response.status_code on the success SERVER span by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/28090 * [IInfra] Build UI by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28095 * fix(proxy): sort BYOK models by their displayed name in /v2/model/info by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/28079 * feat(terraform): add AWS ECS + GCP Cloud Run stacks for componentized gateway by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27673 * fix(mcp-oauth): PROXY_BASE_URL escape hatch + diagnostic logging for {"detail":"invalid_request"} by @mateo-berri in https://github.com/BerriAI/litellm/pull/28086 * [Infra] Bump versions by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28094 * [Infra] Promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/28100 ## New Contributors * @vladpolevoi made their first contribution in https://github.com/BerriAI/litellm/pull/27648 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.85.0...v1.86.0-rc.1
## 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.85.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.85.0/cosign.pub \ ghcr.io/berriai/litellm:v1.85.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 * fix: strip 'openrouter/' prefix from model names (#24234) by @kimimgo in https://github.com/BerriAI/litellm/pull/24282 * feat(bedrock): add Z.AI GLM-5 model support by @Chesars in https://github.com/BerriAI/litellm/pull/24338 * fix(gemini): return separate embeddings for multimodal inputs by @Chesars in https://github.com/BerriAI/litellm/pull/24337 * refactor: Remove redundant backup file by @Chesars in https://github.com/BerriAI/litellm/pull/16590 * feat(gemini): support combined multimodal embeddings via nested input by @Chesars in https://github.com/BerriAI/litellm/pull/24341 * merge litellm_internal_staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/25944 * docs(readme): update Greptile logo to higher quality image by @Chesars in https://github.com/BerriAI/litellm/pull/25385 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/26260 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/26305 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/26306 * fix: remove duplicate MAX_SIZE_PER_ITEM_IN_MEMORY_CACHE_IN_KB definition by @Jah-yee in https://github.com/BerriAI/litellm/pull/26385 * fix(ui): add missing 'zai' (Z.AI / Zhipu AI) provider to Add-Model dropdown by @MackDing in https://github.com/BerriAI/litellm/pull/26419 * fix(proxy): set verbose_logger level when LITELLM_LOG=INFO by @he-yufeng in https://github.com/BerriAI/litellm/pull/26401 * Sync litellm_staging_03_21_2026 with litellm_internal_staging by @Chesars in https://github.com/BerriAI/litellm/pull/26519 * Merge readme logo update into litellm_staging_03_21_2026 by @Chesars in https://github.com/BerriAI/litellm/pull/26521 * fix(arize): _set_usage_outputs handles raw OpenAI Pydantic CompletionUsage by @alvinttang in https://github.com/BerriAI/litellm/pull/26506 * fix(adapters,vertex): pass output_config through to backends that accept it (closes #23380, supersedes #23475/#23396/#23706/#22727) by @dkindlund in https://github.com/BerriAI/litellm/pull/26439 * add test(tag-routing): prevent header regex bypass for strict plain t… by @harish-berri in https://github.com/BerriAI/litellm/pull/26805 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/26984 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/26985 * Fix managed file model_mappings when router resolves a single deployment dict (batch models with id == model_name) by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/26950 * fix(proxy): route azure container file requests by decoded deployment by @Sameerlite in https://github.com/BerriAI/litellm/pull/26402 * feat(xai): add parallel_tool_calls to supported params (#25106) by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/25270 * Litellm token verification query optimization by @harish-berri in https://github.com/BerriAI/litellm/pull/26202 * feat(vertex_ai): Model Garden OpenAPI for publisher model ids by @Sameerlite in https://github.com/BerriAI/litellm/pull/26076 * fix(mcp): preserve oauth2 m2m auth for tools routes by @Sameerlite in https://github.com/BerriAI/litellm/pull/26871 * Fix /metrics hang when require_auth_for_metrics_endpoint is true and auth succeeds by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/25980 * fix(projects): project dropdown empty for internal_user (3 bugs) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/26664 * fix: block path traversal SSRF in BitBucket, Arize Phoenix, and AssemblyAI clients by @ishaan-berri in https://github.com/BerriAI/litellm/pull/26943 * Litellm staging 03 21 2026 by @Chesars in https://github.com/BerriAI/litellm/pull/24340 * refactor: scope /health response to caller's models and tidy display fields by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/26935 * fix(ui): add Your Usage view for admin users on usage page by @ishaan-berri in https://github.com/BerriAI/litellm/pull/26746 * fix: scope CLI stored token to base_url to prevent cross-domain credential leakage by @ishaan-berri in https://github.com/BerriAI/litellm/pull/26945 * Fix: trigger fallbacks on mid-stream httpx.TimeoutException by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/26998 * [Fix] /config/update: targeted per-section writes, drop store_model_in_db gate by @yuneng-berri in https://github.com/BerriAI/litellm/pull/26643 * chore(security): close two unaddressed SSRF cases by @stuxf in https://github.com/BerriAI/litellm/pull/26996 * chore(guardrails): tighten tool permission checks by @stuxf in https://github.com/BerriAI/litellm/pull/26969 * chore(proxy): align resource model auth checks by @stuxf in https://github.com/BerriAI/litellm/pull/26963 * fix(health): return 503 when targeted model is unhealthy or DB is disconnected by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27003 * [Fix] Tests: Move Misplaced Import in Lazy OpenAPI Snapshot Test by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27010 * chore(vector stores): tighten managed store access by @stuxf in https://github.com/BerriAI/litellm/pull/26930 * fix: post call guardrail must be called once by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/26109 * chore(proxy): tighten budget spend admission by @stuxf in https://github.com/BerriAI/litellm/pull/26845 * [Test] Anthropic: Use jsDelivr CDN For PDF Fixture URL by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27000 * chore(callbacks): guard dynamic integration hosts by @stuxf in https://github.com/BerriAI/litellm/pull/26921 * refactor(rate-limit): consolidate batch + dynamic limiter check/increment by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/26954 * chore(security): encode upstream URL path identifiers by @stuxf in https://github.com/BerriAI/litellm/pull/26860 * chore(mcp): require trusted-proxy gate before honouring X-Forwarded-* on OAuth discovery by @stuxf in https://github.com/BerriAI/litellm/pull/26841 * tests(vcr): redis-backed vcrpy cache for offline LLM e2e replay by @mateo-berri in https://github.com/BerriAI/litellm/pull/26838 * [Fix] Tests: Align Bedrock count-tokens endpoint assertions with URL-encoded model id by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27017 * feat(embedding): default OpenAI-path encoding_format to float by @Sameerlite in https://github.com/BerriAI/litellm/pull/26976 * fix(guardrails): post-call guardrail must only fire once by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27012 * fix(vertex_ai): omit system_instruction/tools/toolConfig when cachedContent set by @Sameerlite in https://github.com/BerriAI/litellm/pull/26077 * [Fix] Proxy: Skip Personal Budget Hook When Reservation Covers Counter by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27021 * fix(ui): remove insecure ?token= URL handler from LoginPage to close session-fixation by @michelligabriele in https://github.com/BerriAI/litellm/pull/26924 * fix(proxy): reject user_id=None on non-admin analytics endpoints (cross-tenant disclosure) by @michelligabriele in https://github.com/BerriAI/litellm/pull/26929 * Litellm clean litellm oss staging 04 01 2026 by @Sameerlite in https://github.com/BerriAI/litellm/pull/25856 * [Infra] Merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27024 * [Fix] RBAC: Restore Admin Viewer Read Parity for Logs + Settings Pages by @yuneng-berri in https://github.com/BerriAI/litellm/pull/26846 * Fix Redis key generation to be stable across working directories by @mateo-berri in https://github.com/BerriAI/litellm/pull/27025 * [Fix] Proxy/Key Management: Honor team_member_permissions /key/list In /key/list Endpoint by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27026 * chore(proxy): tighten router-settings-override and mock-testing trust by @stuxf in https://github.com/BerriAI/litellm/pull/26968 * fix(batches): count non-chat tokens, validate batch-file model access (VERIA-39) by @stuxf in https://github.com/BerriAI/litellm/pull/27015 * fix(proxy): re-validate user_id after /user/info re-parses query by @stuxf in https://github.com/BerriAI/litellm/pull/27009 * fix(mcp): run pre_call_tool_check on OpenAPI/local-registry path (VERIA-7) by @stuxf in https://github.com/BerriAI/litellm/pull/27016 * Fix runtime policy attachment initialization by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/27028 * fix(prometheus): escape api_key for PromQL string literal (VERIA-53) by @stuxf in https://github.com/BerriAI/litellm/pull/27013 * [Fix] Isolate dual OTEL handlers by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27018 * fix(proxy): close project hijacking and key org IDOR (VERIA-55) by @stuxf in https://github.com/BerriAI/litellm/pull/27011 * fix: honor key access_group_ids when team restricts models by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/26275 * chore(auth): require trusted proxy for header identity auth by @stuxf in https://github.com/BerriAI/litellm/pull/26825 * chore(sso): bind generic SSO state to a session cookie by @stuxf in https://github.com/BerriAI/litellm/pull/26944 * [Fix] Release Workflow: Detect SemVer-Style Pre-Release Dev Tags by @yuneng-berri in https://github.com/BerriAI/litellm/pull/26966 * [Infra] Merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27032 * [Test] Anthropic: Replace Legacy Claude-4-Sonnet Alias With Haiku 4.5 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27031 * fix(auth): support JWT issuer verification + warn when unscoped by @stuxf in https://github.com/BerriAI/litellm/pull/27008 * fix(router): constrain same-name deployment routing by access groups by @Sameerlite in https://github.com/BerriAI/litellm/pull/26161 * fix(gemini): follow provider defaults for Gemini 3 thinking by @Sameerlite in https://github.com/BerriAI/litellm/pull/25764 * feat(mcp): enforce org-level MCP server and toolset permissions by @Sameerlite in https://github.com/BerriAI/litellm/pull/26960 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/27036 * fix(guardrails): preserve responses event streams in presidio output masking by @Sameerlite in https://github.com/BerriAI/litellm/pull/26878 * chore(staging): roll oss_staging_04_25_2026 into internal staging (output_config fix + 4 upstream sync fixes) by @mateo-berri in https://github.com/BerriAI/litellm/pull/26530 * feat(vertex-ai): transform batch prediction outputs to OpenAI format by @Sameerlite in https://github.com/BerriAI/litellm/pull/25627 * [Fix] gpt-5.5 reasoning_effort capability flags + add supports_low_reasoning_effort by @mateo-berri in https://github.com/BerriAI/litellm/pull/26456 * fix(anthropic,bedrock): omit thinking/output_config when reasoning_effort="none" by @mateo-berri in https://github.com/BerriAI/litellm/pull/27039 * fix(vertex-ai): set response=null on batch error entries per OpenAI spec by @mateo-berri in https://github.com/BerriAI/litellm/pull/27041 * test(responses): replace legacy `claude-4-sonnet-20250514` alias in multiturn tool-call test by @mateo-berri in https://github.com/BerriAI/litellm/pull/27077 * [Fix] Remove unwanted metadata info from LangSmith by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/26894 * [Fix] Docker: Pin Wolfi And Uv To Multi-Arch Index Digests by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27123 * feat(spend-logs): opt-in suppression of stack traces in spend-tracking error logs by @mateo-berri in https://github.com/BerriAI/litellm/pull/26899 * feat(proxy): add support for Grafana Cloud Pyroscope authentication by @harish-berri in https://github.com/BerriAI/litellm/pull/26902 * chore(deps): refresh dependency locks by @stuxf in https://github.com/BerriAI/litellm/pull/27126 * chore(team): require team-management role on /team/{id}/callback endpoints by @stuxf in https://github.com/BerriAI/litellm/pull/26819 * chore(providers): guard URL-valued model destinations by @stuxf in https://github.com/BerriAI/litellm/pull/26915 * chore(audit): audit-log /cache/settings + /config_overrides/hashicorp_vault mutations by @stuxf in https://github.com/BerriAI/litellm/pull/26953 * fix(auth): block missing write routes for proxy admin viewers by @stuxf in https://github.com/BerriAI/litellm/pull/27007 * fix(proxy): scope team and agent activity endpoints per-entity (VERIA-43) by @stuxf in https://github.com/BerriAI/litellm/pull/27014 * fix(anthropic,bedrock,vertex): forward output_config.effort + 400 on garbage reasoning_effort by @mateo-berri in https://github.com/BerriAI/litellm/pull/27074 * fix(files): constrain cloud storage file paths (VERIA-45, VERIA-59) by @stuxf in https://github.com/BerriAI/litellm/pull/27019 * fix(proxy): redact MCP server URL and headers for non-admin viewers (VERIA-8) by @stuxf in https://github.com/BerriAI/litellm/pull/27027 * [Fix] Treat 0 team_member_budget as no cap by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27133 * feat: routing groups by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27022 * [fix] fix metric labels for litellm-side rejects by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/26947 * chore(proxy): close callback-config and observability-credential side channels by @stuxf in https://github.com/BerriAI/litellm/pull/27081 * fix(vector_store): resolve embedding config at request time, never persist creds by @stuxf in https://github.com/BerriAI/litellm/pull/27082 * chore(caching): isolate semantic cache entries by @stuxf in https://github.com/BerriAI/litellm/pull/26990 * chore(proxy): guard sensitive public endpoints by @stuxf in https://github.com/BerriAI/litellm/pull/26912 * chore(guardrails): cover multimodal + Responses-API content shapes by @stuxf in https://github.com/BerriAI/litellm/pull/26957 * chore(proxy): drop client-supplied pricing fields from request bodies by @stuxf in https://github.com/BerriAI/litellm/pull/27071 * feat: routing groups ui by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27131 * fix(security): sandbox jinja2 in gitlab/arize/bitbucket prompt managers by @stuxf in https://github.com/BerriAI/litellm/pull/27043 * [Fix] Tests: Replace deprecated openrouter/claude-3.7-sonnet with claude-sonnet-4.5 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27149 * [Infra] Merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27151 * fix(proxy): isolate managed resources for service-account API keys by @stuxf in https://github.com/BerriAI/litellm/pull/27004 * chore(proxy): tighten resource ownership checks by @stuxf in https://github.com/BerriAI/litellm/pull/26951 * fix(scim): revoke virtual keys when SCIM deprovisions a user by @mateo-berri in https://github.com/BerriAI/litellm/pull/26861 * fix(security): prevent secret_fields from leaking into spend logs by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/27143 * feat(proxy): add health_check_reasoning_effort for model health checks by @Sameerlite in https://github.com/BerriAI/litellm/pull/27115 * fix(azure): omit model from deployment image gen and image edit bodies by @Sameerlite in https://github.com/BerriAI/litellm/pull/27103 * [Fix] CI: Enable VCR replay for test_azure_o_series by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27165 * [Fix] Proxy: Break managed-resources import cycle on Python 3.13 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27160 * [Infra] Build UI by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27156 * [Perf] CI: Skip Redundant Playwright Apt Install in E2E UI Job by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27169 * [Fix] Docker: Remove Hardcoded Prisma Binary Target For Multi-Arch Builds by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27170 * [Fix] UI: Clear Admin Session Cookies Before Establishing Invited User's Session by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27227 * test: add 24hr Redis-backed VCR cache to additional test suites by @mateo-berri in https://github.com/BerriAI/litellm/pull/27159 * [Fix] Team UI: handle legacy dict shape for metadata.guardrails by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27224 * [Infra] Build UI by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27240 * [Infra] Bump deps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27157 * refactor(BaseAWSLLM): implement shared IAM cache and static credentia… by @harish-berri in https://github.com/BerriAI/litellm/pull/27125 * feat(realtime): OpenAI Realtime GA support and beta compatibility by @Sameerlite in https://github.com/BerriAI/litellm/pull/27110 * fix: atomic TPM rate limit by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27001 * helm: increase default probe timeouts, disable debug logging by default by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27237 * helm: skip proxy startup prisma db push when migrations Job is enabled by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27200 * fix(anthropic, mcp): sanitize tool names to match Anthropic's [a-zA-Z0-9_-]{1,128} pattern by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/26788 * feat(audio_transcription): add NVIDIA Riva STT provider by @Sameerlite in https://github.com/BerriAI/litellm/pull/27185 * [Test] Tests: Stop parametrizing API keys into pytest test IDs by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27249 * fix(hosted_vllm): normalize custom tools for chat completions by @Sameerlite in https://github.com/BerriAI/litellm/pull/25763 * ci(circleci): enable Rerun Failed Tests for all pytest jobs by @mateo-berri in https://github.com/BerriAI/litellm/pull/27155 * [Fix] Union x-litellm-tags with static team/key tags by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27247 * fix: replace user api key auth with authorization or cookie for mcp server creation by @dennishenry in https://github.com/BerriAI/litellm/pull/27190 * Include model name + configured TPM/RPM in priority rate-limit 429 er… by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27216 * Fix Prometheus custom metadata label counts (#27268) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27271 * perf(proxy): run daily activity aggregation off the event loop by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27264 * proxy: hot-reload config YAML when --reload is set by @mateo-berri in https://github.com/BerriAI/litellm/pull/27274 * fix(proxy): keep spend log cleanup running after batch failures by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27303 * Fix team member budget enforcement without user row by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27273 * Fix SCIM user lookup filters by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27308 * Fix/member access group team by @dibyom in https://github.com/BerriAI/litellm/pull/27317 * Fix early proxy request size enforcement by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27311 * Cap Prometheus end-user metric cardinality by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27272 * Add new chat model metadata by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27313 * Fix MCP DB reload partial failures by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27314 * Fix Anthropic streaming reasoning token usage by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27319 * Fix Vertex Anthropic streaming status error hangs by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27310 * Add Azure Sentinel audit log support by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27280 * [Chore] CI: Assign test_request_size_limit_middleware To Proxy-Runtime Shard by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27341 * [Chore] CI: Block PRs that drop overall code coverage by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27340 * Fix Prometheus remaining metric zero values by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27348 * Refactor Bedrock response stream shape handling by @harish-berri in https://github.com/BerriAI/litellm/pull/27257 * feat(xai): add grok-4.3 and grok-4.3-latest to model_prices_and_conte… by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27154 * feat(xai): cherry-pick grok-4.3 model entries onto main (#27154) by @mateo-berri in https://github.com/BerriAI/litellm/pull/27396 * fix(proxy): run model-level post_call guardrails on streaming requests by @michelligabriele in https://github.com/BerriAI/litellm/pull/26922 * [Fix] Allow non-admin compliance path reads by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27234 * [Fix] Tests: Reduce VCR cassette bloat and fix multipart caching by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27409 * [Feat] Decouple S3 audit-log config via s3_audit_callback_params by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27222 * Fix Bedrock passthrough call ID headers by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27412 * fix(chat-completions): decode unified file_id when model_file_id_mapping is unavailable by @michelligabriele in https://github.com/BerriAI/litellm/pull/27406 * [litellm-agent] Staging → litellm_internal_staging (5/7/2026) by @oss-pr-review-agent-shin[bot] in https://github.com/BerriAI/litellm/pull/27375 * feat(auth): add scope and wildcard support for JWT routing overrides by @milan-berri in https://github.com/BerriAI/litellm/pull/26325 * feat(mcp): add OBO MCP Auth by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27421 * [Fix] Realtime Tests: Update Deprecated OpenAI Model Pin by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27415 * [Infra] Packaging: Relax Core Runtime Pins To Ranges by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27241 * fix: remove separate health app by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27430 * test(interactions): align openapi compliance with upstream rename outputs->steps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27432 * [Security] Clear AWS Inspector CVE findings on Docker image by @stuxf in https://github.com/BerriAI/litellm/pull/27225 * [Infra] Merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27433 * [Infra] Bump versions by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27431 * chore: merge main into internal_staging to restore lineage by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27437 * [Infra] Promote Internal Staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27436 * fix(ui): URL-encode team_id in teamInfoCall to handle special characters by @SHARP155 in https://github.com/BerriAI/litellm/pull/27466 * Fix team model test connection authorization by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27487 * Fix: add OpenRouter Qwen 3.6 Plus metadata by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27486 * feat(sso): show full IdP claims in /sso/debug/callback by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27498 * [Feat] Honor OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27403 * fix(proxy): point /metrics 401 at the opt-out flag by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27502 * feat: separate db read and write endpoints by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27493 * [UI] Rename "Default" key type to "Full Access" and reorder dropdown by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27218 * fix(proxy): flush virtual-key model_max budget spend to Redis after success logging by @milan-berri in https://github.com/BerriAI/litellm/pull/27334 * fix(realtime): add /openai/v1/realtime to routes for logging by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27323 * fix(proxy): bound budget reservation per request instead of pinning to headroom by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27509 * fix(ui-tests): add Typography to antd mock in create_key_button test by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27537 * fix(mcp): forward extra_headers for OpenAPI MCP tools by @milan-berri in https://github.com/BerriAI/litellm/pull/27383 * [Feat] Add endpoint for bulk key updates for team by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/26468 * feat(guardrails): optional skip tool message in unified guardrail inputs by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/27441 * Fix/shared health check polling by @noahnistler in https://github.com/BerriAI/litellm/pull/26434 * fix(proxy): resolve provider from deployment for multi-provider defaultconfig (#27516) by @Anai-Guo in https://github.com/BerriAI/litellm/pull/27517 * fix(bedrock/messages): preserve compact_20260112 context_management on /v1/messages by @Anai-Guo in https://github.com/BerriAI/litellm/pull/27534 * fix(router): register model info under responses/-stripped variant by @krisxia0506 in https://github.com/BerriAI/litellm/pull/27531 * fix(ui): remove blank leading entry from access group model dropdown by @Bytechoreographer in https://github.com/BerriAI/litellm/pull/27521 * fix(proxy): coerce non-str x-litellm-* header values to avoid httpx TypeError (#27458) by @Anai-Guo in https://github.com/BerriAI/litellm/pull/27504 * chore: remove legacy deployment artifacts and litellm-js packages by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27541 * build(packaging): raise jinja2 floor to 3.1.6 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27552 * Fix proxy auth status code tests by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27555 * [Fix] Reset proxy budget when initial reset duration is null then updated by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27488 * feat: add ability to auth to azure with token by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/27556 * [Infra] Promote Internal Staging to main by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27559 * [Fix] Reset org and tag budgets by @Michael-RZ-Berri in https://github.com/BerriAI/litellm/pull/27326 * Fix: tag budget reset must drop stale management-cache entry by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27568 * fix(ui): omit allowed_routes from key edit save when unchanged by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27553 * [litellm-agent] Staging → litellm_internal_staging (5/6/2026) by @oss-pr-review-agent-shin[bot] in https://github.com/BerriAI/litellm/pull/27256 * [litellm-agent] Staging → litellm_internal_staging (5/7/2026) by @oss-pr-review-agent-shin[bot] in https://github.com/BerriAI/litellm/pull/27422 * [litellm-agent] Staging → litellm_internal_staging (5/9/2026) by @oss-pr-review-agent-shin[bot] in https://github.com/BerriAI/litellm/pull/27549 * chore: remove accidental .evidence folder by @Sameerlite in https://github.com/BerriAI/litellm/pull/27633 * merge main by @Sameerlite in https://github.com/BerriAI/litellm/pull/27658 * fix(anthropic): inject dummy tool without modify_params by @Sameerlite in https://github.com/BerriAI/litellm/pull/27620 * fix(responses): normalize chat tool_choice for completions→responses bridge by @Sameerlite in https://github.com/BerriAI/litellm/pull/27634 * Fix internal tag usage scoping by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27315 * fix(openai): route reasoningSummary for gpt-5.4+ chat without tools to Responses API by @Sameerlite in https://github.com/BerriAI/litellm/pull/27618 * feat(batch-job): bedrock batch model invocation job retrieval by @dgu1-godaddy in https://github.com/BerriAI/litellm/pull/26834 * [litellm-agent] Staging → litellm_internal_staging (5/11/2026) by @oss-pr-review-agent-shin[bot] in https://github.com/BerriAI/litellm/pull/27677 * ci: add manually-triggered mutation testing workflow by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27576 * Add Bedrock Claude Platform route by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27678 * [Feature] UI - Logs: Add 'Last Minute' to time-range quick select by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27446 * fix(ci): unbreak realtime + bedrock batch tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/27690 * Litellm shin agent oss staging 05 10 2026 by @Sameerlite in https://github.com/BerriAI/litellm/pull/27631 * fix(router): pin Responses API affinity to Azure resource on model-group switch by @mateo-berri in https://github.com/BerriAI/litellm/pull/27703 * Add pricing for openai/gpt-realtime-2 by @superpoussin22 in https://github.com/BerriAI/litellm/pull/27653 * Match litellm.completion supported model parameters with proxy model info by @jyeros in https://github.com/BerriAI/litellm/pull/27720 * feat(ui): add Expires to key Overview header; merge User into one field by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27696 * feat(ui): search teams by team ID alongside name by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27684 * fix(tests): use canonical litellm_enterprise import path by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27699 * fix(tests): swap dall-e to gpt-image-1 after openai deprecation by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27787 * fix(proxy): always merge caller-supplied tags into request metadata by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27784 * chore: reject bare str at file-input sinks to prevent local-file read by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/27762 * feat(ui): add Vertex AI Search as vector store provider by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27790 * Litellm key rotation bug by @harish-berri in https://github.com/BerriAI/litellm/pull/27756 * chore(proxy): close /key/regenerate ownership-rebind + premium-gate bypass by @stuxf in https://github.com/BerriAI/litellm/pull/27793 * fix: OpenTelemetry tracing bugs in proxy integration by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27757 * fix: enforce tag budgets on x-litellm-tags header requests by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/27573 * [Infra] Merge dev branch by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27798 * [Infra] Build UI by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27805 * [Fix] Replace deprecated dall-e-3 with gpt-image-1 in tests by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27813 * [Fix] Lazy feature loading under SERVER_ROOT_PATH returns 404 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27812 * [Infra] Promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27815 * fix(gemini): normalize response_schema on native generateContent by @mateo-berri in https://github.com/BerriAI/litellm/pull/27775 * fix(responses): register cooldowns on failure + fail fast on stale encrypted_content by @mateo-berri in https://github.com/BerriAI/litellm/pull/27820 * feat(proxy): skip disable_background_health_check models on GET /health when flag set by @Sameerlite in https://github.com/BerriAI/litellm/pull/27716 * fix(bedrock-converse): drop blank-text fallback for empty thinking blocks by @mateo-berri in https://github.com/BerriAI/litellm/pull/27850 * fix(mcp): surface upstream 401 for token-forwarding MCP servers by @Sameerlite in https://github.com/BerriAI/litellm/pull/27847 * fix(cost): align vertex_ai/gemini-embedding-2-preview with Vertex multimodal pricing by @Sameerlite in https://github.com/BerriAI/litellm/pull/27848 * feat(mcp): add delegate_auth_to_upstream flag for PKCE passthrough by @Sameerlite in https://github.com/BerriAI/litellm/pull/27834 * fix(responses): preserve cache_control in Responses API -> Chat Completion transformation by @Sameerlite in https://github.com/BerriAI/litellm/pull/27727 * fix(proxy): expose db status on public /health/readiness by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27866 * docs(budget_manager): add docstring to BudgetManager.reset_cost by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27867 * docs: add class docstring to _LoopWrapper by @oss-agent-shin in https://github.com/BerriAI/litellm/pull/27870 * fix: Fix Redis Sentinel client handling to solve authentication error… by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/26302 * Litellm agent oss staging 05 11 2026 by @Sameerlite in https://github.com/BerriAI/litellm/pull/27733 * Ishaan - May 13th Staging LiteLLM by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27877 * fix(fireworks_ai): strip `thinking_blocks` from chat messages before Fireworks API call by @milan-berri in https://github.com/BerriAI/litellm/pull/27881 * fix(prometheus): emit `litellm_remaining_tokens_metric` for Bedrock and Vertex by @mateo-berri in https://github.com/BerriAI/litellm/pull/27705 * fix(pricing): GPT-4o-Transcribe Pricing by @lmcdonald-godaddy in https://github.com/BerriAI/litellm/pull/27875 * feat(mcp): support MCP access group names in URL-based namespacing by @Sameerlite in https://github.com/BerriAI/litellm/pull/27726 * fix(ui): fetch version + debug flag from /health/readiness/details by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27896 * chore(proxy): cover extra_body + azure_ad_token in banned-params check by @stuxf in https://github.com/BerriAI/litellm/pull/27898 * chore(proxy): refuse remote-URL instance-fn loads outside config-file path by @stuxf in https://github.com/BerriAI/litellm/pull/27801 * Worktree fix mcp byok oauth by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/27892 * fix: harden /key/update authorization checks by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/27878 * [Infra] Bump Extras Version by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27908 * [Infra] Build UI by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27907 * fix(spend-logs): redact echoed prompts in error_information by @yassin-berriai in https://github.com/BerriAI/litellm/pull/27689 * [Infra] Promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/27906 ## New Contributors * @MackDing made their first contribution in https://github.com/BerriAI/litellm/pull/26419 * @he-yufeng made their first contribution in https://github.com/BerriAI/litellm/pull/26401 * @oss-pr-review-agent-shin[bot] made their first contribution in https://github.com/BerriAI/litellm/pull/27375 * @SHARP155 made their first contribution in https://github.com/BerriAI/litellm/pull/27466 * @dgu1-godaddy made their first contribution in https://github.com/BerriAI/litellm/pull/26834 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.84.0...v1.85.0
## 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.83.14-stable.patch.3 ``` **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.83.14-stable.patch.3/cosign.pub \ ghcr.io/berriai/litellm:v1.83.14-stable.patch.3 ``` 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 ``` --- **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.83.14-stable.patch.2...v1.83.14-stable.patch.3