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