contribution/compass
BerriAI/litellm

LiteLLM

399 signals · 416 observation events

Open repository ↗

The fastest, litest AI Gateway. Rust core with Python SDK. Call 100+ LLM APIs in OpenAI (or native) format with cost tracking, guardrails, load balancing, and logging [Bedrock, Azure, OpenAI, Anthropic, OpenAI, VertexAI, vLLM, Nvidia NIM]

56.3K stars10.5K forksPythonNOASSERTIONai-gatewayanthropicazure-openaibedrockgatewaylangchainlitellmllmkeyword: LiteLLM
PROJECT NEWS

Release, roadmap, and discussion

All news →
BerriAI/litellm

LiteLLM

AI Infrastructure
Latest stable

v1.96.2

v1.96.2
  • Verify Docker Image Signature
  • The cosign claims were validated
  • The signatures were verified against the specified public key
  • What's Changed
  • chore(release): backport proxy request-handling maintenance and refresh runtime deps for 1.96.1 by @yuneng-berri in https://github.com/BerriAI/litellm/pull/36494
Original release notes ↗

Publicly indicated next

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. discoveredinitial snapshot
  2. discoveredinitial snapshot
  3. changedupdatedAt, metrics
  4. changedtext, updatedAt, metrics
  5. changedupdatedAt, metrics
  6. changedupdatedAt
  7. discoveredinitial snapshot
  8. changedupdatedAt, metrics
  9. changedupdatedAt, metrics
  10. changedupdatedAt
  11. changedupdatedAt, state
  12. changedupdatedAt, state
  13. changedupdatedAt, state
  14. changedupdatedAt, metrics
  15. changedupdatedAt
  16. discoveredinitial snapshot
  17. changedupdatedAt
  18. changedupdatedAt, metrics
  19. changedtext, updatedAt, metrics
  20. changedupdatedAt
  21. changedupdatedAt
  22. changedtext, updatedAt, metrics
  23. discoveredinitial snapshot
  24. discoveredinitial snapshot
  25. changedupdatedAt
  26. discoveredinitial snapshot
  27. discoveredinitial snapshot
  28. discoveredinitial snapshot
  29. changedtext, updatedAt, metrics
  30. discoveredinitial snapshot
50 shown
issue

[Bug]: Tool calling schema to ollama_chat being missing in the UI

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### What happened? When using litellm with a local ollama instance and `ollama_chat` connection type, after setting the `supports_function_calling: true`, the tool calling reached the ollama provider, but the schema is missing in the UI. ###

importance 4@Firefox2100openbugllm translationui-dashboardOriginal evidence ↗
issue

[Bug]: auto-router forwards the first same-name entry's api_base and api_key onto routed tier calls

## What happened? When an `auto_router/` marker shares its `model_name` with a plain deployment (the tag-based split: tagged requests go through the semantic router, untagged ones to the plain model), the pre-routing rewrite that swaps the alias for the routed tier model also copies litellm_params from whichever entry happens to be listed first in `model_lis

importance 4@mateo-berriclosedbugllm translationOriginal evidence ↗
issue

[Bug]: tagged auto-router captures untagged requests to a shared model name, skipping tag matching

## What happened? With `enable_tag_filtering: true`, a `model_name` served by both an untagged plain deployment and an `auto_router/` marker carrying `tags: ["route"]` is meant to split traffic: requests tagged `route` go through the semantic router, untagged requests fall through to the plain deployment. Instead every request to the name goes through the se

importance 4@mateo-berriclosedbugllm translationOriginal evidence ↗
issue

[Bug]: tag filtering 401s the auto-router's routed tier unless every tier deployment repeats the marker's tag

## What happened? With `enable_tag_filtering: true` and an `auto_router/` marker carrying `tags: ["route"]`, a request tagged `route` correctly selects the marker and the semantic router picks its tier, then the request dies with a 401: `Not allowed to access model due to tags configuration. Passed model=gemini-flash and tags=['route']`. After the rewrite, d

importance 4@mateo-berriclosedbugllm translationOriginal evidence ↗
issue

[Bug]: OpenAI passthrough `/v1/embeddings` writes no spend log row at all — billable tokens are unattributable, and budgets under-enforce

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. --- ### What happened? **In brief:** `POST /openai_passthrough/v1/embeddings` returns 200 and consumes real billable tokens, but LiteLLM writes **no `LiteLLM_SpendLogs` row at all** — not a zero-cost row, nothing. No `x-litellm-response-cost`

