v1.95.0-dev.2
Pre-release
Pre-release
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.95.0-dev.2Verify 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.95.0-dev.2/cosign.pub \
ghcr.io/berriai/litellm:v1.95.0-dev.2Expected 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
- test(e2e): add weekly session-anomaly load test against real providers by @mateo-berri in #34166
- fix(bedrock): emit Nova Sonic realtime session.created on connect and session.updated on session.update by @mubashir1osmani in #34133
- feat(guardrails): add only_scan_new_messages for per-session incremental scanning by @devin-ai-integration[bot] in #33278
- fix(proxy): share CLI SSO login sessions across workers without enable_redis_auth_cache by @devin-ai-integration[bot] in #33261
- test(e2e): move Admin UI Playwright suite to tests/e2e/ui by @ryan-crabbe-berri in #34196
- fix(scim): use members_with_roles as the source of truth for group membership by @yassin-berriai in #34162
- fix(scim): sync team roster and dedup teams for existing-user email upsert by @yassin-berriai in #34183
- fix(proxy): raise dashboard session budget default to $1 and make it configurable in config and Admin UI by @tin-berri in #34146
- fix(scim): prune deleted user from teams' members_with_roles by @yassin-berriai in #34180
- test(e2e): fail the run when a Rust gateway silently serves /messages through Python by @yassin-berriai in #34208
- fix(team): make team member add atomic to prevent concurrent-add member loss by @yassin-berriai in #34185
- fix(ui): surface SSO and SMTP settings supplied as process env vars by @tin-berri in #33576
- fix(scim): parse membership id from filtered PATCH path when value omitted by @yassin-berriai in #34181
- fix(ui): remove misleading os.environ tooltip from logging settings by @devin-ai-integration[bot] in #34305
- fix(anthropic): strip uniqueItems + other unsupported array/object constraints from output_format schema by @mateo-berri in #34313
- fix(e2e): satisfy basedpyright in test_session_anomaly so the e2e lint gate passes by @devin-ai-integration[bot] in #34288
- refactor(proxy): type the PATCH /team/{team_id} request body by @yuneng-berri in #34195
- feat(ui): edit fallback chains from router settings by @devin-ai-integration[bot] in #32841
- fix(mcp): use official Google Drive streamable HTTP MCP server by @devin-ai-integration[bot] in #34322
- refactor(ui): migrate api-reference to shadcn by @yuneng-berri in #34263
- refactor(ui): migrate prompts list page to shadcn by @yuneng-berri in #34289
- refactor(ui): migrate old-usage to shadcn by @yuneng-berri in #34304
- refactor(ui): migrate transform-request to shadcn by @yuneng-berri in #34303
- chore(ui): bump next to 16.2.11 by @yuneng-berri in #34329
- test(e2e): cover key max_budget blocks on personal, team, and team-member keys by @ryan-crabbe-berri in #33895
- fix(tests): remove importlib.reload of http_handler that breaks client injection in later tests by @mateo-berri in #34336
- test(e2e): require a cache-hit row instead of skipping when absent by @devin-ai-integration[bot] in #34283
- fix(mcp): fall through to an ephemeral DCR mint when passthrough authorize has no client_id by @tin-berri in #33884
- ci: run UI unit tests on a 16-core runner by @yuneng-berri in #34330
- test(e2e): induce spend failure row deterministically instead of skipping by @devin-ai-integration[bot] in #34282
- chore(ui): add filename, size, JSX-handler, prefer-const, and antd lint rules by @ryan-crabbe-berri in #34341
- fix(responses): preserve reasoning through prompt hooks by @devin-ai-integration[bot] in #33422
- fix(budget): resolve word-form budget_duration so it no longer silently resets daily by @devin-ai-integration[bot] in #34250
- fix(bedrock): include type in tool_choice disable_parallel_tool_use config for Converse by @mateo-berri in #34347
- fix(autoroute): discover models via /v1/models so an AI-API-only key works by @devin-ai-integration[bot] in #34259
- feat(ui): give each Models + Endpoints tab its own path by @ryan-crabbe-berri in #34327
- feat(organization): add RESTful PATCH /v2/organization/{organization_id} by @ryan-crabbe-berri in #32350
- refactor(ui): migrate search-tools info view to shadcn by @yuneng-berri in #34323
- fix(docker): bake non_root prisma engines at /opt/prisma so migrations run offline for any uid by @yuneng-berri in #34325
- fix(anthropic): strip all remaining output_format schema keywords rejected by Anthropic by @mateo-berri in #34319
- fix(sagemaker): forward stream events as they arrive to cut TTFT by @devin-ai-integration[bot] in #34338
- test(e2e): cover key budget_duration resets on personal, team, and team-member keys by @ryan-crabbe-berri in #33896
- feat(mcp): admit gateway DCR session bearers at the aggregate /mcp scope by @tin-berri in #33190
- fix(mcp): log actionable OAuth discovery failures for misconfigured server urls by @tin-berri in #34225
- refactor(ui): migrate workflow runs to shadcn by @yuneng-berri in #34370
- refactor(ui): migrate models and endpoints table onto the shared DataTable by @yuneng-berri in #34363
- test(e2e): drive a real Linear OAuth MCP through chat completions under both ingress headers by @tin-berri in #33787
- refactor(ui): migrate request logs table onto the shared DataTable by @yuneng-berri in #34343
- feat(ui): rebuild Organization Settings on react-hook-form + zod with a dirty-field PATCH by @ryan-crabbe-berri in #34324
- refactor(e2e): drop require_env, read os.environ where a cred is used by @mubashir1osmani in #34413
- refactor(mcp): delete unreachable v1 OBO handler and gate REST OAuth on v2 resolver by @tin-berri in #34407
- feat(cost-optimization): add spend-by-tool and cache leakage views by @devin-ai-integration[bot] in #33978
- refactor(ui): migrate agents to shadcn by @yuneng-berri in #34365
- refactor(ui): extract shared tab-routing helpers and adopt them in Models + Endpoints by @ryan-crabbe-berri in #34435
- feat(proxy): add overwrite_user_with_key_hash to stamp outgoing user param with key hash by @ryan-crabbe-berri in #34417
- fix(ui): find logs by request id across pages and dates (LIT-3981) by @ryan-crabbe-berri in #31743
- fix(proxy): reject failed atomic budget reservations under fail_closed_budget_enforcement by @ryan-crabbe-berri in #34429
- ci: only run CodSpeed benchmarks on backend changes by @devin-ai-integration[bot] in #34345
- fix(cost_tracking): map OpenAI cache_write_tokens for prompt cache creation billing by @devin-ai-integration[bot] in #34046
- fix(proxy): restore atomic user upsert when adding team members by @yuneng-berri in #34457
- chore(ci): promote internal staging to main by @yuneng-berri in #34450
Full Changelog: v1.95.0-dev.1...v1.95.0-dev.2