v1.89.0
BerriAI/litellmv1.89.0Jun 14, 2026by github-actions[bot]
AI Summary
A major feature release introducing new agent providers (LangFlow, Watsonx), enhanced Vertex AI Search support, and significant improvements to observability, proxy rate limiting, and MCP support.
Key Highlights
- New agent providers: LangFlow and Watsonx Orchestrate.
- Enhanced Vertex AI Search support with engine URLs and per-request parameters.
- OpenTelemetry improvements including guardrail span emission and baggage promotion.
- Proxy rate limiting for MCP servers and graceful shutdown hooks.
- Support for future Claude models via pattern matching.
New Features
- LangFlow agent provider with A2A session bridging.
- Watsonx Orchestrate agent provider.
- Vertex AI Search engine URL support.
- Per-MCP-server RPM rate limiting for keys and teams.
- Native /health/drain preStop hook for graceful proxy shutdown.
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.89.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.89.0/cosign.pub \ ghcr.io/berriai/litellm:v1.89.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 * test(responses): bump deprecated gemini-3-pro-preview to gemini-3.1-pro-preview by @mateo-berri in https://github.com/BerriAI/litellm/pull/29433 * fix: map mistral/ministral-8b-latest in model price map by @mateo-berri in https://github.com/BerriAI/litellm/pull/29453 * fix(datadog): split oversized batches on 413 instead of re-queueing forever by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29444 * feat(otel): allowlist team_metadata sub-keys promoted to baggage by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29442 * fix: stop use_chat_completions_api flag from leaking into provider request body by @mateo-berri in https://github.com/BerriAI/litellm/pull/29447 * fix(anthropic, fireworks): inline legacy $ref defs in tool schemas by @milan-berri in https://github.com/BerriAI/litellm/pull/28646 * fix(proxy): omit OpenAI [DONE] on google-genai streamGenerateContent by @Sameerlite in https://github.com/BerriAI/litellm/pull/29426 * ci(release): create stable/X.Y.x line branch on X.Y.0 tags by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29457 * fix(vector-stores): support engines URL for Vertex AI Search by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/27885 * fix(ui): render caller-supplied filter options in caller order by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29462 * fix(batches): skip unnecessary batch input file reads by @Sameerlite in https://github.com/BerriAI/litellm/pull/29114 * docs(agents): clarify when to create new test files by @Sameerlite in https://github.com/BerriAI/litellm/pull/29472 * Litellm OSS Staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/29161 * fix(mcp): clear allowed_tools and tool overrides on MCP server edit by @Sameerlite in https://github.com/BerriAI/litellm/pull/29411 * Litellm OSS Staging 010626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/29422 * fix(ci): make CircleCI rerun-failed-tests collect tests when 2+ test files fail by @mateo-berri in https://github.com/BerriAI/litellm/pull/29475 * feat(a2a): watsonx Orchestrate agent provider by @Sameerlite in https://github.com/BerriAI/litellm/pull/29410 * fix(azure_ai): strip tool-level extra fields on 400 and retry by @Sameerlite in https://github.com/BerriAI/litellm/pull/29479 * fix(docs): remove fixed dimensions from README hero image by @mateo-berri in https://github.com/BerriAI/litellm/pull/29496 * Litellm oss staging by @Sameerlite in https://github.com/BerriAI/litellm/pull/29492 * fix: small CLAUDE.md nits by @mateo-berri in https://github.com/BerriAI/litellm/pull/29504 * Add MCP semantic conventions to otelv2 by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29468 * fix(passthrough): emit otel guardrail span when a guardrail blocks by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29470 * fix(proxy): strip NUL bytes from spend log payloads to prevent PostgreSQL 22P05 by @milan-berri in https://github.com/BerriAI/litellm/pull/29515 * [internal copy of #28008] Support MCP OAuth passthrough and issuer-scoped JWT auth by @mateo-berri in https://github.com/BerriAI/litellm/pull/28356 * feat(vector-stores): forward per-request params to Vertex AI Search by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29459 * feat(proxy): add per-MCP-server RPM rate limiting for keys and teams by @Sameerlite in https://github.com/BerriAI/litellm/pull/29482 * fix(tests): drop module-level test calls that break local_testing collection by @mateo-berri in https://github.com/BerriAI/litellm/pull/29520 * feat(agents): add LangFlow agent provider with A2A session bridging by @Sameerlite in https://github.com/BerriAI/litellm/pull/28963 * fix(ui/agents): make A2A skill tags enterable and validated by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29512 * [internal copy of #29232] feat: route future Claude models to Anthropic provider via pattern matching by @mateo-berri in https://github.com/BerriAI/litellm/pull/29239 * fix(tests): drop import-time completion call in test_register_model by @mateo-berri in https://github.com/BerriAI/litellm/pull/29521 * test: stabilize batch VCR coverage and stop live upload/network leaks by @mateo-berri in https://github.com/BerriAI/litellm/pull/29477 * [internal copy of #29003] fix(vertex_ai): use user-supplied api_base as is for Model Garden OpenAI-compat path by @mateo-berri in https://github.com/BerriAI/litellm/pull/29530 * feat(proxy): native /health/drain preStop hook for graceful shutdown by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29439 * fix(auth): preserve 401 status for expired JWTs in OTel traces by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29510 * fix(otel): capture 401 error details in management endpoint spans by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29535 * test(proxy/utils): pin bottom-of-file helper behavior by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29509 * test(proxy/utils): pin PrismaClient and spend-update behavior by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29488 * test(proxy/utils): pin ProxyLogging behavior by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29485 * fix: missing span for guardrail passthrough by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29552 * fix(auth): let internal users view search tools by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29542 * fix: missing mcp otel attributes by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29554 * fix(proxy): resolve managed video model ids for auth by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/29545 * fix(key_generate): allow team members to create keys on org-scoped teams by @milan-berri in https://github.com/BerriAI/litellm/pull/29310 * test(pass-through): move Gemini pass-through tests to gemini-3.1-flash-lite by @mateo-berri in https://github.com/BerriAI/litellm/pull/29595 * Litellm oss staging 030626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/29578 * Fix : a2a bugs 030626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/29566 * [internal copy of #29533] fix(anthropic/adapter): emit thinking block for reasoning_content-only streaming chunks by @mateo-berri in https://github.com/BerriAI/litellm/pull/29600 * ci: reproduce default-Windows wheel install to guard MAX_PATH by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29597 * fix(vertex): strip output_config.effort for Vertex Claude models that reject it (Haiku 4.5) by @mateo-berri in https://github.com/BerriAI/litellm/pull/29585 * Litellm websocket improvements by @Sameerlite in https://github.com/BerriAI/litellm/pull/29563 * feat(arize/phoenix): OpenInference rendering parity — tool_calls, cost, passthrough I/O, session/user, multimodal, cache tokens by @milan-berri in https://github.com/BerriAI/litellm/pull/28800 * [internal copy of #29550] fix: passthrough endpoints duplicate logs by @mateo-berri in https://github.com/BerriAI/litellm/pull/29598 * fix(ci): keep coverage rename green when a parallel node runs no tests by @mateo-berri in https://github.com/BerriAI/litellm/pull/29608 * test(vcr): close out the remaining VCR live-call leaks by @mateo-berri in https://github.com/BerriAI/litellm/pull/29603 * fix(key_generate): exempt UI/CLI session tokens from the budget ceiling for team keys by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29612 * fix(realtime): allow null transcripts in stream logging payloads by @milan-berri in https://github.com/BerriAI/litellm/pull/29625 * build(ui): migrate eslint to flat config + bump eslint-config-next to 16 by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29626 * fix(key_generate): scope session-token team-key budget exemption to caller-supplied team_id by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29641 * fix(proxy): disable proxy buffering on streaming SSE responses by @mateo-berri in https://github.com/BerriAI/litellm/pull/29557 * fix(mcp): gate /public/mcp_hub strictly on litellm.public_mcp_servers by @michelligabriele in https://github.com/BerriAI/litellm/pull/27764 * ci(ui): frontend-lint job enforcing prettier + eslint on changed files by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29633 * fix(gemini): googleSearch + server-side tools and googleMaps JSON schema by @Sameerlite in https://github.com/BerriAI/litellm/pull/29582 * fix(proxy): passthrough 404 when SERVER_ROOT_PATH is set by @Sameerlite in https://github.com/BerriAI/litellm/pull/29658 * fix(gemini-realtime): use GA event names for Pipecat 1.3.x compatibility by @Sameerlite in https://github.com/BerriAI/litellm/pull/29662 * Litellm oss staging 040626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/29671 * style(ui): prettier formatting pass over the dashboard by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29622 * chore: ignore prettier dashboard reformat in git blame by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29695 * fix(helm): Enable Backend Deployment to mount Gateway config.yaml by @tin-berri in https://github.com/BerriAI/litellm/pull/29605 * [internal copy of #29277] fix(proxy): add default=None to LiteLLM_TeamMembership.litellm_budget_table by @mateo-berri in https://github.com/BerriAI/litellm/pull/29684 * test: make custom_tokenizer proxy tests hermetic by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29643 * test(proxy): stop running real-DB tests in GitHub Actions unit jobs by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29700 * chore(ui): remove the bare-fetch lint rule by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29712 * Litellm jwt mapping virtualkeys by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/28510 * refactor(ui): shared HTTP client + location-pinned fetch() lint rule by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29723 * fix(proxy): stop team BYOK model name corruption on model edit by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29731 * [internal copy of #29511] feat(guardrails): add sensitive data routing to on-premise models by @mateo-berri in https://github.com/BerriAI/litellm/pull/29531 * fix(proxy/hooks): populate llm_provider on internal rate-limit errors by @mateo-berri in https://github.com/BerriAI/litellm/pull/27707 * fix(vertex/anthropic): handle namespace tools and strip client_metadata for codex compatibility by @Sameerlite in https://github.com/BerriAI/litellm/pull/29489 * Support OAuth M2M for Databricks Apps A2A agents by @mateo-berri in https://github.com/BerriAI/litellm/pull/29586 * fix: small CLAUDE.md nit by @mateo-berri in https://github.com/BerriAI/litellm/pull/29749 * fix(anthropic): route Claude Opus 4.8 through adaptive thinking by @mateo-berri in https://github.com/BerriAI/litellm/pull/29702 * fix(proxy): persist oauth2_flow on MCP server registration by @michelligabriele in https://github.com/BerriAI/litellm/pull/29690 * [internal copy of #27491] fix(realtime): Fix Realtime Audio Token Cost Tracking by @mateo-berri in https://github.com/BerriAI/litellm/pull/29722 * fix(galileo): use ingest traces API and standard logging payload by @Sameerlite in https://github.com/BerriAI/litellm/pull/29651 * fix(auth): expand all-team-models sentinel in can_key_call_model for batch validation by @Sameerlite in https://github.com/BerriAI/litellm/pull/29746 * test(vcr): stop refreshing cassette TTL on read so cassettes lapse after 24h by @mateo-berri in https://github.com/BerriAI/litellm/pull/29784 * test(ci): record/replay OpenAI image gen so the spend E2E isn't outage-bound by @mateo-berri in https://github.com/BerriAI/litellm/pull/29787 * fix(ui): route MCP playground auth by oauth2 mode instead of token_url by @tin-berri in https://github.com/BerriAI/litellm/pull/29714 * refactor(ui): centralize proxy base URL resolution into tested resolver by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29793 * Litellm oss staging 050626 by @Sameerlite in https://github.com/BerriAI/litellm/pull/29774 * test(google): add google-genai SDK proxy integration tests by @Sameerlite in https://github.com/BerriAI/litellm/pull/29781 * fix(jwt): use resolved DB user_id for spend on legacy email match by @milan-berri in https://github.com/BerriAI/litellm/pull/29217 * feat(ui): generate dashboard API types from the proxy OpenAPI spec by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29816 * fix(proxy): drop deleted team BYOK model name from team.models by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29820 * feat(mcp): per-server env vars with global + per-user scopes by @mateo-berri in https://github.com/BerriAI/litellm/pull/28917 * refactor(ui): route behavior-preserving networking calls through apiClient by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29806 * fix(mcp): persist Tools-tab MCP OAuth token to DB by @tin-berri in https://github.com/BerriAI/litellm/pull/29809 * fix(ui): require new expiration when regenerating an expired key by @milan-berri in https://github.com/BerriAI/litellm/pull/29838 * refactor(ui): route query-building networking calls through apiClient by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/29815 * Make the image-gen record/replay proxy report cache mode and per-request HIT/MISS by @mateo-berri in https://github.com/BerriAI/litellm/pull/29802 * feat(proxy): hot-reload .env in dev when running with --reload by @mateo-berri in https://github.com/BerriAI/litellm/pull/29783 * fix(ui): stop MCP playground tool calls from sending twice by @tin-berri in https://github.com/BerriAI/litellm/pull/29821 * feat(fal_ai): add Nano Banana / Gemini 2.5 Flash Image generation support by @mateo-berri in https://github.com/BerriAI/litellm/pull/29798 * Title: Fix managed batch cancel credential resolution by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/29734 * Title: fix(proxy): resolve vector store file list credentials from team deployments by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/29739 * refactor: convert AWS and GCP Terraform stacks into reusable modules … by @yassin-berriai in https://github.com/BerriAI/litellm/pull/28103 * chore(ui): build ui for release by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29853 * fix(terraform/gcp): prompt for image_registry in DeployStack one-click by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29852 * fix(terraform/gcp): abandon SQL user on destroy by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29855 * Extend the record/replay proxy to chat, embeddings, moderations, rerank, and Anthropic by @mateo-berri in https://github.com/BerriAI/litellm/pull/29847 * chore(deps): bump deps by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29860 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29861 * fix: 400 on Anthropic context overflow; seed identity on failed auth by @yassin-berriai in https://github.com/BerriAI/litellm/pull/29848 * chore(ci): promote internal staging to main by @yuneng-berri in https://github.com/BerriAI/litellm/pull/29862 * chore(release): patch v1.89.0-rc.1 with #30064 (Claude Fable 5) for v1.89.0-rc.2 by @mateo-berri in https://github.com/BerriAI/litellm/pull/30143 **Full Changelog**: https://github.com/BerriAI/litellm/compare/v1.88.0...v1.89.0