importance 4@vanshgangwal-p72bugproxyllm translationOriginal evidence ↗
issue

[Bug]: /v1/messages returns OpenAI-shaped errors — a Bedrock 503 never becomes overloaded_error, so Claude Code shows a bare "API error"

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. Closest existing issues are #29187 (Bedrock **passthrough** route, error arriving *mid-stream* inside the binary event stream) and the closed #24609 (`async_sse_wrapper` has no try/except). This one is a different route and a different code p

importance 4@tefimovproxyllm translationclaude codeOriginal evidence ↗
issue

[Bug]: OAUTH_TOKEN_INFO_ENDPOINT is under documented and doesn't exist for MSFT

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### What happened? As a customer / premium user, while trying to setup OAuth2 authentication on our proxy, I ran into errors with [OAUTH_TOKEN_INFO_ENDPOINT](https://github.com/BerriAI/litellm/blob/f64479e74d9d20d0edc806139b36d2a0db55a28c/lit

importance 4@Geod24bugproxyOriginal evidence ↗
issue

[Bug]: Blocking a model's primary deployment(s) skips the configured `fallbacks` chain entirely, instead of routing to the healthy fallback

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### What happened? I have a model alias (`DeepSeek-Flash`) whose primary target is one model group (`DeepSeek-V-Flash-00`), with a `fallbacks` entry configured to escalate to a second model group (`DeepSeek-V-Flash-10`) if the primary fails.

importance 4@gozimibugproxyllm translationOriginal evidence ↗
issue

[Bug]: Cohere Embed v4 mixed text/image inputs are sent in the texts field

# LiteLLM issue draft: Cohere Embed v4 mixed inputs are sent as texts ## Title `[Bug]: Cohere Embed v4 mixed text/image inputs are sent in the texts field` ## Check for existing issues - [x] I searched open and closed issues for Cohere Embed v4 multimodal inputs and did not find a duplicate. ## What happened? Cohere Embed v4 supports an `inputs` array whose

importance 4@arvid123openllm translationOriginal evidence ↗
issue

[Bug]: IDE tools (Bash_ide, Skill_ide, Workflow_ide) unavailable when Claude Code routes through LiteLLM /v1/messages

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### What happened? ## What I verified - Upstream logs show LiteLLM **does** forward the tools (55 TOOL) and preserves prompt caching (`CACHE` read/write present), format stays `claude→claude`. - `anthropic_beta_headers_config.json` in the con

importance 4@erfanmazraeiopenbugproxyllm translationclaude codeOriginal evidence ↗
issue

[Feature]: Allow custom client-facing messages for budget exceeded errors

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### The Feature ## Feature request Allow administrators to replace client-facing `budget_exceeded` messages so exact spend and budget values are not exposed. Current response: ```json { "error": { "message": "Budget has been exceeded! Current

importance 4@jacksonridingopenenhancementproxyllm translationOriginal evidence ↗
issue

Realtime client_secrets: session.model silently overrides the Router's resolved model when using model groups/aliases

### What happened? When calling `/v1/realtime/client_secrets` (or `/realtime/client_secrets`, `/openai/v1/realtime/client_secrets`) through the proxy using a model group name that is different from the actual underlying model string in `litellm_params.model`, the wrong model can end up being sent to the backend provider. The Router resolves the deployment co

importance 4@danielva-mondayopenllm translationOriginal evidence ↗
issue

OpenTelemetry: attributes written to ended parent_span — guard checks hasattr(set_status) instead of is_recording()

### What happened? `OpenTelemetry.set_attributes()` writes to a caller-owned `parent_span` without checking whether that span is still recording. The guard immediately above it is `hasattr(parent_span, "set_status")`, which is true for every span object — ended or not — so the check never actually does what its own comment says. `litellm/integrations/opentel

importance 4@Aasif-Multaniopenllm translationOriginal evidence ↗
issue

[Bug]: `litellm --version` tracebacks with ModuleNotFoundError: No module named 'proxy_server' (1.95.0 through 1.97.0.dev2)

