* fix(bedrock): send batch jobs to a configured control-plane endpoint
Bedrock batch create, retrieve and cancel always built the regional
bedrock.{region} host, so a VPC endpoint or compatible gateway could not
be used. Add aws_bedrock_control_plane_endpoint as a deployment setting
read by the signed HTTP path and the boto3 path, carry it through the
proxy credential filter, and refuse it in request bodies like the other
endpoint overrides. api_base stays out of it because on a Bedrock
deployment it points at the runtime host.
Fixes #45056
* fix(bedrock): read the control-plane endpoint from typed kwargs in job status
The named parameter added one unknown-argument error in litellm/batches/main.py,
which unpacks untyped kwargs into this function
* docs(bedrock): explain batch control-plane endpoint configuration
* fix(bedrock): keep the batch control-plane endpoint out of chat request bodies
A deployment that sets aws_bedrock_control_plane_endpoint also serves chat,
and the unregistered key was swept into the Bedrock request body, so every
chat call on it failed with "Extra inputs are not permitted". Register it
with the other Bedrock batch connection fields so it stays a LiteLLM-owned
kwarg on every route while batches still read it from litellm_params.
* test(bedrock): verify endpoint signatures without internal mocks
---------
Co-authored-by: mateo-berri <277851410+mateo-berri@users.noreply.github.com>
|
||
|---|---|---|
| .. | ||
| batch_api/bedrock | ||
| grafana_dashboard | ||
| mcp | ||
| secret_manager | ||
| braintrust_prompt_wrapper_README.md | ||
| braintrust_prompt_wrapper_server.py | ||
| cli_token_usage.py | ||
| readme.md | ||
liteLLM Proxy Server: 50+ LLM Models, Error Handling, Caching
Azure, Llama2, OpenAI, Claude, Hugging Face, Replicate Models
What does liteLLM proxy do
-
Make
/chat/completionsrequests for 50+ LLM models Azure, OpenAI, Replicate, Anthropic, Hugging FaceExample: for
modeluseclaude-2,gpt-3.5,gpt-4,command-nightly,stabilityai/stablecode-completion-alpha-3b-4k{ "model": "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1", "messages": [ { "content": "Hello, whats the weather in San Francisco??", "role": "user" } ] } -
Consistent Input/Output Format
- Call all models using the OpenAI format -
completion(model, messages) - Text responses will always be available at
['choices'][0]['message']['content']
- Call all models using the OpenAI format -
-
Error Handling Using Model Fallbacks (if
GPT-4fails, tryllama2) -
Logging - Log Requests, Responses and Errors to
Supabase,Posthog,Mixpanel,Sentry,Lunary,Athina,Helicone(Any of the supported providers here: https://litellm.readthedocs.io/en/latest/advanced/Example: Logs sent to Supabase
-
Token Usage & Spend - Track Input + Completion tokens used + Spend/model
-
Caching - Implementation of Semantic Caching
-
Streaming & Async Support - Return generators to stream text responses
API Endpoints
/chat/completions (POST)
This endpoint is used to generate chat completions for 50+ support LLM API Models. Use llama2, GPT-4, Claude2 etc
Input
This API endpoint accepts all inputs in raw JSON and expects the following inputs
model(string, required): ID of the model to use for chat completions. See all supported models [here]: (https://litellm.readthedocs.io/en/latest/supported/): eggpt-3.5-turbo,gpt-4,claude-2,command-nightly,stabilityai/stablecode-completion-alpha-3b-4kmessages(array, required): A list of messages representing the conversation context. Each message should have arole(system, user, assistant, or function),content(message text), andname(for function role).- Additional Optional parameters:
temperature,functions,function_call,top_p,n,stream. See the full list of supported inputs here: https://litellm.readthedocs.io/en/latest/input/
Example JSON body
For claude-2
{
"model": "claude-2",
"messages": [
{
"content": "Hello, whats the weather in San Francisco??",
"role": "user"
}
]
}
Making an API request to the Proxy Server
import requests
import json
# TODO: use your URL
url = "http://localhost:5000/chat/completions"
payload = json.dumps({
"model": "gpt-3.5-turbo",
"messages": [
{
"content": "Hello, whats the weather in San Francisco??",
"role": "user"
}
]
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
Output [Response Format]
Responses from the server are given in the following format. All responses from the server are returned in the following format (for all LLM models). More info on output here: https://litellm.readthedocs.io/en/latest/output/
{
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "I'm sorry, but I don't have the capability to provide real-time weather information. However, you can easily check the weather in San Francisco by searching online or using a weather app on your phone.",
"role": "assistant"
}
}
],
"created": 1691790381,
"id": "chatcmpl-7mUFZlOEgdohHRDx2UpYPRTejirzb",
"model": "gpt-3.5-turbo-0613",
"object": "chat.completion",
"usage": {
"completion_tokens": 41,
"prompt_tokens": 16,
"total_tokens": 57
}
}
Installation & Usage
Running Locally
- Clone liteLLM repository to your local machine:
git clone https://github.com/BerriAI/liteLLM-proxy - Install the required dependencies using pip
pip install -r requirements.txt - Set your LLM API keys
os.environ['OPENAI_API_KEY]` = "YOUR_API_KEY" or set OPENAI_API_KEY in your .env file - Run the server:
python main.py
Deploying
-
Quick Start: Deploy on Railway
-
GCP,AWS,AzureThis project includes aDockerfileallowing you to build and deploy a Docker Project on your providers
Support / Talk with founders
- Our calendar 👋
- Community Discord 💭
- Our emails ✉️ ishaan@berri.ai / krrish@berri.ai
Roadmap
- Support hosted db (e.g. Supabase)
- Easily send data to places like posthog and sentry.
- Add a hot-cache for project spend logs - enables fast checks for user + project limitings
- Implement user-based rate-limiting
- Spending controls per project - expose key creation endpoint
- Need to store a keys db -> mapping created keys to their alias (i.e. project name)
- Easily add new models as backups / as the entry-point (add this to the available model list)