* Correctly delete team model alias when team only model is deleted (#10933) * fix(model_management_endpoints.py): if team model deleted - remove the alias routing Fixes issue where alias would cause incorrect routing to occur * fix(model_management_endpoints.py): remove model name from team on team model delete prevents misrouting * fix(vertex_llm_base.py): remove quota_project_id parameter from credential refresh request (#10915) Fixes https://github.com/BerriAI/litellm/issues/9863 * Enable structured JSON schema outputs in LM Studio (for validated responses) (#10929) - docs/my-website/docs/providers/lm_studio.md: add Structured Output section with JSON schema and Pydantic examples - litellm/llms/lm_studio/chat/transformation.py: extend map_openai_params to handle `response_format` mappings (`json_schema`, `json_object`) and move them to optional_params - litellm/utils.py: include `LM_STUDIO` in `supports_response_schema` list - tests/litellm/llms/lm_studio/test_lm_studio_chat_transformation.py: add tests for Pydantic model and dict-based JSON schema handling Co-authored-by: Earl St Sauver <estasuver@gmail.com> * update sambanova models and parameters (#10900) * add sambanova to completion input params table * update sambanova supported args * update sambanova supported models * minor changes * fix sambanova model list * update sambanova models * update sambanova models * update sambanova docs * minor chnage sambanova url * update type to match OpenAIGPTConfig * minor change * fix cohere rerank provider (#10822) * add skip server startup flag to cli (#10665) * add flag * fix ruff linting * add unit test * fix ruff errors * fix lintings issues * fix linting errors * add global noqa for print * Allow passed in vertex_ai credentials to be authorized_user type (#10899) * fix: handle DB_USER, DB_PASSWORD, DB_HOST problem I faced, since this… (#10842) * fix: handle DB_USER, DB_PASSWORD, DB_HOST problem I faced, since this could be with special character, so better be url encoded, similar problem also happen in DATABASE_URL * test: added the test cases * add: test case of url with sepcial character * add keys and members (#10950) * Update github.md (#10946) Updated clarification in the use of the models form github. (Github uses the model name: <company>/<model-Name> while litellm wants github/<model-Name> Updated the example to a model that is actually supported / available on github right now * Add new documentation files for LiteLLM (#10961) - Created `llms-full.txt` with comprehensive details on LiteLLM features, usage, and supported models. - Added `llms.txt` for quick access to key links and resources related to LiteLLM, including guides, release notes, and integration documentation. * [Fix] Invitation Email does not include the invitation link (#10958) * fix: email invites should link to the invitation * fix: email invites should link to the invitation * fix: email invites should link to the invitation * bump: litellm proxy extras * refactor(vertex_llm_base.py): remove check on credential project id - allow for cross credential calling * test: update test due to cohere ssl issues * fix: fix model param mapping * fix: update test to reflect change * Enable key reassignment on UI + Show 'updated at' column for key in all keys table (#10960) * feat(key_edit_view.tsx): initial commit enabling reassigning keys to teams * style(key_edit_view.tsx): cleaner implementation with teams in dropdown * fix(all_keys_table.tsx): set max width to keys column * feat(all_keys_table.tsx): show last updated at column for key * test: update tests * Litellm dev 05 19 2025 p3 (#10965) * feat(model_info_view.tsx): enable updating model info for existing models on UI Fixes LIT-154 * fix(model_info_view.tsx): instantly show model info updates on UI * feat(proxy_server.py): enable flag on `/models` to include model access groups This enables admin to assign model access groups to keys/teams on UI * feat(ui/): add model access groups on ui dropdown when creating teams + keys * refactor(parallel_request_limiter_v2.py): Migrate multi instance rate limiting to OSS Closes https://github.com/BerriAI/litellm/issues/10052 * Validate migrating keys to teams + Fix mistral image url on async translation (#10966) * feat(key_management_endpoints.py): add validation checks for migrating key to team Ensures requests with migrated key can actually succeed Prevent migrated keys from failing in prod due to team missing required permissions * fix(mistral/): fix image url handling for mistral on async call * fix(key_management_endpoints.py): improve check for running team validation on key update * bump: version 1.70.1 → 1.70.2 * test: update test * build(ui/): new ui build * add cla to docs (#10963) * add cla to docs * cla docs clarity * build: ui/ new build * [Fix] List Guardrails - Show config.yaml guardrails on litellm ui (#10959) * fix: listing guardrails defined on litellm config * fix: list guardrails on litellm config * fix: list guardrails on litellm config * test: list guardrails on litellm config * fix: linting * Update litellm/proxy/guardrails/guardrail_endpoints.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: GuardrailInfoLiteLLMParamsResponse --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: vertex show clear exception on failed refresh (#10969) * fix: vertex show clear exception on failed refresh * fix: show clear debug log * docs: cleanup * test: update tests * test: skip test - model EOL * [Feature] Add supports_computer_use to the model list (#10881) * Add support for supports_computer_use in model info * Corrected list of supports_computer_use models * Further fix computer use compatible claude models, fix existing test that predated supports_computer_use in the model list * Move computer use test case into existing test_utils file * Moved tests in to test_utils.py * [Feat] - Add Support for Showing Passthrough endpoint Error Logs on LiteLLM UI (#10990) * fix: add error logging for passthrough endpoints * feat: add error logging for passthrough endpoints * fix: post_call_failure_hook track errors on pt * fix: use constant for MAXIMUM_TRACEBACK_LINES_TO_LOG * docs MAXIMUM_TRACEBACK_LINES_TO_LOG * test: ensure failure callback triggered * fix: move _init_kwargs_for_pass_through_endpoint * added support to credential delete to support slashes in the curl (#10987) * added support to credential delete to support slashes in the curl * add support for get and update too * Add new gemini preview models + Fix cohere v2 embedding 'embedding_types' param mapping (#10991) * build(model_prices_and_context_window.json): add new gemini preview models Fixes https://github.com/BerriAI/litellm/issues/10985 * fix(cohere/embed): Fix encoding format <-> embedding types param mapping Fixes https://github.com/BerriAI/litellm/issues/10939 * fix(aim.py): fix syntax error * Litellm add new gemini models (#10998) * build(model_prices_and_context_window.json): add new gemini image gen model * build(model_prices_and_context_window.json): add more gemini models * [Feat] Prometheus - Track `route` on proxy_* metrics (#10992) * fix: trace route on prometheus metrics * fix: show route on prometheus metrics for total fails * test: trace route on metrics * fix: tests for route in prom metrics * test: fix test metrics * test: fix test_proxy_failure_metrics * fix: default role for JWT authentication (#10995) * fix: get_user_object * test: test_default_internal_user_params_with_get_user_object * Update litellm/proxy/auth/auth_checks.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix(internal_user_endpoints.py): allow resetting spend/max budget on … (#10993) * fix(internal_user_endpoints.py): allow resetting spend/max budget on user update Fixes https://github.com/BerriAI/litellm/issues/10495 * fix(internal_user_endpoints.py): correctly return set spend for user on /user/new * fix(auth_checks.py): check redis for key object before checking in-memory allows for quicker updates * feat(internal_user_endpoints.py): update cache object when user is updated + check redis on user values being updated * fix(auth_checks.py): use redis cache when user updated * fix: set default value of 'expires' to None * bump: version 1.70.2 → 1.70.3 * Improve response_id propagation logic and add tests for valid/empty ID handling in streaming. (#11006) * support vertex_ai global endpoints for chat (#10658) * fix(internal_user_endpoints.py): fix check * Ollama wildcard support (#10982) * Add Ollama wildcard support * Add Ollama-chatas well. * Fix missing methods. * Improve logs a bit. * Add tests * Add tests * spend rounded to 4 (#11013) * fix: fix linting error * fix(streaming_handler.py): fix check when response id already set * put organization and team buttons at the top (#10948) * feat: add xai/grok-3 pricing (#11028) * [Feat] Add Image Edits Support to LiteLLM (#11020) * refactor: use 1 file for image methods * refactor: use 1 file for image methods * feat: add stubs for image edits * fix: types for image edits * feat: add async image edits * feat: add base config for image edits * feat: add basic structure for image edits * feat: add ImageEditRequestUtils * feat: complete instrumentation of image edits * tes: test_openai_image_edit_litellm_sdk * tets: test_openai_image_edit_litellm_sdk * feat: get_provider_image_edit_config * feat: add OpenAIImageEditConfig * feat: working image edits * fixes: working image edits * fix: code qa * fix: using image edits * fix: linting errors * Updating the available VoyageAI models in the docs (#11003) * Refresh VoyageAI models and prices and context * Refresh VoyageAI models and prices and context * Refresh VoyageAI models and prices and context * Updating the available VoyageAI models in the docs * Updating the available VoyageAI models in the docs * fix(ui): call tool when no arguments needed (#11012) Co-authored-by: wagnerjt <wagnerjt@github.com> * Verbose error on admin add (#10978) * Spend rounded to 4 for Organizations and Users page (#11023) * spend rounded to 4 * fixed for organization and users table * Fix: Handle dict objects in Anthropic streaming response (#11032) * fix: handle dict objects in Anthropic streaming response Fix issue where dictionary objects in Anthropic streaming responses were not properly converted to SSE format strings before being yielded, causing AttributeError: 'dict' object has no attribute 'encode' * fix: refactor Anthropic streaming response handling - Added STREAM_SSE_DATA_PREFIX constant in constants.py - Created return_anthropic_chunk helper function for better maintainability - Using safe_dumps from safe_json_dumps.py for improved JSON serialization - Added unit test for dictionary object handling in streaming response * fix: correct patch path in anthropic_endpoints test * feat: add Databricks Llama 4 Maverick model cost (#11008) Co-authored-by: Tommy PLANEL <tommy.planel2@ubisoft.com> * test: mark flaky test * Litellm dev 05 21 2025 p2 (#11039) * feat: initial commit adding managed file support to fine tuning endpoints * feat(fine_tuning/endpoints.py): working call to openai finetuning route Uses litellm managed files for finetuning api support * feat(fine-tuning/main.py): refactor to use LiteLLMFineTuningJob pydantic object includes 'hidden_params' * fix: initial commit adding unified finetuning id support return a unified finetuning id we can use to understand which deployment to route the ft request to * test: fix test * feat(managed_files.py): return unified finetuning job id on create finetuning job enables retrieve, delete to work with litellm managed files * test: update test * fix: fix linting error * fix: fix ruff linting error * test: fix check * Fixes the InvitationLink Prisma find_many query (#11031) Related: |
||
|---|---|---|
| .circleci | ||
| .devcontainer | ||
| .github | ||
| ci_cd | ||
| cookbook | ||
| db_scripts | ||
| deploy | ||
| dist | ||
| docker | ||
| docs/my-website | ||
| enterprise | ||
| litellm | ||
| litellm-js | ||
| litellm-proxy-extras | ||
| tests | ||
| ui/litellm-dashboard | ||
| .dockerignore | ||
| .env.example | ||
| .flake8 | ||
| .git-blame-ignore-revs | ||
| .gitattributes | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| codecov.yaml | ||
| docker-compose.yml | ||
| Dockerfile | ||
| index.yaml | ||
| LICENSE | ||
| Makefile | ||
| mcp_servers.json | ||
| model_prices_and_context_window.json | ||
| package-lock.json | ||
| package.json | ||
| poetry.lock | ||
| prometheus.yml | ||
| proxy_server_config.yaml | ||
| pyproject.toml | ||
| pyrightconfig.json | ||
| README.md | ||
| render.yaml | ||
| requirements.txt | ||
| ruff.toml | ||
| schema.prisma | ||
| security.md | ||
🚅 LiteLLM
Call all LLM APIs using the OpenAI format [Bedrock, Huggingface, VertexAI, TogetherAI, Azure, OpenAI, Groq etc.]
LiteLLM Proxy Server (LLM Gateway) | Hosted Proxy (Preview) | Enterprise Tier
LiteLLM manages:
- Translate inputs to provider's
completion,embedding, andimage_generationendpoints - Consistent output, text responses will always be available at
['choices'][0]['message']['content'] - Retry/fallback logic across multiple deployments (e.g. Azure/OpenAI) - Router
- Set Budgets & Rate limits per project, api key, model LiteLLM Proxy Server (LLM Gateway)
Jump to LiteLLM Proxy (LLM Gateway) Docs
Jump to Supported LLM Providers
🚨 Stable Release: Use docker images with the -stable tag. These have undergone 12 hour load tests, before being published. More information about the release cycle here
Support for more providers. Missing a provider or LLM Platform, raise a feature request.
Usage (Docs)
Important
LiteLLM v1.0.0 now requires
openai>=1.0.0. Migration guide here
LiteLLM v1.40.14+ now requirespydantic>=2.0.0. No changes required.
pip install litellm
from litellm import completion
import os
## set ENV variables
os.environ["OPENAI_API_KEY"] = "your-openai-key"
os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-key"
messages = [{ "content": "Hello, how are you?","role": "user"}]
# openai call
response = completion(model="openai/gpt-4o", messages=messages)
# anthropic call
response = completion(model="anthropic/claude-3-sonnet-20240229", messages=messages)
print(response)
Response (OpenAI Format)
{
"id": "chatcmpl-565d891b-a42e-4c39-8d14-82a1f5208885",
"created": 1734366691,
"model": "claude-3-sonnet-20240229",
"object": "chat.completion",
"system_fingerprint": null,
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Hello! As an AI language model, I don't have feelings, but I'm operating properly and ready to assist you with any questions or tasks you may have. How can I help you today?",
"role": "assistant",
"tool_calls": null,
"function_call": null
}
}
],
"usage": {
"completion_tokens": 43,
"prompt_tokens": 13,
"total_tokens": 56,
"completion_tokens_details": null,
"prompt_tokens_details": {
"audio_tokens": null,
"cached_tokens": 0
},
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0
}
}
Call any model supported by a provider, with model=<provider_name>/<model_name>. There might be provider-specific details here, so refer to provider docs for more information
Async (Docs)
from litellm import acompletion
import asyncio
async def test_get_response():
user_message = "Hello, how are you?"
messages = [{"content": user_message, "role": "user"}]
response = await acompletion(model="openai/gpt-4o", messages=messages)
return response
response = asyncio.run(test_get_response())
print(response)
Streaming (Docs)
liteLLM supports streaming the model response back, pass stream=True to get a streaming iterator in response.
Streaming is supported for all models (Bedrock, Huggingface, TogetherAI, Azure, OpenAI, etc.)
from litellm import completion
response = completion(model="openai/gpt-4o", messages=messages, stream=True)
for part in response:
print(part.choices[0].delta.content or "")
# claude 2
response = completion('anthropic/claude-3-sonnet-20240229', messages, stream=True)
for part in response:
print(part)
Response chunk (OpenAI Format)
{
"id": "chatcmpl-2be06597-eb60-4c70-9ec5-8cd2ab1b4697",
"created": 1734366925,
"model": "claude-3-sonnet-20240229",
"object": "chat.completion.chunk",
"system_fingerprint": null,
"choices": [
{
"finish_reason": null,
"index": 0,
"delta": {
"content": "Hello",
"role": "assistant",
"function_call": null,
"tool_calls": null,
"audio": null
},
"logprobs": null
}
]
}
Logging Observability (Docs)
LiteLLM exposes pre defined callbacks to send data to Lunary, MLflow, Langfuse, DynamoDB, s3 Buckets, Helicone, Promptlayer, Traceloop, Athina, Slack
from litellm import completion
## set env variables for logging tools (when using MLflow, no API key set up is required)
os.environ["LUNARY_PUBLIC_KEY"] = "your-lunary-public-key"
os.environ["HELICONE_API_KEY"] = "your-helicone-auth-key"
os.environ["LANGFUSE_PUBLIC_KEY"] = ""
os.environ["LANGFUSE_SECRET_KEY"] = ""
os.environ["ATHINA_API_KEY"] = "your-athina-api-key"
os.environ["OPENAI_API_KEY"] = "your-openai-key"
# set callbacks
litellm.success_callback = ["lunary", "mlflow", "langfuse", "athina", "helicone"] # log input/output to lunary, langfuse, supabase, athina, helicone etc
#openai call
response = completion(model="openai/gpt-4o", messages=[{"role": "user", "content": "Hi 👋 - i'm openai"}])
LiteLLM Proxy Server (LLM Gateway) - (Docs)
Track spend + Load Balance across multiple projects
The proxy provides:
📖 Proxy Endpoints - Swagger Docs
Quick Start Proxy - CLI
pip install 'litellm[proxy]'
Step 1: Start litellm proxy
$ litellm --model huggingface/bigcode/starcoder
#INFO: Proxy running on http://0.0.0.0:4000
Step 2: Make ChatCompletions Request to Proxy
Important
import openai # openai v1.0.0+
client = openai.OpenAI(api_key="anything",base_url="http://0.0.0.0:4000") # set proxy to base_url
# request sent to model set on litellm proxy, `litellm --model`
response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
{
"role": "user",
"content": "this is a test request, write a short poem"
}
])
print(response)
Proxy Key Management (Docs)
Connect the proxy with a Postgres DB to create proxy keys
# Get the code
git clone https://github.com/BerriAI/litellm
# Go to folder
cd litellm
# Add the master key - you can change this after setup
echo 'LITELLM_MASTER_KEY="sk-1234"' > .env
# Add the litellm salt key - you cannot change this after adding a model
# It is used to encrypt / decrypt your LLM API Key credentials
# We recommend - https://1password.com/password-generator/
# password generator to get a random hash for litellm salt key
echo 'LITELLM_SALT_KEY="sk-1234"' > .env
source .env
# Start
docker-compose up
UI on /ui on your proxy server
Set budgets and rate limits across multiple projects
POST /key/generate
Request
curl 'http://0.0.0.0:4000/key/generate' \
--header 'Authorization: Bearer sk-1234' \
--header 'Content-Type: application/json' \
--data-raw '{"models": ["gpt-3.5-turbo", "gpt-4", "claude-2"], "duration": "20m","metadata": {"user": "ishaan@berri.ai", "team": "core-infra"}}'
Expected Response
{
"key": "sk-kdEXbIqZRwEeEiHwdg7sFA", # Bearer token
"expires": "2023-11-19T01:38:25.838000+00:00" # datetime object
}
Supported Providers (Docs)
| Provider | Completion | Streaming | Async Completion | Async Streaming | Async Embedding | Async Image Generation |
|---|---|---|---|---|---|---|
| openai | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Meta - Llama API | ✅ | ✅ | ✅ | ✅ | ||
| azure | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| AI/ML API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| aws - sagemaker | ✅ | ✅ | ✅ | ✅ | ✅ | |
| aws - bedrock | ✅ | ✅ | ✅ | ✅ | ✅ | |
| google - vertex_ai | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| google - palm | ✅ | ✅ | ✅ | ✅ | ||
| google AI Studio - gemini | ✅ | ✅ | ✅ | ✅ | ||
| mistral ai api | ✅ | ✅ | ✅ | ✅ | ✅ | |
| cloudflare AI Workers | ✅ | ✅ | ✅ | ✅ | ||
| cohere | ✅ | ✅ | ✅ | ✅ | ✅ | |
| anthropic | ✅ | ✅ | ✅ | ✅ | ||
| empower | ✅ | ✅ | ✅ | ✅ | ||
| huggingface | ✅ | ✅ | ✅ | ✅ | ✅ | |
| replicate | ✅ | ✅ | ✅ | ✅ | ||
| together_ai | ✅ | ✅ | ✅ | ✅ | ||
| openrouter | ✅ | ✅ | ✅ | ✅ | ||
| ai21 | ✅ | ✅ | ✅ | ✅ | ||
| baseten | ✅ | ✅ | ✅ | ✅ | ||
| vllm | ✅ | ✅ | ✅ | ✅ | ||
| nlp_cloud | ✅ | ✅ | ✅ | ✅ | ||
| aleph alpha | ✅ | ✅ | ✅ | ✅ | ||
| petals | ✅ | ✅ | ✅ | ✅ | ||
| ollama | ✅ | ✅ | ✅ | ✅ | ✅ | |
| deepinfra | ✅ | ✅ | ✅ | ✅ | ||
| perplexity-ai | ✅ | ✅ | ✅ | ✅ | ||
| Groq AI | ✅ | ✅ | ✅ | ✅ | ||
| Deepseek | ✅ | ✅ | ✅ | ✅ | ||
| anyscale | ✅ | ✅ | ✅ | ✅ | ||
| IBM - watsonx.ai | ✅ | ✅ | ✅ | ✅ | ✅ | |
| voyage ai | ✅ | |||||
| xinference [Xorbits Inference] | ✅ | |||||
| FriendliAI | ✅ | ✅ | ✅ | ✅ | ||
| Galadriel | ✅ | ✅ | ✅ | ✅ | ||
| Novita AI | ✅ | ✅ | ✅ | ✅ | ||
| Featherless AI | ✅ | ✅ | ✅ | ✅ | ||
| Read the Docs |
Contributing
Interested in contributing? Contributions to LiteLLM Python SDK, Proxy Server, and contributing LLM integrations are both accepted and highly encouraged! See our Contribution Guide for more details
Enterprise
For companies that need better security, user management and professional support
This covers:
- ✅ Features under the LiteLLM Commercial License:
- ✅ Feature Prioritization
- ✅ Custom Integrations
- ✅ Professional Support - Dedicated discord + slack
- ✅ Custom SLAs
- ✅ Secure access with Single Sign-On
Code Quality / Linting
LiteLLM follows the Google Python Style Guide.
We run:
- Ruff for formatting and linting checks
- Mypy + Pyright for typing 1, 2
- Black for formatting
- isort for import sorting
If you have suggestions on how to improve the code quality feel free to open an issue or a PR.
Support / talk with founders
- Schedule Demo 👋
- Community Discord 💭
- Our numbers 📞 +1 (770) 8783-106 / +1 (412) 618-6238
- Our emails ✉️ ishaan@berri.ai / krrish@berri.ai
Why did we build this
- Need for simplicity: Our code started to get extremely complicated managing & translating calls between Azure, OpenAI and Cohere.
Contributors
Run in Developer mode
Services
- Setup .env file in root
- Run dependant services
docker-compose up db prometheus
Backend
- (In root) create virtual environment
python -m venv .venv - Activate virtual environment
source .venv/bin/activate - Install dependencies
pip install -e ".[all]" - Start proxy backend
uvicorn litellm.proxy.proxy_server:app --host localhost --port 4000 --reload
Frontend
- Navigate to
ui/litellm-dashboard - Install dependencies
npm install - Run
npm run devto start the dashboard