## Summary Running `litellm --version` (the bare CLI) tracebacks with `ModuleNotFoundError: No module named 'proxy_server'`. Reproduced on `litellm[proxy]` installs across multiple versions. ## Repro (deterministic on a clean pipx environment) ```sh $ pipx install 'litellm[proxy]' $ litellm --version Traceback (most recent call last): File ".../litellm/proxy

importance 4@niSteeclosedOriginal evidence ↗
issue

[Bug]: `redact_user_api_key_info: true` does not filter sensitive metadata from OpenTelemetry spans

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### What happened? ## What happened? User enables `redact_user_api_key_info: true` in `litellm_settings` with OpenTelemetry tracing enabled (`success_callback: ["otel"]`). When checking the OTEL traces in Jaeger, sensitive metadata fields lik

importance 4@rpreiteopenbugllm translationOriginal evidence ↗
issue

[Bug]: Bedrock Converse chat path bills 1-hour cache writes at the 5-minute rate (cacheDetails not parsed)

## What happened? On the standard Bedrock chat path (Converse API, not passthrough), 1-hour TTL prompt cache writes get billed at the 5-minute rate. This is a different root cause than #29432 (which is scoped to the Bedrock passthrough route), but the symptom is the same: 1h cache writes undercounted by about 37.5%. ## Root cause `AmazonConverseConfig._trans

importance 4@danielva-mondayopenllm translationOriginal evidence ↗
issue

