Repository navigation
fix(sentry): scrub PII and secrets inside object reprs and nested locals, add SENTRY_SEND_DEFAULT_PII opt-in - #43123
Conversation
…als, add SENTRY_SEND_DEFAULT_PII opt-in
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
…irtual key arrives in
|
bugbot run |
|
bugbot run |
…pii_reprs # Conflicts: # pyproject.toml
|
bugbot run |
|
bugbot run |
There was a problem hiding this comment.
✅ 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 a2bfb20. Configure here.
…105.0) (#866) 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.104.0` → `v1.105.0` | --- ### Release Notes <details> <summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary> ### [`v1.105.0`](https://github.com/BerriAI/litellm/releases/tag/v1.105.0) [Compare Source](https://github.com/BerriAI/litellm/compare/v1.104.3...v1.105.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.105.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.105.0/cosign.pub \ ghcr.io/berriai/litellm:v1.105.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 - feat(mcp): share compatibility-aware result conversion across tool surfaces by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43089](https://github.com/BerriAI/litellm/pull/43089) - fix(caching): propagate auth cache invalidation over Redis Cluster via a node-level pub/sub client by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43110](https://github.com/BerriAI/litellm/pull/43110) - feat(model-catalog): add Rust registry validation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43136](https://github.com/BerriAI/litellm/pull/43136) - test(rust): reorganize core crate tests and split cache and OCR suites by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43177](https://github.com/BerriAI/litellm/pull/43177) - fix(proxy): give SpendLogToolIndex its own share of the cleanup budget and log a per-run summary by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​41768](https://github.com/BerriAI/litellm/pull/41768) - feat(rust): hand upstream response headers to the native Messages stream by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43178](https://github.com/BerriAI/litellm/pull/43178) - feat(testkit): agent clients for Claude Code, Codex and opencode by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43181](https://github.com/BerriAI/litellm/pull/43181) - ci: run migrated unit selections on every event in legacy GHA shards by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43182](https://github.com/BerriAI/litellm/pull/43182) - test: move tests/test_litellm root and small trees into tests/unit by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43186](https://github.com/BerriAI/litellm/pull/43186) - fix(sso): gate /sso/debug routes behind ENABLE_SSO_DEBUG, off by default by [@​ojensen-berri](https://github.com/ojensen-berri) in [#​43150](https://github.com/BerriAI/litellm/pull/43150) - refactor(framer): replace Framer trait with tokio-util codecs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43193](https://github.com/BerriAI/litellm/pull/43193) - fix(anthropic): surface Responses bridge stream failures as Anthropic error events by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43126](https://github.com/BerriAI/litellm/pull/43126) - test: move tests/test_litellm/llms into tests/unit/llms by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43191](https://github.com/BerriAI/litellm/pull/43191) - test: move tests/test_litellm integrations and secret_managers into tests/unit by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43194](https://github.com/BerriAI/litellm/pull/43194) - feat(mcp): configure protocol versions and capability discovery by [@​joshua-berri](https://github.com/joshua-berri) in [#​43169](https://github.com/BerriAI/litellm/pull/43169) - fix(proxy): record streamed /v1/responses container ownership before the response.completed frame by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43140](https://github.com/BerriAI/litellm/pull/43140) - fix(tests): drop the repeated UNIT_FLAG key in test_unit_shard_missing_paths by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43212](https://github.com/BerriAI/litellm/pull/43212) - fix(router): count provider budget spend on every API surface by [@​daqiangganjun](https://github.com/daqiangganjun) in [#​38172](https://github.com/BerriAI/litellm/pull/38172) - fix(responses): fall back on pre-output stream drops, fail truncated streams, honor request_timeout by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43133](https://github.com/BerriAI/litellm/pull/43133) - fix(sentry): scrub PII and secrets inside object reprs and nested locals, add SENTRY_SEND_DEFAULT_PII opt-in by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43123](https://github.com/BerriAI/litellm/pull/43123) - fix(bedrock): surface a converse-stream 200 that decodes to no events as a 502 instead of an empty turn by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43213](https://github.com/BerriAI/litellm/pull/43213) - fix(jwt): let x-litellm-team-id select DB membership teams when the token also carries a team claim by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43206](https://github.com/BerriAI/litellm/pull/43206) - feat(integrations): add Databricks Zerobus trace logging callback by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42013](https://github.com/BerriAI/litellm/pull/42013) - fix(vertex_ai): keep legacy bucket_name in credential resolution and add GCS_BATCH_BUCKET_NAME env var by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​42803](https://github.com/BerriAI/litellm/pull/42803) - feat(xai): add native xAI batches and files support by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42812](https://github.com/BerriAI/litellm/pull/42812) - fix(proxy): send a real error event when a /v1/messages stream fails by [@​4refael](https://github.com/4refael) in [#​41826](https://github.com/BerriAI/litellm/pull/41826) - fix(logging): redact raw_request when turn_off_message_logging is set in the proxy config by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43219](https://github.com/BerriAI/litellm/pull/43219) - fix(router): parse the classifier verdict out of surrounding prose instead of falling to the default tier by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43215](https://github.com/BerriAI/litellm/pull/43215) - test(zerobus): move tests into active CI selection by [@​tin-berri](https://github.com/tin-berri) in [#​43235](https://github.com/BerriAI/litellm/pull/43235) - fix(proxy): keep the submitted body out of 422 validation errors by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43231](https://github.com/BerriAI/litellm/pull/43231) - test: move tests/test_litellm core utils, routing, responses, caching and rust_bridge into tests/unit by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43199](https://github.com/BerriAI/litellm/pull/43199) - chore(cost-map): add fireworks us-only deepseek v4.1 flash priority prices by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43247](https://github.com/BerriAI/litellm/pull/43247) - chore(cost-map): sync openrouter prices and add perceptron-mk1.5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43246](https://github.com/BerriAI/litellm/pull/43246) - fix(cost-map): correct fireworks_ai deepseek-v4p1-flash pricing by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43253](https://github.com/BerriAI/litellm/pull/43253) - feat(openrouter): add typesafe/jev-router to the cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43248](https://github.com/BerriAI/litellm/pull/43248) - chore(cost-map): add fireworks priority prices for muse glimmer 30b and deepseek v4 flash vision exp by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43252](https://github.com/BerriAI/litellm/pull/43252) - refactor(rust): move credential inheritance and SDK limits into a driver preflight by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43259](https://github.com/BerriAI/litellm/pull/43259) - fix(router): hold Responses lifecycle events until output so a pre-output fallback announces one response by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43238](https://github.com/BerriAI/litellm/pull/43238) - refactor(http): hand out an owned Client and route all providers through the pool by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43245](https://github.com/BerriAI/litellm/pull/43245) - test: fix stale and state-leaking tests red on scheduled CircleCI by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43266](https://github.com/BerriAI/litellm/pull/43266) - fix(cost-map): retirement dates, chatgpt reasoning flags, bing pricing, bedrock mantle and mythos, azure gpt-5.6 alias, anthropic batch rates, new nebius, openrouter and xai rows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42951](https://github.com/BerriAI/litellm/pull/42951) - refactor(rust): promote anthropic messages out of experimental_pass_through by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43269](https://github.com/BerriAI/litellm/pull/43269) - test: stop CI tests from downloading tokenizer files and images by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43257](https://github.com/BerriAI/litellm/pull/43257) - fix(rust): preserve nested optional import failures by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43265](https://github.com/BerriAI/litellm/pull/43265) - ci: drop main and litellm\_\* branch filters from the CircleCI litellm-main workflows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43272](https://github.com/BerriAI/litellm/pull/43272) - feat(proxy): email alerts at configured percentages of a team member budget by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42665](https://github.com/BerriAI/litellm/pull/42665) - fix(callbacks-legacy-python): traverse and release the retained headers dict by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43274](https://github.com/BerriAI/litellm/pull/43274) - test(integration): port langfuse callbacks-in-db coverage to the local harness by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43282](https://github.com/BerriAI/litellm/pull/43282) - test(e2e): accept the otel cost write as a linked root trace by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42931](https://github.com/BerriAI/litellm/pull/42931) - test: finish the non-proxy half of tests/test_litellm by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43281](https://github.com/BerriAI/litellm/pull/43281) - refactor(rust): prepare inference and auth foundations for the gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43287](https://github.com/BerriAI/litellm/pull/43287) - feat(rust): add config, router and gateway crates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43289](https://github.com/BerriAI/litellm/pull/43289) - fix(cost-map): remove duplicate openrouter/perceptron/perceptron-mk1.5 entry by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43273](https://github.com/BerriAI/litellm/pull/43273) - fix(e2e): resolve the blank-S3 gateway repo root from the litellm package location by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42911](https://github.com/BerriAI/litellm/pull/42911) - test(integration): run the Langfuse DB-callback test on its own scratch database by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43288](https://github.com/BerriAI/litellm/pull/43288) - refactor(rust): expand logging and test coverage across gateway and Anthropic messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43295](https://github.com/BerriAI/litellm/pull/43295) - refactor: daily fresh tech debt cleanup, rolling PR (2026-09-25) by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43151](https://github.com/BerriAI/litellm/pull/43151) - test(proxy_behavior): scope the management proxy fixture to its package so its spend monitor cannot race the spend tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43302](https://github.com/BerriAI/litellm/pull/43302) - fix(cost-map): registry audit 2026-09-26, MAI-Image-2.5-Flash price, Databricks Claude Opus 5.5, Azure Foundry retirement dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43254](https://github.com/BerriAI/litellm/pull/43254) - fix(cost-map): price fireworks deepseek v4.1 flash at the prices api value by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43311](https://github.com/BerriAI/litellm/pull/43311) - fix(ci): stop stale CI reds, keep unit tests off the host env, retry CyberArk policy conflicts by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43294](https://github.com/BerriAI/litellm/pull/43294) - fix(otel): detach post-response service spans by request phase, name redis spans by operation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43237](https://github.com/BerriAI/litellm/pull/43237) - test(e2e): assert only litellm-owned batch behavior and move the blank S3 env pin to an integration test by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43321](https://github.com/BerriAI/litellm/pull/43321) - test(integration): pin the team-admin status-code matrix across every management route by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43249](https://github.com/BerriAI/litellm/pull/43249) - feat(proxy): add fail_closed_rate_limit_enforcement to reject requests with 503 while Redis rate limit counters are unreachable by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43251](https://github.com/BerriAI/litellm/pull/43251) - fix(responses): run stream failure and success hooks on the iterating loop instead of blocking it by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43270](https://github.com/BerriAI/litellm/pull/43270) - fix(guardrails): block private destinations in custom code http_request and bound guardrail execution time by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43280](https://github.com/BerriAI/litellm/pull/43280) - feat(sail): add Sail as a provider with service_tier mapped to its completion window by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42840](https://github.com/BerriAI/litellm/pull/42840) - test(mcp): pin server resolution and authorization behavior by [@​joshua-berri](https://github.com/joshua-berri) in [#​43261](https://github.com/BerriAI/litellm/pull/43261) - refactor(anthropic): rename experimental_pass_through to pass_through by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43329](https://github.com/BerriAI/litellm/pull/43329) - refactor(mcp): add shared server resolver without changing callers by [@​joshua-berri](https://github.com/joshua-berri) in [#​43262](https://github.com/BerriAI/litellm/pull/43262) - ci: fail on new unbounded SQL IN lists and add a Prisma chunking helper by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​42629](https://github.com/BerriAI/litellm/pull/42629) - test(logging): drain the logging worker after each logging callback test so no later test inherits its events by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43344](https://github.com/BerriAI/litellm/pull/43344) - feat(guardrails): scan retrieved vector store chunks with the request's pre-call guardrails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43271](https://github.com/BerriAI/litellm/pull/43271) - fix(mcp): adopt shared server resolution and caller authorization by [@​joshua-berri](https://github.com/joshua-berri) in [#​43263](https://github.com/BerriAI/litellm/pull/43263) - fix(s3_v2): upload fresh events first, drop terminal failures and hour-old retries by default, opt-in adaptive concurrency by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43022](https://github.com/BerriAI/litellm/pull/43022) - feat(proxy): add maximum_daily_tag_spend_retention_period cleanup setting by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39221](https://github.com/BerriAI/litellm/pull/39221) - fix(cost-map): sync OpenRouter, Together, Cohere and Azure AI registry values with official sources by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43337](https://github.com/BerriAI/litellm/pull/43337) - docs(pr-template): add the backport-stable label only for a P0 regression by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43351](https://github.com/BerriAI/litellm/pull/43351) - fix(params): keep *litellm*\* kwargs out of provider request bodies by construction by [@​shrey-berri](https://github.com/shrey-berri) in [#​43221](https://github.com/BerriAI/litellm/pull/43221) - test: remove substring guard test_default_api_base by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43355](https://github.com/BerriAI/litellm/pull/43355) - ci: cut CircleCI wall time without loosening test isolation by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43347](https://github.com/BerriAI/litellm/pull/43347) - fix(cost-map): correct azure gpt-4o-mini tts, transcribe, alias and MAI-Image-2.5 prices by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43357](https://github.com/BerriAI/litellm/pull/43357) - fix(tests): stop VCR recording and replaying a test's own localhost upstream by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43346](https://github.com/BerriAI/litellm/pull/43346) - test(integration): group /v1/messages contracts under tests/integration/messages_endpoint by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43352](https://github.com/BerriAI/litellm/pull/43352) - fix(params): validate stream_chunk_size once, before any provider call by [@​shrey-berri](https://github.com/shrey-berri) in [#​43222](https://github.com/BerriAI/litellm/pull/43222) - fix(openai): exclude fine-tuned and custom gpt-5-chat aliases from gpt-5 reasoning path by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43185](https://github.com/BerriAI/litellm/pull/43185) - fix(langtrace): deliver spans to app.langtrace.ai/api/trace with x-api-key by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43322](https://github.com/BerriAI/litellm/pull/43322) - fix(caching): stand default cache points down when extra_body hides a direct client mark by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43341](https://github.com/BerriAI/litellm/pull/43341) - fix(mcp): report reachability without stored credentials by [@​tin-berri](https://github.com/tin-berri) in [#​43240](https://github.com/BerriAI/litellm/pull/43240) - fix(mcp): align hub publication status and controls by [@​tin-berri](https://github.com/tin-berri) in [#​43241](https://github.com/BerriAI/litellm/pull/43241) - chore(cost-map): sync openrouter prices for deepseek, minimax, qwen and glm rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43384](https://github.com/BerriAI/litellm/pull/43384) - chore(cost-map): drop stale cache hit field from openrouter deepseek-v4-pro-0813 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43389](https://github.com/BerriAI/litellm/pull/43389) - fix(responses): stream guardrail pre-call block as SSE with a typed output item by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42507](https://github.com/BerriAI/litellm/pull/42507) - feat(e2e): read management routes back from the control plane replicas by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43373](https://github.com/BerriAI/litellm/pull/43373) - feat(rust): add the openai_like chat config foundation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43379](https://github.com/BerriAI/litellm/pull/43379) - feat(router): opt in to prompt-cache cost routing by [@​tin-berri](https://github.com/tin-berri) in [#​43232](https://github.com/BerriAI/litellm/pull/43232) - feat(otel): add SigNoz preset for OpenTelemetry v2 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43296](https://github.com/BerriAI/litellm/pull/43296) - feat(cli): reuse saved agent setup and add reconfigure by [@​tin-berri](https://github.com/tin-berri) in [#​43392](https://github.com/BerriAI/litellm/pull/43392) - fix(streaming): keep litellm Usage on text-completion usage chunks by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43047](https://github.com/BerriAI/litellm/pull/43047) - fix(vertex_ai): consider tools when validating context caching min tokens by [@​agustin18](https://github.com/agustin18) in [#​43319](https://github.com/BerriAI/litellm/pull/43319) - fix(anthropic): drop thinking blocks with empty thinking text, not just missing signature by [@​shoemoney](https://github.com/shoemoney) in [#​38049](https://github.com/BerriAI/litellm/pull/38049) - test(e2e): report batch cleanup leftovers as a plain UserWarning by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43405](https://github.com/BerriAI/litellm/pull/43405) - fix(tools): salvage concatenated JSON tool call arguments by [@​kumarpriyanshu09](https://github.com/kumarpriyanshu09) in [#​43260](https://github.com/BerriAI/litellm/pull/43260) - fix(gemini): forward seed to the Gemini API instead of rejecting it by [@​YaseenBashaT](https://github.com/YaseenBashaT) in [#​43197](https://github.com/BerriAI/litellm/pull/43197) - fix(vertex_ai): make Gemma fake streams work with traced Responses by [@​stewartpark](https://github.com/stewartpark) in [#​43147](https://github.com/BerriAI/litellm/pull/43147) - fix(responses): emit the reasoning item on streaming /v1/responses for signature-only thinking by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43414](https://github.com/BerriAI/litellm/pull/43414) - fix(anthropic): forward the per-turn-control beta to Azure AI Foundry by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43415](https://github.com/BerriAI/litellm/pull/43415) - test(vertex_ai): assert the usage the Gemma responses stream actually reports by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43422](https://github.com/BerriAI/litellm/pull/43422) - fix(bedrock): keep the provider status code on unprocessable image errors by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43416](https://github.com/BerriAI/litellm/pull/43416) - fix(vertex_ai): stop importing the vertexai SDK in partner-model completion by [@​anmolg1997](https://github.com/anmolg1997) in [#​42274](https://github.com/BerriAI/litellm/pull/42274) - fix(token_counter): count Gemini function_declarations tools by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43417](https://github.com/BerriAI/litellm/pull/43417) - refactor(types): replace Any with proven types in 5 files by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43304](https://github.com/BerriAI/litellm/pull/43304) - chore(cost-map): update azure_ai/grok-4.6 input price from Azure pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43440](https://github.com/BerriAI/litellm/pull/43440) - chore(cost-map): add azure_ai/MAI-Cyber-1-Flash by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43446](https://github.com/BerriAI/litellm/pull/43446) - refactor(rust): share anthropic types, request helpers, and streaming contracts across crates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43426](https://github.com/BerriAI/litellm/pull/43426) - feat(rust): expand gateway configuration parsing by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43460](https://github.com/BerriAI/litellm/pull/43460) - refactor(rust): share call lifecycle across route-owned inference by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43461](https://github.com/BerriAI/litellm/pull/43461) - feat(rust): add the HTTP host driver by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43462](https://github.com/BerriAI/litellm/pull/43462) - build(rust): package the gateway container by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43471](https://github.com/BerriAI/litellm/pull/43471) - refactor(rust): use shared execution in gateway inference by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43463](https://github.com/BerriAI/litellm/pull/43463) - fix(cost-map): add deprecation_date to together_ai Salesforce/Llama-Rank-V1 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43507](https://github.com/BerriAI/litellm/pull/43507) - feat(rust): support the HTTP Responses API by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43464](https://github.com/BerriAI/litellm/pull/43464) - fix(cost-map): sync openrouter prices from the models API by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43506](https://github.com/BerriAI/litellm/pull/43506) - fix(cost-map): set together_ai gpt-oss-20b and gemma-4-31B-it deprecation_date to 2026-09-15 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43509](https://github.com/BerriAI/litellm/pull/43509) - feat(rust): add litellm-db and litellm-db-testing workspace scaffolding by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43504](https://github.com/BerriAI/litellm/pull/43504) - feat(rust): connect Python inference bindings to shared routes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43465](https://github.com/BerriAI/litellm/pull/43465) - feat(rust): add structured route lifecycle tracing by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43466](https://github.com/BerriAI/litellm/pull/43466) - feat(rust): separate gateway authentication and authorization by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43467](https://github.com/BerriAI/litellm/pull/43467) - feat(rust): add virtual key storage contracts by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43468](https://github.com/BerriAI/litellm/pull/43468) - feat(rust): add gateway UI login and sessions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43469](https://github.com/BerriAI/litellm/pull/43469) - feat(rust): add the MCP gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43470](https://github.com/BerriAI/litellm/pull/43470) - refactor(rust): remove delivery routing abstraction by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43514](https://github.com/BerriAI/litellm/pull/43514) - feat(azure): add mistral ocr pricing and azure max output limits by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43530](https://github.com/BerriAI/litellm/pull/43530) - refactor: clean up fresh tech debt from 2026-09-27 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43538](https://github.com/BerriAI/litellm/pull/43538) - refactor(types): replace Any with proven types in 8 files by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43551](https://github.com/BerriAI/litellm/pull/43551) - test(rust): enforce shared upstream error contract in wheel checks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43520](https://github.com/BerriAI/litellm/pull/43520) - fix(proxy): log key owner identity on expired key auth failures by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43105](https://github.com/BerriAI/litellm/pull/43105) - fix(cost-map): registry audit 2026-09-28, openai deep-research shutdown dates, azure deepseek v4.1 flash direct price, vertex gemini 3.8 live avatar price, drop azure_ai/muse-spark-1.3 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43566](https://github.com/BerriAI/litellm/pull/43566) - security(proxy): keep team callback credentials out of the stored request body by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43217](https://github.com/BerriAI/litellm/pull/43217) - feat(model_prices): add claude-sonnet-5-5 model pricing by [@​krrish-berri-2](https://github.com/krrish-berri-2) in [#​43586](https://github.com/BerriAI/litellm/pull/43586) - test(integration): pin org-admin status codes in the team-admin matrix by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43592](https://github.com/BerriAI/litellm/pull/43592) - refactor(guardrails): fix agent 365 to the production endpoint and log the opt-in fail_open at error level by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43189](https://github.com/BerriAI/litellm/pull/43189) - fix(model_prices): correct Claude Sonnet 5.5 capabilities and provider keys by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43587](https://github.com/BerriAI/litellm/pull/43587) - test(unit): stop test modules from putting their own directory on sys.path by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43421](https://github.com/BerriAI/litellm/pull/43421) - refactor(rust): centralize host execution and compose callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43515](https://github.com/BerriAI/litellm/pull/43515) - fix(proxy): unregister logging callbacks removed from the stored config by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43428](https://github.com/BerriAI/litellm/pull/43428) - chore(cost-map): take azure limits for deepseek-v4-flash-0731 and v3.2-speciale by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43597](https://github.com/BerriAI/litellm/pull/43597) - revert: "feat(proxy): server-side Team Usage export beyond the top-N key cap ([#​42996](https://github.com/BerriAI/litellm/issues/42996))" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​43376](https://github.com/BerriAI/litellm/pull/43376) - fix(cost-map): add web search flag and model page source to anthropic claude-sonnet-5-5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43584](https://github.com/BerriAI/litellm/pull/43584) - refactor(mcp): consolidate hub publication predicate by [@​tin-berri](https://github.com/tin-berri) in [#​43394](https://github.com/BerriAI/litellm/pull/43394) - fix(provider): accept 2xx status codes in unified_access_group create by [@​Louis-Vauterin](https://github.com/Louis-Vauterin) in [#​42461](https://github.com/BerriAI/litellm/pull/42461) - fix(panw_prisma_airs): honor experimental_use_latest_role_message_only on every request shape by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42447](https://github.com/BerriAI/litellm/pull/42447) - fix(cost-map): add Vertex batch cache prices to vertex_ai/claude-sonnet-5-5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43602](https://github.com/BerriAI/litellm/pull/43602) - revert: "feat(usage): search team keys beyond the top-N in the Team usage view ([#​42857](https://github.com/BerriAI/litellm/issues/42857))" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​43377](https://github.com/BerriAI/litellm/pull/43377) - feat(providers): add Prism provider (internal copy of [#​40914](https://github.com/BerriAI/litellm/issues/40914)) by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​41961](https://github.com/BerriAI/litellm/pull/41961) - test(integration): credential canary suite harness by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43300](https://github.com/BerriAI/litellm/pull/43300) - feat(bedrock): add xai grok-4.7 pricing and sync llama, mistral large 2407 and minimax m2.5 prices by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43623](https://github.com/BerriAI/litellm/pull/43623) - ci: sync the weekly release cycle with Linear releases by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43636](https://github.com/BerriAI/litellm/pull/43636) - feat(cache): select Rust caching through explicit cache objects by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43601](https://github.com/BerriAI/litellm/pull/43601) - test(integration): credential canary slots for MCP and pass-through credentials by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43308](https://github.com/BerriAI/litellm/pull/43308) - test(integration): stored-config credential canary slots by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43309](https://github.com/BerriAI/litellm/pull/43309) - fix(guardrails): preserve Presidio output selection and restoration by [@​joshua-berri](https://github.com/joshua-berri) in [#​43401](https://github.com/BerriAI/litellm/pull/43401) - fix(ui): rename All Models tab to Deployed Models and model filters to All Proxy Models by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43638](https://github.com/BerriAI/litellm/pull/43638) - feat(mcp): scan and pin upstream tool descriptions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43283](https://github.com/BerriAI/litellm/pull/43283) - feat(cost-map): add bedrock_mantle rows for claude opus 5.5 and sonnet 5.5 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43647](https://github.com/BerriAI/litellm/pull/43647) - chore(codeowners): drop UI, migration, and CODEOWNERS self owners by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43653](https://github.com/BerriAI/litellm/pull/43653) - feat(fireworks_ai): route and list the auto, auto-instant and firerouter routers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43641](https://github.com/BerriAI/litellm/pull/43641) - feat: add model leaderboard page by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​43649](https://github.com/BerriAI/litellm/pull/43649) - fix(google_genai): preserve proxy_server_request in completion adapter by [@​hsm207](https://github.com/hsm207) in [#​43536](https://github.com/BerriAI/litellm/pull/43536) - fix(otel): send cache and reasoning tokens in langfuse usage_details by [@​ankit373](https://github.com/ankit373) in [#​43553](https://github.com/BerriAI/litellm/pull/43553) - fix(vertex_ai): forward the per-turn-control beta for per-message output_config by [@​DeviaVir](https://github.com/DeviaVir) in [#​43558](https://github.com/BerriAI/litellm/pull/43558) - fix(cost-map): add tool calling and reasoning flags, correct max output for nebius DeepSeek-V4.1-Flash by [@​Flexomatic81](https://github.com/Flexomatic81) in [#​43588](https://github.com/BerriAI/litellm/pull/43588) - fix(proxy): resolve model_group_alias in the zero-cost budget predicate by [@​fedaeho](https://github.com/fedaeho) in [#​43512](https://github.com/BerriAI/litellm/pull/43512) - refactor: clean up fresh tech debt from 2026-09-28 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43674](https://github.com/BerriAI/litellm/pull/43674) - refactor(types): replace Any with proven types in 7 files by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43704](https://github.com/BerriAI/litellm/pull/43704) - docs(security): point readers to the security announcements mailing list signup by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43713](https://github.com/BerriAI/litellm/pull/43713) - refactor(rust): add shared llms wire type derives by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43730](https://github.com/BerriAI/litellm/pull/43730) - fix(router): stream /v1/messages lifecycle frames live when no fallback can take over by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43600](https://github.com/BerriAI/litellm/pull/43600) - feat(cost-map): add baseten DeepSeek-V4.1-Flash-Fast by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43735](https://github.com/BerriAI/litellm/pull/43735) - feat(guardrails): send a configured gateway_name from noma_v2 to Noma by [@​itaimodi](https://github.com/itaimodi) in [#​43678](https://github.com/BerriAI/litellm/pull/43678) - chore(cost-map): add openai gpt-6.1-sol from the pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43738](https://github.com/BerriAI/litellm/pull/43738) - test(integration): callback credential canary slots C1-C3 and D5 by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43630](https://github.com/BerriAI/litellm/pull/43630) - test(integration): request-path credential canary slots D1-D4 by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43307](https://github.com/BerriAI/litellm/pull/43307) - test(integration): sweep proxy logs, metrics, a Datadog intake and the Logs drawer for credential canaries by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43306](https://github.com/BerriAI/litellm/pull/43306) - chore(cost-map): add azure and openrouter gpt-6.1-sol rows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43744](https://github.com/BerriAI/litellm/pull/43744) - test(proxy): classify every credential-bearing param for the canary suite by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43298](https://github.com/BerriAI/litellm/pull/43298) - fix(cost-map): lower fireworks up-to-4b size tier to the pricing page price by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43740](https://github.com/BerriAI/litellm/pull/43740) - fix(cost_calculator): bill chat per-second pricing once with a new cost_per_second field by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43614](https://github.com/BerriAI/litellm/pull/43614) - chore(cost-map): add openai gpt-6-astra ultrafast tier prices from the pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43745](https://github.com/BerriAI/litellm/pull/43745) - fix(autorouter): compare historical and new savings consistently by [@​tin-berri](https://github.com/tin-berri) in [#​43348](https://github.com/BerriAI/litellm/pull/43348) - fix(model-prices): align Azure, Bedrock, Copilot, Gemini, Groq, OpenAI and OpenRouter entries with official docs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43598](https://github.com/BerriAI/litellm/pull/43598) - fix(guardrails): enable explicit PANW MCP output scanning by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43109](https://github.com/BerriAI/litellm/pull/43109) - refactor(rust): orchestrate Messages route execution by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43719](https://github.com/BerriAI/litellm/pull/43719) - fix(streaming): keep the served service_tier on streamed chunks and spend rows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42870](https://github.com/BerriAI/litellm/pull/42870) - feat(bedrock): add openai gpt-6.1-sol global and base rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43758](https://github.com/BerriAI/litellm/pull/43758) - perf(router): fetch cooldown state and usage counters in one Redis round trip by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43320](https://github.com/BerriAI/litellm/pull/43320) - perf(proxy): hold one spend counter batch across admission and across post-call accounting by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43369](https://github.com/BerriAI/litellm/pull/43369) - perf(responses): run aresponses through the async wrapper so the cache is read once by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43769](https://github.com/BerriAI/litellm/pull/43769) - fix(router): bind Claude Code background sessions to their auto-router by [@​tin-berri](https://github.com/tin-berri) in [#​43767](https://github.com/BerriAI/litellm/pull/43767) - feat(bedrock): add openai.gpt-6.1-sol us geo cris and Mantle rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43763](https://github.com/BerriAI/litellm/pull/43763) - fix(proxy): recover session key owners from daily spend for usage attribution by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43642](https://github.com/BerriAI/litellm/pull/43642) - chore(cost-map): take azure context limits from models-sold-directly by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43759](https://github.com/BerriAI/litellm/pull/43759) - perf(proxy): one request-scoped Redis pipeline for auth, spend, rate-limit and routing reads by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43407](https://github.com/BerriAI/litellm/pull/43407) - fix(mcp): scope OpenAPI listings to the exact server prefix and drop upstream OAuth metadata when a server is saved by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43608](https://github.com/BerriAI/litellm/pull/43608) - perf(proxy): one post-call Redis pipeline per backend for spend, rate-limit, routing and response-cache writes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43779](https://github.com/BerriAI/litellm/pull/43779) - fix(bedrock): set gpt-6.1-sol max output tokens to 131072 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43782](https://github.com/BerriAI/litellm/pull/43782) - perf(proxy): refresh auth management objects through the request Redis pipeline by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43776](https://github.com/BerriAI/litellm/pull/43776) - feat(agents): add identity storage and validation contracts by [@​joshua-berri](https://github.com/joshua-berri) in [#​43720](https://github.com/BerriAI/litellm/pull/43720) - chore: bump litellm-enterprise 0.1.71 -> 0.1.72, litellm-proxy-extras 0.4.102 -> 0.4.103, litellm 1.104.0 -> 1.105.0 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43789](https://github.com/BerriAI/litellm/pull/43789) - fix(auth): give UI/CLI session tokens their own AES-GCM context and header-safe shape by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43790](https://github.com/BerriAI/litellm/pull/43790) - chore(deps): bump pyjwt, moment and brace-expansion to clear osv-scan by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43792](https://github.com/BerriAI/litellm/pull/43792) - fix(ui): surface x-litellm-call-id in Logs search, table and drawer by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42436](https://github.com/BerriAI/litellm/pull/42436) - fix(proxy): look up hashed key names with two spend log rows per key by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43656](https://github.com/BerriAI/litellm/pull/43656) - fix(cost-map): add deprecation_date to two together_ai nvidia rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43809](https://github.com/BerriAI/litellm/pull/43809) - test(ci): refresh retired OpenAI tool-call models by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43676](https://github.com/BerriAI/litellm/pull/43676) - fix(ui): keep MCP permissions visible after key, team and MCP server saves by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43810](https://github.com/BerriAI/litellm/pull/43810) - test(ci): repair MCP Responses and budget fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43788](https://github.com/BerriAI/litellm/pull/43788) - test(bedrock): accept regional aliases that inherit Converse routing by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43785](https://github.com/BerriAI/litellm/pull/43785) - fix(params): categorize internal param appropriately to prevent leaking into request by [@​shrey-berri](https://github.com/shrey-berri) in [#​43783](https://github.com/BerriAI/litellm/pull/43783) - perf(router): honour the cooldown read interval in the routing prefetch by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43815](https://github.com/BerriAI/litellm/pull/43815) - fix(router): carry per-request routing reads on context variables instead of public method kwargs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43814](https://github.com/BerriAI/litellm/pull/43814) - fix(bedrock): add beta header for output config in message by [@​shrey-berri](https://github.com/shrey-berri) in [#​43778](https://github.com/BerriAI/litellm/pull/43778) - refactor: clean up fresh tech debt from 2026-09-29 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43830](https://github.com/BerriAI/litellm/pull/43830) - test(router): settle the shared logging worker before recording shadow callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43847](https://github.com/BerriAI/litellm/pull/43847) - chore(model_prices): add Gemini Veo, Mistral and Azure Claude 4.5 deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43857](https://github.com/BerriAI/litellm/pull/43857) - fix(cost_calculator): bill ultrafast prompts above 272k at the ultrafast long-context rates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43764](https://github.com/BerriAI/litellm/pull/43764) - refactor(rust): centralize Python bridge execution wrappers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43871](https://github.com/BerriAI/litellm/pull/43871) - chore(cost-map): add openai gpt-image-2.5 batch prices from the pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43869](https://github.com/BerriAI/litellm/pull/43869) - chore(cost-map): add fireworks priority prices for ember-1, nemotron and glm 5.3 us rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43811](https://github.com/BerriAI/litellm/pull/43811) - fix(proxy): attribute completed batch cost rows to /batches in daily activity by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43870](https://github.com/BerriAI/litellm/pull/43870) - fix(router): strip encrypted reasoning the pinned deployment cannot decrypt by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43781](https://github.com/BerriAI/litellm/pull/43781) - fix(cost_calculator): stop copying optional_params into response hidden params by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43637](https://github.com/BerriAI/litellm/pull/43637) - feat(pricing): add vertex_ai gemini-3.8 flash tts rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43876](https://github.com/BerriAI/litellm/pull/43876) - fix(proxy): keep request-body credentials out of stored spend-log requests by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43635](https://github.com/BerriAI/litellm/pull/43635) - fix(ui): right-align money and count columns across tables by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​37889](https://github.com/BerriAI/litellm/pull/37889) - feat(agents): enforce authoritative agent permissions by [@​joshua-berri](https://github.com/joshua-berri) in [#​43721](https://github.com/BerriAI/litellm/pull/43721) - fix(proxy): strip caller credentials from websocket passthrough by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43855](https://github.com/BerriAI/litellm/pull/43855) - fix(ui): render access group MCP and agent selections as wrapping chips by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​41228](https://github.com/BerriAI/litellm/pull/41228) - fix(responses): scan and mask top-level instructions with guardrails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43629](https://github.com/BerriAI/litellm/pull/43629) - feat(traces): add Rust storage foundation by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​43819](https://github.com/BerriAI/litellm/pull/43819) - feat(ui): agent traces tab on logs with timeline and otel setup guide by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​43891](https://github.com/BerriAI/litellm/pull/43891) - feat(otel v2): excluded_services opt-out for datastore spans on tenant destinations by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43278](https://github.com/BerriAI/litellm/pull/43278) - fix(traces): correct ClickHouse rollup partitioning, dedupe keys, and retention changes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43901](https://github.com/BerriAI/litellm/pull/43901) - fix(bedrock): keep applicable beta headers by [@​shrey-berri](https://github.com/shrey-berri) in [#​43829](https://github.com/BerriAI/litellm/pull/43829) - feat(agents): authenticate Entra identities and delegated requests by [@​joshua-berri](https://github.com/joshua-berri) in [#​43722](https://github.com/BerriAI/litellm/pull/43722) - fix(hosted_vllm): keep reasoning_content on replayed assistant messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43599](https://github.com/BerriAI/litellm/pull/43599) - fix(proxy): delete large teams without per-member transaction fan-out by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42998](https://github.com/BerriAI/litellm/pull/42998) - feat(tracing): port OTLP ingestion to current trace foundation by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​43915](https://github.com/BerriAI/litellm/pull/43915) - feat(proxy): add native ROI calculator for gateway spend vs merged PRs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43669](https://github.com/BerriAI/litellm/pull/43669) - test(e2e): repair completion, SAIL, and spend-log fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43902](https://github.com/BerriAI/litellm/pull/43902) - test(s3_v2): pin async 5xx retry through the production AsyncHTTPHandler by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43080](https://github.com/BerriAI/litellm/pull/43080) - feat(ui): adopt the new LiteLLM logo and monogram by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43913](https://github.com/BerriAI/litellm/pull/43913) - fix(proxy): relay Azure passthrough body model groups through the router by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43896](https://github.com/BerriAI/litellm/pull/43896) - fix(proxy): register a UI-configured arize callback next to otel under OTel v2 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43906](https://github.com/BerriAI/litellm/pull/43906) - fix(transcription): honor base_url alias for Groq Whisper and report it as the api base by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43917](https://github.com/BerriAI/litellm/pull/43917) - feat(tracing): store spend in ClickHouse automatically by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​43928](https://github.com/BerriAI/litellm/pull/43928) - fix(packaging): keep wheel paths under Windows MAX_PATH for Store Python by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43903](https://github.com/BerriAI/litellm/pull/43903) - feat(agents): add identity registration and dashboard controls by [@​joshua-berri](https://github.com/joshua-berri) in [#​43723](https://github.com/BerriAI/litellm/pull/43723) - refactor(proxy): answer every team access check with TeamAccess.allows by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43364](https://github.com/BerriAI/litellm/pull/43364) - test(bedrock): restore the AWS env after a failed live call in the auth tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43921](https://github.com/BerriAI/litellm/pull/43921) - feat(lens): analyze agent activity with a separate worker by [@​moe-berri](https://github.com/moe-berri) in [#​43889](https://github.com/BerriAI/litellm/pull/43889) - fix(router): bill service tiers at catalog rates for custom-priced deployments by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43890](https://github.com/BerriAI/litellm/pull/43890) - test(ci): refresh qualified retired OpenAI fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43938](https://github.com/BerriAI/litellm/pull/43938) - fix(anthropic): forward the dangerous-tool-use beta to Azure AI Foundry by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43934](https://github.com/BerriAI/litellm/pull/43934) - test(proxy): scope user_api_key_auth overrides in proxy_server tests by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43952](https://github.com/BerriAI/litellm/pull/43952) - fix(wandb): set supports_vision true on GLM-5.3-Flash by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43951](https://github.com/BerriAI/litellm/pull/43951) - chore(cost-map): sync openrouter prices from the models API by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43950](https://github.com/BerriAI/litellm/pull/43950) - fix(grayswan): send request conversation and tool calls to post-call monitor by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43770](https://github.com/BerriAI/litellm/pull/43770) - fix(azure_storage): name Data Lake objects without base64 padding or slashes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43914](https://github.com/BerriAI/litellm/pull/43914) - fix(guardrails): treat an unknown straiker api_version as unset instead of skipping the guardrail by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43956](https://github.com/BerriAI/litellm/pull/43956) - chore(deps): bump gitpython and tornado, extend diskcache osv ignore to Nov 1 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43961](https://github.com/BerriAI/litellm/pull/43961) - fix(azure_storage): keep the DataLakeServiceClient alive until its TTL elapses by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43082](https://github.com/BerriAI/litellm/pull/43082) - feat(proxy): record in spend logs whether a request used a client-forwarded Anthropic OAuth token by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43063](https://github.com/BerriAI/litellm/pull/43063) - test(ci): repair stale tests and move retired OpenAI text-completion fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43958](https://github.com/BerriAI/litellm/pull/43958) - feat(e2e): record each e2e test's steps, starting with ProxyClient by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​42393](https://github.com/BerriAI/litellm/pull/42393) - feat(providers): add Cortecs as an OpenAI-compatible provider by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43872](https://github.com/BerriAI/litellm/pull/43872) - feat(ui): filter tags by name and description on the Tag Management page by [@​galovics](https://github.com/galovics) in [#​42949](https://github.com/BerriAI/litellm/pull/42949) - fix(caching): write the response-cache SET to Redis at once instead of on the post-call batch by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43973](https://github.com/BerriAI/litellm/pull/43973) - test(e2e): typed per-test metadata for the e2e suite by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​42044](https://github.com/BerriAI/litellm/pull/42044) - feat(guardrails): honor litellm_params.timeout in every HTTP guardrail by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43134](https://github.com/BerriAI/litellm/pull/43134) - chore(cost-map): add fireworks inkling priority prices from the prices api by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43949](https://github.com/BerriAI/litellm/pull/43949) - chore(cost-map): add deprecation date for anthropic claude-sonnet-4-5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43898](https://github.com/BerriAI/litellm/pull/43898) - fix(cost-map): raise baseten DeepSeek-V4.1-Flash max output to 262144 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43916](https://github.com/BerriAI/litellm/pull/43916) - fix(proxy): restore pre-config-wins handling of pass-through endpoints by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43962](https://github.com/BerriAI/litellm/pull/43962) - feat(lens): investigate sampled traces and retain batch results by [@​moe-berri](https://github.com/moe-berri) in [#​43942](https://github.com/BerriAI/litellm/pull/43942) - fix(guardrails): scan Responses API input in Azure Prompt Shield by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43786](https://github.com/BerriAI/litellm/pull/43786) - fix(guardrails): scan Responses API input in Azure Text Moderation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43965](https://github.com/BerriAI/litellm/pull/43965) - refactor: clean up fresh tech debt from 2026-09-30 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43993](https://github.com/BerriAI/litellm/pull/43993) - test: inject the HIBP client and the MCP loop clock so two backend tests stop flaking by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​44007](https://github.com/BerriAI/litellm/pull/44007) - fix(cost-map): reprice fireworks deepseek v4.1 flash to the 2026-10-01 pricing up…
…105.0) (#2711) 🔵 **minor** · ghcr.io/berriai/litellm 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.104.2` → `v1.105.0` | --- > ⚠️ **Warning** > > Some dependencies could not be looked up. Check the [Dependency Dashboard](issues/107) for more information. > ⛔ **Do not automerge.** v1.99.0 silently flipped the MCP `allow_all_keys` default and emptied every tool list. --- ### Release Notes <details> <summary>BerriAI/litellm (ghcr.io/berriai/litellm)</summary> ### [`v1.105.0`](https://github.com/BerriAI/litellm/releases/tag/v1.105.0) [Compare Source](https://github.com/BerriAI/litellm/compare/v1.104.3...v1.105.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.105.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.105.0/cosign.pub \ ghcr.io/berriai/litellm:v1.105.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 - feat(mcp): share compatibility-aware result conversion across tool surfaces by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43089](https://github.com/BerriAI/litellm/pull/43089) - fix(caching): propagate auth cache invalidation over Redis Cluster via a node-level pub/sub client by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43110](https://github.com/BerriAI/litellm/pull/43110) - feat(model-catalog): add Rust registry validation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43136](https://github.com/BerriAI/litellm/pull/43136) - test(rust): reorganize core crate tests and split cache and OCR suites by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43177](https://github.com/BerriAI/litellm/pull/43177) - fix(proxy): give SpendLogToolIndex its own share of the cleanup budget and log a per-run summary by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​41768](https://github.com/BerriAI/litellm/pull/41768) - feat(rust): hand upstream response headers to the native Messages stream by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43178](https://github.com/BerriAI/litellm/pull/43178) - feat(testkit): agent clients for Claude Code, Codex and opencode by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43181](https://github.com/BerriAI/litellm/pull/43181) - ci: run migrated unit selections on every event in legacy GHA shards by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43182](https://github.com/BerriAI/litellm/pull/43182) - test: move tests/test_litellm root and small trees into tests/unit by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43186](https://github.com/BerriAI/litellm/pull/43186) - fix(sso): gate /sso/debug routes behind ENABLE_SSO_DEBUG, off by default by [@​ojensen-berri](https://github.com/ojensen-berri) in [#​43150](https://github.com/BerriAI/litellm/pull/43150) - refactor(framer): replace Framer trait with tokio-util codecs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43193](https://github.com/BerriAI/litellm/pull/43193) - fix(anthropic): surface Responses bridge stream failures as Anthropic error events by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43126](https://github.com/BerriAI/litellm/pull/43126) - test: move tests/test_litellm/llms into tests/unit/llms by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43191](https://github.com/BerriAI/litellm/pull/43191) - test: move tests/test_litellm integrations and secret_managers into tests/unit by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43194](https://github.com/BerriAI/litellm/pull/43194) - feat(mcp): configure protocol versions and capability discovery by [@​joshua-berri](https://github.com/joshua-berri) in [#​43169](https://github.com/BerriAI/litellm/pull/43169) - fix(proxy): record streamed /v1/responses container ownership before the response.completed frame by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43140](https://github.com/BerriAI/litellm/pull/43140) - fix(tests): drop the repeated UNIT_FLAG key in test_unit_shard_missing_paths by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43212](https://github.com/BerriAI/litellm/pull/43212) - fix(router): count provider budget spend on every API surface by [@​daqiangganjun](https://github.com/daqiangganjun) in [#​38172](https://github.com/BerriAI/litellm/pull/38172) - fix(responses): fall back on pre-output stream drops, fail truncated streams, honor request_timeout by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43133](https://github.com/BerriAI/litellm/pull/43133) - fix(sentry): scrub PII and secrets inside object reprs and nested locals, add SENTRY_SEND_DEFAULT_PII opt-in by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43123](https://github.com/BerriAI/litellm/pull/43123) - fix(bedrock): surface a converse-stream 200 that decodes to no events as a 502 instead of an empty turn by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43213](https://github.com/BerriAI/litellm/pull/43213) - fix(jwt): let x-litellm-team-id select DB membership teams when the token also carries a team claim by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43206](https://github.com/BerriAI/litellm/pull/43206) - feat(integrations): add Databricks Zerobus trace logging callback by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42013](https://github.com/BerriAI/litellm/pull/42013) - fix(vertex_ai): keep legacy bucket_name in credential resolution and add GCS_BATCH_BUCKET_NAME env var by [@​mubashir1osmani](https://github.com/mubashir1osmani) in [#​42803](https://github.com/BerriAI/litellm/pull/42803) - feat(xai): add native xAI batches and files support by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42812](https://github.com/BerriAI/litellm/pull/42812) - fix(proxy): send a real error event when a /v1/messages stream fails by [@​4refael](https://github.com/4refael) in [#​41826](https://github.com/BerriAI/litellm/pull/41826) - fix(logging): redact raw_request when turn_off_message_logging is set in the proxy config by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43219](https://github.com/BerriAI/litellm/pull/43219) - fix(router): parse the classifier verdict out of surrounding prose instead of falling to the default tier by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43215](https://github.com/BerriAI/litellm/pull/43215) - test(zerobus): move tests into active CI selection by [@​tin-berri](https://github.com/tin-berri) in [#​43235](https://github.com/BerriAI/litellm/pull/43235) - fix(proxy): keep the submitted body out of 422 validation errors by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43231](https://github.com/BerriAI/litellm/pull/43231) - test: move tests/test_litellm core utils, routing, responses, caching and rust_bridge into tests/unit by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43199](https://github.com/BerriAI/litellm/pull/43199) - chore(cost-map): add fireworks us-only deepseek v4.1 flash priority prices by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43247](https://github.com/BerriAI/litellm/pull/43247) - chore(cost-map): sync openrouter prices and add perceptron-mk1.5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43246](https://github.com/BerriAI/litellm/pull/43246) - fix(cost-map): correct fireworks_ai deepseek-v4p1-flash pricing by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43253](https://github.com/BerriAI/litellm/pull/43253) - feat(openrouter): add typesafe/jev-router to the cost map by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43248](https://github.com/BerriAI/litellm/pull/43248) - chore(cost-map): add fireworks priority prices for muse glimmer 30b and deepseek v4 flash vision exp by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43252](https://github.com/BerriAI/litellm/pull/43252) - refactor(rust): move credential inheritance and SDK limits into a driver preflight by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43259](https://github.com/BerriAI/litellm/pull/43259) - fix(router): hold Responses lifecycle events until output so a pre-output fallback announces one response by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43238](https://github.com/BerriAI/litellm/pull/43238) - refactor(http): hand out an owned Client and route all providers through the pool by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43245](https://github.com/BerriAI/litellm/pull/43245) - test: fix stale and state-leaking tests red on scheduled CircleCI by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43266](https://github.com/BerriAI/litellm/pull/43266) - fix(cost-map): retirement dates, chatgpt reasoning flags, bing pricing, bedrock mantle and mythos, azure gpt-5.6 alias, anthropic batch rates, new nebius, openrouter and xai rows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42951](https://github.com/BerriAI/litellm/pull/42951) - refactor(rust): promote anthropic messages out of experimental_pass_through by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43269](https://github.com/BerriAI/litellm/pull/43269) - test: stop CI tests from downloading tokenizer files and images by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43257](https://github.com/BerriAI/litellm/pull/43257) - fix(rust): preserve nested optional import failures by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43265](https://github.com/BerriAI/litellm/pull/43265) - ci: drop main and litellm\_\* branch filters from the CircleCI litellm-main workflows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43272](https://github.com/BerriAI/litellm/pull/43272) - feat(proxy): email alerts at configured percentages of a team member budget by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42665](https://github.com/BerriAI/litellm/pull/42665) - fix(callbacks-legacy-python): traverse and release the retained headers dict by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43274](https://github.com/BerriAI/litellm/pull/43274) - test(integration): port langfuse callbacks-in-db coverage to the local harness by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43282](https://github.com/BerriAI/litellm/pull/43282) - test(e2e): accept the otel cost write as a linked root trace by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42931](https://github.com/BerriAI/litellm/pull/42931) - test: finish the non-proxy half of tests/test_litellm by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43281](https://github.com/BerriAI/litellm/pull/43281) - refactor(rust): prepare inference and auth foundations for the gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43287](https://github.com/BerriAI/litellm/pull/43287) - feat(rust): add config, router and gateway crates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43289](https://github.com/BerriAI/litellm/pull/43289) - fix(cost-map): remove duplicate openrouter/perceptron/perceptron-mk1.5 entry by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43273](https://github.com/BerriAI/litellm/pull/43273) - fix(e2e): resolve the blank-S3 gateway repo root from the litellm package location by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42911](https://github.com/BerriAI/litellm/pull/42911) - test(integration): run the Langfuse DB-callback test on its own scratch database by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43288](https://github.com/BerriAI/litellm/pull/43288) - refactor(rust): expand logging and test coverage across gateway and Anthropic messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43295](https://github.com/BerriAI/litellm/pull/43295) - refactor: daily fresh tech debt cleanup, rolling PR (2026-09-25) by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43151](https://github.com/BerriAI/litellm/pull/43151) - test(proxy_behavior): scope the management proxy fixture to its package so its spend monitor cannot race the spend tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43302](https://github.com/BerriAI/litellm/pull/43302) - fix(cost-map): registry audit 2026-09-26, MAI-Image-2.5-Flash price, Databricks Claude Opus 5.5, Azure Foundry retirement dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43254](https://github.com/BerriAI/litellm/pull/43254) - fix(cost-map): price fireworks deepseek v4.1 flash at the prices api value by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43311](https://github.com/BerriAI/litellm/pull/43311) - fix(ci): stop stale CI reds, keep unit tests off the host env, retry CyberArk policy conflicts by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43294](https://github.com/BerriAI/litellm/pull/43294) - fix(otel): detach post-response service spans by request phase, name redis spans by operation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43237](https://github.com/BerriAI/litellm/pull/43237) - test(e2e): assert only litellm-owned batch behavior and move the blank S3 env pin to an integration test by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43321](https://github.com/BerriAI/litellm/pull/43321) - test(integration): pin the team-admin status-code matrix across every management route by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43249](https://github.com/BerriAI/litellm/pull/43249) - feat(proxy): add fail_closed_rate_limit_enforcement to reject requests with 503 while Redis rate limit counters are unreachable by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43251](https://github.com/BerriAI/litellm/pull/43251) - fix(responses): run stream failure and success hooks on the iterating loop instead of blocking it by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43270](https://github.com/BerriAI/litellm/pull/43270) - fix(guardrails): block private destinations in custom code http_request and bound guardrail execution time by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43280](https://github.com/BerriAI/litellm/pull/43280) - feat(sail): add Sail as a provider with service_tier mapped to its completion window by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42840](https://github.com/BerriAI/litellm/pull/42840) - test(mcp): pin server resolution and authorization behavior by [@​joshua-berri](https://github.com/joshua-berri) in [#​43261](https://github.com/BerriAI/litellm/pull/43261) - refactor(anthropic): rename experimental_pass_through to pass_through by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43329](https://github.com/BerriAI/litellm/pull/43329) - refactor(mcp): add shared server resolver without changing callers by [@​joshua-berri](https://github.com/joshua-berri) in [#​43262](https://github.com/BerriAI/litellm/pull/43262) - ci: fail on new unbounded SQL IN lists and add a Prisma chunking helper by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​42629](https://github.com/BerriAI/litellm/pull/42629) - test(logging): drain the logging worker after each logging callback test so no later test inherits its events by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43344](https://github.com/BerriAI/litellm/pull/43344) - feat(guardrails): scan retrieved vector store chunks with the request's pre-call guardrails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43271](https://github.com/BerriAI/litellm/pull/43271) - fix(mcp): adopt shared server resolution and caller authorization by [@​joshua-berri](https://github.com/joshua-berri) in [#​43263](https://github.com/BerriAI/litellm/pull/43263) - fix(s3_v2): upload fresh events first, drop terminal failures and hour-old retries by default, opt-in adaptive concurrency by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43022](https://github.com/BerriAI/litellm/pull/43022) - feat(proxy): add maximum_daily_tag_spend_retention_period cleanup setting by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​39221](https://github.com/BerriAI/litellm/pull/39221) - fix(cost-map): sync OpenRouter, Together, Cohere and Azure AI registry values with official sources by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43337](https://github.com/BerriAI/litellm/pull/43337) - docs(pr-template): add the backport-stable label only for a P0 regression by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43351](https://github.com/BerriAI/litellm/pull/43351) - fix(params): keep *litellm*\* kwargs out of provider request bodies by construction by [@​shrey-berri](https://github.com/shrey-berri) in [#​43221](https://github.com/BerriAI/litellm/pull/43221) - test: remove substring guard test_default_api_base by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43355](https://github.com/BerriAI/litellm/pull/43355) - ci: cut CircleCI wall time without loosening test isolation by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43347](https://github.com/BerriAI/litellm/pull/43347) - fix(cost-map): correct azure gpt-4o-mini tts, transcribe, alias and MAI-Image-2.5 prices by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43357](https://github.com/BerriAI/litellm/pull/43357) - fix(tests): stop VCR recording and replaying a test's own localhost upstream by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43346](https://github.com/BerriAI/litellm/pull/43346) - test(integration): group /v1/messages contracts under tests/integration/messages_endpoint by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43352](https://github.com/BerriAI/litellm/pull/43352) - fix(params): validate stream_chunk_size once, before any provider call by [@​shrey-berri](https://github.com/shrey-berri) in [#​43222](https://github.com/BerriAI/litellm/pull/43222) - fix(openai): exclude fine-tuned and custom gpt-5-chat aliases from gpt-5 reasoning path by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43185](https://github.com/BerriAI/litellm/pull/43185) - fix(langtrace): deliver spans to app.langtrace.ai/api/trace with x-api-key by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43322](https://github.com/BerriAI/litellm/pull/43322) - fix(caching): stand default cache points down when extra_body hides a direct client mark by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43341](https://github.com/BerriAI/litellm/pull/43341) - fix(mcp): report reachability without stored credentials by [@​tin-berri](https://github.com/tin-berri) in [#​43240](https://github.com/BerriAI/litellm/pull/43240) - fix(mcp): align hub publication status and controls by [@​tin-berri](https://github.com/tin-berri) in [#​43241](https://github.com/BerriAI/litellm/pull/43241) - chore(cost-map): sync openrouter prices for deepseek, minimax, qwen and glm rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43384](https://github.com/BerriAI/litellm/pull/43384) - chore(cost-map): drop stale cache hit field from openrouter deepseek-v4-pro-0813 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43389](https://github.com/BerriAI/litellm/pull/43389) - fix(responses): stream guardrail pre-call block as SSE with a typed output item by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42507](https://github.com/BerriAI/litellm/pull/42507) - feat(e2e): read management routes back from the control plane replicas by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43373](https://github.com/BerriAI/litellm/pull/43373) - feat(rust): add the openai_like chat config foundation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43379](https://github.com/BerriAI/litellm/pull/43379) - feat(router): opt in to prompt-cache cost routing by [@​tin-berri](https://github.com/tin-berri) in [#​43232](https://github.com/BerriAI/litellm/pull/43232) - feat(otel): add SigNoz preset for OpenTelemetry v2 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43296](https://github.com/BerriAI/litellm/pull/43296) - feat(cli): reuse saved agent setup and add reconfigure by [@​tin-berri](https://github.com/tin-berri) in [#​43392](https://github.com/BerriAI/litellm/pull/43392) - fix(streaming): keep litellm Usage on text-completion usage chunks by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43047](https://github.com/BerriAI/litellm/pull/43047) - fix(vertex_ai): consider tools when validating context caching min tokens by [@​agustin18](https://github.com/agustin18) in [#​43319](https://github.com/BerriAI/litellm/pull/43319) - fix(anthropic): drop thinking blocks with empty thinking text, not just missing signature by [@​shoemoney](https://github.com/shoemoney) in [#​38049](https://github.com/BerriAI/litellm/pull/38049) - test(e2e): report batch cleanup leftovers as a plain UserWarning by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43405](https://github.com/BerriAI/litellm/pull/43405) - fix(tools): salvage concatenated JSON tool call arguments by [@​kumarpriyanshu09](https://github.com/kumarpriyanshu09) in [#​43260](https://github.com/BerriAI/litellm/pull/43260) - fix(gemini): forward seed to the Gemini API instead of rejecting it by [@​YaseenBashaT](https://github.com/YaseenBashaT) in [#​43197](https://github.com/BerriAI/litellm/pull/43197) - fix(vertex_ai): make Gemma fake streams work with traced Responses by [@​stewartpark](https://github.com/stewartpark) in [#​43147](https://github.com/BerriAI/litellm/pull/43147) - fix(responses): emit the reasoning item on streaming /v1/responses for signature-only thinking by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43414](https://github.com/BerriAI/litellm/pull/43414) - fix(anthropic): forward the per-turn-control beta to Azure AI Foundry by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43415](https://github.com/BerriAI/litellm/pull/43415) - test(vertex_ai): assert the usage the Gemma responses stream actually reports by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43422](https://github.com/BerriAI/litellm/pull/43422) - fix(bedrock): keep the provider status code on unprocessable image errors by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43416](https://github.com/BerriAI/litellm/pull/43416) - fix(vertex_ai): stop importing the vertexai SDK in partner-model completion by [@​anmolg1997](https://github.com/anmolg1997) in [#​42274](https://github.com/BerriAI/litellm/pull/42274) - fix(token_counter): count Gemini function_declarations tools by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43417](https://github.com/BerriAI/litellm/pull/43417) - refactor(types): replace Any with proven types in 5 files by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43304](https://github.com/BerriAI/litellm/pull/43304) - chore(cost-map): update azure_ai/grok-4.6 input price from Azure pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43440](https://github.com/BerriAI/litellm/pull/43440) - chore(cost-map): add azure_ai/MAI-Cyber-1-Flash by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43446](https://github.com/BerriAI/litellm/pull/43446) - refactor(rust): share anthropic types, request helpers, and streaming contracts across crates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43426](https://github.com/BerriAI/litellm/pull/43426) - feat(rust): expand gateway configuration parsing by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43460](https://github.com/BerriAI/litellm/pull/43460) - refactor(rust): share call lifecycle across route-owned inference by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43461](https://github.com/BerriAI/litellm/pull/43461) - feat(rust): add the HTTP host driver by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43462](https://github.com/BerriAI/litellm/pull/43462) - build(rust): package the gateway container by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43471](https://github.com/BerriAI/litellm/pull/43471) - refactor(rust): use shared execution in gateway inference by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43463](https://github.com/BerriAI/litellm/pull/43463) - fix(cost-map): add deprecation_date to together_ai Salesforce/Llama-Rank-V1 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43507](https://github.com/BerriAI/litellm/pull/43507) - feat(rust): support the HTTP Responses API by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43464](https://github.com/BerriAI/litellm/pull/43464) - fix(cost-map): sync openrouter prices from the models API by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43506](https://github.com/BerriAI/litellm/pull/43506) - fix(cost-map): set together_ai gpt-oss-20b and gemma-4-31B-it deprecation_date to 2026-09-15 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43509](https://github.com/BerriAI/litellm/pull/43509) - feat(rust): add litellm-db and litellm-db-testing workspace scaffolding by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43504](https://github.com/BerriAI/litellm/pull/43504) - feat(rust): connect Python inference bindings to shared routes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43465](https://github.com/BerriAI/litellm/pull/43465) - feat(rust): add structured route lifecycle tracing by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43466](https://github.com/BerriAI/litellm/pull/43466) - feat(rust): separate gateway authentication and authorization by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43467](https://github.com/BerriAI/litellm/pull/43467) - feat(rust): add virtual key storage contracts by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43468](https://github.com/BerriAI/litellm/pull/43468) - feat(rust): add gateway UI login and sessions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43469](https://github.com/BerriAI/litellm/pull/43469) - feat(rust): add the MCP gateway by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43470](https://github.com/BerriAI/litellm/pull/43470) - refactor(rust): remove delivery routing abstraction by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43514](https://github.com/BerriAI/litellm/pull/43514) - feat(azure): add mistral ocr pricing and azure max output limits by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43530](https://github.com/BerriAI/litellm/pull/43530) - refactor: clean up fresh tech debt from 2026-09-27 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43538](https://github.com/BerriAI/litellm/pull/43538) - refactor(types): replace Any with proven types in 8 files by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43551](https://github.com/BerriAI/litellm/pull/43551) - test(rust): enforce shared upstream error contract in wheel checks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43520](https://github.com/BerriAI/litellm/pull/43520) - fix(proxy): log key owner identity on expired key auth failures by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43105](https://github.com/BerriAI/litellm/pull/43105) - fix(cost-map): registry audit 2026-09-28, openai deep-research shutdown dates, azure deepseek v4.1 flash direct price, vertex gemini 3.8 live avatar price, drop azure_ai/muse-spark-1.3 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43566](https://github.com/BerriAI/litellm/pull/43566) - security(proxy): keep team callback credentials out of the stored request body by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43217](https://github.com/BerriAI/litellm/pull/43217) - feat(model_prices): add claude-sonnet-5-5 model pricing by [@​krrish-berri-2](https://github.com/krrish-berri-2) in [#​43586](https://github.com/BerriAI/litellm/pull/43586) - test(integration): pin org-admin status codes in the team-admin matrix by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43592](https://github.com/BerriAI/litellm/pull/43592) - refactor(guardrails): fix agent 365 to the production endpoint and log the opt-in fail_open at error level by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43189](https://github.com/BerriAI/litellm/pull/43189) - fix(model_prices): correct Claude Sonnet 5.5 capabilities and provider keys by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43587](https://github.com/BerriAI/litellm/pull/43587) - test(unit): stop test modules from putting their own directory on sys.path by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43421](https://github.com/BerriAI/litellm/pull/43421) - refactor(rust): centralize host execution and compose callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43515](https://github.com/BerriAI/litellm/pull/43515) - fix(proxy): unregister logging callbacks removed from the stored config by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43428](https://github.com/BerriAI/litellm/pull/43428) - chore(cost-map): take azure limits for deepseek-v4-flash-0731 and v3.2-speciale by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43597](https://github.com/BerriAI/litellm/pull/43597) - revert: "feat(proxy): server-side Team Usage export beyond the top-N key cap ([#​42996](https://github.com/BerriAI/litellm/issues/42996))" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​43376](https://github.com/BerriAI/litellm/pull/43376) - fix(cost-map): add web search flag and model page source to anthropic claude-sonnet-5-5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43584](https://github.com/BerriAI/litellm/pull/43584) - refactor(mcp): consolidate hub publication predicate by [@​tin-berri](https://github.com/tin-berri) in [#​43394](https://github.com/BerriAI/litellm/pull/43394) - fix(provider): accept 2xx status codes in unified_access_group create by [@​Louis-Vauterin](https://github.com/Louis-Vauterin) in [#​42461](https://github.com/BerriAI/litellm/pull/42461) - fix(panw_prisma_airs): honor experimental_use_latest_role_message_only on every request shape by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42447](https://github.com/BerriAI/litellm/pull/42447) - fix(cost-map): add Vertex batch cache prices to vertex_ai/claude-sonnet-5-5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43602](https://github.com/BerriAI/litellm/pull/43602) - revert: "feat(usage): search team keys beyond the top-N in the Team usage view ([#​42857](https://github.com/BerriAI/litellm/issues/42857))" by [@​yassin-berriai](https://github.com/yassin-berriai) in [#​43377](https://github.com/BerriAI/litellm/pull/43377) - feat(providers): add Prism provider (internal copy of [#​40914](https://github.com/BerriAI/litellm/issues/40914)) by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​41961](https://github.com/BerriAI/litellm/pull/41961) - test(integration): credential canary suite harness by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43300](https://github.com/BerriAI/litellm/pull/43300) - feat(bedrock): add xai grok-4.7 pricing and sync llama, mistral large 2407 and minimax m2.5 prices by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43623](https://github.com/BerriAI/litellm/pull/43623) - ci: sync the weekly release cycle with Linear releases by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43636](https://github.com/BerriAI/litellm/pull/43636) - feat(cache): select Rust caching through explicit cache objects by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43601](https://github.com/BerriAI/litellm/pull/43601) - test(integration): credential canary slots for MCP and pass-through credentials by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43308](https://github.com/BerriAI/litellm/pull/43308) - test(integration): stored-config credential canary slots by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43309](https://github.com/BerriAI/litellm/pull/43309) - fix(guardrails): preserve Presidio output selection and restoration by [@​joshua-berri](https://github.com/joshua-berri) in [#​43401](https://github.com/BerriAI/litellm/pull/43401) - fix(ui): rename All Models tab to Deployed Models and model filters to All Proxy Models by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43638](https://github.com/BerriAI/litellm/pull/43638) - feat(mcp): scan and pin upstream tool descriptions by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43283](https://github.com/BerriAI/litellm/pull/43283) - feat(cost-map): add bedrock_mantle rows for claude opus 5.5 and sonnet 5.5 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43647](https://github.com/BerriAI/litellm/pull/43647) - chore(codeowners): drop UI, migration, and CODEOWNERS self owners by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43653](https://github.com/BerriAI/litellm/pull/43653) - feat(fireworks_ai): route and list the auto, auto-instant and firerouter routers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43641](https://github.com/BerriAI/litellm/pull/43641) - feat: add model leaderboard page by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​43649](https://github.com/BerriAI/litellm/pull/43649) - fix(google_genai): preserve proxy_server_request in completion adapter by [@​hsm207](https://github.com/hsm207) in [#​43536](https://github.com/BerriAI/litellm/pull/43536) - fix(otel): send cache and reasoning tokens in langfuse usage_details by [@​ankit373](https://github.com/ankit373) in [#​43553](https://github.com/BerriAI/litellm/pull/43553) - fix(vertex_ai): forward the per-turn-control beta for per-message output_config by [@​DeviaVir](https://github.com/DeviaVir) in [#​43558](https://github.com/BerriAI/litellm/pull/43558) - fix(cost-map): add tool calling and reasoning flags, correct max output for nebius DeepSeek-V4.1-Flash by [@​Flexomatic81](https://github.com/Flexomatic81) in [#​43588](https://github.com/BerriAI/litellm/pull/43588) - fix(proxy): resolve model_group_alias in the zero-cost budget predicate by [@​fedaeho](https://github.com/fedaeho) in [#​43512](https://github.com/BerriAI/litellm/pull/43512) - refactor: clean up fresh tech debt from 2026-09-28 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43674](https://github.com/BerriAI/litellm/pull/43674) - refactor(types): replace Any with proven types in 7 files by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43704](https://github.com/BerriAI/litellm/pull/43704) - docs(security): point readers to the security announcements mailing list signup by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43713](https://github.com/BerriAI/litellm/pull/43713) - refactor(rust): add shared llms wire type derives by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43730](https://github.com/BerriAI/litellm/pull/43730) - fix(router): stream /v1/messages lifecycle frames live when no fallback can take over by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43600](https://github.com/BerriAI/litellm/pull/43600) - feat(cost-map): add baseten DeepSeek-V4.1-Flash-Fast by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43735](https://github.com/BerriAI/litellm/pull/43735) - feat(guardrails): send a configured gateway_name from noma_v2 to Noma by [@​itaimodi](https://github.com/itaimodi) in [#​43678](https://github.com/BerriAI/litellm/pull/43678) - chore(cost-map): add openai gpt-6.1-sol from the pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43738](https://github.com/BerriAI/litellm/pull/43738) - test(integration): callback credential canary slots C1-C3 and D5 by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43630](https://github.com/BerriAI/litellm/pull/43630) - test(integration): request-path credential canary slots D1-D4 by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43307](https://github.com/BerriAI/litellm/pull/43307) - test(integration): sweep proxy logs, metrics, a Datadog intake and the Logs drawer for credential canaries by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43306](https://github.com/BerriAI/litellm/pull/43306) - chore(cost-map): add azure and openrouter gpt-6.1-sol rows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43744](https://github.com/BerriAI/litellm/pull/43744) - test(proxy): classify every credential-bearing param for the canary suite by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43298](https://github.com/BerriAI/litellm/pull/43298) - fix(cost-map): lower fireworks up-to-4b size tier to the pricing page price by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43740](https://github.com/BerriAI/litellm/pull/43740) - fix(cost_calculator): bill chat per-second pricing once with a new cost_per_second field by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43614](https://github.com/BerriAI/litellm/pull/43614) - chore(cost-map): add openai gpt-6-astra ultrafast tier prices from the pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43745](https://github.com/BerriAI/litellm/pull/43745) - fix(autorouter): compare historical and new savings consistently by [@​tin-berri](https://github.com/tin-berri) in [#​43348](https://github.com/BerriAI/litellm/pull/43348) - fix(model-prices): align Azure, Bedrock, Copilot, Gemini, Groq, OpenAI and OpenRouter entries with official docs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43598](https://github.com/BerriAI/litellm/pull/43598) - fix(guardrails): enable explicit PANW MCP output scanning by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43109](https://github.com/BerriAI/litellm/pull/43109) - refactor(rust): orchestrate Messages route execution by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43719](https://github.com/BerriAI/litellm/pull/43719) - fix(streaming): keep the served service_tier on streamed chunks and spend rows by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42870](https://github.com/BerriAI/litellm/pull/42870) - feat(bedrock): add openai gpt-6.1-sol global and base rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43758](https://github.com/BerriAI/litellm/pull/43758) - perf(router): fetch cooldown state and usage counters in one Redis round trip by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43320](https://github.com/BerriAI/litellm/pull/43320) - perf(proxy): hold one spend counter batch across admission and across post-call accounting by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43369](https://github.com/BerriAI/litellm/pull/43369) - perf(responses): run aresponses through the async wrapper so the cache is read once by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43769](https://github.com/BerriAI/litellm/pull/43769) - fix(router): bind Claude Code background sessions to their auto-router by [@​tin-berri](https://github.com/tin-berri) in [#​43767](https://github.com/BerriAI/litellm/pull/43767) - feat(bedrock): add openai.gpt-6.1-sol us geo cris and Mantle rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43763](https://github.com/BerriAI/litellm/pull/43763) - fix(proxy): recover session key owners from daily spend for usage attribution by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43642](https://github.com/BerriAI/litellm/pull/43642) - chore(cost-map): take azure context limits from models-sold-directly by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43759](https://github.com/BerriAI/litellm/pull/43759) - perf(proxy): one request-scoped Redis pipeline for auth, spend, rate-limit and routing reads by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43407](https://github.com/BerriAI/litellm/pull/43407) - fix(mcp): scope OpenAPI listings to the exact server prefix and drop upstream OAuth metadata when a server is saved by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43608](https://github.com/BerriAI/litellm/pull/43608) - perf(proxy): one post-call Redis pipeline per backend for spend, rate-limit, routing and response-cache writes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43779](https://github.com/BerriAI/litellm/pull/43779) - fix(bedrock): set gpt-6.1-sol max output tokens to 131072 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43782](https://github.com/BerriAI/litellm/pull/43782) - perf(proxy): refresh auth management objects through the request Redis pipeline by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43776](https://github.com/BerriAI/litellm/pull/43776) - feat(agents): add identity storage and validation contracts by [@​joshua-berri](https://github.com/joshua-berri) in [#​43720](https://github.com/BerriAI/litellm/pull/43720) - chore: bump litellm-enterprise 0.1.71 -> 0.1.72, litellm-proxy-extras 0.4.102 -> 0.4.103, litellm 1.104.0 -> 1.105.0 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43789](https://github.com/BerriAI/litellm/pull/43789) - fix(auth): give UI/CLI session tokens their own AES-GCM context and header-safe shape by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43790](https://github.com/BerriAI/litellm/pull/43790) - chore(deps): bump pyjwt, moment and brace-expansion to clear osv-scan by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43792](https://github.com/BerriAI/litellm/pull/43792) - fix(ui): surface x-litellm-call-id in Logs search, table and drawer by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42436](https://github.com/BerriAI/litellm/pull/42436) - fix(proxy): look up hashed key names with two spend log rows per key by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43656](https://github.com/BerriAI/litellm/pull/43656) - fix(cost-map): add deprecation_date to two together_ai nvidia rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43809](https://github.com/BerriAI/litellm/pull/43809) - test(ci): refresh retired OpenAI tool-call models by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43676](https://github.com/BerriAI/litellm/pull/43676) - fix(ui): keep MCP permissions visible after key, team and MCP server saves by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43810](https://github.com/BerriAI/litellm/pull/43810) - test(ci): repair MCP Responses and budget fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43788](https://github.com/BerriAI/litellm/pull/43788) - test(bedrock): accept regional aliases that inherit Converse routing by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43785](https://github.com/BerriAI/litellm/pull/43785) - fix(params): categorize internal param appropriately to prevent leaking into request by [@​shrey-berri](https://github.com/shrey-berri) in [#​43783](https://github.com/BerriAI/litellm/pull/43783) - perf(router): honour the cooldown read interval in the routing prefetch by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43815](https://github.com/BerriAI/litellm/pull/43815) - fix(router): carry per-request routing reads on context variables instead of public method kwargs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43814](https://github.com/BerriAI/litellm/pull/43814) - fix(bedrock): add beta header for output config in message by [@​shrey-berri](https://github.com/shrey-berri) in [#​43778](https://github.com/BerriAI/litellm/pull/43778) - refactor: clean up fresh tech debt from 2026-09-29 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43830](https://github.com/BerriAI/litellm/pull/43830) - test(router): settle the shared logging worker before recording shadow callbacks by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43847](https://github.com/BerriAI/litellm/pull/43847) - chore(model_prices): add Gemini Veo, Mistral and Azure Claude 4.5 deprecation dates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43857](https://github.com/BerriAI/litellm/pull/43857) - fix(cost_calculator): bill ultrafast prompts above 272k at the ultrafast long-context rates by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43764](https://github.com/BerriAI/litellm/pull/43764) - refactor(rust): centralize Python bridge execution wrappers by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43871](https://github.com/BerriAI/litellm/pull/43871) - chore(cost-map): add openai gpt-image-2.5 batch prices from the pricing page by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43869](https://github.com/BerriAI/litellm/pull/43869) - chore(cost-map): add fireworks priority prices for ember-1, nemotron and glm 5.3 us rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43811](https://github.com/BerriAI/litellm/pull/43811) - fix(proxy): attribute completed batch cost rows to /batches in daily activity by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43870](https://github.com/BerriAI/litellm/pull/43870) - fix(router): strip encrypted reasoning the pinned deployment cannot decrypt by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43781](https://github.com/BerriAI/litellm/pull/43781) - fix(cost_calculator): stop copying optional_params into response hidden params by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43637](https://github.com/BerriAI/litellm/pull/43637) - feat(pricing): add vertex_ai gemini-3.8 flash tts rows by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43876](https://github.com/BerriAI/litellm/pull/43876) - fix(proxy): keep request-body credentials out of stored spend-log requests by [@​yucheng-berri](https://github.com/yucheng-berri) in [#​43635](https://github.com/BerriAI/litellm/pull/43635) - fix(ui): right-align money and count columns across tables by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​37889](https://github.com/BerriAI/litellm/pull/37889) - feat(agents): enforce authoritative agent permissions by [@​joshua-berri](https://github.com/joshua-berri) in [#​43721](https://github.com/BerriAI/litellm/pull/43721) - fix(proxy): strip caller credentials from websocket passthrough by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43855](https://github.com/BerriAI/litellm/pull/43855) - fix(ui): render access group MCP and agent selections as wrapping chips by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​41228](https://github.com/BerriAI/litellm/pull/41228) - fix(responses): scan and mask top-level instructions with guardrails by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43629](https://github.com/BerriAI/litellm/pull/43629) - feat(traces): add Rust storage foundation by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​43819](https://github.com/BerriAI/litellm/pull/43819) - feat(ui): agent traces tab on logs with timeline and otel setup guide by [@​ishaan-berri](https://github.com/ishaan-berri) in [#​43891](https://github.com/BerriAI/litellm/pull/43891) - feat(otel v2): excluded_services opt-out for datastore spans on tenant destinations by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43278](https://github.com/BerriAI/litellm/pull/43278) - fix(traces): correct ClickHouse rollup partitioning, dedupe keys, and retention changes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43901](https://github.com/BerriAI/litellm/pull/43901) - fix(bedrock): keep applicable beta headers by [@​shrey-berri](https://github.com/shrey-berri) in [#​43829](https://github.com/BerriAI/litellm/pull/43829) - feat(agents): authenticate Entra identities and delegated requests by [@​joshua-berri](https://github.com/joshua-berri) in [#​43722](https://github.com/BerriAI/litellm/pull/43722) - fix(hosted_vllm): keep reasoning_content on replayed assistant messages by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43599](https://github.com/BerriAI/litellm/pull/43599) - fix(proxy): delete large teams without per-member transaction fan-out by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​42998](https://github.com/BerriAI/litellm/pull/42998) - feat(tracing): port OTLP ingestion to current trace foundation by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​43915](https://github.com/BerriAI/litellm/pull/43915) - feat(proxy): add native ROI calculator for gateway spend vs merged PRs by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43669](https://github.com/BerriAI/litellm/pull/43669) - test(e2e): repair completion, SAIL, and spend-log fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43902](https://github.com/BerriAI/litellm/pull/43902) - test(s3_v2): pin async 5xx retry through the production AsyncHTTPHandler by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43080](https://github.com/BerriAI/litellm/pull/43080) - feat(ui): adopt the new LiteLLM logo and monogram by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43913](https://github.com/BerriAI/litellm/pull/43913) - fix(proxy): relay Azure passthrough body model groups through the router by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43896](https://github.com/BerriAI/litellm/pull/43896) - fix(proxy): register a UI-configured arize callback next to otel under OTel v2 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43906](https://github.com/BerriAI/litellm/pull/43906) - fix(transcription): honor base_url alias for Groq Whisper and report it as the api base by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43917](https://github.com/BerriAI/litellm/pull/43917) - feat(tracing): store spend in ClickHouse automatically by [@​yujonglee-berri](https://github.com/yujonglee-berri) in [#​43928](https://github.com/BerriAI/litellm/pull/43928) - fix(packaging): keep wheel paths under Windows MAX_PATH for Store Python by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43903](https://github.com/BerriAI/litellm/pull/43903) - feat(agents): add identity registration and dashboard controls by [@​joshua-berri](https://github.com/joshua-berri) in [#​43723](https://github.com/BerriAI/litellm/pull/43723) - refactor(proxy): answer every team access check with TeamAccess.allows by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​43364](https://github.com/BerriAI/litellm/pull/43364) - test(bedrock): restore the AWS env after a failed live call in the auth tests by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43921](https://github.com/BerriAI/litellm/pull/43921) - feat(lens): analyze agent activity with a separate worker by [@​moe-berri](https://github.com/moe-berri) in [#​43889](https://github.com/BerriAI/litellm/pull/43889) - fix(router): bill service tiers at catalog rates for custom-priced deployments by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43890](https://github.com/BerriAI/litellm/pull/43890) - test(ci): refresh qualified retired OpenAI fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43938](https://github.com/BerriAI/litellm/pull/43938) - fix(anthropic): forward the dangerous-tool-use beta to Azure AI Foundry by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43934](https://github.com/BerriAI/litellm/pull/43934) - test(proxy): scope user_api_key_auth overrides in proxy_server tests by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43952](https://github.com/BerriAI/litellm/pull/43952) - fix(wandb): set supports_vision true on GLM-5.3-Flash by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43951](https://github.com/BerriAI/litellm/pull/43951) - chore(cost-map): sync openrouter prices from the models API by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43950](https://github.com/BerriAI/litellm/pull/43950) - fix(grayswan): send request conversation and tool calls to post-call monitor by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43770](https://github.com/BerriAI/litellm/pull/43770) - fix(azure_storage): name Data Lake objects without base64 padding or slashes by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43914](https://github.com/BerriAI/litellm/pull/43914) - fix(guardrails): treat an unknown straiker api_version as unset instead of skipping the guardrail by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43956](https://github.com/BerriAI/litellm/pull/43956) - chore(deps): bump gitpython and tornado, extend diskcache osv ignore to Nov 1 by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43961](https://github.com/BerriAI/litellm/pull/43961) - fix(azure_storage): keep the DataLakeServiceClient alive until its TTL elapses by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43082](https://github.com/BerriAI/litellm/pull/43082) - feat(proxy): record in spend logs whether a request used a client-forwarded Anthropic OAuth token by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43063](https://github.com/BerriAI/litellm/pull/43063) - test(ci): repair stale tests and move retired OpenAI text-completion fixtures by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43958](https://github.com/BerriAI/litellm/pull/43958) - feat(e2e): record each e2e test's steps, starting with ProxyClient by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​42393](https://github.com/BerriAI/litellm/pull/42393) - feat(providers): add Cortecs as an OpenAI-compatible provider by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43872](https://github.com/BerriAI/litellm/pull/43872) - feat(ui): filter tags by name and description on the Tag Management page by [@​galovics](https://github.com/galovics) in [#​42949](https://github.com/BerriAI/litellm/pull/42949) - fix(caching): write the response-cache SET to Redis at once instead of on the post-call batch by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43973](https://github.com/BerriAI/litellm/pull/43973) - test(e2e): typed per-test metadata for the e2e suite by [@​ryan-crabbe-berri](https://github.com/ryan-crabbe-berri) in [#​42044](https://github.com/BerriAI/litellm/pull/42044) - feat(guardrails): honor litellm_params.timeout in every HTTP guardrail by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43134](https://github.com/BerriAI/litellm/pull/43134) - chore(cost-map): add fireworks inkling priority prices from the prices api by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43949](https://github.com/BerriAI/litellm/pull/43949) - chore(cost-map): add deprecation date for anthropic claude-sonnet-4-5 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43898](https://github.com/BerriAI/litellm/pull/43898) - fix(cost-map): raise baseten DeepSeek-V4.1-Flash max output to 262144 by [@​berriai-litellm-provider-info-sync](https://github.com/berriai-litellm-provider-info-sync)\[bot] in [#​43916](https://github.com/BerriAI/litellm/pull/43916) - fix(proxy): restore pre-config-wins handling of pass-through endpoints by [@​yuneng-berri](https://github.com/yuneng-berri) in [#​43962](https://github.com/BerriAI/litellm/pull/43962) - feat(lens): investigate sampled traces and retain batch results by [@​moe-berri](https://github.com/moe-berri) in [#​43942](https://github.com/BerriAI/litellm/pull/43942) - fix(guardrails): scan Responses API input in Azure Prompt Shield by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43786](https://github.com/BerriAI/litellm/pull/43786) - fix(guardrails): scan Responses API input in Azure Text Moderation by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43965](https://github.com/BerriAI/litellm/pull/43965) - refactor: clean up fresh tech debt from 2026-09-30 by [@​devin-ai-integration](https://github.com/devin-ai-integration)\[bot] in [#​43993](https://github.com/BerriAI/litellm/pull/43993) - test: inject the H…
TLDR
Problem this solves:
user_idlocal read[Filtered];send_default_piiwas hardwired off with no opt-inHow it solves it:
sk-keys, emails, and hashes; the baresk-match starts at the shorter of the custom key minimum and a generated key, so both key shapes match under any pair of settingsSENTRY_SEND_DEFAULT_PII=trueopts into identity fields; secrets stay filtered either wayUser Flow
Before: the operator opens the Sentry issue for a rejected request and reads the caller's email, hashed key, raw virtual key, the master key, and the database URL in the frame locals, while the one
user_idlocal reads[Filtered]POST https://litellm-domain/user/newand{"user_id": "alice@example.com", "user_email": "alice@example.com", "user_role": "internal_user"}, and gets back a keysk-...POST https://litellm-domain/v1/chat/completions(or/v1/responses, or/v1/messageswith the key inx-api-key) with"model": "no-such-model"and gets400 Invalid model name, thenPOST https://litellm-domain/team/newand gets401 Only proxy admin ... Your user_id=ali***omhttps://<org>.sentry.io/issues/<id>/:user_idreads[Filtered], butuser_api_key_dictreadsUserAPIKeyAuth(token='5e77...1ba2', ..., user_id='alice@example.com', user_email='alice@example.com', ...),data.metadata.user_api_key_hashreads5e77...1ba2, andraw_headers.authorizationreadsBearer sk-...in cleargeneral_settingsreads{'master_key': 'sk-...', 'database_url': 'postgresql://user:password@host/db'}in clear, and settingSENTRY_SEND_DEFAULT_PII=truechanges nothingAfter: the same issues read
[Filtered]for the email, the hashed key, the raw key, the master key, and the database URL, andSENTRY_SEND_DEFAULT_PII=truelets the operator see the identity fields on purposePOST https://litellm-domain/user/newand{"user_id": "alice@example.com", "user_email": "alice@example.com", "user_role": "internal_user"}, and gets back a keysk-...POST https://litellm-domain/v1/chat/completions(or/v1/responses, or/v1/messageswith the key inx-api-key) with"model": "no-such-model"and gets400 Invalid model name, thenPOST https://litellm-domain/team/newand gets401 Only proxy admin ... Your user_id=ali***omhttps://<org>.sentry.io/issues/<id>/:user_api_key_dictreadsUserAPIKeyAuth(token='[Filtered]', key_name='sk-...FJLQ', ..., user_id='[Filtered]', user_email='[Filtered]', ...),data.metadata.user_api_key_hashreads[Filtered], andraw_headers.authorization(orx-api-key) reads[Filtered]general_settingsreads{'master_key': '[Filtered]', 'database_url': '[Filtered]'}; afterSENTRY_SEND_DEFAULT_PII=trueand a restart the next issue showsuser_id='alice@example.com'and the hashed key again whiletoken, the raw key,master_key, anddatabase_urlstay[Filtered]Linear ticket
Resolves LIT-8600
Pre-Submission checklist
Please complete all items before asking a LiteLLM maintainer to review your PR
uv run pytest tests/test_litellm/<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@greptileaito 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 for both legs: the proxy boots from the named commit with
--num_workers 2on127.0.0.1:51173against the shared dev Postgres,SENTRY_DSNpoints at a local envelope sink on127.0.0.1:42275that stores every envelope Sentry's ingest would have received (the before leg would otherwise ship the dev database URL and master key to sentry.io),gpt-5-miniis a real OpenAI deployment. An internal userqa.user.lit8600@example.comwith its own keysk-...FJLQ(hash5e77...1ba2) was created once throughPOST /user/new. Every leg first sends 10POST /v1/chat/completionswith an unknown model so both workers have initialised Sentry (it initialises lazily on the first LLM route per worker), then runs the cases below. Leak counts come from walking every JSON path of every envelope the sink received for that case; excerpts are the actual frame locals with the master key, database URL, and the QA key replaced by<... redacted>and long values elided with...Cases 1 to 4 run with
SENTRY_SEND_DEFAULT_PIIunset, case 5 is the 200 transaction, case 6 sends request metadata whose field names collide with Sentry's own source-context fields, case 7 re-runs case 1 and case 4 on a proxy restarted withSENTRY_SEND_DEFAULT_PII=true, and case 8 restarts the proxy withlitellm_settings.input_callback: ["sentry"]plus a deployment whose provider key OpenAI rejects, first withSENTRY_SEND_DEFAULT_PIIunset and then setBefore (cbba146)
Chat Completions, unknown model
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/chat/completions -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","messages":[{"role":"user","content":"hi"}]}'
{"error":{"message":"/chat/completions: Invalid model name passed in model=no-such-model-lit8600. Call/v1/modelsto view available models for your key.","type":"invalid_request_error",...}}thenHTTP 400The error event the sink received, frame
chat_completion():Leak count over the event: email at 5 paths, key hash at 11, raw virtual key at 3, master key at 2, database URL at 2,
[Filtered]at 0Responses, unknown model
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/responses -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","input":"hi"}'
{"error":{"message":"/responses: Invalid model name passed in model=no-such-model-lit8600. ...","type":"invalid_request_error",...}}thenHTTP 400Frame
responses_api()in the event:Leak count: email at 5 paths, key hash at 9 (
data.litellm_metadata.user_api_key_hashanduser_api_key_dict), raw virtual key at 2, master key at 3, database URL at 3Messages, unknown model, key sent as x-api-key
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/messages -H "x-api-key: $USER_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
{"type":"error","error":{"type":"invalid_request_error","message":"anthropic_messages: Invalid model name passed in model=no-such-model-lit8600. ..."}}thenHTTP 400Frame
route_request()in the event:Leak count: email at 5 paths, key hash at 9, raw virtual key at 2 (under
raw_headers.x-api-key), master key at 3, database URL at 3/team/new with the internal user's key
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/team/new -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"team_alias":"lit8600"}'
{"error":{"message":"Authentication Error, Only proxy admin can be used to generate, delete, update info for new keys/users/teams. Route=/team/new. Your role=internal_user. Your user_id=qa.use********...",...}}thenHTTP 401Frames
_authorize_authenticated_request()andcommon_checks()in the event (the only two locals the SDK filtered by name areapi_keyandmaster_key):Leak count: email at 9 paths (
user_api_key_auth_obj,user_obj,user_object,valid_token), key hash at 5, master key at 2, database URL at 2Chat Completions, real gpt-5-mini call
{"id":"chatcmpl-ERqugVeT4lADhmmePrwEGfRxuCre6","created":1790306962,"model":"gpt-5-mini","object":"chat.completion","choices":[{"finish_reason":"stop","index":0,"message":{"content":"Hi there, friend.","role":"assistant",...}}],...}thenHTTP 200Chat Completions, unknown model, metadata fields named like Sentry source context
curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/chat/completions -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","messages":[{"role":"user","content":"hi"}],"metadata":{"context_line":"sk-canaryCTXLINE0000000000000000000000000000000000","pre_context":["canary.ctx@example.com"],"plain_key":"sk-canaryPLAIN00000000000000000000000000000000000"}}'{"error":{"message":"/chat/completions: Invalid model name passed in model=no-such-model-lit8600. Call/v1/modelsto view available models for your key.","type":"invalid_request_error",...}}thenHTTP 400The error event the sink received, frame
chat_completion():Leak count over the event: each of the three canary values appears at 12 paths (
data.metadata, itsrequester_metadatacopy, and theproxy_server_request.body.metadatacopy, in three frames each), alongside the same email, key hash, master key, database URL, and raw virtual key leaks as case 1PII opt-in (
SENTRY_SEND_DEFAULT_PII=true), same Chat Completions and /team/new requestsSENTRY_SEND_DEFAULT_PII=trueand repeat cases 1 and 4token='5e77...1ba2' user_id='qa.user.lit8600@example.com',raw_headers.authorization = "'Bearer <virtual key redacted>'",general_settings = {"master_key": "'<master key redacted>'", "database_url": "'<database url redacted>...'"}Chat Completions through a deployment whose provider key OpenAI rejects,
litellm_settings.input_callback: ["sentry"]Restart the proxy from a config that adds
input_callback: ["sentry"]next tofailure_callback: ["sentry"]and a second deploymentgpt-5-mini-badkey(realopenai/gpt-5-mini,api_key: os.environ/LIT8600_BAD_OPENAI_KEYwhere that variable holdssk-canaryBADKEY0000000000000000000000000000000000),SENTRY_SEND_DEFAULT_PIIunset4 x
curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/chat/completions -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"model":"gpt-5-mini-badkey","messages":[{"role":"user","content":"hi from canary.msg@example.com"}],"metadata":{"context_line":"sk-canaryCTXLINE0000000000000000000000000000000000","pre_context":["canary.ctx@example.com"],"plain_key":"sk-canaryPLAIN00000000000000000000000000000000000"}}'{"error":{"message":"litellm.AuthenticationError: AuthenticationError: OpenAIException - Incorrect API key provided: sk-canar****...0000. ...thenHTTP 401, and{"error":{"message":"No deployments available for selected model, Try again in 5 seconds. ...thenHTTP 429once the router has cooled the deployment down: 401, 429, 401, 429 over the four requestsEach 401 error event the sink received carries one
litellm.llm_callbreadcrumb;breadcrumbs.values[0].message(1024 characters, Sentry's string cap) reads:Leak count over the three 401 events' breadcrumb messages: provider key 1 each, prompt email 1 each,
[Filtered]0; the metadata canaries reach the frame locals as in case 6 (sk-canaryPLAIN...at 21 paths,sk-canaryCTXLINE...at 3,canary.ctx@example.comat 1,canary.msg@example.comat 4 across the run's events)After (28ce1ad)
The tip 5dbc9fb is the merge of
origin/main(6b76888) into this branch with the PR diff unchanged: every shared file's hunks are disjoint from main's, thesentry-sdkpin is the same, and the 419 targeted tests pass on the merged tree, so the run below and the /live-pr-risk pass stand at 28ce1ad and CI covers the merged treeChat Completions, unknown model
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/chat/completions -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","messages":[{"role":"user","content":"hi"}]}'
{"error":{"message":"/chat/completions: Invalid model name passed in model=no-such-model-lit8600. Call/v1/modelsto view available models for your key.","type":"invalid_request_error",...}}thenHTTP 400, the same response as beforeThe error event the sink received, frame
chat_completion():Leak count over the event: email at 0 paths, key hash at 0, raw virtual key at 0, master key at 0, database URL at 0,
[Filtered]at 19 (everyuser_api_key_dict,user_api_key_hash,raw_headers.authorization,master_key, anddatabase_urllocal); the frames' ownpre_context,context_line, andpost_contextsource lines carry no[Filtered]Responses, unknown model
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/responses -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","input":"hi"}'
{"error":{"message":"/responses: Invalid model name passed in model=no-such-model-lit8600. ...","type":"invalid_request_error",...}}thenHTTP 400Frame
responses_api()in the event:Leak count: email 0, key hash 0, raw virtual key 0, master key 0, database URL 0
Messages, unknown model, key sent as x-api-key
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/v1/messages -H "x-api-key: $USER_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' -d '{"model":"no-such-model-lit8600","max_tokens":16,"messages":[{"role":"user","content":"hi"}]}'
{"type":"error","error":{"type":"invalid_request_error","message":"anthropic_messages: Invalid model name passed in model=no-such-model-lit8600. ..."}}thenHTTP 400Frame
route_request()in the event:Leak count: email 0, key hash 0, raw virtual key 0 (
raw_headers.x-api-keynow reads[Filtered]), master key 0, database URL 0/team/new with the internal user's key
`curl -s -w '\nHTTP %{http_code}\n' http://127.0.0.1:51173/team/new -H "Authorization: Bearer $USER_KEY" -H 'Content-Type: application/json' -d '{"team_alias":"lit8600"}'
{"error":{"message":"Authentication Error, Only proxy admin can be used to generate, delete, update info for new keys/users/teams. Route=/team/new. Your role=internal_user. Your user_id=qa.use********...",...}}thenHTTP 401, the caller still gets the masked idFrames
_authorize_authenticated_request()andcommon_checks()in the event:Leak count: email 0 (
user_api_key_auth_obj,user_obj,user_object,valid_tokenall readuser_id='[Filtered]'), key hash 0, master key 0, database URL 0Chat Completions, real gpt-5-mini call
{"id":"chatcmpl-ERrZJtv89yPGy2GrZ6OroJjCnGt2N","created":1790309481,"model":"gpt-5-mini","object":"chat.completion","choices":[{"finish_reason":"stop","index":0,"message":{"content":"Hi there, friend.","role":"assistant",...}}],...}thenHTTP 200request.headers.authorizationreads[Filtered](an empty string on the before leg)Chat Completions, unknown model, metadata fields named like Sentry source context
Same request as the Before leg, three canary values in
metadataunder the field namescontext_line,pre_context, andplain_key{"error":{"message":"/chat/completions: Invalid model name passed in model=no-such-model-lit8600. Call/v1/modelsto view available models for your key.","type":"invalid_request_error",...}}thenHTTP 400, unchangedThe error event the sink received, frame
chat_completion():Leak count over the event: each canary value at 0 paths (12 each on the Before leg), email 0, key hash 0, raw virtual key 0, master key 0, database URL 0,
[Filtered]at 48; the frames' owncontext_linestill readsraise ProxyModelNotFoundError(and theirpre_contextlines are untouched, because the source-context exemption only applies at a real stack-frame pathPII opt-in (
SENTRY_SEND_DEFAULT_PII=true), same Chat Completions and /team/new requestsSENTRY_SEND_DEFAULT_PII=trueand repeat cases 1, 4, and 6; the responses are unchanged (HTTP 400,HTTP 401, andHTTP 400with the same bodies)chat_completion():user_api_key_dict = UserAPIKeyAuth(token='[Filtered]', key_name='sk-...FJLQ', ..., user_id='qa.user.lit8600@example.com', user_email='qa.user.lit8600@example.com', ...),data.metadata.user_api_key_hash = '5e77...1ba2',raw_headers.authorization = "[Filtered]",general_settings = {"master_key": "[Filtered]", "database_url": "[Filtered]"}user_api_key_auth_obj = UserAPIKeyAuth(token='[Filtered]', ..., user_id='qa.user.lit8600@example.com', ...),api_key = [Filtered],master_key = [Filtered], and the message ends withYour user_id=qa.use***omexactly as the caller saw ituser_api_key_dictreprs), key hash 6 (data.metadata.user_api_key_hashand itsproxy_server_request.bodycopy in three frames), raw virtual key 0, master key 0, database URL 0; on /team/new: email 10, key hash 0, raw virtual key 0, master key 0, database URL 0; on case 6 thepre_contextemail canary is visible at its 12 paths (emails are what the opt-in sends) while the twosk-canaries stay[Filtered]at all 12Chat Completions through a deployment whose provider key OpenAI rejects,
litellm_settings.input_callback: ["sentry"]Same restart and the same four requests as the Before leg,
SENTRY_SEND_DEFAULT_PIIunsetHTTP 401with the sameIncorrect API key provided: sk-canar****...0000body, thenHTTP 429from the cooldown: 401, 429, 429, 429 over the four requests (which request hits the cooldown depends on which worker took it, see the observations)breadcrumbs.values[0].messageon each 401 event (882 characters):Leak count over the breadcrumb messages: provider key 0, prompt email 0,
[Filtered]5 each; every metadata canary at 0 paths over the run's 12 events (21, 3, 1, and 4 on the Before leg)Restarted with
SENTRY_SEND_DEFAULT_PII=true, same four requests, same responses: the breadcrumb reads'content': 'hi from canary.msg@example.com'and still'api_key': '[Filtered]'(906 characters,[Filtered]3);canary.msg@example.comat 10 paths andcanary.ctx@example.comat 20 over the run's events, the twosk-canaries and the provider key at 0Observations from the run:
/team/newmessage'suser_id=qa.use***ombecomesuser_id='[Filtered]'/team/newshows no hash: its only carrier is the always-filteredtoken=context_lineorpre_contextis scrubbed like any other field; only a real stack frame's source lines are exemptlitellm.completion(..., api_key=..., metadata=...)withfailure_callback=["sentry"]leaks the key and metadata on the Before tree and nothing on the After tree; with the opt-in only the email is visibleAuthorizationheader reads[Filtered], an empty string beforeinput_callback: ["sentry"]records aModel Call Details pre-call: {...}breadcrumb that rides the next error event; on the Before tree its 1024-character message carried the deployment's providerapi_keyand the prompt, on the After tree both read[Filtered]and the prompt's email comes back with the opt-in. Which of the four case 8 requests hit the router cooldown (401, 429, 401, 429 on Before, 401, 429, 429, 429 on both After runs) depends on which worker took it, the cooldown being per-worker in-memory state/live-pr-risk
Breaking: none observed. Across cases 1 to 8, the risk scenarios A to F (streaming chat,
/v1/messages, key generate, info and delete,/health, the spend row, latency), the SDK leg and the merged tree, every client-visible result (status, body keys, stream chunk count, spend row) matched the base tree; only the Sentry envelope contents changedBackward incompatible (each visible to an operator in Sentry only, each recorded under Caveats):
SENTRY_API_TRACE_RATE=""now means 1.0 where the base raisedValueErroron the worker's first LLM call[Filtered]: the transaction'sAuthorizationheader and the maskeduser_id=tail of the exception message with PII offpre_context,context_lineorpost_contextare scrubbed like any other field; only a real stack frame's source lines keep those names exemptSENTRY_SEND_DEFAULT_PIIis new; onlytrueandfalsecount and anything else keeps PII offRegression risk: every Sentry event pays the recursive key scrub plus the regex pass, measured back to back on the same two-worker rig (numbers under Caveats: about 4 ms per captured error event, under 1 ms per transaction). Router retries produce three
AuthenticationErrorevents per bad-key request on both trees, so that cost scales withnum_retries, not with this PR. Sentry still initialises lazily on the first LLM route, and an exception inside the scrubber makes the SDK drop the event without touching the request, which the fail-closed depth test pinsDependency graph: 19 dependents from a walk over
litellm/,enterprise/,tests/,ui/, the docs checkout and the installed SDK 2.21.0; nothing inui/orenterprise/reads Sentry. Driven live: the Starlette transaction per request,capture_exceptionfromfailure_callbackon chat, responses and messages, the pre-call breadcrumb frominput_callback, the transaction's request headers under both PII modes, the YAML config path, the SDKlitellm.completionpath, both env parsers, and the tip merged intomain. The SDK floor stays 2.21.0 (pyproject.tomlproxy-runtime>=2.21.0,<3.0,proxy-devpins==2.21.0, every Dockerfile installs 2.21.0) and everything the module imports exists thereNot verified: the logging integration path (an ERROR log whose args carry a secret dict bypasses litellm's handler-level filter on both trees;
before_sendnow scrubs it by field name and value pattern, covered by the unit tests only),general_settings.alerting: ["sentry"]and the DBfailure_handler(name-only dependents, unchanged), background jobs and rq workers, the unpinnedpip install sentry_sdkfallback in a venv without the extra (latest 2.x drops the 1024-character truncation, so breadcrumbs get longer but pass through the same scrubber), and a host app that callssentry_sdk.inititself (its options win, as before)Type
🐛 Bug Fix
Caveats (if any)
Low
user_id=qa.use***omtail with PII off; the response the caller gets is unchangedsk-values inside it are still filtered/v1/modelstransaction from 3.4 and 3.7 ms to 3.8 and 4.5 ms; the scrubber alone measures 0.6 ms median and 8.4 ms worst over 143 captured events, and it only runs on requests that already fail or on sampled transactionsSENTRY_API_TRACE_RATE=""now means 1.0, the same as unset, where the old code raisedValueErroron the worker's first LLM call (that request failed and Sentry stayed off); a deployment carrying the empty value starts tracing every request, which is what the docs example already showed.SENTRY_API_SAMPLE_RATEtreated empty as 1.0 on both sideslintcheck is red onmainitself since feat(mcp): configure protocol versions and capability discovery #43169 (6b76888):ruff check --config ruff-tests.toml testsreports F601 for a repeated"UNIT_FLAG"key intests/unit/test_unit_shard_missing_paths.py, a file this PR does not touch (same failure on fix(dashscope): pass image generation provider params at the top level ofparameters#43208's lint run); the one-line fix fix(tests): drop the repeated UNIT_FLAG key in test_unit_shard_missing_paths #43212 landed onmainas 25de1ab, and since the lint workflow checks out the PR head rather than the merge commit,mainwas merged in at a2bfb20 to pick it uprust-testis red onmainas well (run 36090485216 at 3fa02ef fails the same model-catalog spec parity case onfal_ai/fal-ai/nano-banana-2); nothing here touches the catalogsk-value carrying 13 or more key characters and any 64-hex token read[Filtered]wherever they appear in an event, so a model alias or content digest of that shape is masked too; an allowlist for those shapes would let a real key of the same shape through, and a masked alias costs a reader nothingFinal 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
28ce1ad passes /live-pr-risk
Note
Medium Risk
Changes what operators see in Sentry (more
[Filtered]fields, optional PII opt-in) and adds per-event scrubbing on the error/transaction path; client API behavior is unchanged but observability and empty-env sample-rate parsing differ slightly.Overview
Centralizes Sentry setup in
litellm_core_utils/sentry_scrubbing.pyand wires it fromset_callbacks(["sentry"])viabuild_sentry_init_optionsinstead of inlinesentry_sdk.init.Expands what gets redacted:
SENTRY_DENYLIST/SENTRY_PII_DENYLISTgain proxy auth headers and LiteLLM identity fields; the SDK’s default denylists are merged (not replaced). A recursivebefore_send/before_send_transactionpass scrubs every string in the event—object reprs, nested locals, breadcrumbs, transactions—for secret field names,sk-keys, emails, and 64-char hashes, while real stack-frame source lines stay readable.Adds
SENTRY_SEND_DEFAULT_PII=trueto opt into identity fields; secrets stay[Filtered]either way.proxy-devpinssentry-sdk==2.21.0; tests move to the dedicated scrubbing module with integration-style coverage.Reviewed by Cursor Bugbot for commit a2bfb20. Bugbot is set up for automated code reviews on this repo. Configure here.