Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. This release is signed with the key introduced in commit e82a3c6.
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 published signing key:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/e82a3c646908ba0a6ee0beddc4310d7a6cac4065/cosign.pub \
ghcr.io/berriai/litellm:v1.109.0Verify using the release tag (convenience):
Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:
cosign verify \
--key https://raw.githubusercontent.com/BerriAI/litellm/v1.109.0/cosign.pub \
ghcr.io/berriai/litellm:v1.109.0Expected 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
- fix(prompt-templates): treat initial_prompt_value and final_prompt_value as optional by @mdevhurt1 in #39762
- fix(proxy)!: count prompt-only token_counter requests with the provider when call_endpoint is set by @mateo-berri in #46839
- fix(interactions): keep background interaction bills through crashes, late restarts, and deployment keys by @devin-ai-integration[bot] in #45743
- fix(proxy)!: honor caller litellm_session_id in spend log session_id by @deepanshupal in #44199
- feat(router): mid-stream fallback continuation for chat completions by @ayushh0110 in #41127
- feat(volcengine): add Doubao-Seedance video generation via the OpenAI /v1/videos surface by @Bytechoreographer in #46156
- fix(realtime)!: keep turn_detection.type when a transcript guardrail disables auto-response by @devin-ai-integration[bot] in #44939
- fix(budget): hold Redis-less budget spend per key instead of queueing it per request by @ryan-crabbe-berri in #46831
- fix(proxy)!: delete callbacks configured under callbacks or failure_callback by @devin-ai-integration[bot] in #42740
- feat(ui): turn the Chat UI on by default by @krrish-berri-2 in #46918
- fix(bedrock)!: keep reasoning, thinking blocks and the json_mode finish_reason on fake streams by @mateo-berri in #46863
- test(cost): add tier 1 cost tracking cases for gpt-5.6-terra, gemini-4-argon and gemini-3.1-pro-preview by @devin-ai-integration[bot] in #46931
- fix(responses): log and bill every round of non-stream MCP auto-execute by @devin-ai-integration[bot] in #43667
- fix(count_tokens): apply context_management edits in the Gemini /v1/messages/count_tokens count by @mateo-berri in #46843
- test(cost): bill vertex gemini-3.8-flash reasoning tokens at the reasoning price by @devin-ai-integration[bot] in #46939
- fix(proxy): streaming responses hand the event loop back every 50 ms instead of holding it for the whole buffered stream by @klu-berri in #46925
- test(perf): cap every awaited Postgres statement at 0.5 calls per request by @klu-berri in #46944
- feat(mcp): accept an ID-JAG as an RFC 7523 jwt-bearer grant on the gateway token endpoint by @yassin-berriai in #46748
- feat(sso): capture the IdP id_token on Microsoft and Google logins for oauth2_id_jag by @yassin-berriai in #46747
- feat(sso): retain the SAML assertion at login as the saml2 subject token for oauth2_id_jag by @yassin-berriai in #46745
- test(rust-bridge): relocate dispatch tests to the Rust test suite by @yujonglee-berri in #46926
- fix(tests): drain SDK logging before restoring callbacks by @klu-berri in #46924
- test(integration): remove BUG skip for 1 test that passes on main by @devin-ai-integration[bot] in #46937
- test(perf): cap every background Postgres statement at 0.9 calls per request by @klu-berri in #46957
- fix(rust): forward Anthropic headers to DeepSeek by @mateo-berri in #46959
- test(cost): rekey vertex gemini, add bedrock mantle gpt and claude-opus-5-5, drop suite-only price fields by @devin-ai-integration[bot] in #46962
- fix(openai)!: route gpt-transcribe to GPT audio transcription config by @irvallensar in #44021
- feat(ui): add the 1 hour cache write cost to the add model and model edit forms by @ryan-crabbe-berri in #46830
- fix(proxy): report in-memory spend queue size by @mateo-berri in #46956
- fix(bedrock): drop dangerous-tool-use beta without safeguards by @axelray-dev in #44471
- feat(cost-map): add together_ai reflection/Beam-1.0-501B-A23B by @berriai-litellm-provider-info-sync[bot] in #46964
- feat(ui): redesign the playground chat around a single composer and inspector by @yuneng-berri in #46934
- build(deps): bump claude-agent-sdk to 0.2.165 to unblock osv-scan by @yuneng-berri in #46971
- fix(proxy): keep a retried /v1/messages stream's spend log by logging the superseded attempt as a failure by @devin-ai-integration[bot] in #45136
- fix(mcp): stop proxy-started legacy listeners from consuming server rpm by @yuneng-berri in #46968
- fix(proxy): give /team/delete transactions a 30s timeout by @yuneng-berri in #46979
- feat(ui): add Authorization URL, Token URL and Scopes fields for OAuth Delegate and True Passthrough MCP servers by @yassin-berriai in #46941
- fix(guardrails): accept Gemini tools in generic_guardrail_api, add opt-in forward_messages_as_sent, name the error type on fail-open by @ryan-crabbe-berri in #46338
- docs(agents): keep directory rules in nested AGENTS.md and pin integration tests to CircleCI by @mateo-berri in #46796
- fix(proxy)!: answer 400 for malformed tools on count_tokens instead of crashing by @mateo-berri in #46583
- fix(sso): concurrent first sign-ins land on the winner's account, worker-kill test stops waiting on the reap by @mateo-berri in #46855
- fix(bedrock): backfill Priority and Batch prices from the AWS offer index by @berriai-litellm-provider-info-sync[bot] in #46987
- feat(cost-map): add baseten and nebius rows for Reflection Beam 1.0 by @kerry-berri in #46991
- fix(cost): bill bridged /v1/messages Responses replies like native /v1/responses for reasoning tokens and service tier by @yuneng-berri in #46975
- fix(providers): route Azure Responses past dated api versions, count Grok reasoning tokens on azure_ai, refresh provider sets after register_model, fix gpt-6.1-sol Azure rows by @ryan-crabbe-berri in #46377
- feat(openai)!: honor per-deployment workload identity on non-chat routes by @mateo-berri in #39966
- refactor(ui): validate model edit prices in the zod schema by @ryan-crabbe-berri in #46978
- fix(bedrock): set supports_none_reasoning_effort on gpt-6-sol and gpt-6-luna by @berriai-litellm-provider-info-sync[bot] in #47000
- test(integration): fix seven CircleCI integration tests that race or assume a worker spread by @yuneng-berri in #47001
- test(e2e): fix MCP tool search hit matching and the retired Bedrock image model by @yuneng-berri in #46998
- test(ui): wait for the logout redirect before visiting a protected page by @yuneng-berri in #47008
- feat(cost-map): support s3:// URIs for LITELLM_MODEL_COST_MAP_URL by @klu-berri in #46972
- feat(ui): shareable URL state for usage views and users-to-usage deeplinks by @jesus-berri in #43425
- fix(azure_ai): bill Grok reasoning tokens whatever the deployment is named by @ryan-crabbe-berri in #46969
- fix(ui): preserve key settings drafts during background refreshes by @yuneng-berri in #41350
- fix(openai_like)!: surface provider response headers on non-streaming chat completions by @jesus-berri in #46928
- fix(bedrock)!: block realtime replay after an input-first start and reject malformed Nova Sonic session settings by @mateo-berri in #46936
- fix(logging): stop the spend metadata merge from walking a dict the logging thread writes to by @devin-ai-integration[bot] in #46044
- docs(cost): rewrite stale completion_cost docstring by @klu-berri in #47022
- fix(openai): send chat completions through client.post so the SDK's per-message param transform stops holding the event loop by @klu-berri in #46967
- feat: add Nace Drex decisions provider by @joshua-berri in #46523
- test(integration): expect a pre-token invalid prompt on a bridged stream to fall back by @yuneng-berri in #47020
- test(e2e): repair fallback management test for config-owned fallbacks by @yuneng-berri in #47023
- fix(proxy): keep the OIDC login refresh token as the ID-JAG subject when the SSO client is the ID-JAG client by @yassin-berriai in #47004
- test(e2e): assert the Vertex cache-creation billing contract in the prompt caching test by @yuneng-berri in #47027
- build(docker): cache the Rust extension build in its own stage by @mateo-berri in #47033
- fix(proxy): unset DB environment variables removed from the row on every worker by row revision by @mateo-berri in #46709
- ci(cost map): classify token_count_model as an object key in the schema generator by @mateo-berri in #47057
- fix(bedrock): use native structured output on Haiku 5.5 and Sonnet 5.5, and fix Fable 5 and Sonnet 4.6 schema 400s by @mateo-berri in #46870
- fix(mcp): log upstream exchange when an MCP health check fails by @devin-ai-integration[bot] in #44125
- perf(cli): start lite without initializing the litellm SDK by @mateo-berri in #46803
- fix(prometheus): set the remaining rate-limit gauges from decimal headers again by @mateo-berri in #47039
- ci(cost map): remove the generated model prices JSON schema by @mateo-berri in #47064
- test(integration): write worker configs beside test-supplied configs by @yuneng-berri in #47066
- test(e2e): keep the prompt-caching affinity test on the live provider by @yuneng-berri in #47072
- test(integration): send post-kill requests on a fresh connection in two worker-kill tests by @yuneng-berri in #47080
- fix(caching): keep prompt cache usage on streamed cache hits by @yuneng-berri in #47073
- fix(logging): keep the async request's logging payload when the sync success thread runs late by @yuneng-berri in #47019
- fix(cost): price exact cost-map names before price-free capability rules, and fix SCIM and MCP integration tests on CircleCI by @mateo-berri in #47037
- test(e2e): event_loop_stalls perf case fails on a gateway event-loop hold over 100 ms that is not on its allowlist by @klu-berri in #46974
- feat(pricing): backfill github_copilot prices from the Copilot pricing table by @kerry-berri in #47085
- test(e2e): warm the memory test up with two batches before the measured one by @yuneng-berri in #47087
- fix(bedrock)!: stream Converse passthrough frames through post_call guardrails instead of buffering by @yucheng-berri in #46307
- fix(bedrock)!: scan Claude invoke-with-response-stream passthrough output with post_call guardrails by @yucheng-berri in #46524
- feat(azure-ai): support Entra ID auth for Microsoft-Decision-1 on /v1/decisions and /v1/systemone by @jesus-berri in #46539
- feat(bedrock): apply bedrock_request_metadata_fields on the /bedrock pass-through routes by @mateo-berri in #47040
- fix(streaming): report the deployment's api_base when a stream fails mid-way by @mateo-berri in #47045
- test(translation): recapture anthropic claude bases after usage speed field by @devin-ai-integration[bot] in #47116
- test(translation): recapture azure ai claude bases after usage speed field by @devin-ai-integration[bot] in #47117
- test(translation): add sonnet 5.5 and gemini vertex rows to cross-model mid tier by @devin-ai-integration[bot] in #46896
- fix(anthropic): add the dangerous-tool-use beta when a /v1/messages request carries safeguards by @devin-ai-integration[bot] in #43955
- fix(rust): add the dangerous-tool-use beta when an anthropic /v1/messages request carries safeguards by @devin-ai-integration[bot] in #46102
- test(e2e): event_loop_stalls charges a hold to the longest gc pass that fits it, not to the sum of every pass since the last hold by @klu-berri in #47089
- fix(anthropic): carry safeguard_results and stop_details in synthesized message_delta events by @devin-ai-integration[bot] in #46096
- test(e2e): event_loop_stalls caps the request-handler bucket at 2, twice the gc-aware maximum by @klu-berri in #47128
- fix(backend): retain Prometheus metrics during startup by @klu-berri in #47129
- test(translation): allow anthropic usage speed in cross-model contract by @devin-ai-integration[bot] in #47130
- feat(terraform)!: default the component images to the module release tag by @yassin-berriai in #46960
- fix(mcp)!: cap the ID-JAG credential by its signed resource claim and refuse a resource the gateway does not serve by @yassin-berriai in #47094
- fix(cost-map): fall back to the bundled map when urlsplit rejects LITELLM_MODEL_COST_MAP_URL by @klu-berri in #47133
- test(translation): add claude-haiku-5-5 vertex ai cases by @devin-ai-integration[bot] in #47136
- feat(deepinfra): add DeepSeek-V4.1-Flash and DeepSeek-V4.1-Flash-1017 to the cost map by @kerry-berri in #47132
- fix(responses): run pre_call guardrails on every Responses WebSocket turn and bill each turn its own guardrail cost by @klu-berri in #47013
- perf(proxy): gc.freeze() the startup heap once the proxy is up so gen-2 passes stop re-walking it by @klu-berri in #47137
- test(integration): remove BUG skips for 2 tests that pass on main by @devin-ai-integration[bot] in #47142
- test(cost): add tier 1 cost tracking cells and sync usage shapes for 2026-10-17 by @devin-ai-integration[bot] in #47141
- fix(presidio): stop overlapping entity spans from corrupting numbered PII tokens by @yucheng-berri in #47024
- fix(otel): report cache hits at zero cost with a cache-hit flag in V1 and V2 spans by @devin-ai-integration[bot] in #43604
- fix(proxy): let proxy_admin_viewer store its own MCP credentials by @yassin-berriai in #46994
- test(perf): qualify database upgrades with shared 5 RPS traffic by @klu-berri in #46802
- fix(register_model)!: keep bedrock geo deployments priced across price data reloads by @devin-ai-integration[bot] in #41523
- fix(mcp)!: register the gateway's own DCR client for bridge servers instead of relaying the caller's loopback redirect by @yassin-berriai in #46940
- fix(model_prices): registry audit 2026-10-17, Perplexity decider v1.2 rows, Azure Mistral and Vertex Gemini deprecation dates by @devin-ai-integration[bot] in #47114
- fix(mcp): bound paginated tools/list by LITELLM_MCP_TOOL_LISTING_TIMEOUT by @yassin-berriai in #46513
- fix(vertex): match standalone 403 status tokens instead of any substring by @devin-ai-integration[bot] in #47134
- feat(guardrails): add num_retries to generic_guardrail_api for checks lost after connect by @ryan-crabbe-berri in #46965
- fix(proxy): route team key vector store calls to a team model of the store's provider by @mrinal-berri in #46894
- fix(batches): handle empty models when logging batch cost by @joshua-berri in #47155
- fix(vector-stores): keep proxy context out of provider vector store metadata by @yuneng-berri in #47021
- fix(proxy): report requested model in streamed Responses response.model by @albertoperdomo2 in #46662
- fix(logging): run legacy s3 callback for streamed /v1/messages calls by @klu-berri in #47156
- test(e2e): get_text_external accepts JSON next to text so a pod-log error reads as the Kubernetes Status, not a 406 by @klu-berri in #47150
- fix(spend_logs): persist user email in spend log metadata so it shows in UI request logs by @devin-ai-integration[bot] in #41150
- test(integration): run the bedrock mantle prompt cache and output limit wire tests on their own proxy by @yuneng-berri in #47152
- test(e2e): enable prometheus_system on the redis chaos proxy config by @yuneng-berri in #47160
- fix(tests): wait for every thread of a killed worker before treating it as gone by @yuneng-berri in #47148
- fix(proxy): warn at boot when a config environment_variables key replaces a value already set in the process environment by @klu-berri in #47165
- test(caching): assert sync cache-hit logging without depending on thread order by @yuneng-berri in #47093
- test(integration): report uncollected shard files as collection errors instead of crashing xdist by @yuneng-berri in #47075
- test(e2e): hold failing-request RSS to a loose ceiling over two measured batches by @yuneng-berri in #47170
- fix(count_tokens)!: answer 400 for Vertex partner models without a count API and OpenAI-shaped provider errors on /v1/responses/input_tokens by @mateo-berri in #47163
- fix(router): read an application profile's base model from metadata on a cache hit by @yuneng-berri in #47144
- fix: handle missing choice indices in streamed output recording by @yucheng-berri in #46947
- test(mcp): replace the live Linear MCP OAuth e2e tests with integration coverage by @yuneng-berri in #47154
- fix(logging): keep root logger INFO lines when json_logs is on and LITELLM_LOG is set by @klu-berri in #47175
- fix(router)!: stop a chat-mode Mantle deployment from rewriting the shared Responses routing row by @mateo-berri in #46263
- fix(ui): take the dashboard's user role and identity from the server by @yuneng-berri in #47025
- fix(router)!: bound fake-streamed calls by the request timeout, not stream_timeout by @mateo-berri in #47162
- fix(proxy): count the whole minor line in the upgrade notice for patch releases by @misbahsy in #46942
- feat(openinfer): add OpenInfer as an OpenAI-compatible provider by @AJ-ing in #41034
- fix(rag)!: use team provider credentials and allow viewer and JWT team access by @shivamrawat1 in #45497
- fix(bedrock): send native structured output first on Opus 4.8 and Sonnet 5 and fall back to the json tool when Bedrock rejects it by @mateo-berri in #47100
- fix(bedrock): add the July 7, 2026 EOL date to the Llama 3.1 405B and Llama 3.2 rows by @berriai-litellm-provider-info-sync[bot] in #47196
- fix(batches): preserve spend across malformed output and metadata failures by @joshua-berri in #47184
- feat(count_tokens)!: configurable token_count_framing and token_count_model, count source in the response by @mateo-berri in #46777
- fix(baseten): forward reasoning_effort to Baseten Model API by @ucfjoe in #40152
- fix(bedrock): take the 200K context window from the Claude Sonnet 4 model card by @berriai-litellm-provider-info-sync[bot] in #47202
- feat(ui): show gateway URL and agent setup instructions after creating a key in #47199
- test(baseten): annotate test locals with Final by @ryan-crabbe-berri in #47205
- fix(proxy)!: end a chat completions stream with an error event when a guardrail blocks mid-stream by @mateo-berri in #46953
- fix(bedrock): take the 1,050,000 context window from the Daybreak Mantle model cards by @berriai-litellm-provider-info-sync[bot] in #47211
- test(perf): measure SpendLog-backed UI query latency by @klu-berri in #46955
- fix(databricks): use the native Anthropic route for Claude /v1/messages by @devin-ai-integration[bot] in #46091
- fix(bedrock): take Grok 4.7 and Pegasus v1.5 context windows from the Bedrock model cards by @berriai-litellm-provider-info-sync[bot] in #47226
- chore: bump litellm-enterprise 0.1.77 -> 0.1.78, litellm-proxy-extras 0.4.109 -> 0.4.110 by @yuneng-berri in #47228
- test(integration): give each owned proxy a private database and Redis by default by @yuneng-berri in #47213
- fix(guardrails)!: preserve Bedrock Converse redactions and honor tool-only scans by @moyai-berriai[bot] in #45874
- test(perf): align read queries with current dashboard calls by @klu-berri in #47243
- fix(proxy): authorize the public name of a team-scoped model on batch retrieve/cancel by @Mrun25 in #47067
- feat(pricing): add baseten DeepSeek-V4.1-Flash-1017 models by @berriai-litellm-provider-info-sync[bot] in #47252
- chore(cost-map): add fireworks deepseek v4.1 flash 1017 by @berriai-litellm-provider-info-sync[bot] in #47253
- feat(pricing): add missing github_copilot rows from models-and-pricing by @berriai-litellm-provider-info-sync[bot] in #47254
- test(integration): stop GET /__observations from draining the upstream log by @yuneng-berri in #47256
- test(integration): look up owned cache keys and clean up sweep models by @yuneng-berri in #47255
- feat(vertex_ai): let operators drop chosen anthropic-beta values on the Vertex AI pass-through routes by @mateo-berri in #47185
- fix(streaming)!: map stream read timeouts to litellm.Timeout on chat, messages, and responses by @mateo-berri in #47198
- fix(logging): deliver completed batch success callbacks consistently by @joshua-berri in #47192
- test(integration): wait for every worker in Scenario.model by @yuneng-berri in #47277
- fix(bedrock): take the 256K context window from the Qwen3 Coder 480B model card by @berriai-litellm-provider-info-sync[bot] in #47283
- fix(proxy): sanitize unexpected database errors from /key/info by @vanrajsinh650 in #46190
- test(rust): native vs Python parity harness for responses by @narmstrong-berri in #46567
- feat(rust): encode LiteLLM response ids on native responses by @narmstrong-berri in #46572
- feat(cost-map): add together_ai DeepSeek-V4.1-Flash-1017 by @berriai-litellm-provider-info-sync[bot] in #47291
- fix(azure): set azure/container code interpreter session price from the azure openai pricing page by @berriai-litellm-provider-info-sync[bot] in #47292
- fix(vertex-ai): drop floor deprecation_date from gemini-3.8-flash by @berriai-litellm-provider-info-sync[bot] in #47294
- fix(vertex_ai): price streamed pass-through calls with the regional uplift by @pcbeingused333 in #44795
- chore(pricing): add meta muse-image-1.0 per-image price by @berriai-litellm-provider-info-sync[bot] in #47318
- fix(azure): route WebRTC client_secrets and calls to the GA v1 realtime API by @habonlaci in #47316
- fix(azure): reuse the cached Entra token provider on the Responses path by @jorik in #46421
- fix(router)!: count native Responses WebSocket turns toward deployment limits and budgets by @devin-ai-integration[bot] in #45727
- refactor(rust): fold inference-transcription prepare into its handler by @yujonglee-berri in #47214
- refactor(rust): fold inference-responses prepare into its handler by @yujonglee-berri in #47215
- refactor(rust): fold inference-ocr prepare into its handler by @yujonglee-berri in #47216
- refactor(rust): fold inference-messages prepare into its handler by @yujonglee-berri in #47217
- refactor(rust): fold inference-chat prepare into its handler by @yujonglee-berri in #47218
- chore(cost-map): add fireworks minimax m3.1 flash priority prices from the prices api by @berriai-litellm-provider-info-sync[bot] in #47346
- fix(baseten): list current Model APIs instead of retired 2023 deployment IDs by @AlexKer in #46945
- feat(router): discover kubernetes pods behind a headless service api_base by @devin-ai-integration[bot] in #44342
- feat(router): keep a session on one kubernetes pod by @devin-ai-integration[bot] in #44393
- feat(ui): show kubernetes pods on the model page by @devin-ai-integration[bot] in #44666
- fix(count_tokens)!: count tools the way DeepSeek V4 and Qwen3.5 chat templates render them by @mateo-berri in #47173
- fix(cost-map): enable function calling + tool choice for fireworks deepseek-v4p1-flash-1017 by @jonvarley-fw in #47326
- test(cost): add vertex claude-haiku-5-5 long context cases and wire gpt and gemini-3.8-flash bridge legs by @devin-ai-integration[bot] in #47342
- chore(pricing): add github_copilot/claude-opus-4.8 deprecation date by @berriai-litellm-provider-info-sync[bot] in #47370
- build(deps): bump aiohttp to 3.14.5 to clear osv-scan by @mateo-berri in #47369
- fix(cost-map): add fireworks minimax m3.1 flash standard prices by @berriai-litellm-provider-info-sync[bot] in #47371
- feat(proxy): opt-in self-serve budget edits for key owners on /key/update by @justinfx in #44763
- fix(openai): drop unsupported reasoning effort for gpt-6.1-sol by @pOpO1-9 in #43935
- fix(helm): stop litellm-helm from injecting placeholder models into every install by @yassin-berriai in #47056
- fix(deps): require anyio>=4.14.0 to rule out the lock-waiter deadlock by @yucheng-berri in #47378
- fix(router): record cooled deployments on the all-cooled failure row by @yucheng-berri in #47120
- test(integration): hold the upstream until the disconnect is settled before reading its spend row by @yucheng-berri in #47303
- chore(pricing): add meta sam-3.1 image segmentation price by @berriai-litellm-provider-info-sync[bot] in #47395
- feat(search): add DeepSeek as a /v1/search provider by @kerry-berri in #47401
- fix(azure): cache the remaining per-request Entra credentials and keep token refresh off the event loop by @mateo-berri in #47348
- fix(logging): report the cost-map entry billing used in model_map_information by @klu-berri in #47182
- fix(prometheus): label deployment failures with the deployment's provider instead of None by @yucheng-berri in #47384
- fix(vertex-ai): drop floor deprecation_date from gemini-4-argon by @berriai-litellm-provider-info-sync[bot] in #47404
- fix(anthropic)!: answer 400 for a malformed tool_result text on /v1/messages and count_tokens by @mateo-berri in #47347
- fix(decisions): log every request field the caller sent on /v1/systemone and /v1/decisions by @klu-berri in #47183
- feat(router): let a deployment set a timeout per service_tier by @klu-berri in #47406
- fix(managed_files): send provider file ids when creating a fine-tuning job from managed files by @yucheng-berri in #46552
- fix(proxy): stop billing every OpenAI pass-through /responses sub-route as a Responses call by @mateo-berri in #47171
- test(integration): check SSO sign-in removal without reaching the public internet by @yuneng-berri in #47409
- test(integration): expect the requested model in streamed Responses events on the arize v2 rig by @yuneng-berri in #47407
- test(ui-e2e): read the virtual key from its own pre in the Save your Key dialog by @yuneng-berri in #47408
- fix(cost): bill Gemini audio/image/video prompt tokens at the resolved input rate when no modality rate exists by @klu-berri in #47373
- test(integration): read stream stall spend rows from the proxy that served them by @yuneng-berri in #47410
- feat(cli): add lite claude --subscription and pkce config default by @yassin-berriai in #47385
- test(integration): wait for every worker to report the websocket session cap instead of sleeping by @yuneng-berri in #47412
- fix(exa): return highlights, highlight scores, score and the response envelope from Exa search by @yucheng-berri in #47423
- fix(proxy): refresh cached team on /team/block and /team/unblock by @hamzashah-dev in #35643
- fix(scim)!: store PATCH enterprise extension attributes in metadata.scim_enterprise by @yassin-berriai in #46738
- test(perf): stop flagging load-balanced worker reads as restarts in database upgrade test by @devin-ai-integration[bot] in #47425
- fix(mcp)!: retry upstream 429 on tools/list and error when every server fails by @yassin-berriai in #46649
- feat(proxy)!: personal keys inherit MCP server, MCP tool and agent access from the owner's teams by @yassin-berriai in #46293
- fix(speech)!: correctly propagate spend logging and usage for Gemini TTS bridge by @vanshsingh3711-wq in #44551
- fix(anthropic): apply tool_config cache-control points on chat and /v1/messages by @klu-berri in #47394
- fix(proxy): price the estimated input tokens on a read-timed-out request's spend row by @klu-berri in #47435
- perf(savings): read deployment pricing from the router's cached model info by @narmstrong-berri in #47400
- chore(hooks): drop Conventional Branches pre-push hook in favor of litellm_ prefix by @devin-ai-integration[bot] in #44951
- chore: add yassin-berriai as code owner for helm/ and terraform/ by @yuneng-berri in #47452
- fix(vertex-ai): drop floor deprecation_date from gemini-3.8-live by @berriai-litellm-provider-info-sync[bot] in #47447
- perf(router): resolve deployment usage limits once per deployment instead of every request by @narmstrong-berri in #47393
- test(e2e/perf): read the memory baseline after a one minute warm-up by @klu-berri in #47455
- fix(logging): do not stamp a provider handoff when pre_call runs for a proxy-only failure by @klu-berri in #47456
- test: catch regressions in the validation lines #44798 added by @mateo-berri in #47420
- fix(vertex_ai): bill per-character text embeddings on Google's billableCharacterCount by @klu-berri in #47460
- fix(friendliai): drop litellm-internal message fields before sending by @joshdabosh in #45092
- test(images): stop writing image edit responses to disk by @yujonglee-berri in #47463
- chore(bedrock): add Model EOL deprecation dates for Palmyra X4, X5 and Pegasus v1.2 by @berriai-litellm-provider-info-sync[bot] in #47462
- test(integration): read router cooldown failure rows from the proxy that served them by @yuneng-berri in #47457
- fix(secret_managers)!: resolve oidc/file and oidc/env refs in admin-configured api_key per request by @mateo-berri in #47341
- fix(sdk): decide MCP gateway routing without importing the proxy handler by @MFJG-dev in #45961
- fix(batches): apply the Vertex regional endpoint uplift to batch cost by @klu-berri in #47466
- feat(key_management)!: apply default_key_generate_params.allowed_routes on key generation by @devin-ai-integration[bot] in #41236
- fix(proxy): price the estimated input tokens on a client-cancelled (499) request's spend row by @klu-berri in #47436
- test(perf): gate the gateway's own overhead header, redis latency and postgres load in the perf cases by @klu-berri in #47472
- fix(databricks): stream Claude json_schema answers as text on every streaming path by @mateo-berri in #47424
- perf(streaming): cut per-chunk pydantic round trips on openai-compatible streams by @yassin-berriai in #47030
- fix(proxy): match partial wildcards against prefix-stripped model ids by @Mrun25 in #46390
- fix(proxy): price a billed failure row at the deployment's own rate like the success path by @klu-berri in #47437
- fix(router): key prompt caching affinity on tools and the /v1/messages system prompt by @yassin-berriai in #46411
- fix(token_counter): count DeepSeek V4 text with DeepSeek's own tokenizer by @mateo-berri in #47353
- fix(proxy): resync configuration after Redis reconnect by @emerzon in #43313
- chore(pricing): add github_copilot deprecation dates for models retired on 2026-10-19 by @berriai-litellm-provider-info-sync[bot] in #47487
- feat(proxy): spend log storage probe and the reclaimable-bytes count by @klu-berri in #47449
- fix(proxy): build the OpenAPI schema off the event loop so a cold /openapi.json no longer stalls the worker by @mateo-berri in #47352
- feat(router)!: apply each deployment's reasoning_effort_levels on every provider and route by @mateo-berri in #46601
- feat(bedrock): route token counts from model metadata by @mateo-berri in #47441
- fix(mcp)!: bill both model calls of a chat completions MCP auto-execute on one spend row by @mateo-berri in #47422
- test(integration): remove BUG skips for 3 tests that pass on main by @devin-ai-integration[bot] in #47364
- test(translation): add sonnet 5.5 converse and gemini direct cross-model mid rows by @devin-ai-integration[bot] in #47328
- feat(dashscope): add separate explicit and implicit cache pricing by @limdeng in #45567
- chore(pricing): add github_copilot gpt-4.1 deprecation dates by @berriai-litellm-provider-info-sync[bot] in #47492
- fix(proxy): decode zstd and gzip request bodies before auth reads them by @mateo-berri in #47418
- fix(streaming): keep finish_reason and provider usage when rebuilding streamed text completions by @roywei in #44349
- fix(videos)!: keep model_id in proxy video ids so per-model keys resolve on status/content by @ekpog200 in #44614
- fix(search): price Tavily advanced and Linkup deep searches at their own cost map entries by @yucheng-berri in #47411
- fix(otel): put the error message on every failed span status by @HardMax71 in #44185
- fix(prometheus): preserve requested model after fallback by @AaronHowell in #45555
- feat(router): route batch creates to mode batch deployments and expose supported_endpoints on /model_group/info by @mateo-berri in #47376
- fix(bedrock): resolve profile pricing before applying custom rates by @joshua-berri in #47419
- feat(context_management)!: honor clear_at_least, exclude_tools and clear_tool_inputs in the clear_tool_uses polyfill by @AlonSoko in #47123
- fix(router)!: only prefixed caller tags route once tag_routing_prefix is set by @yucheng-berri in #47428
- fix(router)!: schedule default_priority requests once and reject a malformed priority by @mateo-berri in #47498
- chore(cost-map): add fireworks 2026-11-07 deprecation dates from the prices api by @berriai-litellm-provider-info-sync[bot] in #47518
- fix(proxy)!: drop router_settings_override before routing and apply it on every branch by @Avani-prajapati in #47257
- fix(anthropic): json_schema envelope edge cases on the Anthropic json tool path by @mateo-berri in #47478
- fix(streaming): restore the token estimate for streams that send no usage by @zuraiz-anjum in #44230
- feat(harness): add pi harness for litellm.agent() by @fabioAntGit in #45467
- feat(proxy): map baggage values to budget tags by @mateo-berri in #47358
- fix(responses): keep strong refs to stream and websocket logging tasks (GC race) by @anneheartrecord in #31074
- fix(sagemaker)!: parse every streamed record however SageMaker cuts the payload parts by @mateo-berri in #47495
- fix(otel)!: leave out span cost when the price lookup failed by @HardMax71 in #44187
- test(integration): follow #47441 metadata-routed counting in count_tokens wire tests by @mateo-berri in #47525
- fix(proxy)!: let proxy admin keys read raw cloud storage file ids on GET /files/{id}/content by @mateo-berri in #40621
- feat(embeddings): enforce per-request input batch limit by @VincentG1234 in #44574
- fix(vertex_ai): reuse known context caches instead of listing on every request by @ondraz in #46857
- fix(responses): count billed background responses toward the creator's project and per-model budgets by @mateo-berri in #47504
- fix(bedrock): apply the 16 maxTokens floor to Kimi K3 on Converse by @devin-ai-integration[bot] in #43875
- fix(cost-map): registry audit 2026-10-20, add volcengine doubao-seed-2-1 260915 rows and undated azure data zone rows by @devin-ai-integration[bot] in #47561
- test(perf): set the seven new perf ceilings from 124 lane runs across v1.103.0 to v1.106.0 by @klu-berri in #47527
- fix(langfuse_otel)!: send the completion start time by @HardMax71 in #45597
- refactor(types): replace Any with proven types in 6 files by @mateo-berri in #47268
- test(translation): add sonnet 5.5 anthropic direct cross-model mid row by @devin-ai-integration[bot] in #47566
- fix(anthropic, bedrock)!: keep a redacted_thinking content item on every Claude route by @mateo-berri in #47489
- fix(logging): report the pay-as-you-go entry billing used on Azure PTU spillover by @klu-berri in #47567
- fix(router): skip non-dict tool entries in the prompt caching affinity key instead of raising by @klu-berri in #47565
- fix(litellm_proxy): forward tool_config cache_control_injection_points to the downstream proxy by @klu-berri in #47570
- fix(responses)!: count input tokens the way inference sends the request by @mateo-berri in #47363
- fix(proxy): share the billing logger across callback registries by @joshua-berri in #47510
- fix(decisions): log non-UTF-8 bytes as base64 so the request reaches validation and gets a 400 by @klu-berri in #47564
- fix(batch): preserve recoverable costs and prevent poll starvation by @joshua-berri in #47190
- test(integration): expect the Exa search envelope's provider_metadata after #47423 by @mateo-berri in #47572
- feat(proxy): lift every earlier billed timed-out retry attempt onto the failed request by @klu-berri in #47490
- fix(proxy): requeue spend logs when a Postgres restart tears down the prisma engine mid-write by @klu-berri in #47571
- fix(proxy): fall back to the deployment model when a billed failure row's base_model is not in the cost map by @klu-berri in #47568
- test: isolate model cost maps in runtime registration tests by @CNSeniorious000 in #47559
- test(perf): measure Admin UI journey latency in a browser on the 1TB SpendLogs restore by @klu-berri in #47486
- fix(cost): price base_model deployments past rule-only cost map entries by @klu-berri in #47497
- fix(completion): send prompt_cache_retention to OpenAI instead of silently dropping it by @ryan-crabbe-berri in #47480
- test(integration): call _fallback_deployment in the count_tokens wire tests #47363 added by @klu-berri in #47593
- chore: lead the PR template with a short plain description and collapse the rest by @ryan-crabbe-berri in #47594
- fix(bedrock): resolve AWS region and secret lookups off the event loop by @mateo-berri in #47331
- fix(tests): read owned proxy rows from the owned proxy's database by @mateo-berri in #47333
- fix(proxy)!: stop update_cache from resurrecting evicted auth cache entries by @devin-ai-integration[bot] in #46997
- test(cost): run azure_ai claude bridge pairs, add anthropic usage speed and vertex gemini audio priority price by @devin-ai-integration[bot] in #47582
- test(perf): set every perf ceiling to 1.2x the lane median by @klu-berri in #47590
- test(integration): build the Mantle count_tokens wire test deployments with _metadata_deployment by @mateo-berri in #47592
- feat(proxy): write one spend row per billed timed-out retry attempt by @klu-berri in #47416
- fix(vertex_ai)!: send integer enums to Gemini instead of dropping them by @HardMax71 in #44908
- test(bedrock): remove the Vault probe timing dependency by @mateo-berri in #47597
- feat(proxy): size-triggered spend log cleanup with maximum_spend_logs_size, oldest rows first by @klu-berri in #47450
- feat(proxy): opt-in free-tier allowance for Google Search grounding spend by @klu-berri in #47494
- test: fix flaky team delete, refusal sink, loop-blocking, Moyai tamper and model-cost leak tests by @devin-ai-integration[bot] in #47135
- test(integration): remove BUG skip for 1 test that passes on main by @devin-ai-integration[bot] in #47603
- feat(proxy): size pass drops the oldest spend log partitions first by @klu-berri in #47451
- test(integration): repair seven stale integration tests on main by @yuneng-berri in #47600
- docs: clarify unit test clock rule by @mateo-berri in #47604
- fix(proxy): one spend log cleanup pass at a time per pod, with or without Redis by @klu-berri in #47500
- fix(decisions): bill unpriced returned TypeSafe versions at the requested model and name a missing answers field by @mateo-berri in #47508
- fix(bedrock): return a 400 for malformed batch JSONL lines by @abhishekacharya200 in #45992
- refactor(types): replace Any with proven types in 15 files by @mateo-berri in #47509
- test(perf): set the small case's postgres_max_background_statement_per_request ceiling to 0.9 by @klu-berri in #47616
- fix(proxy): flush the spend-log queue only for Responses turns the bridge reads back by @klu-berri in #47614
- fix(proxy): size pass rebuilds reset row statistics with ANALYZE and keeps its reclaimable count by @klu-berri in #47501
- fix(proxy): bill partial Responses API streams when the client disconnects by @klu-berri in #47611
- fix(bedrock): send batch jobs to a configured control-plane endpoint by @msdianprince-7 in #47260
- test(perf): record the data request status per UI journey sample and bound each journey with a wall clock by @klu-berri in #47622
- test(perf): let the UI journey fixture run on a restore upgraded by a released migrations image by @klu-berri in #47628
- fix(ui): rebuild the dashboard bundle and cover it in the example master key check by @mateo-berri in #47612
- fix(harness): set PWD to the working directory of local sandbox commands by @mateo-berri in #47530
- chore(cost-map): add fireworks glm 5.3 flash us deprecation date from the changelog by @berriai-litellm-provider-info-sync[bot] in #47591
- chore: remove description heading from PR template by @mateo-berri in #47631
- fix(logging)!: redact Responses instructions and callback output by @emerzon in #43315
- feat(cost): add model_info.pricing_provider for cost-map lookups by @klu-berri in #47620
- test(perf): emit a top-contributors breakdown property per perf metric by @klu-berri in #47632
- fix(batches): retry confirmed pre-accounting failures by @joshua-berri in #47625
- fix(anthropic): keep tool names over 64 chars when a guardrail rewrites a /v1/messages request by @yucheng-berri in #47434
- fix(proxy): strip caller base_model from spend pricing and reject lone surrogates in multipart metadata by @klu-berri in #47639
- feat(github_copilot): support a GHE.com host on per-user Copilot credentials by @yassin-berriai in #47610
- fix(ui_sso): seal the litellm_cp_return_to cookie so edge firewalls stop blocking the MCP OAuth sign-in by @yassin-berriai in #47595
- fix(mcp)!: never forward the admission LiteLLM key upstream for any auth type by @yassin-berriai in #46932
- fix(proxy): restore daily tag spend to the in-memory queue when the Redis RPUSH fails by @yassin-berriai in #47307
- fix(mcp): surface upstream HTTP status when a failed POST closes the session by @yassin-berriai in #47569
- fix(bedrock)!: apply the deployment guardrailConfig on /bedrock pass-through routes by @yucheng-berri in #47429
- fix(proxy): price a billed failure row at the deployment's long-context tier like the success path by @klu-berri in #47647
- test(perf): tag a UI journey sample with its API response, not a Next.js prefetch under /ui/ by @klu-berri in #47650
- fix(proxy): scope the search free-tier counter to the request's provider by @klu-berri in #47646
- fix(ui): offer access-group models in team per-model rate limit and budget pickers by @mrinal-berri in #47630
- refactor(rust-bridge): decide native routing in the catalog, drop the bypass predicates by @yujonglee-berri in #46750
- refactor(rust-bridge): detect Python-only features in the catalog instead of Rust declines by @yujonglee-berri in #46714
- chore(cost-map): add search_free_requests to the model prices schema by @klu-berri in #47635
- fix(proxy): price a 499 spend row only for the proxy's own disconnect, and never after the call already completed by @klu-berri in #47652
- fix(logging)!: fire one CustomLogger failure hook per async call outside the async flag list by @yucheng-berri in #47124
- fix(router): price cost-based routing through model_info.base_model by @klu-berri in #47617
- fix(proxy): price earlier timed-out retry attempts at their own deployment's model rate by @klu-berri in #47648
- fix(logging): spilled over PTU requests without base_model log the served model's rates by @klu-berri in #47655
- fix(vertex-ai): drop flex prices from gemini-nano-banana-2.1 by @berriai-litellm-provider-info-sync[bot] in #47666
- feat(cost-map): add fireworks deepseek v4.1 flash 1017 us at the us-only premium by @berriai-litellm-provider-info-sync[bot] in #47667
- chore: bump litellm-enterprise 0.1.78 -> 0.1.79, litellm-proxy-extras 0.4.110 -> 0.4.111, litellm 1.107.0 -> 1.108.0 by @yuneng-berri in #47668
- feat(extraction): add /v1/extraction with Cloudflare Clairic support by @mateo-berri in #47473
- fix(mcp): upgrade to MCP SDK 2.3.0 and raise the per-event SSE size cap by @joshua-berri in #47034
- feat(nvidia_riva)!: add riva_offline mode for offline-only ASR models by @devin-ai-integration[bot] in #41021
- fix(proxy): flush tool discovery queue when use_redis_transaction_buffer is enabled by @mrinal-berri in #47653
- build(deps): bump pillow and dashboard vite, defer certifi to clear osv-scan by @yuneng-berri in #47678
- fix(responses): send the billed background response cost to the creating key's and team's loggers by @mateo-berri in #47506
- fix(vertex_ai): log Gemini 3 sampling deprecation once per model per worker by @devin-ai-integration[bot] in #40868
- fix(proxy): attribute retry attempt spend rows to their deployment and keep them out of daily request counts by @klu-berri in #47658
- fix(proxy): show the newest health check per model group on the model hub by @michelligabriele in #47552
- fix(gemini)!: honor supports_sampling_params on the Gemini and Vertex path and flag Gemini 3.6 Flash, 3.5 Flash-Lite and later by @ryan-crabbe-berri in #47645
- fix(mcp): list per-user auth MCP tools without a shared token by @yassin-berriai in #47677
- chore(deps-dev): bump vite from 8.3.0 to 8.3.4 in /vscode-extension by @dependabot[bot] in #47627
- test(perf): record the row count and size of each table the Admin UI journeys query by @klu-berri in #47683
- fix(ui): show a failed state with Retry on the Logs table, Usage totals and Caching chart when their fetch errors by @klu-berri in #47671
- feat(wandb): add Beam 1.0 and GLM-5.3 to the cost map by @berriai-litellm-provider-info-sync[bot] in #47690
- feat(model hub): show admin-defined custom tags and metadata from model_info by @jesus-berri in #46064
- test(perf): emit the database upgrade run's perf rows and upgrade timings as JUnit properties by @klu-berri in #47696
- fix(ui): show the budget spend limit and rate limits without a collapsed section by @yuneng-berri in #47662
- fix(scim)!: delete a group through the team delete's bulk path instead of one member at a time by @mateo-berri in #47544
- test(perf): emit event_loop_stalls hold counts as perf_ JUnit properties by @klu-berri in #47706
- fix(token_counter): stop re-downloading a HuggingFace tokenizer after a failed download by @devin-ai-integration[bot] in #47586
- ci(cost map): delete the model prices JSON schema file by @mateo-berri in #47079
- test(fine_tuning): pin that api_version never reaches the OpenAI client by @devin-ai-integration[bot] in #44995
- test(perf): allowlist anyio TaskHandle._run_coro in event_loop_stalls by @klu-berri in #47746
- fix(streaming)!: send the include_usage chunk with an empty choices array by @albertoperdomo2 in #47109
- test(perf): add chat_completions_2rps, responses_2rps and messages_2rps direct vs bridge cases by @klu-berri in #47752
- fix(router): unregister strategy selectors from global callbacks on discard by @setouchi-h in #45795
- feat(gemini): set the long decode budget for requests with no output limit from LITELLM_GEMINI_DEFAULT_MAX_OUTPUT_TOKENS by @mateo-berri in #47542
- feat(ui): add Delete to the guardrail detail page and share one delete flow with the table row by @jesus-berri in #45893
- test(perf): emit per-location seconds, offending locations and the ten longest holds as event_loop_stalls breakdowns by @klu-berri in #47757
- fix(responses): bill every round of a streamed MCP auto-execute on one spend row by @mateo-berri in #47445
- ci(integration): keep the MCP SDK1 peer on mcp 1.x and autovacuum off the size cleanup test by @mateo-berri in #47651
- fix(cli): send pi's session id from lite pi so sessions group and stick by @mateo-berri in #47700
- feat(azure): add azure_ai/MAI-Code-1.1-Flash by @berriai-litellm-provider-info-sync[bot] in #47779
- feat(vertex-ai)!: support gemini 3.1 flash tts by @emerzon in #31915
- fix(pricing): update baseten reflection/Beam-1.0 prices from the models API by @berriai-litellm-provider-info-sync[bot] in #47784
- fix(router): log each dropped /v1/messages attempt through its own logging copy and open the retry without its usage by @mateo-berri in #45194
- chore(cost-map): add fireworks muse spark open priority prices from the pricing page by @berriai-litellm-provider-info-sync[bot] in #47785
- test(perf): ramp the load cases until the pod stops keeping up and floor sustained_rps by @klu-berri in #47758
- fix(timing): carry litellm_received_at across to a planted litellm_metadata bucket so the overhead header stays anchored at receive time by @klu-berri in #47790
- fix(router): normalize native Responses latency per output token by @joshua-berri in #47727
- fix(llms): join api_base and route with one shared helper by @mateo-berri in #47535
- fix(responses)!: round-trip Anthropic compaction blocks as compaction items by @mateo-berri in #46754
- fix(proxy): forward dispatched_call_type through _failure_usage_to_lift by @mateo-berri in #47815
- refactor(types): replace Any with proven types in 50 files by @mateo-berri in #47818
- docs: rename security.md to SECURITY.md, use security@berri.ai contact by @krrish-berri-2 in #47581
- refactor(inference): rename RouteError to Error by @yujonglee-berri in #47771
- fix(security): stop trusting the compromised eMudhra root CA by @ryan-crabbe-berri in #47670
- feat(ui): inspect client usage for users and team members by @ishaanj-berri in #47974
- feat(proxy): model_list_return_wildcard_routes setting for /v1/models by @shrey-berri in #43624
- fix: recognize OpenAI context_length_exceeded errors by @shrey-berri in #47954
- test(interactions): read the spec from a vendored snapshot and canary the live one daily by @mateo-berri in #48002
- fix(anthropic): include null stop_sequence in native responses (#47946) by @ishaanj-berri in #47987
- fix(decisions): remove the System One question count cap by @ishaanj-berri in #47985
- fix(proxy): take the upgrade notice from the changelog instead of GitHub releases by @yucheng-berri in #47998
- chore(cost-map): update openai gpt-6-luna decisions cache rates from the decisions guide by @berriai-litellm-provider-info-sync[bot] in #48066
- fix(security): update bundled CA roots and preserve Prisma image compatibility by @shrey-berri in #47969
- feat(proxy): expose wildcard model listings in general settings by @shrey-berri in #47979
- fix(completions): omit stream usage unless requested (#47953) by @ishaanj-berri in #48052
- feat(proxy): add LITELLM_DISABLE_LATEST_RELEASE_CHECK to stop the release check by @yucheng-berri in #48065
- fix(vertex-ai): add deprecation_date to retired veo-2.0-generate-001 by @berriai-litellm-provider-info-sync[bot] in #47847
- feat(ui): unify gateway and usage assistance as Aria Agent by @ishaanj-berri in #48082
- fix(ci): unblock dependency security checks by @ishaanj-berri in #48055
- chore(codeowners): add joshua-berri as a code owner of the model cost map by @kerry-berri in #48101
- chore(signing): rotate the cosign image-signing key by @yuneng-berri in #48103
- chore(cost-map): add Llama 4 Batch rates to vertex_ai scout 128e and maverick 16e maas by @kerry-berri in #48085
- fix(sso): enforce free user admission without locking out existing users by @tin-berri in #48097
- fix(cost-map): rolling registry audit, add elevenlabs api rates, together minimax-m3.1-flash, mistral voxtral 3 and azure_ai phi-4 dates by @devin-ai-integration[bot] in #47623
- build(deps): bump mlflow, pypdf and setuptools to clear osv-scan by @ryan-crabbe-berri in #48110
- fix(ui): make pass-through headers optional and align authentication by @moe-berri in #48081
- feat(ui): sort virtual keys by expiry, activity, spend and limits by @moe-berri in #48074
- feat(ui): sort every organizations table data column by @moe-berri in #48106
- feat(ui): give Aria usage charts and PDF answer exports by @ishaanj-berri in #48094
- fix(azure_ai): drop tool_reference parts from tool messages on chat by @shrey-berri in #48032
- feat(ui): sort every users table data column by @moe-berri in #48105
- feat(ui): sort every teams table data column by @moe-berri in #48109
- feat(ui): sort budgets by reset duration by @moe-berri in #48107
- fix(proxy): record spend_logs_metadata on /interactions by @igorborgest in #47848
- fix(azure_ai): forward the thinking-binding-controls beta header to Foundry by @shrey-berri in #48033
- feat(chat): add Moyai UI, model hub, images, and usage metrics (#40557) by @ishaanj-berri in #48108
- fix(azure): accept explicit v1 Responses bases (#48072) by @ishaanj-berri in #48118
- feat(proxy): add LITELLM_OFFLINE_MODE, one switch for the fetches LiteLLM makes on its own by @yucheng-berri in #48096
- fix(chat): retain MCP results for follow-ups (discussion #32085) by @ishaanj-berri in #48124
- fix(chat): recognize Chat in the development preview by @ishaanj-berri in #48123
- fix(opencode): forward stable sessions automatically across inference routes by @moe-berri in #48121
- fix(aws_polly): read the engine from the bare model name by @FahimaGold in #47963
- fix(docker): update bundled LiteAdmin CA roots and aiohttp by @yuneng-berri in #48139
- feat(chat): add document uploads (discussion #32085) by @ishaan-j-berri in #48137
- fix(spend): await the per-request rollup enqueues and report their failures by @devin-ai-integration[bot] in #48131
- fix(cost-map): declare Bedrock gpt-oss rows text-only so modality routing skips them by @devin-ai-integration[bot] in #48149
- fix(router): keep image requests off deployments declared supports_vision false by @devin-ai-integration[bot] in #48152
- fix(responses): honor per-call custom pricing on the native Responses API path by @joshua-berri in #48119
- feat(cost): bill openai 12-hour prompt cache writes at their own rate by @kerry-berri in #48088
- fix(cost): bill gemini audio input and cached audio at flex, priority and batch rates by @kerry-berri in #48086
- fix(mcp): retain toolset scope when refreshing catalog authority by @tin-berri in #48095
- refactor(typing): clear 1181 basedpyright Any errors across 431 files by @mateo-berri in #47789
- fix(router): route decisions calls only to deployments whose provider supports decisions by @devin-ai-integration[bot] in #48175
- feat(ui): configure the default Usage time range by @moe-berri in #48207
- feat(providers): add OpenCode Go routing and pricing by @moe-berri in #48140
- fix(ui): move Aria empty model state into the picker by @moe-berri in #48223
- fix(chat): remove hosted telemetry on chat submissions by @ishaan-j-berri in #48225
- fix(proxy): buffer tool discoveries in Redis and write LiteLLM_ToolTable in one statement per drain, on its own lock by @kerry-berri in #48089
- refactor(typing): widen delete_nested_value to Mapping and drop two unused Span aliases by @mateo-berri in #48001
- fix(ui): wire up Download CSV Template button in bulk invite by @hgnnmnn in #48199
- feat(router): add opt-in session repinning after successful failover by @moe-berri in #48206
- fix(router): keep latency routing alive when latency samples are unusable by @devin-ai-integration[bot] in #48216
- fix(vector_stores): put azure vector store id before the api-version query on retrieve, update and delete by @devin-ai-integration[bot] in #48224
- fix(anthropic): stop injecting empty-content placeholder into tool-call-only assistant turns by @tbartik in #34822
- fix(bedrock): price claude_platform calls from their own cost map rows by @kerry-berri in #48150
- chore(cost-map): add openai gpt-5.6-cyber 12-hour cache write rate from the pricing page by @berriai-litellm-provider-info-sync[bot] in #48246
- fix(bedrock): take Nova Sonic context and output limits from the Bedrock model cards by @berriai-litellm-provider-info-sync[bot] in #48247
- fix(gemini): bill gemini-2.5-flash-native-audio video input at the audio / video rate by @berriai-litellm-provider-info-sync[bot] in #48248
- chore(pricing): add github_copilot/claude-opus-4.8-fast deprecation date by @berriai-litellm-provider-info-sync[bot] in #48251
- fix(pricing): set azure gpt-chat-latest max_input_tokens to 128000 by @berriai-litellm-provider-info-sync[bot] in #48252
- feat(responses): honor max_agentic_loops for the streamed MCP auto-execute round cap by @shivamrawat1 in #47688
- feat(guardrails): add native Reco guardrail provider (pre_call), fail closed by default by @devin-ai-integration[bot] in #48243
- fix(router): skip declared text-only deployments for image requests on every routing strategy by @devin-ai-integration[bot] in #48241
- feat(proxy): add disable_pre_routing_error_logs to skip spend rows for pre-routing rejections by @devin-ai-integration[bot] in #48239
- fix(opencode): bill OpenCode Go requests from the reported list_cost by @kerry-berri in https://github.com/BerriAI/litellm/pull/48254
- fix(proxy): restore Claude gateway model discovery (#48204) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48221
- fix(anthropic): release upstream messages stream on disconnect (#48197) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48220
- feat(teams): show caller member spend and budget on Your Teams by @jesus-berri in https://github.com/BerriAI/litellm/pull/45674
- fix(chatgpt): route uncatalogued models through responses by @moe-berri in https://github.com/BerriAI/litellm/pull/48244
- fix(ui): show "Never resets" instead of "n/a" for an unset budget reset period by @jesus-berri in https://github.com/BerriAI/litellm/pull/47065
- feat(models): add Cerebras Llama 3.1 hyphenated aliases (cerebras/lla… by @pfolex in https://github.com/BerriAI/litellm/pull/48158
- feat(cost): parse 12-hour cache write rates for batch and ultrafast tiers by @kerry-berri in https://github.com/BerriAI/litellm/pull/48259
- fix(cloudflare): clarify the chat endpoint warning (#47965) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48265
- fix(decisions): preserve missing native usage (#48147) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48261
- fix(groq): replay streamed reasoning replies without HTTP 400 (#47931) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48268
- fix(proxy): reconcile team member total_spend with current cycle spend by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48260
- fix(deepseek): pass reasoning_effort through to the API by @Hazelhof in https://github.com/BerriAI/litellm/pull/38736
- feat(mistral): add zai-glm-5-3-flash to the cost map by @kerry-berri in https://github.com/BerriAI/litellm/pull/48270
- fix(proxy): keep JSON integers outside the 64-bit range exact when parsing request bodies by @jeevan1098 in https://github.com/BerriAI/litellm/pull/48213
- revert(proxy): revert large-integer request parsing by @moe-berri in https://github.com/BerriAI/litellm/pull/48289
- build(docker): refresh base images and ship only runtime files in component images by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48279
- fix: support Python 3.15 by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48359
- build(deps): bump webpki-roots and webpki-root-certs to 1.0.11 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48301
- test(streaming): pin that a stream stuck on one chunk closes its provider stream and logs one failure by @businessarshgoyal in https://github.com/BerriAI/litellm/pull/38753
- fix(ui): restore clipboard copying in key and log details by @tin-berri in https://github.com/BerriAI/litellm/pull/48425
- fix(mcp): report oversized SSE catalog errors by @tin-berri in https://github.com/BerriAI/litellm/pull/48424
- chore(cost-map): add openai gpt-6.1-terra from the pricing page by @kerry-berri in https://github.com/BerriAI/litellm/pull/48429
- fix(otel): decide per-team Arize sampling from the trace id so every pod agrees by @yucheng-berri in https://github.com/BerriAI/litellm/pull/47468
- fix(vertex_ai): reuse rerank credential cache by @tin-berri in https://github.com/BerriAI/litellm/pull/48430
- fix(ui): render string inputs in general settings by @tin-berri in https://github.com/BerriAI/litellm/pull/48431
- fix(guardrails): exclude litellm_metadata from pass-through guardrail scan text by @mrinal-berri in https://github.com/BerriAI/litellm/pull/48276
- fix(azure): set azure_ai/Microsoft-Decision-1 max_input_tokens to 32768 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48434
- chore(cost-map): add openai batch and ultrafast 12-hour cache write rates from the pricing page by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48433
- feat(bedrock): add global. and us. openai.gpt-6.1-terra rows by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48441
- fix(vertex_ai): bound shared credential cache retention by @tin-berri in https://github.com/BerriAI/litellm/pull/48442
- chore(deps): remove expired boto3 botocore and grpcio overrides by @shrey-berri in https://github.com/BerriAI/litellm/pull/48447
- feat(cost-map): add baseten elephant-1 and mammoth-1 decision models by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48453
- fix(elevenlabs): map wav and pcm TTS formats to 24kHz output formats by @moe-berri in https://github.com/BerriAI/litellm/pull/48455
- feat(pricing): add github_copilot/gpt-6.1-terra and raise gpt-6 max_input_tokens by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48450
- test(proxy): make tokenizer offload check deterministic by @tin-berri in https://github.com/BerriAI/litellm/pull/48458
- fix(proxy): preserve limiter state across SSE keepalive tasks by @tin-berri in https://github.com/BerriAI/litellm/pull/48452
- fix(proxy): reject negative RPM and TPM request limits by @tin-berri in https://github.com/BerriAI/litellm/pull/48444
- fix(ui): keep Aria accessible in the dashboard header by @moe-berri in https://github.com/BerriAI/litellm/pull/48454
- fix(proxy): scope dashboard search grants and skip the sentinel team lookup by @moe-berri in https://github.com/BerriAI/litellm/pull/48464
- fix(gemini): restore image tool results for Gemini 2.5 by @tin-berri in https://github.com/BerriAI/litellm/pull/48428
- ci: remove the Together AI and weekly cost map sync workflows by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48473
- fix(mcp): advertise valid OAuth resources for toolset URLs by @tin-berri in https://github.com/BerriAI/litellm/pull/48474
- build(deps): drop expired exclude-newer pins for certifi, mlflow and pypdf by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48461
- feat(ui): simplify auto router setup with deployed model defaults by @moe-berri in https://github.com/BerriAI/litellm/pull/48451
- fix(router): stop concurrent deployment deletes from crashing deployment lookups by @yucheng-berri in https://github.com/BerriAI/litellm/pull/47680
- fix(ui): show search tool errors instead of empty results by @moe-berri in https://github.com/BerriAI/litellm/pull/48478
- feat(chatgpt): forward client subscriptions through the gateway by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/41522
- fix(mcp): send tool-call stream headers once the call is authorized by @devanshc777 in https://github.com/BerriAI/litellm/pull/47897
- fix(models): declare Azure audio snapshot capabilities by @tin-berri in https://github.com/BerriAI/litellm/pull/48475
- fix(http_handler): name the timeout phase and limit that fired instead of "after None seconds" by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48250
- fix(proxy): validate JSON object bodies before request handling by @tin-berri in https://github.com/BerriAI/litellm/pull/48438
- fix(proxy)!: gate key budget_duration and budget_id updates like max_budget by @yucheng-berri in https://github.com/BerriAI/litellm/pull/47681
- chore(lint): add google-convention docstring rules to strict ruff gate by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48245
- fix(router): isolate forwarded Anthropic subscription cooldowns by @moe-berri in https://github.com/BerriAI/litellm/pull/48485
- refactor(cost-map): drop the legacy max_tokens field in favor of max_input_tokens and max_output_tokens by @kerry-berri in https://github.com/BerriAI/litellm/pull/48471
- feat(rust): add typed database query foundation by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48214
- feat(rust): add typed key spend query by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48217
- feat(rust): add typed user spend query by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48229
- feat(rust): add typed team spend query by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48230
- feat(rust): add typed end-user spend query by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48231
- feat(rust): add transaction-scoped team lock query by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48232
- feat(rust): add typed team-member spend upsert by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48233
- feat(rust): add typed spend-log insert query by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48234
- feat(rust): add typed daily user spend upsert by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48235
- feat(rust): add typed daily team spend upsert by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48236
- feat(rust): add typed daily end-user spend upsert by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48237
- docs: document incremental database access migration by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48476
- feat(ui): budget period tooltip on key, team, user and org spend tiles by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48487
- fix(router): serve a team's wildcard deployment before a proxy-wide wildcard by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48490
- fix(team): keep the team reset schedule when a temp budget increase is set on a member inheriting the team default by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48495
- fix(mcp): reject revoked browser sessions during gateway authorization by @tin-berri in https://github.com/BerriAI/litellm/pull/48494
- fix(router): keep DB-only deployments priced across price data reloads by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48486
- fix(ui): show the budget period date range instead of "cycle" on team member spend by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48488
- test(routing): a team's wildcard serves its keys before a proxy-wide wildcard of the same pattern by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48501
- fix(prometheus): count provider-side 401s in LLM failure and deployment metrics by @yucheng-berri in https://github.com/BerriAI/litellm/pull/46668
- fix(ui): show endpoint-qualified models in Decisions Playground by @tin-berri in https://github.com/BerriAI/litellm/pull/48504
- feat(ui): persist model group alias display ordering by @tin-berri in https://github.com/BerriAI/litellm/pull/48500
- feat(abliteration): add model pricing and capabilities by @moe-berri in https://github.com/BerriAI/litellm/pull/48498
- feat(refuseless): add provider and model pricing by @moe-berri in https://github.com/BerriAI/litellm/pull/48497
- feat(rust): add redis-client crate for standalone Redis by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48269
- feat(redis-client): support Redis Cluster by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48271
- feat(redis-client): run Lua scripts and pipelines with per-op errors by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48273
- feat(rust): add circuit-breaker crate and guard redis-client with it by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48277
- feat(gateway): connect to Redis from config.yaml by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48284
- fix(decisions): honor base_url for custom backends by @tin-berri in https://github.com/BerriAI/litellm/pull/48505
- fix(ui): persist model parameter deletions after refresh by @tin-berri in https://github.com/BerriAI/litellm/pull/48456
- refactor(llms): rename model-version transformation files to family names by @mateo-berri in https://github.com/BerriAI/litellm/pull/48509
- fix(anthropic): raise DEFAULT_ANTHROPIC_CHAT_MAX_TOKENS from 4096 to 128000 by @kerry-berri in https://github.com/BerriAI/litellm/pull/48502
- feat(decisions): support LM Studio decision models by @jodok in https://github.com/BerriAI/litellm/pull/48448
- fix(token-counter): count inline auto images safely (#48422) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48526
- fix(chatgpt): forward client credentials for image generation by @moe-berri in https://github.com/BerriAI/litellm/pull/48522
- fix(proxy): include Claude web search fees in streamed usage cost by @tin-berri in https://github.com/BerriAI/litellm/pull/48528
- fix(vertex): keep Messages authentication off the event loop by @tin-berri in https://github.com/BerriAI/litellm/pull/48523
- fix(decisions): preserve missing probabilities (#48449) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48524
- fix(ui): honor dark and local logos across Connect and Chat by @tin-berri in https://github.com/BerriAI/litellm/pull/48532
- fix(azure): add keyless Decisions authentication (#48386) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48529
- fix(databricks): reuse base OAuth for decisions (#48395) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48527
- fix(messages): honor OpenAI stop_sequences (#37118) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48534
- fix(router): preserve tag fail-open policy through affinity and cooldown by @shrey-berri in https://github.com/BerriAI/litellm/pull/48470
- refactor(anthropic): rename llms/anthropic/pass_through to llms/anthropic/messages by @mateo-berri in https://github.com/BerriAI/litellm/pull/48510
- fix(langfuse_otel)!: derive trace-level name, input, output and tags on traces litellm starts by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/42705
- refactor(mcp): drop the experimental label from the MCP server and client paths by @mateo-berri in https://github.com/BerriAI/litellm/pull/48513
- fix: correct Palm 'decommissioned' typo in error message by @ninglinLiu in https://github.com/BerriAI/litellm/pull/46171
- fix(responses): replay web_search_call input items that have no action by @prassu017 in https://github.com/BerriAI/litellm/pull/48417
- feat: generate provider_endpoints_support.json from the cost map by @kerry-berri in https://github.com/BerriAI/litellm/pull/48619
- feat(bedrock): price native guardrailConfig trace usage into spend and x-litellm-response-cost by @kerry-berri in https://github.com/BerriAI/litellm/pull/48278
- feat(proxy): refuse migrations that existing rows would make fail, before the first one runs by @kerry-berri in https://github.com/BerriAI/litellm/pull/48493
- fix(anthropic): estimate initial input tokens for bridged message streams by @moe-berri in https://github.com/BerriAI/litellm/pull/48618
- fix(logging): match extra_spend_tag_headers case-insensitively by @moe-berri in https://github.com/BerriAI/litellm/pull/48620
- fix(vertex-ai): drop the floor retirement date from gemini-3.1-flash-lite-image by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48587
- fix(proxy): return 403 naming the Enterprise licence for get_spend_routes without a licence by @moe-berri in https://github.com/BerriAI/litellm/pull/48623
- fix(token_counter): count Anthropic-format tool_choice without KeyError by @moe-berri in https://github.com/BerriAI/litellm/pull/48624
- fix(bedrock): correct gpt max_input_tokens and add Mantle token counting for claude-opus-5-5 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48479
- fix(security)!: build proxy-only failure logs from an allowlist and drop caller guardrail info by @yucheng-berri in https://github.com/BerriAI/litellm/pull/48599
- fix(ui): expose the authorization MCP auth type in create and edit forms by @moe-berri in https://github.com/BerriAI/litellm/pull/48629
- feat(hosted_vllm): accept images on decision deployments by @moe-berri in https://github.com/BerriAI/litellm/pull/48621
- fix(mcp): load deprecated package aliases on demand by @mateo-berri in https://github.com/BerriAI/litellm/pull/48615
- fix(auth): log routine 401 rejections as one warning without a traceback by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48613
- ci: spend-logs-guard requires kerry-berri approval on LiteLLM_SpendLogs schema and migration changes by @kerry-berri in https://github.com/BerriAI/litellm/pull/48518
- fix(anthropic): make opening usage estimates opt-in by @moe-berri in https://github.com/BerriAI/litellm/pull/48633
- fix(cost-map): add 2026-11-06 deprecation_date to two together_ai rows by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48651
- fix(aiohttp_transport): close an owned aiohttp session when its evicted transport is collected by @kerry-berri in https://github.com/BerriAI/litellm/pull/48650
- fix(complexity_router): keep the held user_turn route for Codex compaction requests by @moe-berri in https://github.com/BerriAI/litellm/pull/48627
- fix(ui): percent-encode request id in spend log detail URL by @moe-berri in https://github.com/BerriAI/litellm/pull/48630
- refactor(proxy-extras): drop the spend-log api_key special case from the row check remedy by @kerry-berri in https://github.com/BerriAI/litellm/pull/48636
- feat(router): respect caller output budgets in complexity routing by @tin-berri in https://github.com/BerriAI/litellm/pull/48632
- fix(mcp): enforce deny-first tool policy consistently by @tin-berri in https://github.com/BerriAI/litellm/pull/48625
- fix(mcp): accept YAML OpenAPI documents by @tin-berri in https://github.com/BerriAI/litellm/pull/48622
- fix(proxy): release concurrency slots when synthetic streams complete by @tin-berri in https://github.com/BerriAI/litellm/pull/48628
- fix(proxy): keep every startup line JSON when json_logs is on by @yucheng-berri in https://github.com/BerriAI/litellm/pull/47035
- fix(router): keep a lone deployment warm under router allowed_fails unless the policy names the exception by @kerry-berri in https://github.com/BerriAI/litellm/pull/48644
- fix(streaming): dict-usage arm drops prompt_tokens_details/completion_tokens_details its sibling arms preserve by @lets-order-some-fries in https://github.com/BerriAI/litellm/pull/36678
- test: remove checks that pin implementation details and add a shadcn testing rule by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48663
- docs(router): clarify heuristic v2 keyword settings by @tin-berri in https://github.com/BerriAI/litellm/pull/48666
- feat(ui): add LITELLM_UI_USE_SI_TERMINOLOGY to show SI instead of AI in the Admin UI by @yuneng-berri in https://github.com/BerriAI/litellm/pull/47440
- fix(ui): keep vendor names and agent instructions in AI wording under SI terminology by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48670
- fix(proxy): abort the request with a 499 when the client disconnects during the body upload by @kerry-berri in https://github.com/BerriAI/litellm/pull/48640
- fix(ui): omit blank expiry from key edit and regenerate payloads by @moe-berri in https://github.com/BerriAI/litellm/pull/48634
- fix(chatgpt): send system input items to Codex as developer by @moe-berri in https://github.com/BerriAI/litellm/pull/48668
- fix(mcp): refuse calls to tools hidden by discovery guardrails by @tin-berri in https://github.com/BerriAI/litellm/pull/48669
- feat(search): add native xAI X Search support (#38505) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48677
- fix(decisions): catch ValidationError from validate_json in transform_decisions_response (#48660) by @16niraj in https://github.com/BerriAI/litellm/pull/48662
- ci: run spend-logs-guard and cost-map-guard without installing the litellm project by @kerry-berri in https://github.com/BerriAI/litellm/pull/48683
- fix(bedrock): add token_count_model to three Mantle-native Claude rows by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48682
- fix: honor empty mock completion responses (#48162) by @ishaan-j-berri in https://github.com/BerriAI/litellm/pull/48266
- test(cost): cover unpriced provider slugs and explicit zero rates by @eduardopessin in https://github.com/BerriAI/litellm/pull/42467
- feat(morph): support open models and cached input pricing by @moe-berri in https://github.com/BerriAI/litellm/pull/48676
- fix: preserve media across Responses and Gemini conversions by @tin-berri in https://github.com/BerriAI/litellm/pull/48484
- fix(guardrails)!: redact secrets in tool traffic and system prompts by @yucheng-berri in https://github.com/BerriAI/litellm/pull/47122
- test: update stale integration and guardrail e2e tests to intended behavior by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48665
- feat(helm): route extra ingress paths to custom services by @tin-berri in https://github.com/BerriAI/litellm/pull/48674
- fix(router): keep session tier pins coherent across workers by @tin-berri in https://github.com/BerriAI/litellm/pull/48645
- chore: rebuild Admin UI bundle for 1.109.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48692
- feat(passthrough): let upstreams report the model name via x-litellm-upstream-model by @mrinal-berri in https://github.com/BerriAI/litellm/pull/48275
- chore: bump litellm-enterprise 0.1.79 -> 0.1.80, litellm 1.108.0 -> 1.109.0 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48673
- fix(responses): preserve typed parts when logprobs is omitted by @tin-berri in https://github.com/BerriAI/litellm/pull/48686
- fix(embeddings): forward Gemini and Vertex request timeouts by @tin-berri in https://github.com/BerriAI/litellm/pull/48690
- fix(databricks): price the openjev decision model at its published 0.6 DBU per 1M input tokens by @kerry-berri in https://github.com/BerriAI/litellm/pull/48694
- fix(tavily): return raw_content, score, favicon and the response envelope from Tavily search by @mrinal-berri in https://github.com/BerriAI/litellm/pull/48684
- fix(ui): keep guardrail wizard navigation within the dialog by @tin-berri in https://github.com/BerriAI/litellm/pull/48688
- fix(langfuse otel): emit request metadata under langfuse.observation.metadata and langfuse.trace.metadata on the OTEL v2 Langfuse mapper by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/42697
- fix(cohere): map string stop parameter to list of strings for stop_sequences by @Pyhroff in https://github.com/BerriAI/litellm/pull/47091
- fix(anthropic): count search results and reject unsupported token-count blocks by @kerry-berri in https://github.com/BerriAI/litellm/pull/48699
- fix(proxy)!: paginate customer lists and usage filters by @tin-berri in https://github.com/BerriAI/litellm/pull/48700
- fix(responses): skip failed spend-log turns when rebuilding a session from previous_response_id by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48647
- fix(responses): reject or drop Responses params the chat completions bridge cannot translate by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48655
- fix(ui): prefill the key edit Organization picker from org_id by @mateo-berri in https://github.com/BerriAI/litellm/pull/39535
- fix(responses): keep every MCP tool round in streaming follow-up input by @shivamrawat1 in https://github.com/BerriAI/litellm/pull/47698
- docs(readme): link the LiteLLM OSS Champions program from Contributing by @zoveki in https://github.com/BerriAI/litellm/pull/48734
- test(harness): audit #47530 by @norkelbyte in https://github.com/BerriAI/litellm/pull/48751
- test(sagemaker): audit #47495 by @rj-cairn in https://github.com/BerriAI/litellm/pull/48767
- test(gemini): audit #47542 by @zoveki in https://github.com/BerriAI/litellm/pull/48758
- test(proxy): pin the max_parallel_requests slot release when a streamed /v1/messages MCP auto-execute ends by @mateo-berri in https://github.com/BerriAI/litellm/pull/47788
- fix(cost-map): drop the gpt-5-nano priority input price OpenAI does not sell by @tessellark in https://github.com/BerriAI/litellm/pull/48763
- test(spend): audit #47815 by @norkelbyte in https://github.com/BerriAI/litellm/pull/48774
- feat: add ai& (aiand) provider by @islomjon-aiand in https://github.com/BerriAI/litellm/pull/38958
- fix(router)!: count an explicit allowed_fails of 3 and keep fallback deployments out of cooldown by @HardMax71 in https://github.com/BerriAI/litellm/pull/46183
- test(proxy): audit #47418 by @tavren27 in https://github.com/BerriAI/litellm/pull/48766
- fix(router): let affinity pins yield to deployments that already failed this request by @aidanasingh in https://github.com/BerriAI/litellm/pull/32309
- test(llms): audit #47535 by @tessellark in https://github.com/BerriAI/litellm/pull/48786
- test(responses): audit #47504 by @norkelbyte in https://github.com/BerriAI/litellm/pull/48787
- test(spend): audit #47353 by @rj-cairn in https://github.com/BerriAI/litellm/pull/48785
- test(proxy): audit #46815 by @m6atlas in https://github.com/BerriAI/litellm/pull/48768
- fix(bedrock): retry without strict when Bedrock rejects strict tool schemas under drop_params by @m6atlas in https://github.com/BerriAI/litellm/pull/48733
- test(files): audit #40621 by @zoveki in https://github.com/BerriAI/litellm/pull/48788
- test(anthropic, bedrock): audit #47489 by @zoveki in https://github.com/BerriAI/litellm/pull/48782
- fix(anthropic): let drop_params drop speed on claude-opus-4-7 after Anthropic removed its fast mode by @norkelbyte in https://github.com/BerriAI/litellm/pull/48764
- test(token_counter): audit #47586 by @simonp9 in https://github.com/BerriAI/litellm/pull/48800
- test(anthropic): audit #47478 by @paveln83 in https://github.com/BerriAI/litellm/pull/48803
- fix(router): continue Responses mid-stream fallbacks on models without assistant prefill by @tin-berri in https://github.com/BerriAI/litellm/pull/47672
- test(router): audit #47498 by @mika-lt in https://github.com/BerriAI/litellm/pull/48799
- test(decisions): audit #47508 by @tavren27 in https://github.com/BerriAI/litellm/pull/48777
- test(router): audit #47376 by @norkelbyte in https://github.com/BerriAI/litellm/pull/48792
- test(proxy): audit #47358 by @norkelbyte in https://github.com/BerriAI/litellm/pull/48784
- test(router): audit #41368 by @tavren27 in https://github.com/BerriAI/litellm/pull/48794
- refactor(fallback-generalizations)!: remove the legacy extends and mixed-rule shim by @norkelbyte in https://github.com/BerriAI/litellm/pull/48737
- fix(streaming): exact-match the SSE [DONE] marker in BaseModelResponseIterator by @michelligabriele in https://github.com/BerriAI/litellm/pull/47832
- test(nvidia_riva): audit #41021 by @quietjules in https://github.com/BerriAI/litellm/pull/48801
- feat(proxy): per-provider and per-model rpm/tpm requirements for enforce_project_model_quota by @mateo-berri in https://github.com/BerriAI/litellm/pull/47693
- feat(cli): keep the ChatGPT login with lite codex --subscription by @rj-cairn in https://github.com/BerriAI/litellm/pull/48741
- test(proxy): audit #47352 by @norkelbyte in https://github.com/BerriAI/litellm/pull/48804
- test(mcp): audit #47422 by @tavren27 in https://github.com/BerriAI/litellm/pull/48821
- test(scim): audit #47544 by @zoveki in https://github.com/BerriAI/litellm/pull/48791
- build(rust): upgrade reqwest to 0.13 and move MCP out of litellm-http by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48039
- fix(http): honor transport settings for Rust WebSockets by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/47968
- fix(vertex_ai): send Vertex Claude labels as X-Vertex-AI-Labels header instead of the request body by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48753
- fix(cost-map): rolling provider pricing, capability and retirement audit by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48188
- fix(proxy/auth): apply max_end_user_budget_id to end users without a row on cached keys by @moe-berri in https://github.com/BerriAI/litellm/pull/48704
- refactor(http): build outbound requests as reqwest::Request by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48041
- refactor(rust): adopt one error discipline across litellm-rust with source chains and Report by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48042
- feat(rust): one typed decline from core up to each host by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/47772
- fix(huggingface): stop forcing truncate=false on TEI rerank and pass truncate params through by @moe-berri in https://github.com/BerriAI/litellm/pull/48706
- fix(ollama): forward embedding credentials, headers and timeout by @moe-berri in https://github.com/BerriAI/litellm/pull/48707
- fix(router)!: isolate child tier pins in user turn mode by @tin-berri in https://github.com/BerriAI/litellm/pull/48701
- fix(refuseless): update GLM 5.3 and DeepSeek V4.1 Flash prices by @moe-berri in https://github.com/BerriAI/litellm/pull/48844
- fix(ui): match simple auto router models to advanced setup by @moe-berri in https://github.com/BerriAI/litellm/pull/48851
- fix(ui): show reasoning in the Playground for /v1/responses by @moe-berri in https://github.com/BerriAI/litellm/pull/48850
- fix(responses): forward top-level moderation param to OpenAI by @moe-berri in https://github.com/BerriAI/litellm/pull/48708
- fix(proxy): store boolean settings as JSON booleans on /config/field/update by @shrey-berri in https://github.com/BerriAI/litellm/pull/48595
- fix(azure): map context_length_exceeded error code to ContextWindowExceededError by @shrey-berri in https://github.com/BerriAI/litellm/pull/48616
- fix(images): honor max_retries and prevent Router retry amplification by @moe-berri in https://github.com/BerriAI/litellm/pull/48705
- fix(vertex-ai): preserve image size aspect ratios by @shrey-berri in https://github.com/BerriAI/litellm/pull/48463
- fix(otel)!: label configured pass-through routes litellm.passthrough instead of chat by @yucheng-berri in https://github.com/BerriAI/litellm/pull/48675
- fix(chatgpt): derive the upstream session id from prompt_cache_key by @occ in https://github.com/BerriAI/litellm/pull/42014
- fix(cost-map)!: price Mistral Large 4 at its list price now that the launch sale ended by @zoveki in https://github.com/BerriAI/litellm/pull/48825
- fix(anthropic-messages): merge deployment and client anthropic-beta instead of overwriting by @shrey-berri in https://github.com/BerriAI/litellm/pull/48594
- feat(proxy): log one line per token count call by @mateo-berri in https://github.com/BerriAI/litellm/pull/47657
- fix(otel): suppress spans for excluded proxy requests by @tin-berri in https://github.com/BerriAI/litellm/pull/48720
- fix(baseten): price the two decision models at their published input rates by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48849
- fix(router)!: resolve trusted JEV connection environment references by @tin-berri in https://github.com/BerriAI/litellm/pull/48717
- chore(cost-map): fill fireworks spot router capability fields from base models by @kerry-berri in https://github.com/BerriAI/litellm/pull/48858
- fix(mistral): replay assistant reasoning as a Mistral thinking chunk by @rj-cairn in https://github.com/BerriAI/litellm/pull/48778
- fix(images): normalize absent images in async edits by @tin-berri in https://github.com/BerriAI/litellm/pull/48872
- fix(count_tokens)!: audit #47441 and keep the framed estimate for Bedrock count models from the cost map by @rj-cairn in https://github.com/BerriAI/litellm/pull/48805
- fix(responses)!: answer 400 before counting a lone Responses built-in tool on Claude by @tessellark in https://github.com/BerriAI/litellm/pull/48798
- fix(router): drop the deployment rpm filter from enable_pre_call_checks by @kerry-berri in https://github.com/BerriAI/litellm/pull/48873
- fix(router): pass lifecycle events through on background OpenAI responses streams that cannot fall back by @simonp9 in https://github.com/BerriAI/litellm/pull/48817
- fix(batches): stop unbillable batches from blocking file deletes and new-batch polling by @tessellark in https://github.com/BerriAI/litellm/pull/48752
- fix(audio): reject unsupported transcription providers with 400 by @shrey-berri in https://github.com/BerriAI/litellm/pull/47971
- fix(azure): share one Entra token request per worker and audit #47348 by @tessellark in https://github.com/BerriAI/litellm/pull/48769
- fix(cost-map): add mistral/deepseek-v4-1-flash-1017 by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48879
- feat(decisions): support Ollama decision models by @moe-berri in https://github.com/BerriAI/litellm/pull/48871
- fix(gemini)!: accept Google's current Managed Agents fields on create and interactions by @zoveki in https://github.com/BerriAI/litellm/pull/48750
- fix(openai)!: send the whole reasoning_effort dict when chat is bridged to Responses by @m6atlas in https://github.com/BerriAI/litellm/pull/48807
- fix(proxy): account for media in combined TPM reservations by @tin-berri in https://github.com/BerriAI/litellm/pull/48865
- feat(providers): add ZeroGPU as an OpenAI-compatible provider by @amaan-ai20 in https://github.com/BerriAI/litellm/pull/43874
- refactor(ui): use the shadcn Kbd primitive for keyboard hints by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48885
- fix(pricing): sync databricks model prices by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48884
- fix(cli): let the proxy decide when a classic lite login token has expired by @mateo-berri in https://github.com/BerriAI/litellm/pull/47712
- fix(aiohttp_openai): forward service_tier in transform_response by @TemoSulava in https://github.com/BerriAI/litellm/pull/47263
- refactor(rust-bridge): require the native extension by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48852
- fix(streaming): surface upstream abort as server errors (LIT-10159) by @sorgfresser in https://github.com/BerriAI/litellm/pull/48328
- fix(ui): bundle the Aria avatar so it loads in every deployment by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48890
- fix(responses)!: bill partial usage on mid-stream failures and report bridged /v1/messages failures to the proxy by @mateo-berri in https://github.com/BerriAI/litellm/pull/47537
- fix(files)!: scope provider and model file lists to the caller's managed files under require_managed_files by @mateo-berri in https://github.com/BerriAI/litellm/pull/47682
- fix(anthropic): map model_context_window_exceeded stop reason to length by @moe-berri in https://github.com/BerriAI/litellm/pull/48874
- feat(accounting): add accounting contracts, PricingSnapshot and ledger schema (LIT-10193) by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48862
- fix(ci): spend logs guard requires the approval to cover the head's spend-log lines by @kerry-berri in https://github.com/BerriAI/litellm/pull/48904
- fix(guardrails)!: make hide-secrets honor skip_tool_message_in_guardrail by @yucheng-berri in https://github.com/BerriAI/litellm/pull/48689
- fix(pricing): add databricks priority pay per token prices by @kerry-berri in https://github.com/BerriAI/litellm/pull/48891
- fix(ci): keep the spend logs guard approval through a later COMMENTED review (LIT-10242) by @kerry-berri in https://github.com/BerriAI/litellm/pull/48901
- fix(logging): bill each SDK call its own native Bedrock guardrail trace when calls share one metadata dict by @kerry-berri in https://github.com/BerriAI/litellm/pull/48923
- fix(aiohttp_transport): keep the owned session open while a response stream is still being read (LIT-10237) by @kerry-berri in https://github.com/BerriAI/litellm/pull/48920
- ci(spend-logs-guard): run only on pull_request_target, re-run by hand after approving by @kerry-berri in https://github.com/BerriAI/litellm/pull/48941
- fix(router): cool down failing deployments when fallbacks use string targets (LIT-10238) by @kerry-berri in https://github.com/BerriAI/litellm/pull/48913
- fix(migration_data_checks): size btree entries by the bytes Postgres stores (LIT-10244) by @kerry-berri in https://github.com/BerriAI/litellm/pull/48911
- feat(daily-activity): per-guardrail spend breakdown in user, team and organization daily activity by @mrinal-berri in https://github.com/BerriAI/litellm/pull/48702
- feat(ui): search and multi-select tools in the MCP toolset editor by @mrinal-berri in https://github.com/BerriAI/litellm/pull/48601
- fix(gemini): preserve every grounding web source by @SilverMarcs in https://github.com/BerriAI/litellm/pull/48745
- feat(proxy)!: model family and access group entries in model_max_budget by @mateo-berri in https://github.com/BerriAI/litellm/pull/47722
- test(routing): audit #46601 by @tessellark in https://github.com/BerriAI/litellm/pull/48910
- feat(skills): add a litellm-setup agent skill by @mateo-berri in https://github.com/BerriAI/litellm/pull/47731
- fix(ci): flag any schema.prisma change inside model LiteLLM_SpendLogs in the spend logs guard by @kerry-berri in https://github.com/BerriAI/litellm/pull/48905
- feat(router): add deployment rpd and tpd daily limits to enforce_model_rate_limits by @kerry-berri in https://github.com/BerriAI/litellm/pull/48875
- feat(tencent): add Seedream image generation and editing through TokenHub by @tessellark in https://github.com/BerriAI/litellm/pull/48735
- test(spend): audit #47506 by @quietjules in https://github.com/BerriAI/litellm/pull/48919
- feat(proxy): accept request priority from the x-litellm-priority header by @mubashir1osmani in https://github.com/BerriAI/litellm/pull/47618
- fix(websearch): strip Claude Code instructional prefix in short-circuit search by @agustin18 in https://github.com/BerriAI/litellm/pull/43458
- feat(accounting): add durable event ledger writer by @joshua-berri in https://github.com/BerriAI/litellm/pull/48883
- refactor(types): replace Any with proven types in 28 files by @rj-cairn in https://github.com/BerriAI/litellm/pull/48903
- test(gemini): cover every web source for a grounded passage by @moe-berri in https://github.com/BerriAI/litellm/pull/48861
- fix(router): reject string fallback targets at Router init (LIT-10238) by @kerry-berri in https://github.com/BerriAI/litellm/pull/48943
- fix(vertex-ai): add batch above 200k and image output batch prices for gemini models by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48945
- fix(streaming): keep merged think tags balanced and split SSE lines only on CR/LF by @rj-cairn in https://github.com/BerriAI/litellm/pull/48755
- refactor(router): fence the router surface and document the router-core boundary by @narmstrong-berri in https://github.com/BerriAI/litellm/pull/48839
- test(extraction): audit #47473 by @paveln83 in https://github.com/BerriAI/litellm/pull/48898
- ci: run zizmor with --no-ignores and move the spend logs and cost map guards to pull_request by @yuneng-berri in https://github.com/BerriAI/litellm/pull/48947
- refactor(images): remove dall-e-2 and dall-e-3 code paths by @kerry-berri in https://github.com/BerriAI/litellm/pull/48703
- test(proxy): audit #46997 by @zoveki in https://github.com/BerriAI/litellm/pull/48918
- test(responses): audit #47445 by @tavren27 in https://github.com/BerriAI/litellm/pull/48902
- fix(vertex_ai)!: send the caller's anthropic-version in the Vertex Claude /v1/messages body, not the header by @zoveki in https://github.com/BerriAI/litellm/pull/48814
- refactor(model-catalog): parse, lower and validate the catalog into typed prices by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48853
- test(router): set string fallback targets after Router init in the sdk cooldown cases (LIT-10238) by @kerry-berri in https://github.com/BerriAI/litellm/pull/48954
- fix(health): ask OpenAI and Azure audio chat models for audio output in the health check probe by @mateo-berri in https://github.com/BerriAI/litellm/pull/47730
- fix(proxy): stop log lines from leaving terminal colors on by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48966
- fix(bedrock): omit system prompt from audio transcription and report its token usage by @david-koh in https://github.com/BerriAI/litellm/pull/41565
- fix(logging): stop dumping the request body at every layer under --detailed_debug by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/48973
- fix(stream): the last usage frame carries litellm's bill in usage.cost by @kerry-berri in https://github.com/BerriAI/litellm/pull/48955
- fix(responses): drop params compact rejects and send Azure compaction to the v1 route by @simonp9 in https://github.com/BerriAI/litellm/pull/48876
- fix(guardrails): scan Responses tool results in texts-mode guardrails by @mika-lt in https://github.com/BerriAI/litellm/pull/48827
- fix(guardrails): skip embeddings input in google_text_moderation by @simonp9 in https://github.com/BerriAI/litellm/pull/48934
- feat!: add StreamLake provider metadata by @ZHOUKAILIAN in https://github.com/BerriAI/litellm/pull/41006
- fix(proxy): let typesafe/* allowlists cover /typesafe Jev calls and list Jev in the model picker by @mateo-berri in https://github.com/BerriAI/litellm/pull/47697
- feat(router): daily_reset_time picks when deployment rpd and tpd daily limits start over by @kerry-berri in https://github.com/BerriAI/litellm/pull/48957
- test(unit): keep unix socket paths in unit tests under the macOS AF_UNIX limit by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/45040
- feat(ocr)!: support outputContentFormat=markdown for Azure Document Intelligence by @zoveki in https://github.com/BerriAI/litellm/pull/48926
- feat(azure_ai): reach Foundry agents through the project Responses API by @mateo-berri in https://github.com/BerriAI/litellm/pull/47717
- docs(adrs): add ADRs for the Python SDK and proxy, starting with provider usage extras by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/36668
- fix(responses): drop the null created_by OpenAI rejects when output items are replayed by @tessellark in https://github.com/BerriAI/litellm/pull/48783
- fix(cli): give lite codex aliases of a Codex-known model that model's catalog entry by @tessellark in https://github.com/BerriAI/litellm/pull/48894
- fix(proxy)!: enforce an end user's per-model budget from their linked budget by @mika-lt in https://github.com/BerriAI/litellm/pull/48815
- fix(context_management)!: count the system prompt toward the clear_tool_uses input_tokens trigger by @AlonSoko in https://github.com/BerriAI/litellm/pull/47857
- fix(google_genai): read one-object and null spellings of repeated fields in countTokens and generateContent by @zoveki in https://github.com/BerriAI/litellm/pull/48771
- fix(proxy)!: stop labelling management and health rejections as auth failures by @tavren27 in https://github.com/BerriAI/litellm/pull/48739
- test(json_fragment_accumulator): assert peak allocation instead of a drain timing ratio by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/43370
- fix(credentials): keep the stored secret when PATCH echoes its masked read-back by @tessellark in https://github.com/BerriAI/litellm/pull/48950
- fix(responses): call the renamed drops_params helper on the compact path by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/49030
- docs(qa): allow focused proof for mechanical PRs by @mateo-berri in https://github.com/BerriAI/litellm/pull/49031
- fix(proxy): enforce team and key Allowed Vector Stores when no vector store registry is loaded by @paveln83 in https://github.com/BerriAI/litellm/pull/48915
- build(deps): bump langgraph and tornado and add dated scan ignores to clear osv-scan and image-scan by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/48302
- fix(responses): stream every citation batch before completion by @SilverMarcs in https://github.com/BerriAI/litellm/pull/48747
- fix(token_counter): count OpenAI models newer than tiktoken's table with o200k_base by @rj-cairn in https://github.com/BerriAI/litellm/pull/48728
- fix(cost_map): mark fireworks_ai/minimax-m3 as vision and pin capabilities verified against live calls by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/43390
- feat(responses): support Codex client tool_search on Anthropic and other bridged providers by @mateo-berri in https://github.com/BerriAI/litellm/pull/48972
- fix(proxy)!: list every priced Vertex family under a vertex_ai/* grant by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/41959
- fix(responses): keep each Codex tool once when its tool list repeats across turns by @ryan-crabbe-berri in https://github.com/BerriAI/litellm/pull/49006
- feat(providers): add BigModel support and model pricing by @AaronHowell in https://github.com/BerriAI/litellm/pull/48563
- fix(health)!: openai realtime health check reports healthy with a missing or invalid api key by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/41233
- fix(responses): replay the original Responses item order, phase, and boundaries on the next chat turn by @simonp9 in https://github.com/BerriAI/litellm/pull/48912
- fix(responses): resume background response streams with stream and starting_after by @paveln83 in https://github.com/BerriAI/litellm/pull/48819
- test(integration): scope the signoz, otel conversation id, and series cap proxy fixtures to their module by @rj-cairn in https://github.com/BerriAI/litellm/pull/48965
- fix(anthropic): drop the non-spec custom object from /v1/messages tool definitions by @zoveki in https://github.com/BerriAI/litellm/pull/48893
- fix(responses): drop a malformed prompt_cache_breakpoint under drop_params on the direct /v1/responses path by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/45330
- test: fix flaky spend-log cleanup budget, login lockout, and wedged Redis tests by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/47108
- fix(vertex_ai): build the cachedContents collection URL under a custom api_base by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/44783
- fix(github_copilot): treat a malformed api-key.json like a missing one by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/44723
- feat(proxy)!: add suppress_startup_output to turn off startup prints by @mateo-berri in https://github.com/BerriAI/litellm/pull/47708
- feat(proxy): let a Claude Code gateway user choose the session team by @simonp9 in https://github.com/BerriAI/litellm/pull/49001
- feat(proxy)!: general_settings.claude_code_marketplace_auth_required puts the Claude Code marketplace behind a LiteLLM key by @zoveki in https://github.com/BerriAI/litellm/pull/48980
- fix(token_counter)!: keep a loaded Hugging Face tokenizer when a slower download fails by @quietjules in https://github.com/BerriAI/litellm/pull/48916
- fix(llms): move later developer messages for models declared system-first by @mika-lt in https://github.com/BerriAI/litellm/pull/48897
- fix(openai): warn when the GPT-5 reasoning effort gate drops a level under drop_params by @mateo-berri in https://github.com/BerriAI/litellm/pull/47761
- fix(websearch)!: keep the provider prefix on the agentic follow-up model by @msdianprince-7 in https://github.com/BerriAI/litellm/pull/38885
- fix(logging): mark mirrored silent_model calls with is_silent_experiment in spend logs by @tavren27 in https://github.com/BerriAI/litellm/pull/48888
- fix(cohere): price native Cohere embed calls on Foundry relays and the Cohere passthrough by @tavren27 in https://github.com/BerriAI/litellm/pull/48978
- feat(providers): add Kyma API as an OpenAI-compatible provider by @m6atlas in https://github.com/BerriAI/litellm/pull/48756
- fix(cost): bill a deployment's per-second rates on native Anthropic /v1/messages by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/42417
- fix(proxy): stream a guardrail block on /v1/messages as Anthropic events by @tessellark in https://github.com/BerriAI/litellm/pull/49010
- fix(caching): read the cache key's model group from the router's metadata for the call by @mika-lt in https://github.com/BerriAI/litellm/pull/48917
- fix(passthrough): forward OpenAI-Beta and default agents=v1 on the OpenAI passthrough by @mika-lt in https://github.com/BerriAI/litellm/pull/49009
- test(router_strategy): keep foreign asyncio task noise out of the budget limiter caplog asserts by @devin-ai-integration[bot] in https://github.com/BerriAI/litellm/pull/43375
- fix(bedrock)!: route region-prefixed embedding models to that region and bill its price by @tessellark in https://github.com/BerriAI/litellm/pull/49072
- fix(anthropic)!: drop beta-gated body fields under drop_params by @tavren27 in https://github.com/BerriAI/litellm/pull/48793
- ci: run the dashboard API types and Terraform endpoint checks on every change that can alter the spec by @tavren27 in https://github.com/BerriAI/litellm/pull/49022
- refactor(types): replace Any with proven types in 14 files by @mika-lt in https://github.com/BerriAI/litellm/pull/48928
- fix(fallback): read stored router_settings from the database on fallback writes by @mika-lt in https://github.com/BerriAI/litellm/pull/48999
- build(model-catalog): ship the cost map inside the native extension by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48907
- ci(model-catalog): check the cost map by loading it through model-catalog by @yujonglee-berri in https://github.com/BerriAI/litellm/pull/48908
- feat(soniox): add realtime speech-to-text on /v1/realtime by @dan2k3k4 in https://github.com/BerriAI/litellm/pull/44822
- fix(exceptions)!: honor status code when mapping OpenAI invalid_request_error exceptions by @otiscuilei in https://github.com/BerriAI/litellm/pull/32537
- fix(anthropic)!: send /v1/messages PDF documents to OpenAI-shaped providers as file parts by @mateo-berri in https://github.com/BerriAI/litellm/pull/47166
Full Changelog: v1.108.0...v1.109.0