v1.90.0
ictnlp/LLaMA-Omniv1.90.0Jun 27, 2026by yuneng-berri
AI Summary
This release focuses on Docker image security verification using cosign and introduces support for the Claude Fable 5 model across multiple providers. It also includes significant UI improvements and a refactor of the Bedrock toolSpec implementation.
Key Highlights
- Docker images are now cryptographically signed for verification using cosign.
- Claude Fable 5 model added to Anthropic, Bedrock, Vertex AI, and Azure AI providers.
- UI enhancements include budget duration editing and guardrail tab defaults.
- Rate limit errors are now standardized with specific fields like category and rate_limit_type.
New Features
- Claude Fable 5 support
- Standardized rate limit errors
- Models and repository layers
- Budget duration in edit team member form
Full Release Notes
## Verify Docker Image Signature All LiteLLM Docker images are signed with [cosign](https://docs.sigstore.dev/cosign/overview/). Every release is signed with the same key introduced in [commit `0112e53`](https://github.com/BerriAI/litellm/commit/0112e53046018d726492c814b3644b7d376029d0). **Verify using the pinned commit hash (recommended):** A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key: ```bash cosign verify \ --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.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.90.0/cosign.pub \ ghcr.io/berriai/litellm:v1.90.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(responses-bridge): map system-only chat request to system input item by @milan-berri in https://github.com/BerriAI/litellm/pull/29817 * feat(bedrock): forward strict and additionalProperties to Converse toolSpec by @mateo-berri in https://github.com/BerriAI/litellm/pull/29814 * fix(mcp): highlight MCP cards red when the logged-in user is missing per-user env vars by @mateo-berri in https://github.com/BerriAI/litellm/pull/29856 * feat(ui): add budget duration to edit team member form by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29717 * fix(ui): make workflow runs page fill full width by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29868 * feat: standardize rate limit errors with category, rate_limit_type, model, and llm_provider fields by @mateo-berri in https://github.com/BerriAI/litellm/pull/27687 * fix(ui): default guardrails page to the Guardrails tab by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29872 * docs(readme): add Deploy on AWS/GCP Terraform section and fix deploy button rendering by @mateo-berri in https://github.com/BerriAI/litellm/pull/29879 * refactor(bedrock): build Converse toolSpec via a BedrockToolSpec dict subclass by @mateo-berri in https://github.com/BerriAI/litellm/pull/29869 * feat(litellm): add models and repository layers by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29686 * feat(ui): include internal routes in the dashboard's generated OpenAPI types by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29885 * feat(proxy): publish /v2/model/info in Swagger OpenAPI spec by @Sameerlite in https://github.com/BerriAI/litellm/pull/29900 * refactor(ui): single source of truth for migrated-page routing by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29949 * fix(ui/model-hub): render provider icons on the public model hub by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29958 * fix(ui): keep create guardrail modal open on outside click by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29871 * fix(ui): label default key type as "Full Access" on key edit page by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29870 * fix(ui): unify migrated-route URLs and migrate the API Reference page by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29953 * fix(mcp): let non-creator users OAuth into OBO-mode MCP servers from the Tools page by @tin-berri in https://github.com/BerriAI/litellm/pull/29867 * Litellm oss staging 080626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/29932 * feat(galileo): add health check support for UI callback test by @Sameerlite in https://github.com/BerriAI/litellm/pull/29908 * fix(model-management): allow deleting a BYOK model after its team is deleted by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29875 * feat(jwt-auth): opt-in fallback to DB team on unresolved JWT claim by @milan-berri in https://github.com/BerriAI/litellm/pull/28913 * fix(team_endpoints): don't block /team/update on unchanged team budget by @milan-berri in https://github.com/BerriAI/litellm/pull/29525 * fix(fireworks): enable tool calling for glm-5p1 in model cost map by @milan-berri in https://github.com/BerriAI/litellm/pull/29697 * fix(vertex): propagate Vertex AI metadata in streaming success callbacks by @Sameerlite in https://github.com/BerriAI/litellm/pull/29899 * fix(ui): show team projects to internal users on key creation by @milan-berri in https://github.com/BerriAI/litellm/pull/28855 * build(deps): bump pyjwt to 2.13.0 and ws override to 8.20.1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29982 * fix(team-management): delete a team's BYOK models when the team is deleted by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29977 * feat(vantage): include organization metadata in FOCUS Tags export by @milan-berri in https://github.com/BerriAI/litellm/pull/28184 * fix(guardrails): read CrowdStrike AIDR identity from both metadata bags by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29991 * fix(mcp): mirror upstream token lifetime instead of forcing a 1h OBO expiry by @tin-berri in https://github.com/BerriAI/litellm/pull/29951 * feat(azure_ai): add MAI-Image-2.5 image generation support by @Sameerlite in https://github.com/BerriAI/litellm/pull/29688 * fix(mcp): load MCP tool configuration tools via the OBO/passthrough-aware GET path by @tin-berri in https://github.com/BerriAI/litellm/pull/29960 * fix(team): reserve team budget raises for proxy admins on /team/update by @milan-berri in https://github.com/BerriAI/litellm/pull/30030 * test(ui): data-driven App Router migration E2E smoke (default + server-root-path) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29974 * fix(proxy): extend response headers hook to streaming, TTS, image gen, and pass-through by @michelligabriele in https://github.com/BerriAI/litellm/pull/24232 * chore(ui): remove dead App Router route stubs under (dashboard) by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30045 * fix(ui/mcp): reset OAuth state on create-server modal close so a prior server's token no longer leaks into the next add-server session by @tin-berri in https://github.com/BerriAI/litellm/pull/30000 * fix(mcp): allow team access-group grants in OAuth authorize/token access check by @tin-berri in https://github.com/BerriAI/litellm/pull/30041 * docs(security): require a reproduction video for vulnerability reports by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30063 * feat(ui): add admin flag to disable in-product UI nudges for everyone by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29796 * chore(ui): remove dead dashboard files and unused dependencies by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30047 * fix(proxy): authorize batch files using upload target_model_names (LIT-3593) by @Sameerlite in https://github.com/BerriAI/litellm/pull/30009 * Add Claude Fable 5 across Anthropic, Bedrock, Vertex AI, and Azure AI by @mateo-berri in https://github.com/BerriAI/litellm/pull/30064 * Add Claude Fable 5 cost map entries (data-only hotfix for the hosted map) by @mateo-berri in https://github.com/BerriAI/litellm/pull/30076 * fix(caching): restore stored prompt_tokens on embedding cache hits instead of recomputing by @michelligabriele in https://github.com/BerriAI/litellm/pull/30046 * Litellm oss 090626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/30021 * fix(proxy): self-heal startup/reload prisma reads on engine disconnect by @michelligabriele in https://github.com/BerriAI/litellm/pull/28803 * chore(ui): make knip recognize .mjs scripts and openapi-typescript by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30052 * fix(register_model): preserve built-in cache pricing when registering custom overrides under unmapped keys by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30044 * [internal copy of #28007] Fix/gcp model garden streaming by @mateo-berri in https://github.com/BerriAI/litellm/pull/28363 * feat(cli): per-agent `lite claude` / `codex` / `opencode` commands that wrap coding agents through the proxy by @mateo-berri in https://github.com/BerriAI/litellm/pull/29850 * fix(callbacks): forward callback_settings to callback initializers and guard consumers against non-dict values by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30161 * fix(mcp): drop orphaned per-user credential rows when an MCP server is deleted by @tin-berri in https://github.com/BerriAI/litellm/pull/30141 * fix(proxy): recover from cached-plan errors by reconnecting the Prisma client by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29983 * feat(proxy): add option to disable server-side prepared statements for DB lookups by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29984 * fix(release): stop backport releases from overwriting the latest badge by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30005 * feat: add conventional commits and coding guidelines by @mateo-berri in https://github.com/BerriAI/litellm/pull/30159 * fix(proxy): return 5xx on DB infra errors during auth; reserve 401 for genuine auth failures by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29986 * fix(ui): dev server 404s on migrated-page links because uiBase hardcodes /ui by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30169 * refactor(ui): consolidate dashboard to one shell in the (dashboard) layout by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30166 * fix(proxy): align /v1/model/info with router deployments by @Sameerlite in https://github.com/BerriAI/litellm/pull/30025 * fix: completion_cost AttributeError on streaming Anthropic web_search responses (#26153) by @ishaan-berri in https://github.com/BerriAI/litellm/pull/27346 * [internal copy of #30137] perf(realtime): eliminate redundant per-frame JSON work on OpenAI realtime relay by @mateo-berri in https://github.com/BerriAI/litellm/pull/30142 * feat(bedrock): aws_bedrock_project_id for bedrock-mantle project / workspace association by @mateo-berri in https://github.com/BerriAI/litellm/pull/30163 * chore(hooks): enforce Conventional Commits and Conventional Branches by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30174 * feat(rate-limiter): allow opting out of v3 TPM reservation and Redis circuit breaker by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30211 * feat(spend_logs): opt-in native Postgres partitioning for SpendLogs retention by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29466 * feat(ui): migrate playground to path routing and colocate its files by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30185 * feat(ui): migrate projects and access-groups to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30226 * fix(proxy): coalesce NULL rollup metrics in aggregated daily-activity by @michelligabriele in https://github.com/BerriAI/litellm/pull/30151 * fix(anthropic_passthrough): resolve costing model from message_start chunk, litellm_params and model_group instead of 'unknown' by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30160 * feat(ui): migrate budgets, workflows, and guardrails-monitor to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30236 * feat(ui): migrate mcp-servers, search-tools, tag-management, vector-stores, and memory to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30261 * fix(a2a): forward agent_extra_headers through completion bridge by @mateo-berri in https://github.com/BerriAI/litellm/pull/28277 * fix(gemini-live): forward audio buffer commit and correct Vertex PCM rate by @Sameerlite in https://github.com/BerriAI/litellm/pull/29946 * fix(proxy): skip double-wrapping unified batch output file ids on retrieve by @Sameerlite in https://github.com/BerriAI/litellm/pull/30011 * feat: litellm oss 110626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/30202 * fix(docker): copy only runtime artifacts into the final image by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30243 * feat(proxy): enforce key/team guardrails on bedrock passthrough routes by @Sameerlite in https://github.com/BerriAI/litellm/pull/30194 * feat(gemini): forward web search tools in image generation by @Sameerlite in https://github.com/BerriAI/litellm/pull/30119 * fix: bedrock mantle fixes by @Sameerlite in https://github.com/BerriAI/litellm/pull/30083 * feat(proxy): add require_managed_files setting for file uploads by @Sameerlite in https://github.com/BerriAI/litellm/pull/30186 * fix(mcp): honor server_id for REST tool calls with shared upstream URLs by @Sameerlite in https://github.com/BerriAI/litellm/pull/30184 * fix(responses): presidio PII masking for Azure WebSocket and streaming by @Sameerlite in https://github.com/BerriAI/litellm/pull/30003 * feat(passthrough): add configurable pass-through request timeouts by @Sameerlite in https://github.com/BerriAI/litellm/pull/30266 * fix(google_genai): preserve complete SSE events in Vertex/Gemini image streaming by @Sameerlite in https://github.com/BerriAI/litellm/pull/30270 * fix(proxy): populate access_via_team_ids on /v1/model/info by @Sameerlite in https://github.com/BerriAI/litellm/pull/30274 * chore(oss): litellm oss staging 120626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/30292 * feat(ui): migrate policies, guardrails, prompts, tool-policies, and skills to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30263 * feat(ui): migrate caching, cost-tracking, transform-request, ui-theme, and logs to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30267 * fix(ui): gate dashboard layout on ui config load so deep links work under SERVER_ROOT_PATH by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30312 * feat(ui): migrate admin-panel, logging-and-alerts, model-hub-table, and usage to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30268 * fix(otel): cap metric attribute cardinality with include/exclude lists by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30257 * fix(proxy): grace-period key rotation 401s; return deprecated-key lookup result directly by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30327 * chore(deps): bump vitest, brace-expansion, pypdf and tornado by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30220 * refactor(ui): remove unreachable /chat page by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30178 * feat(ui): migrate agents and router-settings to path routes by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30323 * feat: strengthen coding conventions in CLAUDE.md by @mateo-berri in https://github.com/BerriAI/litellm/pull/30333 * feat(ui): cut the users page over to the /ui/users path route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30334 * feat: ruff strict-rule suppressions baseline gate by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30303 * feat(guardrails): add Cisco AI Defense integration (#28249) by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30338 * chore(ui): remove dead UI components unreferenced by any page by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30340 * ci: add osv-scanner lockfile scan workflow by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30222 * fix(otel): record full error message on standard exception event in otel v2 by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30380 * test(fireworks): mock whisper transcription tests instead of live calls by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30391 * build(ui): pin esbuild to 0.28.1 via overrides by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30390 * feat(ui): cut the organizations page over to the /ui/organizations path route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30336 * fix(proxy): support SMTP implicit SSL (port 465) by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30395 * fix(mcp): default Linear MCP registry entry to streamable HTTP by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30396 * fix(ui): stop Virtual Keys page from infinite render loop by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30397 * fix(streaming): guard raise_on_model_repetition against empty choices by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30485 * feat(otel-v2): emit the 6 gen_ai.client.* metrics at parity with v1 by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30326 * fix(mcp): drop phantom 401 span on delegated OAuth2 tool calls by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30494 * feat(ui): cut the teams page over to the /ui/teams path route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30343 * fix(integrations): cap Anthropic cache_control injection at 4 blocks by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30480 * chore(codecov): add Batches, Videos, and Realtime components by @Sameerlite in https://github.com/BerriAI/litellm/pull/30517 * test(batches): move orphan tests into tests/test_litellm for CI coverage by @Sameerlite in https://github.com/BerriAI/litellm/pull/30510 * fix(guardrails): run pre_call hook once for model-level guardrails by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30543 * fix(guardrails): stop re-initializing DB guardrails on every poll by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30542 * chore(oss): litellm oss staging 150626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/30463 * ci(lint): add blanket-noqa, dataclass-default, and unused-noqa Ruff rules by @mateo-berri in https://github.com/BerriAI/litellm/pull/30516 * ci: ratchet lint and type-check gates (ruff preview, ANN, mypy, basedpyright) by @mateo-berri in https://github.com/BerriAI/litellm/pull/30379 * fix(proxy): allow internal roles to access vector store CRUD routes by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30503 * fix(otel): stamp gen_ai.input/output.messages on v2 spans by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30548 * fix(otel): export v2 gen_ai client metrics to the configured meter provider by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30549 * fix(bedrock): preserve cache_control for ARN models in /v1/messages adapter by @mateo-berri in https://github.com/BerriAI/litellm/pull/29823 * fix: greatly increase basedpyright slack by @mateo-berri in https://github.com/BerriAI/litellm/pull/30563 * fix(budget): recompute budget_reset_at when budget_duration changes on /budget/update by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30555 * fix(otel): accept UPPER_SNAKE_CASE OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT in v2 by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30562 * chore(lint): remove PLR0915 too-many-statements ruff rule by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30574 * ci(lint): ratcheted type-discipline gate (mutable collections, casts, guards, kwargs, suppressions) by @mateo-berri in https://github.com/BerriAI/litellm/pull/30500 * feat(proxy): add verification_uri_complete to CLI SSO device flow by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30571 * chore: litellm oss staging160626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/30527 * fix(guardrails): return 400 not 500 when AIM blocks a request by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30573 * ci(lint): grandfather any-discipline with a per-file ratchet budget (50% headroom) by @mateo-berri in https://github.com/BerriAI/litellm/pull/30582 * fix(audio): don't override explicit response_format with verbose_json by @mateo-berri in https://github.com/BerriAI/litellm/pull/30599 * fix(anthropic): price and surface response service_tier in cost tracking by @mateo-berri in https://github.com/BerriAI/litellm/pull/30558 * feat: add dev and wildcard proxy configs for local testing by @mateo-berri in https://github.com/BerriAI/litellm/pull/30556 * fix(proxy): list public team model name in /v1/models by @ishaan-berri in https://github.com/BerriAI/litellm/pull/30588 * ci: drop mypy entirely, standardize type checking on basedpyright by @mateo-berri in https://github.com/BerriAI/litellm/pull/30648 * feat(guardrails): surface OpenAI moderation violation_categories on guardrail traces by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30659 * fix(proxy): resolve list files credentials from team BYOK deployments by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30495 * feat(proxy): add --max_requests_before_restart_jitter to stagger worker restarts by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30601 * fix(health): correct bedrock embedding health checks by @mateo-berri in https://github.com/BerriAI/litellm/pull/30583 * test: harden remaining pass-through CI flakes (image-gen spend poll, ruby assistants timeout) by @mateo-berri in https://github.com/BerriAI/litellm/pull/30685 * test(pass_through): harden vertex spendlog poll against transient empty reads by @mateo-berri in https://github.com/BerriAI/litellm/pull/30683 * fix(cost): stop non-string service_tier from silently dropping cost tracking by @mateo-berri in https://github.com/BerriAI/litellm/pull/30690 * feat(proxy): warn at startup when custom_auth skips common_checks enforcement by @tin-berri in https://github.com/BerriAI/litellm/pull/30665 * fix(pod_lock): release cron lock by matching async_set_cache JSON encoding by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30600 * ci: run a local fake OpenAI endpoint instead of the shared Railway mock by @mateo-berri in https://github.com/BerriAI/litellm/pull/30695 * ci(windows): pin uv to Python 3.11 so it ignores the preinstalled 3.14 by @mateo-berri in https://github.com/BerriAI/litellm/pull/30704 * feat(ui): migrate models page to App Router path route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30677 * refactor(ui): remove orphaned pass-through-settings route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30692 * fix(cost): stop non-string response service_tier from dropping cost tracking by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30706 * feat(agent-shin): automated PR/issue triage, low-quality auto-close, and review-gate label lifecycle by @mateo-berri in https://github.com/BerriAI/litellm/pull/30433 * chore: litellm oss 170626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/30637 * fix(bedrock_mantle): add SigV4 fallback to chat completions auth by @mateo-berri in https://github.com/BerriAI/litellm/pull/30714 * feat(search): add TinyFish as search provider by @simantak-dabhade in https://github.com/BerriAI/litellm/pull/30634 * feat(ui): migrate old usage report to App Router path route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30694 * fix(proxy): enforce budgets against authoritative DB spend when the cross-pod counter is stale by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30684 * chore(ci): remove Agent Shin pull_request_target workflows by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30784 * chore: litellm oss staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/30745 * ci(zizmor): also run on litellm_internal_staging by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30789 * fix(test): drop references to removed Agent Shin workflows by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30791 * chore: remove in-product survey and Claude Code feedback nudges by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30773 * feat(ui): migrate api-keys landing to App Router path route by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30699 * feat(proxy): configurable response headers and login-page hint by @yucheng-berri in https://github.com/BerriAI/litellm/pull/30792 * ci(zizmor): gate PRs on medium+ findings and clear existing ones by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30797 * fix(proxy): use e.request_data for logging_obj in ModifyResponseException streaming passthrough by @mateo-berri in https://github.com/BerriAI/litellm/pull/30800 * chore: make pr template linear portion clearer by @mateo-berri in https://github.com/BerriAI/litellm/pull/30766 * chore(typing): add boto3/botocore stubs so basedpyright resolves the AWS SDK by @mateo-berri in https://github.com/BerriAI/litellm/pull/30815 * fix(otel): one v2 logger owns the global provider; scope tenant OTLP creds per exporter by @yucheng-berri in https://github.com/BerriAI/litellm/pull/30590 * fix(passthrough): recover output tokens for interrupted anthropic streams by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30787 * fix(proxy): record partial spend on the failure row for interrupted streams by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30788 * fix(ui): repoint dead usage guide link to cost tracking docs by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30859 * fix(ui): warn that team models are deleted in the delete-team modal by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29990 * feat(caching): add valkey-semantic cache backend and fix semantic cache scope keys by @yassin-berriai in https://github.com/BerriAI/litellm/pull/30675 * test(ui): isolate OldTeams delete-warning tests from leaked mock by @mateo-berri in https://github.com/BerriAI/litellm/pull/30871 * feat: add lint-gate target and truncation-proof summary to the strict ruff gate by @mateo-berri in https://github.com/BerriAI/litellm/pull/30877 * chore(ui): rebuild ui for release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30894 * chore(ci): bump deps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30899 * fix(watsonx): wrap string embedding input in array for WatsonX API by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/30897 * test: point router/completion/triton tests at the local fake OpenAI endpoint by @mateo-berri in https://github.com/BerriAI/litellm/pull/30900 * feat(sandbox): e2b code execution primitive by @krrish-berri-2 in https://github.com/BerriAI/litellm/pull/30898 * fix(ui): source api-keys identity from useAuthorized to stop "User ID is not set" by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/30903 * chore(ui): rebuild ui by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30906 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/30907 * fix(redis): prevent forcing SSLConnection when ssl=False in connection pool by @Jacopos311 in https://github.com/BerriAI/litellm/pull/30770 * fix(proxy): log UI setup failures instead of silently swallowing by @sarvesh1327 in https://github.com/BerriAI/litellm/pull/30819 ## New Contributors * @simantak-dabhade made their first contribution in https://github.com/BerriAI/litellm/pull/30634 * @Jacopos311 made their first contribution in https://github.com/BerriAI/litellm/pull/30770 * @sarvesh1327 made their first contribution in https://github.com/BerriAI/litellm/pull/30819 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.89.0...v1.90.0