Skip to content

v1.97.0-dev.1

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Aug 08:14
ead6252

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.97.0-dev.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:

cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.97.0-dev.1/cosign.pub \
  ghcr.io/berriai/litellm:v1.97.0-dev.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(proxy): resolve Cursor thinking/fast model-name suffixes on /cursor/chat/completions by @mateo-berri in #35554
  • fix(team-callbacks): actually stop logging when disable_logging is called by @yucheng-berri in #35520
  • refactor(lint): drop redundant !s f-string conversion flags and fix displaced import-group comments by @mateo-berri in #35546
  • fix(proxy): backfill null user_email on existing users during JWT auth by @devin-ai-integration[bot] in #34588
  • feat(playground): add non-streaming response toggle by @ryan-crabbe-berri in #35560
  • feat(teams): apply default organization to new teams from default team settings by @ryan-crabbe-berri in #35540
  • fix(ui): block Playground page for viewer roles on direct URL access by @ryan-crabbe-berri in #35676
  • fix(caching): close evicted LLM clients so their connections are reclaimed by @yassin-berriai in #35492
  • chore(deps): update brace-expansion, postcss, and gitpython to current patch releases by @yuneng-berri in #35692
  • refactor(ui): rename the create MCP server component to PascalCase by @yuneng-berri in #35686
  • fix(openai): drop undefined Union from owns_wrapped_http_client annotation by @ryan-crabbe-berri in #35706
  • fix(openai): drop the undefined Union from owns_wrapped_http_client by @devin-ai-integration[bot] in #35704
  • chore(ui): note Google's Agent Platform rename in vector store setup by @ryan-crabbe-berri in #28076
  • fix(proxy): apply key/team router_settings.model_group_alias by @yassin-berriai in #35486
  • feat(complexity_router): default session affinity off and expose it in the UI by @tin-berri in #35714
  • fix(datadog): read team callback dd_* params from kwargs instead of blocked dynamic params (#35115 port) by @ryan-crabbe-berri in #35687
  • refactor(ui): extract the MCP create form's logic and field groups by @yuneng-berri in #35694
  • test(ui): tier the MCP create tests into unit and integration by @yuneng-berri in #35697
  • fix(proxy): redact credential headers from request logging copies by @yucheng-berri in #35678
  • feat(guardrails/rubrik): prompt moderation, response-text blocking, streaming buffer, failure logging by @devin-ai-integration[bot] in #35722
  • fix(ui): render Responses API request and response in the logs drawer by @yuneng-berri in #35718
  • fix(ui): hide guardrail review buttons from non-admin users by @ryan-crabbe-berri in #27535
  • feat(team): custom metadata validation hook for team create and update by @yuneng-berri in #33353
  • ci(circleci): install a pinned Rust toolchain on the Linux jobs by @yuneng-berri in #35519
  • fix(bedrock): stop forwarding no-op toolSpec.strict to Converse by @tin-berri in #35688
  • fix(ui): reject an auto-router keyword rule left empty instead of dropping it by @tin-berri in #35705
  • fix(guardrails/rubrik): attribute blocked requests to the caller that made them by @yucheng-berri in #35734
  • fix(responses): forward client headers to the provider on /v1/responses by @devin-ai-integration[bot] in #34531
  • feat(spend): add net auto-router savings to the cost-optimization dashboard by @tin-berri in #35521
  • chore(typing): clear basedpyright Any errors in budget reset, access groups, and cache settings by @mateo-berri in #35719
  • fix(spend): read what a request cost from the record instead of pricing it again by @tin-berri in #35736
  • perf: install hiredis so redis-py parses replies with its C parser by @Classic298 in #35709
  • feat(ui): show auto-router savings on the cost-optimization dashboard by @tin-berri in #35522
  • perf: build log messages lazily so filtered-out log records cost nothing by @Classic298 in #35703
  • fix(proxy): retry model cost map fetch with Retry-After-aware backoff and keep current map on reload failure by @ryan-crabbe-berri in #35739
  • feat(otel): stamp service tier attributes on inference spans by @devin-ai-integration[bot] in #35679
  • fix(proxy): log the model cost map reload failure lazily by @tin-berri in #35750
  • fix(groq): translate web_search_options to the browser_search tool by @hMED22 in #34971
  • feat(ui): add admin-configurable user banner by @yuneng-berri in #35729
  • fix(e2e): make spend-counter redis connection env-driven for non-cluster deployments by @yuneng-berri in #35732
  • fix(proxy): make /cursor/chat/completions work with Cursor agent mode by @tin-berri in #34029
  • fix(proxy): propagate user_email and bind api_key on JWT auth attribution paths by @devin-ai-integration[bot] in #34331
  • chore(build): move the Admin UI toolchain to Node 24 by @yuneng-berri in #35801
  • test(e2e): vendor API strategy coverage across endpoints by @mubashir1osmani in #34649
  • chore(deps): upgrade cryptography to 50.0.0 by @yuneng-berri in #35803
  • test(e2e): cover legacy text /completions endpoint by @mubashir1osmani in #34431
  • feat(gemini): add gemini-robotics-er-2-preview and gemini-robotics-er-1.6-preview by @devin-ai-integration[bot] in #35555
  • test(e2e): move load/perf testing out of the main suite and drop the vllm passthrough test by @yuneng-berri in #35820
  • feat(lint): enforce Final on locals and freeze function parameters (LIT010, LIT011) by @mateo-berri in #35807
  • chore: bump litellm-proxy-extras 0.4.81 -> 0.4.82, litellm 1.96.0 -> 1.97.0 by @yuneng-berri in #35810
  • fix(bedrock): drop conflicting tool_choice.type when toolConfig.toolChoice is set by @devin-ai-integration[bot] in #35738
  • docs(CLAUDE.md): prefer commas over semicolons when replacing em dashes by @mateo-berri in #35825
  • chore(lint): zero out basedpyright headroom for purely local rules by @mateo-berri in #35828
  • test(e2e): retry provider-transient statuses at the transport with bounded backoff by @yuneng-berri in #35824
  • chore(ci): promote internal staging to main by @yuneng-berri in #35836
  • refactor(ui): route MCP session tokens through the shared storage helper by @yuneng-berri in #35835
  • docs(helm): replace the classic chart's 128Mi resource example with the documented 4Gi sizing by @yassin-berriai in #35830
  • fix(proxy): persist periodic reload schedule state so status survives restarts and fires without store_model_in_db by @ryan-crabbe-berri in #35165
  • fix(router): eagerly fetch Vertex AI deferred stream to surface HTTP errors in _acompletion fallback path by @deepanshululla in #34627
  • fix(azure_storage): honor AZURE_STORAGE_ENDPOINT_SUFFIX for sovereign clouds by @yucheng-berri in #35806
  • fix(proxy): apply key_alias/key_hash filters to all /key/list visibility branches by @ryan-crabbe-berri in #35840
  • fix(proxy): enforce per-model budgets against resolved cursor model variants by @mateo-berri in #35834
  • feat(ui): reorder Add Auto Router into name + template, with a collapsible detailed config by @tin-berri in #35746
  • test: repair three failing suites on litellm_internal_staging by @yuneng-berri in #35845
  • fix(guardrails): scan model output on the /openai/v1/responses alias by @yucheng-berri in #35818
  • ci: pin Node on the Playwright UI lanes so npm ci meets the engines floor by @yuneng-berri in #35848
  • fix(pricing): apply OpenAI's gpt-5.6 terra/luna cut to Azure cost map by @mubashir1osmani in #35481
  • feat(spend): add caller-scoped key/user/team/organization spend report endpoints by @yuneng-berri in #35725
  • revert: "fix(caching): close evicted LLM clients so their connections are reclaimed (#35492)" by @mateo-berri in #35856
  • refactor(repositories): add prisma protocol seams and a spend-reset unit of work by @mateo-berri in #35748
  • perf(streaming): assemble streamed tool-call arguments in linear time by @mateo-berri in #35826
  • fix(s3_v2): sign S3 object URLs with S3SigV4Auth so encoded paths verify by @devin-ai-integration[bot] in #35726
  • test(e2e): self-seed the ui suite's password-login users in global setup by @yuneng-berri in #35863
  • fix(claude-code): create-only skill registration with a PUT update route (LIT-4110) by @ryan-crabbe-berri in #31752
  • fix(proxy): fix zguard httpcode when block input by @jwang-gif in #31948
  • fix(lint): pick the merge-aware base so in-progress merges are not blamed for base drift by @mateo-berri in #35868
  • chore: bump litellm-proxy-extras 0.4.82 -> 0.4.83 by @yuneng-berri in #35877
  • feat(ui): add Test Routing to the auto router create form by @devin-ai-integration[bot] in #35859
  • fix(ui): derive auto-router preset tests from the bundled preset JSON by @tin-berri in #35882
  • revert: "test(e2e): vendor API strategy coverage across endpoints" (#34649) by @yuneng-berri in #35881
  • chore(deps): bump grpc and golang.org/x modules in the terraform provider by @yuneng-berri in #35844
  • test(e2e): skip view-backed global spend probes pending LIT-5211 by @yuneng-berri in #35875
  • fix(lint): move the basedpyright heap flag into the type check gate by @mateo-berri in #35869
  • chore(ci): promote internal staging to main by @yuneng-berri in #35876

New Contributors

Full Changelog: v1.96.0-rc.1...v1.97.0-dev.1