Skip to content

fix(lens): preserve approved worker digests and harden its image - #44467

Merged
moe-berri merged 3 commits into
mainfrom
litellm_lens_release_integrity
Oct 4, 2026
Merged

moe-berri merged 3 commits into
mainfrom
litellm_lens_release_integrity

Conversation

@moe-berri

@moe-berri moe-berri commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • Worker release tags can move after an approved build.
  • Worker dependencies lack hashes and image vulnerability coverage.

How it solves it:

  • Helm installs and advertises the approved worker digest.
  • Development builds publish to a separate worker package.
  • Worker uses pinned Wolfi/uv images and hashed Python dependencies.
  • Both native architectures receive runtime, hash-tampering, and vulnerability checks.

User Flow

Before: a chart install resolves the worker's release tag again.

  1. Install the chart and enable the Lens worker.
  2. Later restart the worker after its image tag changes.
  3. The restart can run different content from the approved release.

After: the published chart carries its approved worker digest.

  1. Install the chart and enable the Lens worker.
  2. Later restart the worker after its image tag changes.
  3. The restart still requests the approved content; registration advertises that same digest.

Pre-Submission checklist

  • Added meaningful regression tests
  • Focused release tests and all 172 Helm tests pass locally
  • Repository make check passes locally
  • Current-tip hosted image, Compose, and native architecture checks pass
  • Bot reviews completed and findings addressed

Screenshots / Proof of Fix

Run helm template proof helm/litellm --set database.writer.host=localhost --set database.writer.dbname=test --set lensWorker.enabled=true --set lensWorker.tokenSecret.name=test --show-only templates/lens/deployment.yaml with each case's image settings below. The accompanying publisher #291 supplies and verifies the digest before chart publication; the empty source-chart default is never published by that pipeline.

Before (dfdd496)

Approved image after tag replacement

  1. Add --set backend.image.tag=replaced-release --set lensWorker.image.digest=sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.
  2. Rendered image: ghcr.io/berriai/litellm-lens-worker:replaced-release. The supplied digest is ignored.

Source commit image

  1. Add --set backend.image.tag=sha-0123456789abcdef.
  2. Rendered image: ghcr.io/berriai/litellm-lens-worker:sha-0123456789abcdef.

After (1454f5c)

Approved image after tag replacement

  1. Run the same render command and digest settings.
  2. Rendered image: ghcr.io/berriai/litellm-lens-worker@sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa. Backend registration advertises that same digest.

Source commit image

  1. Run the same source-tag render command.
  2. Rendered image: ghcr.io/berriai/litellm-lens-worker-dev:sha-0123456789abcdef. Private registry overrides remain intact.

Both native image jobs at this tip passed real image builds, imports, non-root/read-only temporary storage, deliberately corrupted dependency hashes, and Grype scanning. Greptile reports 5/5 with both findings addressed; Veria, Bugbot, and the broader Buildkite end-to-end suite pass. The full hosted Compose installation and restart passes at 1454f5c: real PostgreSQL/ClickHouse/LiteLLM/worker startup, authenticated heartbeat, trace readback, direct database access denied, persisted trace/token/identity/billing after restart, wrong-release rejection, and refusal of unversioned setup/claims followed by recovery. The publisher's real OCI tests also replaced a public version tag after approval: both mirrors, real signatures/SPDX attestations, verification, and this chart continued using the approved multiarch digest. An intentionally broken helper that ignored the digest stopped chart publication.

Type

🐛 Bug Fix
🚄 Infrastructure

Caveats

High

  • Admin must revoke LiteLLM writes to the release package.
  • Publisher Sagemaker streaming #291 must pass recorded digests into chart packaging.

Medium

  • New development package needs public visibility and LiteLLM publishing access.
  • Source charts retain tag fallback; published charts require approved digests.

All current-tip checks are complete: 115 successful, one skipped, and no failures. The full-image vulnerability scan also passes. No release or deployment has been dispatched. Package permissions and dev-package public visibility remain operator prerequisites as described above.

@moe-berri

Copy link
Copy Markdown
Contributor Author

@greptileai @veria-ai Please review the current tip for release integrity: Helm digest precedence, separation of dev and release image destinations, worker dependency hash enforcement, build context completeness, and native runtime compatibility.

@moe-berri

Copy link
Copy Markdown
Contributor Author

bugbot run

@codecov

codecov Bot commented Oct 4, 2026 •

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@greptile-apps

greptile-apps Bot commented Oct 4, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[High risk] Rebuilds the worker container image and changes its registry location.

No outstanding review finding blocks merging this PR.

Summary

The PR pins published Lens worker images by approved digest, separates development images from release images, and adds hashed dependencies and native-architecture image checks. The changes since the previous review make source charts select the development package for commit tags. Both previous Greptile threads are resolved; the source chart’s empty digest is intentional, with publication enforcement described in the companion publisher.

Reviews (3) · Last reviewed commit: "fix(lens): select the dev worker package..."

Comment thread helm/litellm/values.yaml
Comment thread .github/workflows/lens-worker.yml

@cursor cursor Bot left a comment •

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stale Bugbot comment from a previous run.

@moe-berri

Copy link
Copy Markdown
Contributor Author

@greptileai @veria-ai Please review 1454f5c. The SHA-tagged source-chart fallback is fixed and covered by three rendered Helm cases. The required publisher half is now pushed in BerriAI/project-releaser#291 at 334bb07: it requires the recorded digest, checks the registry by digest, and rejects a chart whose rendered worker ignores it. Real tag-replacement tests passed for mirror/sign/attest/verify/chart, including an intentionally broken Helm helper. The package ACL and dockerhub branch-policy changes remain explicit admin prerequisites.

@moe-berri

Copy link
Copy Markdown
Contributor Author

bugbot run

@cursor cursor Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Bugbot reviewed your changes and found no new issues!

Comment @cursor review or bugbot run to trigger another review on this PR

Reviewed by Cursor Bugbot for commit 1454f5c. Configure here.

@moe-berri
moe-berri marked this pull request as ready for review October 4, 2026 00:32
@moe-berri
moe-berri requested a review from a team October 4, 2026 00:32
@moe-berri

Copy link
Copy Markdown
Contributor Author

@greptileai Please re-review the remaining digest-default finding with the companion publisher enforcement described in my inline reply. Publisher #291 at 334bb07 requires the approved digest and verifies the rendered image before packaging; missing digest and an ignored digest both fail in real OCI tests. The source value is intentionally unstamped until an approved build exists.