[Bug]: Bedrock Converse streaming emits a trailing empty chunk after the finish_reason chunk (regression in v1.94.0, PR #32255)

### Check for existing issues Searched open + closed issues and PRs (bedrock streaming / empty chunk / chunk after finish_reason / trailing chunk / `is_model_response_stream_empty`). The closest matches are #36168, #28735 and #14106, but none cover this symptom. #25389 / #25410 are the vLLM analogue of the same code path. ### What happened? Since **v1.94.0**

importance 4@dimaduxopenllm translationOriginal evidence ↗
issue

[Bug]: /v1/chat/completions stream: response.failed becomes HTTP 200 + empty finish_reason=stop (fallbacks never run)

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. Related (same fallthrough, different ask — please do not close this as a duplicate): - #34351 — usage dropped on `response.incomplete` / `response.failed`. PR #34352 still maps `failed` → `finish_reason=stop`. - #27186 — `response.incomplete`

importance 4@moravronopenproxyllm translationOriginal evidence ↗
issue

[Bug]: default_priority not being used when no priority provided

### Check for existing issues - [x] I have searched the existing issues and checked that my issue is not a duplicate. ### What happened? I'm using litellm-helm to deploy my litellm, I've configured it to have a default_priority as this : ``` proxy_config: router_settings: default_priority: 10 ``` When using my client, it does not send a priority and so I get

importance 4@morgan-paopenbugproxyOriginal evidence ↗
issue

[bug]: proxy uses request-body api_key without allow_client_side_credentials

### check for existing issues - [x] i have searched the existing issues and checked that my issue is not a duplicate. ### what happened? on litellm proxy 1.96.2, a caller can put `"api_key": "<some token>"` in the json body of `post /v1/chat/completions` even when `allow_client_side_credentials` is not set. the proxy then authenticates to the configured prov

importance 4@Atharva-Kanherkaropenllm translationOriginal evidence ↗
pull request

fix(caching): sort embedding results by index to prevent cache misalignment

## Summary Fixes #20456 When providers like vLLM return embedding results out of order (i.e. `result.data[0].index != 0`), the async batch embedding + Redis cache flow produces index misalignment, duplication, and missing entries in the final response. This is a regression of the same class of bug fixed in #2990. ### Root Cause (3 interrelated bugs) 1. **Cac

importance 4@skylarkoo7openstaleOriginal evidence ↗
pull request

[Infra] Promote internal staging to main

## Relevant issues <!-- e.g. "Fixes #000" --> ## Pre-Submission checklist **Please complete all items before asking a LiteLLM maintainer to review your PR** - [ ] I have Added testing in the [`tests/test_litellm/`](https://github.com/BerriAI/litellm/tree/main/tests/test_litellm) directory, **Adding at least 1 test is a hard requirement** - [see details](http

importance 4@yuneng-berriclosedOriginal evidence ↗
pull request

Staging

## Relevant issues <!-- e.g. "Fixes #000" --> ## Linear ticket <!-- if you are an internal contributor, add the Linear ticket e.g. "Resolves LIT-1234" to magically link the Linear ticket to the GitHub PR --> ## Pre-Submission checklist **Please complete all items before asking a LiteLLM maintainer to review your PR** - [ ] I have Added testing in the [`tests

importance 4@guangzhouclosedstaleOriginal evidence ↗
pull request

feat(pricing): add Voyage v4 embedding model pricing

## Summary Adds three new Voyage AI v4 embedding models to `model_prices_and_context_window.json`: | Model | Cost per token | Context window | |-------|---------------|----------------| | `voyage/voyage-4-large` | 1.2e-7 ($0.12/1M) | 32,000 | | `voyage/voyage-4` | 6e-8 ($0.06/1M) | 32,000 | | `voyage/voyage-4-lite` | 2e-8 ($0.02/1M) | 32,000 | Pricing source

importance 4@mvxlr-factifyclosedstaleOriginal evidence ↗
pull request

Add HermesToken provider models and pricing

## Description Adds [HermesToken](https://hermestoken.top) as a new LLM provider in `model_prices_and_context_window.json`. HermesToken is an LLM token trading platform that provides access to Anthropic Claude and OpenAI models. This PR adds pricing information for five models currently available through their API. ### Models added | Model | Input ($/1M) | O

importance 4@jamiexiamiclosedstaleOriginal evidence ↗
pull request

[LIT-2888] B0: EC2 spike — prove RunInstances + user-data + HTTPS callback

## Relevant issues ## Linear ticket Resolves LIT-2888 (parent: LIT-2878 Epic B — Cursor SDK on LiteLLM full-VM provisioning) ## Pre-Submission checklist - [ ] I have Added testing in the [`tests/test_litellm/`](https://github.com/BerriAI/litellm/tree/main/tests/test_litellm) directory — N/A, this is a throwaway spike under `infra/spikes/` to answer Epic B's

importance 4@ishaan-berriclosedstaleOriginal evidence ↗
pull request

[LIT-2878] Epic B — VM provisioning (EC2 + AMI + provider abstraction)

## Relevant issues ## Linear ticket Resolves LIT-2878 ## Pre-Submission checklist - [x] I have Added testing in the [`tests/test_litellm/`](https://github.com/BerriAI/litellm/tree/main/tests/test_litellm) directory — 42 mocked tests + 3 slow-marked real-cloud tests. - [x] My PR passes all unit tests on `make test-unit`. - [x] My PR's scope is as isolated as

importance 4@ishaan-berriclosedstaleOriginal evidence ↗
pull request

Fix cascading 400 invalid_encrypted_content when originating deployment is cooled down

## Summary When a Responses API request carries `encrypted_content` (or an encoded `encitem_…` ID) and the originating deployment is **cooled down** (e.g. during an Azure 429 storm), the affinity check in `encrypted_content_affinity_check.py` was falling back to the full healthy pool. The router then picked a different deployment, which Azure rejected with `

importance 4@mateo-berriclosedOriginal evidence ↗
pull request

feat(helm/job): add support for nodeSelector

## Relevant issues <!-- e.g. "Fixes #000" --> ## Linear ticket <!-- if you are an internal contributor, add the Linear ticket e.g. "Resolves LIT-1234" to magically link the Linear ticket to the GitHub PR --> ## Pre-Submission checklist **Please complete all items before asking a LiteLLM maintainer to review your PR** - [ ] I have Added testing in the [`tests

importance 4@ksrt12openstaleOriginal evidence ↗
pull request

fix(bedrock): strip `client_metadata` from `filter_internal_params`

## Summary Bedrock Converse with custom **application inference profiles** rejects any field in `additionalModelRequestFields` that the underlying inference profile does not whitelist. Some clients (OpenAI Codex CLI, Claude Code, others adopting OpenAI's Responses API conventions) send a top-level `client_metadata` field for run-level telemetry. LiteLLM forw

importance 4@parisniopenstaleOriginal evidence ↗
pull request

fix(responses): reorder `function_call_output` adjacent to `function_call` before chat-completion conversion

## Summary Bedrock Converse requires every `toolResult` block to live in the `user` message **immediately** following the assistant message that emitted the matching `toolUse`. The OpenAI Responses API does not enforce strict adjacency, so upstream clients can legally inject a `message` between a `function_call` and its `function_call_output`. When such a pa

importance 4@parisniopenstaleOriginal evidence ↗
pull request

fix: strip codex metadata for copilot responses

## Relevant issues Fixes GitHub Copilot Responses requests that include Codex's local `internal_chat_message_metadata_passthrough` field ## Linear ticket ## Pre-Submission checklist - [x] I have added meaningful tests - [x] My PR passes the targeted checks listed below - [x] My PR's scope is as isolated as possible; it only solves 1 specific problem - [ ] I

importance 4@allenliang2022openOriginal evidence ↗
pull request

fix: handle missing httpx_response in Google GenAI logging handler

## TLDR Problem this solves: - Google GenAI generateContent logging crashes with ValueError when the adapter path builds a ModelResponse without populating httpx_response - The handler unconditionally read model_call_details["httpx_response"] and raised before doing any useful work How it solves it: - Early-return when result is already a ModelResponse, skip

importance 4@fktpp2022openOriginal evidence ↗
pull request

feat(models): refresh GitHub Copilot pricing and metadata

## TLDR Problem this solves: - Copilot now exposes MAI-Code-1.1-Flash - LiteLLM lacks its metadata and pricing How it solves it: - Adds the model to both bundled model maps - Adds focused metadata and cost coverage ## Relevant issues ## Linear ticket ## Pre-Submission checklist **Please complete all items before asking a LiteLLM maintainer to review your PR*

importance 4@codgicianopenOriginal evidence ↗
pull request

fix: resolve zero token usage in Google GenAI adapter streaming path

## Relevant issues Fixes zero token counts reported by Gemini CLI when proxied through LiteLLM. ## Pre-Submission checklist - [x] I have added meaningful tests - [x] My PR passes all CI/CD checks (e.g., lint, format, unit tests) - [x] My PR scope is as isolated as possible; it only solves 1 specific problem ## Type 🐛 Bug Fix ✅ Test ## Changes **Root cause:**

importance 4@fktpp2022openOriginal evidence ↗
pull request

feat(nebius): add model pricing metadata

## Relevant issues ## Linear ticket ## Pre-Submission checklist - [x] I have added testing in the `tests/test_litellm/` directory - [ ] My PR passes all unit tests - [x] My PR scope is isolated to model pricing metadata - [ ] I have requested and received a Greptile review ## Screenshots / Proof of Fix The cost registry includes the six Nebius model IDs with

importance 4@pyguyopenOriginal evidence ↗
pull request

fix(utils): report missing API keys for compactifai, clarifai, ovhcloud

## Relevant issues Successor of #33614 (closed: GitHub kept a DIRTY merge state / huge file list after rebase even though the tip is a single commit on `main`). ## Pre-Submission checklist - [x] I have added meaningful tests - [ ] My PR passes all CI/CD checks (e.g., lint, format, unit tests) - [x] My PR's scope is as isolated as possible; it only solves 1 s

importance 4@Bartok9openOriginal evidence ↗
pull request

fix(utils): report missing HEROKU_API_KEY in validate_environment

## Relevant issues Heroku chat needs `HEROKU_API_KEY`. `validate_environment` previously skipped this provider, so missing keys looked configured (false all-clear). ## Pre-Submission checklist - [x] I have added meaningful tests - [ ] My PR passes all CI/CD checks (e.g., lint, format, unit tests) - [x] My PR's scope is as isolated as possible; it only solves

importance 4@Bartok9openOriginal evidence ↗
pull request

fix(responses): merge assistant message + tool calls into a single chat-completions choice

# fix(responses): merge assistant message + tool calls into a single chat-completions choice ## Relevant issues Fixes the message+function_call split that happens when responses-mode models return both. Related to the empty-output cluster #25429/#26179/#26309 but INDEPENDENT - this PR is model-agnostic and does not touch the chatgpt provider's SSE recovery.

importance 4@steveonjavaopenOriginal evidence ↗
pull request

fix: propagate budget_duration when creating new budget in /customer/update

## Summary Fixes #33941 When calling on an end-user that has **no existing budget** () with both and in the request body, a new budget row was created in but and were silently dropped — the budget never auto-resets. ## Root Cause Analysis The bug had **two layers**: 1. **Request parsing silently drops **: (in ) did not declare a field. Since uses pydantic v2

importance 4@PiedPiper911Original evidence ↗