Skip to content

fix(tests): match the OS bind error in the owned-proxy port-race retry - #44462

Merged
mateo-berri merged 2 commits into
mainfrom
litellm_integration_port_race_strerror
Oct 4, 2026
Merged

mateo-berri merged 2 commits into
mainfrom
litellm_integration_port_race_strerror

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

TLDR

Problem this solves:

  • The owned-proxy launch retry in tests/integration/_support/process.py never fires on a real port collision
  • It looks for address already in use, the server logs [Errno 48] Address already in use
  • A collision fails the cell with Owned proxy exited before readiness instead of relaunching

How it solves it:

  • Match os.strerror(errno.EADDRINUSE), the text the OS puts in the error the server logs
  • Regression tests feed _lost_port_race the exact logged line, an unrelated exit, and a live process

User Flow

Before: an engineer running a self-booting integration cell loses the run to a port race the harness was built to survive

  1. They run python tests/integration/run.py providers tests/integration/providers/test_decisions_chaos.py
  2. The cell reserves a free port and launches its two-worker proxy on it
  3. Another process on the box takes that port first, the proxy log ends with ERROR: [Errno 48] Address already in use
  4. The cell fails with AssertionError: Owned proxy exited before readiness although two launch attempts are left

After: the same collision is recognized and the launch retries on a fresh port

  1. They run the same python tests/integration/run.py providers tests/integration/providers/test_decisions_chaos.py
  2. The cell reserves a free port and launches its two-worker proxy on it
  3. Another process takes the port first, the proxy log ends with the same [Errno 48] Address already in use line
  4. The harness relaunches on a fresh port and the cell runs to its own verdict

Pre-Submission checklist

Please complete all items before asking a LiteLLM maintainer to review your PR

  • I have added meaningful tests
  • The handful of test files covering my change pass locally, e.g. uv run pytest tests/unit/<your_test_file>.py -v. Leave the suites (make test-unit-*, make test-unit) to CI: it finishes in ~15 minutes where a laptop takes an hour or more
  • My PR passes all required CI/CD checks (e.g., lint, schema.d.ts sync check, etc.)
  • My PR's scope is as isolated as possible; it only solves 1 specific problem
  • I have received a Greptile Confidence Score of at least 4/5 before requesting a maintainer review (Greptile reviews automatically once the PR is opened; only comment @greptileai to re-request a review after pushing changes)

Delays in PR merge?

If you're seeing a delay in your PR being merged, ping the LiteLLM Team on Slack (#pr-review).

Screenshots / Proof of Fix

Shared setup: a Python socket holds a random free port (50989) on 127.0.0.1, then the harness's own proxy entrypoint is launched on that port exactly the way owned_proxy_process launches it, with the log captured to a file

python3 -c "import socket,time; s=socket.socket(); s.bind(('127.0.0.1', 50989)); s.listen(); time.sleep(600)" &
PYTHONPATH=$PWD:$PWD/tests python -P -m integration._support.proxy --config config.yaml --host 127.0.0.1 --port 50989 --num_workers 2 --telemetry False > owned-proxy.log 2>&1; echo "exit=$?"
grep -n "Errno" owned-proxy.log
exit=3
14:ERROR:    [Errno 48] Address already in use

Before (1a70233)

  1. The needle the merge base's _lost_port_race searches for, against that log: grep -c "address already in use" owned-proxy.log
  2. Output: 0, so the harness reads the exit as a plain crash and asserts Owned proxy exited before readiness

After (b12759e)

  1. The needle the fix searches for, derived from the OS: grep -c "$(python3 -c 'import errno,os; print(os.strerror(errno.EADDRINUSE))')" owned-proxy.log
  2. Output: 1 (ERROR: [Errno 48] Address already in use), so the harness relaunches on a fresh port
  3. uv run pytest tests/unit/integration_support/test_process.py -q: 3 passed, in-process (the predicate takes the exit code and the log path); with the needle reverted to the lowercase text, test_lost_port_race_matches_the_bind_error_the_server_logs fails
  • b12759e passes /audit (skipped: no product code on a request path, tests and test harness only)

Type

🐛 Bug Fix
✅ Test

Caveats (if any)

Low

  • The proof shows the needle against the real server's log on a held port, not the harness relaunching inside a real run.py cell, because a collision cannot be forced on a port the harness picks for itself; the retry glue around the predicate is covered by the in-process unit tests, and forcing the race would mean test-only hooks in the harness's port choice for the sake of a proof
  • The new unit tests run on main's six-hourly CircleCI unit job, which collects every tests/unit file, not on the PR-time GitHub shards, the same way the sibling test_routing.py does; adding a shard for a two-file harness directory is more CI config than the fix is worth
  • The regression tests put tests/ on sys.path through monkeypatch.syspath_prepend to import the harness module, which imports its siblings as integration._support.* the way CI's PYTHONPATH resolves them; a tests.-rooted import would need the harness to change how it imports its siblings, more churn than a two-line fixture

Final Attestation

  • The tests check the right things, including the edge cases, and regressions in the respective real-world customer use-cases are not possible after this PR

  • b12759e passes /live-pr-risk

@devin-ai-integration

devin-ai-integration Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor Author

I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".

  • Disable automatic comment, CI, and merge conflict monitoring

@greptile-apps

greptile-apps Bot commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 5/5

[Low risk] Test support code for port-binding retry logic.

The PR appears safe to merge; no outstanding actionable finding was identified.

Findings

  1. P2 Regression tests miss unit CI ▶

Summary

The PR updates the owned-proxy harness to recognize the OS bind-collision message and adds in-process regression tests. The subsequent revision removes subprocess fixtures and passes the polled exit status directly to the collision predicate.

Reviews (2) · Last reviewed commit: "test(integration): keep the port-race pr..."

Comment thread tests/unit/integration_support/test_process.py Outdated
process.wait()


def test_lost_port_race_matches_the_bind_error_the_server_logs(

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.

P2 Regression tests miss unit CI The unit workflow runs selected paths, but no shard selects tests/unit/integration_support. These new tests therefore will not run there, leaving the bind-error fix without CI regression coverage

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.

The tests run in CI: the CircleCI unit job collects every tests/unit file on main every six hours, the same path the sibling test_routing.py takes

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.

You're right — my comment incorrectly assumed that the unit workflow only runs explicitly listed shard paths. The six-hour CircleCI unit job collects tests/unit on main, so tests/unit/integration_support/test_process.py is covered just like the sibling test_routing.py.

This finding is invalid; no CI configuration change is needed.

@codecov

codecov Bot commented Oct 3, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@mateo-berri

Copy link
Copy Markdown
Contributor

@greptileai

@mateo-berri

Copy link
Copy Markdown
Contributor

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 b12759e. Configure here.

@mateo-berri mateo-berri 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.

LGTM

@mateo-berri
mateo-berri merged commit dfdd496 into main Oct 4, 2026
95 of 96 checks passed
@mateo-berri
mateo-berri deleted the litellm_integration_port_race_strerror branch October 4, 2026 00:07
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.

1 participant