@codspeed

codspeed Bot commented Oct 4, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 31 untouched benchmarks


Comparing litellm_lens_release_integrity (1454f5c) with main (0ed1c08)1

Open in CodSpeed

Footnotes

  1. No successful run was found on main (4b67a2b) during the generation of this report, so 0ed1c08 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩

@moe-berri
moe-berri merged commit 8520626 into main Oct 4, 2026
117 checks passed
@moe-berri
moe-berri deleted the litellm_lens_release_integrity branch October 4, 2026 00:54
doonga pushed a commit to greyrock-labs/home-ops that referenced this pull request Oct 18, 2026
…106.0) (#443)

This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/berriai/litellm](https://images.chainguard.dev/directory/image/wolfi-base/overview) ([source](https://github.com/BerriAI/litellm)) | minor | `v1.105.1` → `v1.106.0` |

---

### Release Notes

<details>
<summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary>

### [`v1.106.0`](https://github.com/BerriAI/litellm/releases/tag/v1.106.0)

[Compare Source](https://github.com/BerriAI/litellm/compare/v1.105.1...v1.106.0)

#### 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.106.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.106.0/cosign.pub \
  ghcr.io/berriai/litellm:v1.106.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(mcp): fire MCP client test deadlines on conditions instead of wall-clock time by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44166](https://github.com/BerriAI/litellm/pull/44166)
- fix(cost-map): add OpenAI TTS and GPT-5.x deprecation dates by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44175](https://github.com/BerriAI/litellm/pull/44175)
- fix(tracing): unify ClickHouse storage configuration by [@&#8203;yujonglee-berri](https://github.com/yujonglee-berri) in [#&#8203;43941](https://github.com/BerriAI/litellm/pull/43941)
- feat(docker): one-command quickstart that starts the gateway, Postgres, and the admin UI by [@&#8203;misbahsy](https://github.com/misbahsy) in [#&#8203;43673](https://github.com/BerriAI/litellm/pull/43673)
- fix(lens): simplify the example investigation preview by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44123](https://github.com/BerriAI/litellm/pull/44123)
- chore(helm): drop migrationJob values the chart never reads by [@&#8203;Bernedotcom2312](https://github.com/Bernedotcom2312) in [#&#8203;42141](https://github.com/BerriAI/litellm/pull/42141)
- fix(ui): register tencent in the Add Model provider dropdown by [@&#8203;jimaldon](https://github.com/jimaldon) in [#&#8203;40924](https://github.com/BerriAI/litellm/pull/40924)
- test: remove 130 legacy tests owned by stronger unit proofs by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44157](https://github.com/BerriAI/litellm/pull/44157)
- feat(mcp)!: disable stdio MCP servers by default by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44066](https://github.com/BerriAI/litellm/pull/44066)
- fix(proxy): exit when DATABASE_URL is set but the Prisma toolchain is missing by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44207](https://github.com/BerriAI/litellm/pull/44207)
- fix(proxy): preserve lifespan state across all entrypoints by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44214](https://github.com/BerriAI/litellm/pull/44214)
- fix(oci): resolve the GenAI endpoint realm from the compartment OCID instead of hardcoding oraclecloud.com by [@&#8203;fede-kamel](https://github.com/fede-kamel) in [#&#8203;43180](https://github.com/BerriAI/litellm/pull/43180)
- fix(chatgpt): preserve requested service tier in Responses calls by [@&#8203;SteffanWolter](https://github.com/SteffanWolter) in [#&#8203;40108](https://github.com/BerriAI/litellm/pull/40108)
- fix(ui): leave unset callback select params out of the save payload by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44213](https://github.com/BerriAI/litellm/pull/44213)
- fix(proxy-extras): hand libpq a root cert, not Prisma's sslcert, when the migration job builds indexes by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44203](https://github.com/BerriAI/litellm/pull/44203)
- feat: add Laya gateway and OSS classifier providers by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;43626](https://github.com/BerriAI/litellm/pull/43626)
- fix(auto-router): count usage savings by selected UTC request day by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44115](https://github.com/BerriAI/litellm/pull/44115)
- fix(lens): preserve framework agent names and GenAI message content by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44218](https://github.com/BerriAI/litellm/pull/44218)
- feat(jwt): auto_register_map_existing_key maps JWT to the user's existing virtual key by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42375](https://github.com/BerriAI/litellm/pull/42375)
- feat(ui): select Laya for OSS classification by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;43768](https://github.com/BerriAI/litellm/pull/43768)
- fix(otel): tolerate non-dict callback_settings.otel and ignore bare EXCLUDED_SERVICES env by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44086](https://github.com/BerriAI/litellm/pull/44086)
- fix(proxy): carry key, team and project tags into pass-through spend logs by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42662](https://github.com/BerriAI/litellm/pull/42662)
- feat(ui): add System One (Jev) tab to the playground by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44043](https://github.com/BerriAI/litellm/pull/44043)
- chore: bump litellm-proxy-extras 0.4.104 -> 0.4.105 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44234](https://github.com/BerriAI/litellm/pull/44234)
- chore(prices): add xAI grok-voice-transcribe-1.0 deprecation date by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44237](https://github.com/BerriAI/litellm/pull/44237)
- fix(exa): fall back to highlights/summary when text is missing by [@&#8203;wakqasahmed](https://github.com/wakqasahmed) in [#&#8203;42213](https://github.com/BerriAI/litellm/pull/42213)
- fix(scim): apply path-less group PATCH ops instead of storing them under an empty metadata key by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43978](https://github.com/BerriAI/litellm/pull/43978)
- fix(lens): run investigations with configured wildcard models by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44233](https://github.com/BerriAI/litellm/pull/44233)
- fix(ui): shrink the sidebar logo so it stops outweighing page titles by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44247](https://github.com/BerriAI/litellm/pull/44247)
- feat(tracing): support claude agent sdk traces with agent name, logo and chat content by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44248](https://github.com/BerriAI/litellm/pull/44248)
- fix(ui): make model leaderboard chart bars wide and readable by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44249](https://github.com/BerriAI/litellm/pull/44249)
- test: repair stale and polluting tests red on scheduled main CI by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44229](https://github.com/BerriAI/litellm/pull/44229)
- feat(traces): type queries and align read access with log visibility by [@&#8203;yujonglee-berri](https://github.com/yujonglee-berri) in [#&#8203;44228](https://github.com/BerriAI/litellm/pull/44228)
- chore(ui): untrack tsconfig.tsbuildinfo and gitignore \*.tsbuildinfo by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44261](https://github.com/BerriAI/litellm/pull/44261)
- refactor(mcp): extract upstream preparation and support modern clients by [@&#8203;joshua-berri](https://github.com/joshua-berri) in [#&#8203;44232](https://github.com/BerriAI/litellm/pull/44232)
- fix(lens): default to traces and reopen span details by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44260](https://github.com/BerriAI/litellm/pull/44260)
- fix(bedrock): surface unrecognized converse-stream event frames instead of an empty turn by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44112](https://github.com/BerriAI/litellm/pull/44112)
- perf(proxy): batch daily model usage writes instead of upserting per request by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44243](https://github.com/BerriAI/litellm/pull/44243)
- test(integration): opt the config pass-through spend-log case into auth by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44265](https://github.com/BerriAI/litellm/pull/44265)
- test: fix three order-dependent and timing-flaky tests by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44271](https://github.com/BerriAI/litellm/pull/44271)
- fix(ui): make the Lens traces refresh button always clickable by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44252](https://github.com/BerriAI/litellm/pull/44252)
- feat(lens): add sample previews and improve setup and worker feedback by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44268](https://github.com/BerriAI/litellm/pull/44268)
- chore(openrouter): sync prices, limits and deprecation dates from the models API by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44287](https://github.com/BerriAI/litellm/pull/44287)
- refactor(traces): type the ClickHouse query help response by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44285](https://github.com/BerriAI/litellm/pull/44285)
- fix(proxy): stop queued registry read-throughs spending the resync budget by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44277](https://github.com/BerriAI/litellm/pull/44277)
- feat(lens): show investigation progress as one staged bar with time left by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44301](https://github.com/BerriAI/litellm/pull/44301)
- refactor(ui): compose dashboard pages with shared layouts by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44306](https://github.com/BerriAI/litellm/pull/44306)
- fix(proxy): share ownership permissions for spend logs and traces by [@&#8203;yujonglee-berri](https://github.com/yujonglee-berri) in [#&#8203;44239](https://github.com/BerriAI/litellm/pull/44239)
- fix(proxy-extras): retry P3009 when a peer already recovered the named migration row by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44283](https://github.com/BerriAI/litellm/pull/44283)
- fix(bedrock): price amazon nova 2 pro preview at the standard tier by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44302](https://github.com/BerriAI/litellm/pull/44302)
- feat: add Bespoke Nimble gateway and OSS classifier support by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44246](https://github.com/BerriAI/litellm/pull/44246)
- fix(anthropic): stop repeating streamed thinking text in the signature chunk by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44127](https://github.com/BerriAI/litellm/pull/44127)
- fix(responses): drop bridge-minted reasoning items from OpenAI replays by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44132](https://github.com/BerriAI/litellm/pull/44132)
- feat(bedrock): drop lookaround regex patterns from tool schemas for Converse models that reject them by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44138](https://github.com/BerriAI/litellm/pull/44138)
- feat(bedrock): serve gpt-5.6+ chat completions natively by default, with chat_completions/ opt-in for gpt-oss and grok by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44307](https://github.com/BerriAI/litellm/pull/44307)
- feat(lens): issue briefs with problem, user goal, outcome and test cases by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44311](https://github.com/BerriAI/litellm/pull/44311)
- fix(responses): keep gpt-5.4/5.5 tool calls on chat and merge bridged tool calls into one choice by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44295](https://github.com/BerriAI/litellm/pull/44295)
- fix(cost): price rule-only model names at the deployment's rate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44144](https://github.com/BerriAI/litellm/pull/44144)
- fix(auto-router): attribute router-day savings without spend logs or a session by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44226](https://github.com/BerriAI/litellm/pull/44226)
- test(integration): let run.py select cells by pytest node id by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44319](https://github.com/BerriAI/litellm/pull/44319)
- fix(bedrock): honor unsupported reasoning effort levels for OpenAI GPT models by [@&#8203;Aasif-Multani](https://github.com/Aasif-Multani) in [#&#8203;44183](https://github.com/BerriAI/litellm/pull/44183)
- feat(lens): add preset watch-for checks to investigation setup by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44313](https://github.com/BerriAI/litellm/pull/44313)
- fix(proxy): use OpenAI workload identity federation tokens on /openai_passthrough by [@&#8203;6matt](https://github.com/6matt) in [#&#8203;44140](https://github.com/BerriAI/litellm/pull/44140)
- feat(interactions): durable cross-pod settlement for background interaction billing by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;41955](https://github.com/BerriAI/litellm/pull/41955)
- fix(streaming): keep the finish_reason of the provider's last content chunk in the logged response by [@&#8203;joeym82956](https://github.com/joeym82956) in [#&#8203;44318](https://github.com/BerriAI/litellm/pull/44318)
- fix(bedrock): send the anthropic-workspace-id header to Bedrock Mantle by [@&#8203;kohjunhao](https://github.com/kohjunhao) in [#&#8203;44173](https://github.com/BerriAI/litellm/pull/44173)
- fix(guardrails): run unified guardrails on /v1/images/edits by [@&#8203;michelligabriele](https://github.com/michelligabriele) in [#&#8203;44195](https://github.com/BerriAI/litellm/pull/44195)
- feat(scaleway): add rerank support by [@&#8203;ankit373](https://github.com/ankit373) in [#&#8203;44160](https://github.com/BerriAI/litellm/pull/44160)
- fix(vector_stores): return managed file ids from vector store file list by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43800](https://github.com/BerriAI/litellm/pull/43800)
- fix(proxy): return 4xx instead of 500 for missing required params, invalid pagination and unknown ids by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43787](https://github.com/BerriAI/litellm/pull/43787)
- fix(guardrails): encrypt guardrail litellm_params secrets at rest by [@&#8203;yucheng-berri](https://github.com/yucheng-berri) in [#&#8203;43627](https://github.com/BerriAI/litellm/pull/43627)
- fix(search_tools): encrypt search tool litellm_params at rest by [@&#8203;yucheng-berri](https://github.com/yucheng-berri) in [#&#8203;43631](https://github.com/BerriAI/litellm/pull/43631)
- feat(roi): add GitLab sources and branch cost attribution by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44324](https://github.com/BerriAI/litellm/pull/44324)
- fix(model-prices): mark azure us/eu responses-only models as mode responses by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44323](https://github.com/BerriAI/litellm/pull/44323)
- revert(cost): revert "fix(cost): price rule-only model names at the deployment's rate" ([#&#8203;44144](https://github.com/BerriAI/litellm/issues/44144)) by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44335](https://github.com/BerriAI/litellm/pull/44335)
- fix(proxy): stamp the client alias on a copy of each streamed chunk so pricing sees the deployment model by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44341](https://github.com/BerriAI/litellm/pull/44341)
- revert(responses): revert "fix(responses): keep gpt-5.4/5.5 tool calls on chat and merge bridged tool calls into one choice" ([#&#8203;44295](https://github.com/BerriAI/litellm/issues/44295)) by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44344](https://github.com/BerriAI/litellm/pull/44344)
- refactor(dashboard): migrate to zod 4 and openai 6 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44345](https://github.com/BerriAI/litellm/pull/44345)
- feat(ui): move LiteAdmin into the header with a docked side panel by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44293](https://github.com/BerriAI/litellm/pull/44293)
- fix(responses): merge bridged tool calls into the same choice as the text by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44346](https://github.com/BerriAI/litellm/pull/44346)
- feat(ui): improve trace inspection and ROI estimation by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44351](https://github.com/BerriAI/litellm/pull/44351)
- refactor(ui): reorganize Lens dashboard components by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44354](https://github.com/BerriAI/litellm/pull/44354)
- refactor(ui): inject Lens backends as services instead of a fake HTTP client by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44369](https://github.com/BerriAI/litellm/pull/44369)
- refactor: clean up fresh tech debt from 2026-10-02 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44362](https://github.com/BerriAI/litellm/pull/44362)
- feat(traces): tracing development seed by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44363](https://github.com/BerriAI/litellm/pull/44363)
- refactor(types): replace Any with proven types in 4 files by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44370](https://github.com/BerriAI/litellm/pull/44370)
- build(deps): suppress unfixed braces GHSA-vfj7-8cjw-p6xm to clear osv-scan by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44347](https://github.com/BerriAI/litellm/pull/44347)
- fix(azure): add MAI-Image max_input_tokens from models sold directly page by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44375](https://github.com/BerriAI/litellm/pull/44375)
- fix(proxy): emit postgres service spans only on real DB reads in auth cache helpers by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44148](https://github.com/BerriAI/litellm/pull/44148)
- fix(otel): nest cache spans under their operation and name service spans by purpose by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44150](https://github.com/BerriAI/litellm/pull/44150)
- fix(otel): name postgres service spans by operation and table by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44240](https://github.com/BerriAI/litellm/pull/44240)
- perf(proxy): stop prompt-cache eligibility from tokenizing the whole conversation by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44221](https://github.com/BerriAI/litellm/pull/44221)
- fix(proxy): keep the database error when the log_db_metrics failure hook raises by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44383](https://github.com/BerriAI/litellm/pull/44383)
- feat(azure): add azure_ai/kimi-k2-thinking from Azure Kimi pricing page by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44382](https://github.com/BerriAI/litellm/pull/44382)
- feat(harness): add Harness.TOOL_LOOP, a minimal in-process tool-calling loop by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44391](https://github.com/BerriAI/litellm/pull/44391)
- feat(decisions): add unified /v1/decisions endpoint for Jev-compatible providers by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44236](https://github.com/BerriAI/litellm/pull/44236)
- fix(lens): paginate trace reads within ClickHouse limits by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44384](https://github.com/BerriAI/litellm/pull/44384)
- feat(lens): live dot field timeline and full-screen traces view by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44390](https://github.com/BerriAI/litellm/pull/44390)
- feat(ui): make LiteAdmin enterprise-only by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44399](https://github.com/BerriAI/litellm/pull/44399)
- fix(bedrock): stop emitting Converse cachePoint blocks for Kimi K3 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44292](https://github.com/BerriAI/litellm/pull/44292)
- test(cost): pin OpenAI reported web search count with mixed actions by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44414](https://github.com/BerriAI/litellm/pull/44414)
- fix(ci): give the pass-through auth regression test a real FastAPI app by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44403](https://github.com/BerriAI/litellm/pull/44403)
- fix(azure): add azure_ai/flux.2-pro input token limit from the models sold directly page by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44405](https://github.com/BerriAI/litellm/pull/44405)
- fix(lens): batch run reads and reset trace pagination by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44398](https://github.com/BerriAI/litellm/pull/44398)
- fix(lens): preserve full trace access and expose investigation failures by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44406](https://github.com/BerriAI/litellm/pull/44406)
- feat: add make lens-dev for one-command lens local dev by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44413](https://github.com/BerriAI/litellm/pull/44413)
- fix(bedrock): honor the per-request timeout on Converse and Invoke streaming (internal copy of [#&#8203;38210](https://github.com/BerriAI/litellm/issues/38210)) by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44134](https://github.com/BerriAI/litellm/pull/44134)
- feat(traces): render curated SQL examples from shared files by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44388](https://github.com/BerriAI/litellm/pull/44388)
- fix(model_prices): registry audit 2026-10-03, add cohere embed v5, grok-imagine-video-1.5-lite and openrouter gpt-image rows by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44376](https://github.com/BerriAI/litellm/pull/44376)
- refactor(traces): extract snapshot cache by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44424](https://github.com/BerriAI/litellm/pull/44424)
- feat(lens): always-on investigations with findings and investigations tables by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44418](https://github.com/BerriAI/litellm/pull/44418)
- feat(docker): add a Windows quickstart in PowerShell, and a styled terminal for both quickstarts by [@&#8203;misbahsy](https://github.com/misbahsy) in [#&#8203;44310](https://github.com/BerriAI/litellm/pull/44310)
- feat(proxy): serve a Codex-native model catalog with per-model service_tiers from /v1/models by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44136](https://github.com/BerriAI/litellm/pull/44136)
- refactor(types): replace Any with proven types in 9 files by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44389](https://github.com/BerriAI/litellm/pull/44389)
- fix(proxy): treat Postgres connection exhaustion as DB unavailable, not poison spend-log rows by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44270](https://github.com/BerriAI/litellm/pull/44270)
- fix(proxy): treat Postgres connection exhaustion as backpressure, not poison rows by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44266](https://github.com/BerriAI/litellm/pull/44266)
- fix(lens): release budget reservations when the analysis model call fails by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44431](https://github.com/BerriAI/litellm/pull/44431)
- fix(mcp): preserve upstream tool schemas and parameter headers by [@&#8203;joshua-berri](https://github.com/joshua-berri) in [#&#8203;44425](https://github.com/BerriAI/litellm/pull/44425)
- fix(bedrock_mantle): route Claude chat completions to the native Messages endpoint by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43646](https://github.com/BerriAI/litellm/pull/43646)
- fix(tracing): preserve spend identity and gateway correlation by [@&#8203;yujonglee-berri](https://github.com/yujonglee-berri) in [#&#8203;44421](https://github.com/BerriAI/litellm/pull/44421)
- feat(roi): measure shipping velocity, quality, and recorded spend by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44426](https://github.com/BerriAI/litellm/pull/44426)
- fix(azure): set text-embedding max input to 8192 from the models sold directly page by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44449](https://github.com/BerriAI/litellm/pull/44449)
- feat(ui): show invitation and reset password links in a copyable field by [@&#8203;yuneng-berri](https://github.com/yuneng-berri) in [#&#8203;44454](https://github.com/BerriAI/litellm/pull/44454)
- feat(lens): coordinate worker releases and bundled installs by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44428](https://github.com/BerriAI/litellm/pull/44428)
- fix(auth): resolve hidden model_group_alias entries in the zero-cost budget check by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43741](https://github.com/BerriAI/litellm/pull/43741)
- fix(vertex_ai): forward system and tools to partner model count_tokens by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43900](https://github.com/BerriAI/litellm/pull/43900)
- fix(traces): reject conflicting spend aliases and unrelated HTTP siblings by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44456](https://github.com/BerriAI/litellm/pull/44456)
- chore(cost-map): add azure_ai/kimi-k2-thinking retirement date from the Azure retired models page by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44455](https://github.com/BerriAI/litellm/pull/44455)
- fix(health): probe Bedrock Mantle Claude deployments over the Anthropic Messages API by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44419](https://github.com/BerriAI/litellm/pull/44419)
- fix(tests): match the OS bind error in the owned-proxy port-race retry by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44462](https://github.com/BerriAI/litellm/pull/44462)
- feat(anthropic): workload identity federation and pluggable identity sources by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44448](https://github.com/BerriAI/litellm/pull/44448)
- test(integration): exact four-part translation cases on a shared fake provider and shared YAML deployment by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44451](https://github.com/BerriAI/litellm/pull/44451)
- feat(roi): default people and branch lists to matched accounts by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44465](https://github.com/BerriAI/litellm/pull/44465)
- feat(enterprise): bundle LiteAdmin Slack with native gateway login by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44444](https://github.com/BerriAI/litellm/pull/44444)
- fix(caching): count tool_call cache_control marks in the injection census by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43556](https://github.com/BerriAI/litellm/pull/43556)
- chore(cost-map): sync openrouter prices from the models API by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44466](https://github.com/BerriAI/litellm/pull/44466)
- fix(lens): preserve approved worker digests and harden its image by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44467](https://github.com/BerriAI/litellm/pull/44467)
- feat: improve Lens dev seeding and live UI by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44468](https://github.com/BerriAI/litellm/pull/44468)
- test(ui): wait for step search value to settle in TraceDrawer test by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44470](https://github.com/BerriAI/litellm/pull/44470)
- feat(ui): share trace drawer as a closable SidePanel and polish Lens by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44473](https://github.com/BerriAI/litellm/pull/44473)
- fix(lens): align source setup with available worker images by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44476](https://github.com/BerriAI/litellm/pull/44476)
- feat(sdk): add run_tool_loop and arun_tool_loop helpers by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44381](https://github.com/BerriAI/litellm/pull/44381)
- feat(lens): guide setup through the first investigation by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44475](https://github.com/BerriAI/litellm/pull/44475)
- test(ci): fix six CircleCI test regressions on main by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44429](https://github.com/BerriAI/litellm/pull/44429)
- fix(proxy-extras): log v1 migration failures at ERROR so LITELLM_LOG=ERROR shows them by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44202](https://github.com/BerriAI/litellm/pull/44202)
- feat(ui): inline Lens settings tab and investigation editor by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44479](https://github.com/BerriAI/litellm/pull/44479)
- feat(mcp): hand listed-tool description and input schema to pre-call hooks per caller by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;41162](https://github.com/BerriAI/litellm/pull/41162)
- refactor: clean up fresh tech debt from 2026-10-03 by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44484](https://github.com/BerriAI/litellm/pull/44484)
- fix(otel): read the registered v2 logger without importing the proxy by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44485](https://github.com/BerriAI/litellm/pull/44485)
- test(mcp): keep the SSO assertion round trip from matching its refresh token inside random ciphertext by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44494](https://github.com/BerriAI/litellm/pull/44494)
- test(ci): pin the ROI estimator flag and the prompt-cache counter in two drifted tests by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44499](https://github.com/BerriAI/litellm/pull/44499)
- refactor(ui): move TraceView into components/lens/traces by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44501](https://github.com/BerriAI/litellm/pull/44501)
- refactor(ui): rename view_logs to logs and split request, audit and detail by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44505](https://github.com/BerriAI/litellm/pull/44505)
- refactor(ui): share CopyButton between Lens traces and logs by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44513](https://github.com/BerriAI/litellm/pull/44513)
- refactor(lens): storage-independent trace reads, shared keyset pager, typed read failures by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44422](https://github.com/BerriAI/litellm/pull/44422)
- fix(ci): send the Lens preview body as selection in the tracing endpoint tests by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44525](https://github.com/BerriAI/litellm/pull/44525)
- fix(azure): set gpt-realtime-2.1 retirement dates from the retirement schedule by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44526](https://github.com/BerriAI/litellm/pull/44526)
- fix(ci): repair the security sweep and Lens billing integration tests for ROI, JWKS, and release identity changes by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44529](https://github.com/BerriAI/litellm/pull/44529)
- fix(dashboard): route dev API calls on Accept and fail fast on non-JSON 2xx by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44528](https://github.com/BerriAI/litellm/pull/44528)
- chore(cost-map): sync openrouter prices from the models API by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44533](https://github.com/BerriAI/litellm/pull/44533)
- refactor(ui): route dashboard URL state through nuqs parsers by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44537](https://github.com/BerriAI/litellm/pull/44537)
- fix(logging): deduplicate streaming failure callbacks by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44442](https://github.com/BerriAI/litellm/pull/44442)
- feat(proxy): add LITELLM_FIPS_MODE startup gate with provider assertion and loud password migration failure by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;42700](https://github.com/BerriAI/litellm/pull/42700)
- fix(guardrails): run the end-of-stream post_call scan when the client disconnects mid-stream by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43839](https://github.com/BerriAI/litellm/pull/43839)
- refactor(mcp): fix Sequence/list return mismatch and collapse record_listed_tools wrapper by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44556](https://github.com/BerriAI/litellm/pull/44556)
- chore(cost-map): add azure retirement dates for gpt-4o-realtime-preview-2024-10-01 and jamba-instruct by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44567](https://github.com/BerriAI/litellm/pull/44567)
- feat(ui): add persistent columns and loading skeletons to Lens runs by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44579](https://github.com/BerriAI/litellm/pull/44579)
- fix(ui): remove Top models by task card from Model Leaderboard by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44502](https://github.com/BerriAI/litellm/pull/44502)
- refactor(rust): track ClickHouse migrations in a checksummed ledger by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44580](https://github.com/BerriAI/litellm/pull/44580)
- refactor(ui): extract shared timeline and time-range controls by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44584](https://github.com/BerriAI/litellm/pull/44584)
- fix(azure): set gpt-4o-transcribe retirement date from the retirement schedule by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44585](https://github.com/BerriAI/litellm/pull/44585)
- ci: move Postgres, MCP and Redis suites to CircleCI integration by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44453](https://github.com/BerriAI/litellm/pull/44453)
- chore!: retire the integrated ROI calculator by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44477](https://github.com/BerriAI/litellm/pull/44477)
- fix(caching): key response cache by router model group in litellm_metadata by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44542](https://github.com/BerriAI/litellm/pull/44542)
- fix(auto-router): align preview and serving default resolution by [@&#8203;moyai-berriai](https://github.com/moyai-berriai)\[bot] in [#&#8203;44436](https://github.com/BerriAI/litellm/pull/44436)
- fix(mcp): bind OAuth clients to their upstream issuer by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;37777](https://github.com/BerriAI/litellm/pull/37777)
- feat(guardrails): add llm shield pii redaction and rehydration guardrail by [@&#8203;ninadphalak](https://github.com/ninadphalak) in [#&#8203;42645](https://github.com/BerriAI/litellm/pull/42645)
- refactor(tracing): generate existing HTTP request models from Rust schemas by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44591](https://github.com/BerriAI/litellm/pull/44591)
- ci: run unit selections from GHA test-path and drop the CircleCI unit jobs by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44461](https://github.com/BerriAI/litellm/pull/44461)
- fix(ui): make mobile sidebar and top bar responsive by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44603](https://github.com/BerriAI/litellm/pull/44603)
- refactor(types): replace Any with proven types in 137 files by [@&#8203;mateo-berri](https://github.com/mateo-berri) in [#&#8203;44478](https://github.com/BerriAI/litellm/pull/44478)
- fix(ui): restore inline Lens onboarding and responsive layout by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44604](https://github.com/BerriAI/litellm/pull/44604)
- test(integration): anthropic-route basic translation cases for six Claude models on messages, chat completions and responses by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44607](https://github.com/BerriAI/litellm/pull/44607)
- fix(responses): report truncated bridged output as incomplete and echo request params by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44460](https://github.com/BerriAI/litellm/pull/44460)
- fix(proxy): enforce internal-user model creation prohibition by [@&#8203;moyai-berriai](https://github.com/moyai-berriai)\[bot] in [#&#8203;44438](https://github.com/BerriAI/litellm/pull/44438)
- chore(harness): drop the unused Any import left in harness options by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44625](https://github.com/BerriAI/litellm/pull/44625)
- fix(harness): drop the unused Any import that fails ruff on main by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44627](https://github.com/BerriAI/litellm/pull/44627)
- refactor(proxy): rename management/teams/access.py to authz.py by [@&#8203;ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#&#8203;44624](https://github.com/BerriAI/litellm/pull/44624)
- feat(tracing)!: return only data from SQL queries by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44609](https://github.com/BerriAI/litellm/pull/44609)
- fix(openai/realtime): drop model from upstream URL for intent=transcription by [@&#8203;michelligabriele](https://github.com/michelligabriele) in [#&#8203;43854](https://github.com/BerriAI/litellm/pull/43854)
- fix(gemini): add priority tier audio input price to three Gemini rows by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44632](https://github.com/BerriAI/litellm/pull/44632)
- fix(cost): bill per-second transcription models outside chat modes by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44458](https://github.com/BerriAI/litellm/pull/44458)
- fix(ui): explain why team member reset spend is unavailable instead of hiding it by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44629](https://github.com/BerriAI/litellm/pull/44629)
- test(integration): bedrock_converse-route basic translation cases for six Claude models on messages, chat completions and responses by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44646](https://github.com/BerriAI/litellm/pull/44646)
- test(integration): run the anthropic /v1/responses basic translation cases now that the bridge echoes request params by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44615](https://github.com/BerriAI/litellm/pull/44615)
- feat(lens): restore compact navigation with live investigation review by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44472](https://github.com/BerriAI/litellm/pull/44472)
- feat(proxy): limit which models an end user can call by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43904](https://github.com/BerriAI/litellm/pull/43904)
- fix(sso): let CLI and Claude Code gateway sign-in through on DISABLE_ADMIN_UI nodes by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44620](https://github.com/BerriAI/litellm/pull/44620)
- feat(ui): declare shared search operators and flush queries on blur by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44665](https://github.com/BerriAI/litellm/pull/44665)
- fix(lens): make tool steps and conversations readable by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44645](https://github.com/BerriAI/litellm/pull/44645)
- fix(ui): send null instead of $0 when a team's member default budget is cleared by [@&#8203;ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#&#8203;44644](https://github.com/BerriAI/litellm/pull/44644)
- test(integration): azure_ai-route basic translation cases for six Claude models on messages, chat completions and responses by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44658](https://github.com/BerriAI/litellm/pull/44658)
- test(integration): basic translation cases for the openai_responses route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44663](https://github.com/BerriAI/litellm/pull/44663)
- feat(lens): analyze trace workspaces with confined Python and compaction by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44640](https://github.com/BerriAI/litellm/pull/44640)
- fix(vertex-ai): add deprecation_date to gemini-3.1-flash-lite-image by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44639](https://github.com/BerriAI/litellm/pull/44639)
- fix(bedrock): add priority and flex prices for Grok 4.3, 4.6, 4.7 and Kimi K3 by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44670](https://github.com/BerriAI/litellm/pull/44670)
- test(integration): pin the Claude-tokenizer recount for streamed claude-sonnet-5 no-usage cases by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44643](https://github.com/BerriAI/litellm/pull/44643)
- feat(proxy): embed enterprise LiteAdmin MCP in LiteLLM images by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;44610](https://github.com/BerriAI/litellm/pull/44610)
- test(integration): basic translation cases for the azure route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44672](https://github.com/BerriAI/litellm/pull/44672)
- test(integration): assert the Messages API health probe on Mantle Claude by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44612](https://github.com/BerriAI/litellm/pull/44612)
- refactor(rust): rename litellm-framing crate to litellm-framer by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44683](https://github.com/BerriAI/litellm/pull/44683)
- test(integration): basic translation cases for the gemini route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44662](https://github.com/BerriAI/litellm/pull/44662)
- test(integration): basic translation cases for the openai route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44667](https://github.com/BerriAI/litellm/pull/44667)
- refactor(rust): derive string enum serde through strum and serde_with by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44675](https://github.com/BerriAI/litellm/pull/44675)
- fix(spend-tracking): stop caching failed spend-log metadata lookups as confirmed misses by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43560](https://github.com/BerriAI/litellm/pull/43560)
- fix(proxy): let a listed team alias win over a same-named key alias in the customer model check by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44677](https://github.com/BerriAI/litellm/pull/44677)
- chore: move PR template to PULL_REQUEST_TEMPLATE/general.md, add rust.md by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44693](https://github.com/BerriAI/litellm/pull/44693)
- fix(router): retry a /v1/messages stream the provider drops before the first content chunk by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44276](https://github.com/BerriAI/litellm/pull/44276)
- fix(lens): persist final coverage with source diagnostics by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44682](https://github.com/BerriAI/litellm/pull/44682)
- test(integration): point the scratch upgraded proxy's read replica at the scratch database by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44613](https://github.com/BerriAI/litellm/pull/44613)
- fix(lens): show investigation findings for agent traces by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44696](https://github.com/BerriAI/litellm/pull/44696)
- fix(build): rebuild the Rust bridge when uv sync sees Rust sources change by [@&#8203;nate-berri](https://github.com/nate-berri) in [#&#8203;44708](https://github.com/BerriAI/litellm/pull/44708)
- fix(lens): preserve span timestamps in investigation evidence by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44702](https://github.com/BerriAI/litellm/pull/44702)
- ci: split slow unit shards and build the Rust bridge once per run by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44622](https://github.com/BerriAI/litellm/pull/44622)
- test(rust_bridge): expect PartRow start_time and end_time as required LENS_CONTENT fields by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44719](https://github.com/BerriAI/litellm/pull/44719)
- chore(deps): bump langgraph-sdk from 0.4.2 to 0.4.4 by [@&#8203;dependabot](https://github.com/dependabot)\[bot] in [#&#8203;44713](https://github.com/BerriAI/litellm/pull/44713)
- feat: add Reka as an OpenAI-compatible provider by [@&#8203;anniejeng](https://github.com/anniejeng) in [#&#8203;44278](https://github.com/BerriAI/litellm/pull/44278)
- feat(ui): support native decisions endpoint in decision playground by [@&#8203;moyai-berriai](https://github.com/moyai-berriai)\[bot] in [#&#8203;44664](https://github.com/BerriAI/litellm/pull/44664)
- fix(lens): reconstruct native coding agent conversations by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44711](https://github.com/BerriAI/litellm/pull/44711)
- fix(responses): honor request cache controls on chat completions bridged to the Responses API by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44676](https://github.com/BerriAI/litellm/pull/44676)
- fix(deps): bump source-map-js, smol-toml, mako, multidict and werkzeug for OSV advisories by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44728](https://github.com/BerriAI/litellm/pull/44728)
- test(integration): rename translation runner run to assert_translation by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44741](https://github.com/BerriAI/litellm/pull/44741)
- feat(lens): show investigation names in findings table by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44753](https://github.com/BerriAI/litellm/pull/44753)
- feat(ui): configure cache-aware auto routing by [@&#8203;tin-berri](https://github.com/tin-berri) in [#&#8203;43396](https://github.com/BerriAI/litellm/pull/43396)
- fix(lens): bound result recovery and preserve partial results by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44692](https://github.com/BerriAI/litellm/pull/44692)
- feat(prometheus): cap series per metric for every labeled metric by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44420](https://github.com/BerriAI/litellm/pull/44420)
- feat(lens): type to filter the traces agent dropdown by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44745](https://github.com/BerriAI/litellm/pull/44745)
- test(lens): use current worker protocol in billing integration by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44760](https://github.com/BerriAI/litellm/pull/44760)
- feat(model_prices): add chatgpt subscription rows for the gpt-6 family by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44758](https://github.com/BerriAI/litellm/pull/44758)
- test(e2e): assert the sibling-replica cooldown through the router by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44706](https://github.com/BerriAI/litellm/pull/44706)
- test(integration): basic translation cases for the bedrock_invoke route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44752](https://github.com/BerriAI/litellm/pull/44752)
- fix(gemini): stop replaying thinking block signatures to Gemini by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44661](https://github.com/BerriAI/litellm/pull/44661)
- fix(ci): namespace claude session ids in tracing seeds and allowlist /v1/logs on backend by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44761](https://github.com/BerriAI/litellm/pull/44761)
- fix(proxy): judge the free-model budget waiver by the group an alias routes to by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44638](https://github.com/BerriAI/litellm/pull/44638)
- test(integration): basic translation cases for the vertex_ai route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44751](https://github.com/BerriAI/litellm/pull/44751)
- fix(vertex_ai): apply regional endpoint uplift on image generation cost path by [@&#8203;nate-berri](https://github.com/nate-berri) in [#&#8203;44679](https://github.com/BerriAI/litellm/pull/44679)
- refactor(tests): extract Rust cache test split from [#&#8203;44714](https://github.com/BerriAI/litellm/issues/44714) by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44780](https://github.com/BerriAI/litellm/pull/44780)
- feat(proxy): cap batch file records, daily batch uploads, and per-file downloads by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;43632](https://github.com/BerriAI/litellm/pull/43632)
- feat(lens): add copy link button to trace header by [@&#8203;ishaan-berri](https://github.com/ishaan-berri) in [#&#8203;44749](https://github.com/BerriAI/litellm/pull/44749)
- test(integration): keep scripted upstream connections open past the proxy's keepalive by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44695](https://github.com/BerriAI/litellm/pull/44695)
- test(integration): basic translation cases for the bedrock_mantle route by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44750](https://github.com/BerriAI/litellm/pull/44750)
- fix(chatgpt,github_copilot): refuse device-code login inside an event loop or worker thread by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;39585](https://github.com/BerriAI/litellm/pull/39585)
- feat(bedrock): add glm 5.3 cross-region rows and nova 2.5 sonic by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44710](https://github.com/BerriAI/litellm/pull/44710)
- fix(responses): honor caller stream flag when provider forces SSE (internal copy of [#&#8203;34095](https://github.com/BerriAI/litellm/issues/34095)) by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;41235](https://github.com/BerriAI/litellm/pull/41235)
- refactor(cache): remove dead Cache.\_native_cache runtime path by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44785](https://github.com/BerriAI/litellm/pull/44785)
- fix(vertex_ai): add regional endpoint uplift to gemini-3.1-flash-image by [@&#8203;nate-berri](https://github.com/nate-berri) in [#&#8203;44673](https://github.com/BerriAI/litellm/pull/44673)
- feat(ui): lead the Lens investigation detail with a run report by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44786](https://github.com/BerriAI/litellm/pull/44786)
- fix(ui): polish Lens runs loading, reload, and time range menu by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44789](https://github.com/BerriAI/litellm/pull/44789)
- refactor(types): move SpanAttributes, SpecialHeaders and AllowedModelRegion out of proxy.\_types by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44717](https://github.com/BerriAI/litellm/pull/44717)
- refactor(types): import proxy-only types under TYPE_CHECKING in SDK modules by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44740](https://github.com/BerriAI/litellm/pull/44740)
- refactor(logging): load enterprise alerting loggers lazily so import litellm skips proxy types by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44762](https://github.com/BerriAI/litellm/pull/44762)
- perf(types): defer pydantic schema builds via shared LiteLLMBaseModel by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44720](https://github.com/BerriAI/litellm/pull/44720)
- fix(router): price a model group from the deployments that serve it by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44732](https://github.com/BerriAI/litellm/pull/44732)
- refactor: remove fresh tech debt from the 2026-10-05 window by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44821](https://github.com/BerriAI/litellm/pull/44821)
- fix(azure): add gpt-6-sol priority processing prices by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44829](https://github.com/BerriAI/litellm/pull/44829)
- refactor(types): replace Any with proven types in 6 files by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44491](https://github.com/BerriAI/litellm/pull/44491)
- test: deflake the JEV classifier select and two router tests that inherited leaked state by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44840](https://github.com/BerriAI/litellm/pull/44840)
- refactor(rust): rename litellm-core to litellm-inference by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44802](https://github.com/BerriAI/litellm/pull/44802)
- refactor(rust): extract inference-transcription crate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44809](https://github.com/BerriAI/litellm/pull/44809)
- refactor(rust): extract inference-responses crate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44811](https://github.com/BerriAI/litellm/pull/44811)
- refactor(rust): extract inference-messages crate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44818](https://github.com/BerriAI/litellm/pull/44818)
- refactor(rust): extract inference-chat crate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44827](https://github.com/BerriAI/litellm/pull/44827)
- refactor(rust): extract inference-ocr crate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44832](https://github.com/BerriAI/litellm/pull/44832)
- chore(rust): prune inference deps and rewrite layering docs by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44836](https://github.com/BerriAI/litellm/pull/44836)
- fix(otel): name an Arize project on every OTel v2 Arize export by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44605](https://github.com/BerriAI/litellm/pull/44605)
- fix(otel): gate the Arize OTel v2 exporter on operator credentials by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44596](https://github.com/BerriAI/litellm/pull/44596)
- fix(otel): honor per-team Arize sampling rates in OTel v2 fan-out by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44595](https://github.com/BerriAI/litellm/pull/44595)
- fix(model_prices): gemini deep research input limits, vertex flash retirement dates, azure data zone gpt-6.1-sol pricing by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44633](https://github.com/BerriAI/litellm/pull/44633)
- refactor(types): replace Any with proven types in 157 files by [@&#8203;mateo-berri](https://github.com/mateo-berri) in [#&#8203;44798](https://github.com/BerriAI/litellm/pull/44798)
- fix(sap): correctly handle cache_control by [@&#8203;yamaceay](https://github.com/yamaceay) in [#&#8203;39122](https://github.com/BerriAI/litellm/pull/39122)
- fix(responses): stop SDK retries nesting under router retries, and unbreak CircleCI integration tests by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44791](https://github.com/BerriAI/litellm/pull/44791)
- fix(cost-map): update together_ai Kimi-K3 and Qwen3.8-Flash prices to published rates by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44864](https://github.com/BerriAI/litellm/pull/44864)
- fix(ui): restore key activity search to the top of the tab and add model activity search by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44521](https://github.com/BerriAI/litellm/pull/44521)
- refactor(rust): extract inference-testing crate by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44873](https://github.com/BerriAI/litellm/pull/44873)
- fix(ui): read MCP submission rules from bare-array /config/list response by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44648](https://github.com/BerriAI/litellm/pull/44648)
- chore(model_prices): remove malformed, duplicate and decommissioned palm cost map entries by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44880](https://github.com/BerriAI/litellm/pull/44880)
- fix(azure): add model router flat fee to azure provider cost tracking by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44876](https://github.com/BerriAI/litellm/pull/44876)
- chore(pricing): add azure model-router and whisper rows by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44872](https://github.com/BerriAI/litellm/pull/44872)
- fix(security): remove the publicly known master key from the repo by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44718](https://github.com/BerriAI/litellm/pull/44718)
- chore(prices): add gemini/gemini-nano-banana-2.1 from the Gemini pricing page by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44868](https://github.com/BerriAI/litellm/pull/44868)
- fix(ci): skip the generated dashboard bundle in the master key guard by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44890](https://github.com/BerriAI/litellm/pull/44890)
- fix(model_prices): correct supported_endpoints on gemini and vertex image rows by [@&#8203;devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#&#8203;44891](https://github.com/BerriAI/litellm/pull/44891)
- feat(vertex-ai): add gemini-nano-banana-2.1 and Nano Banana 2 priority pricing by [@&#8203;berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#&#8203;44892](https://github.com/BerriAI/litellm/pull/44892)
- fix(lens): reuse trace reviews and consolidate findings across runs by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44778](https://github.com/BerriAI/litellm/pull/44778)
- fix(lens): paginate visible conversation entries by [@&#8203;moe-berri](https://github.com/moe-berri) in [#&#8203;44878](https://github.com/BerriAI/litellm/pull/44878)
- refactor(rust_…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants