mirror of
https://github.com/BerriAI/litellm.git
synced 2026-10-10 03:28:53 +00:00
docs(simple_proxy.md): add tutorial on handling multiple instances of 1 model
This commit is contained in:
parent
d6ad62d793
commit
fcc250b312
2 changed files with 28 additions and 239 deletions
|
|
@ -549,7 +549,7 @@ general_settings:
|
|||
master_key: sk-1234 # [OPTIONAL] Only use this if you to require all calls to contain this key (Authorization: Bearer sk-1234)
|
||||
```
|
||||
|
||||
### Quick Start - Config
|
||||
### Multiple Models - Quick Start
|
||||
|
||||
Here's how you can use multiple llms with one proxy `config.yaml`.
|
||||
|
||||
|
|
@ -601,6 +601,8 @@ curl --location 'http://0.0.0.0:8000/chat/completions' \
|
|||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### Save Model-specific params (API Base, API Keys, Temperature, Headers etc.)
|
||||
You can use the config to save model-specific information like api_base, api_key, temperature, max_tokens, etc.
|
||||
|
||||
|
|
@ -654,6 +656,31 @@ model_list:
|
|||
model: ollama/llama2
|
||||
```
|
||||
|
||||
### Multiple Instances of 1 model
|
||||
|
||||
If you have multiple instances of the same model,
|
||||
|
||||
in the `config.yaml` just add all of them with the same 'model_name', and the proxy will handle routing requests (using LiteLLM's Router).
|
||||
|
||||
In the config below requests with `model=zephyr-beta` will be routed across multiple instances of `HuggingFaceH4/zephyr-7b-beta`
|
||||
|
||||
```yaml
|
||||
model_list:
|
||||
- model_name: zephyr-beta
|
||||
litellm_params:
|
||||
model: huggingface/HuggingFaceH4/zephyr-7b-beta
|
||||
api_base: http://0.0.0.0:8001
|
||||
- model_name: zephyr-beta
|
||||
litellm_params:
|
||||
model: huggingface/HuggingFaceH4/zephyr-7b-beta
|
||||
api_base: http://0.0.0.0:8002
|
||||
- model_name: zephyr-beta
|
||||
litellm_params:
|
||||
model: huggingface/HuggingFaceH4/zephyr-7b-beta
|
||||
api_base: http://0.0.0.0:8003
|
||||
```
|
||||
|
||||
|
||||
### Set Custom Prompt Templates
|
||||
|
||||
LiteLLM by default checks if a model has a [prompt template and applies it](./completion/prompt_formatting.md) (e.g. if a huggingface model has a saved chat template in it's tokenizer_config.json). However, you can also set a custom prompt template on your proxy in the `config.yaml`:
|
||||
|
|
@ -867,222 +894,3 @@ Expected output on Langfuse
|
|||
```
|
||||
|
||||
|
||||
|
||||
<!--
|
||||
## Tutorials (Chat-UI, NeMO-Guardrails, PromptTools, Phoenix ArizeAI, Langchain, ragas, LlamaIndex, etc.)
|
||||
|
||||
**Start server:**
|
||||
```shell
|
||||
`docker run -e PORT=8000 -p 8000:8000 ghcr.io/berriai/litellm:latest`
|
||||
```
|
||||
The server is now live on http://0.0.0.0:8000
|
||||
|
||||
<Tabs>
|
||||
<TabItem value="chat-ui" label="Chat UI">
|
||||
|
||||
Here's the `docker-compose.yml` for running LiteLLM Server with Mckay Wrigley's Chat-UI:
|
||||
```yaml
|
||||
version: '3'
|
||||
services:
|
||||
container1:
|
||||
image: ghcr.io/berriai/litellm:latest
|
||||
ports:
|
||||
- '8000:8000'
|
||||
environment:
|
||||
- PORT=8000
|
||||
- OPENAI_API_KEY=<your-openai-key>
|
||||
|
||||
container2:
|
||||
image: ghcr.io/mckaywrigley/chatbot-ui:main
|
||||
ports:
|
||||
- '3000:3000'
|
||||
environment:
|
||||
- OPENAI_API_KEY=my-fake-key
|
||||
- OPENAI_API_HOST=http://container1:8000
|
||||
```
|
||||
|
||||
Run this via:
|
||||
```shell
|
||||
docker-compose up
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="nemo-guardrails" label="NeMO-Guardrails">
|
||||
|
||||
#### Adding NeMO-Guardrails to Bedrock
|
||||
|
||||
1. Start server
|
||||
```shell
|
||||
`docker run -e PORT=8000 -e AWS_ACCESS_KEY_ID=<your-aws-access-key> -e AWS_SECRET_ACCESS_KEY=<your-aws-secret-key> -p 8000:8000 ghcr.io/berriai/litellm:latest`
|
||||
```
|
||||
|
||||
2. Install dependencies
|
||||
```shell
|
||||
pip install nemoguardrails langchain
|
||||
```
|
||||
|
||||
3. Run script
|
||||
```python
|
||||
import openai
|
||||
from langchain.chat_models import ChatOpenAI
|
||||
|
||||
llm = ChatOpenAI(model_name="bedrock/anthropic.claude-v2", openai_api_base="http://0.0.0.0:8000", openai_api_key="my-fake-key")
|
||||
|
||||
from nemoguardrails import LLMRails, RailsConfig
|
||||
|
||||
config = RailsConfig.from_path("./config.yml")
|
||||
app = LLMRails(config, llm=llm)
|
||||
|
||||
new_message = app.generate(messages=[{
|
||||
"role": "user",
|
||||
"content": "Hello! What can you do for me?"
|
||||
}])
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="prompttools" label="PromptTools">
|
||||
|
||||
Use [PromptTools](https://github.com/hegelai/prompttools) for evaluating different LLMs
|
||||
|
||||
1. Start server
|
||||
```shell
|
||||
`docker run -e PORT=8000 -p 8000:8000 ghcr.io/berriai/litellm:latest`
|
||||
```
|
||||
|
||||
2. Install dependencies
|
||||
```python
|
||||
pip install prompttools
|
||||
```
|
||||
|
||||
3. Run script
|
||||
```python
|
||||
import os
|
||||
os.environ['DEBUG']="" # Set this to "" to call OpenAI's API
|
||||
os.environ['AZURE_OPENAI_KEY'] = "my-api-key" # Insert your key here
|
||||
|
||||
from typing import Dict, List
|
||||
from prompttools.experiment import OpenAIChatExperiment
|
||||
|
||||
models = ["gpt-3.5-turbo", "gpt-3.5-turbo-0613"]
|
||||
messages = [
|
||||
[
|
||||
{"role": "system", "content": "You are a helpful assistant."},
|
||||
{"role": "user", "content": "Who was the first president?"},
|
||||
]
|
||||
]
|
||||
temperatures = [0.0, 1.0]
|
||||
# You can add more parameters that you'd like to test here.
|
||||
|
||||
experiment = OpenAIChatExperiment(models, messages, temperature=temperatures, azure_openai_service_configs={"AZURE_OPENAI_ENDPOINT": "http://0.0.0.0:8000", "API_TYPE": "azure", "API_VERSION": "2023-05-15"})
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="phoenix-arizeai" label="ArizeAI">
|
||||
|
||||
Use [Arize AI's LLM Evals](https://github.com/Arize-ai/phoenix#llm-evals) to evaluate different LLMs
|
||||
|
||||
1. Start server
|
||||
```shell
|
||||
`docker run -e PORT=8000 -p 8000:8000 ghcr.io/berriai/litellm:latest`
|
||||
```
|
||||
|
||||
2. Use this LLM Evals Quickstart colab
|
||||
[](https://colab.research.google.com/github/Arize-ai/phoenix/blob/main/tutorials/evals/evaluate_relevance_classifications.ipynb)
|
||||
|
||||
3. Call the model
|
||||
```python
|
||||
import openai
|
||||
|
||||
## SET API BASE + PROVIDER KEY
|
||||
openai.api_base = "http://0.0.0.0:8000
|
||||
openai.api_key = "my-anthropic-key"
|
||||
|
||||
## CALL MODEL
|
||||
model = OpenAIModel(
|
||||
model_name="claude-2",
|
||||
temperature=0.0,
|
||||
)
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="langchain" label="Langchain">
|
||||
|
||||
```python
|
||||
from langchain.chat_models import ChatOpenAI
|
||||
from langchain.prompts.chat import (
|
||||
ChatPromptTemplate,
|
||||
SystemMessagePromptTemplate,
|
||||
AIMessagePromptTemplate,
|
||||
HumanMessagePromptTemplate,
|
||||
)
|
||||
from langchain.schema import AIMessage, HumanMessage, SystemMessage
|
||||
|
||||
chat = ChatOpenAI(model_name="claude-instant-1", openai_api_key="my-anthropic-key", openai_api_base="http://0.0.0.0:8000")
|
||||
|
||||
messages = [
|
||||
SystemMessage(
|
||||
content="You are a helpful assistant that translates English to French."
|
||||
),
|
||||
HumanMessage(
|
||||
content="Translate this sentence from English to French. I love programming."
|
||||
),
|
||||
]
|
||||
chat(messages)
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="ragas" label="ragas">
|
||||
|
||||
#### Evaluating with Open-Source LLMs
|
||||
|
||||
Use [Ragas](https://github.com/explodinggradients/ragas/blob/7b123533df80d0ada33a2cb2dd2fdedf36807f33/docs/howtos/customisations/llms.ipynb#L247) to evaluate LLMs for RAG-scenarios.
|
||||
```python
|
||||
from langchain.chat_models import ChatOpenAI
|
||||
|
||||
inference_server_url = "http://localhost:8080/v1"
|
||||
|
||||
chat = ChatOpenAI(
|
||||
model="bedrock/anthropic.claude-v2",
|
||||
openai_api_key="no-key",
|
||||
openai_api_base=inference_server_url,
|
||||
max_tokens=5,
|
||||
temperature=0,
|
||||
)
|
||||
|
||||
from ragas.metrics import (
|
||||
context_precision,
|
||||
answer_relevancy,
|
||||
faithfulness,
|
||||
context_recall,
|
||||
)
|
||||
from ragas.metrics.critique import harmfulness
|
||||
|
||||
# change the LLM
|
||||
|
||||
faithfulness.llm.langchain_llm = chat
|
||||
answer_relevancy.llm.langchain_llm = chat
|
||||
context_precision.llm.langchain_llm = chat
|
||||
context_recall.llm.langchain_llm = chat
|
||||
harmfulness.llm.langchain_llm = chat
|
||||
|
||||
|
||||
# evaluate
|
||||
from ragas import evaluate
|
||||
|
||||
result = evaluate(
|
||||
fiqa_eval["baseline"].select(range(5)), # showing only 5 for demonstration
|
||||
metrics=[faithfulness],
|
||||
)
|
||||
|
||||
result
|
||||
```
|
||||
</TabItem>
|
||||
<TabItem value="llama_index" label="Llama Index">
|
||||
|
||||
```python
|
||||
!pip install llama-index
|
||||
```
|
||||
```python
|
||||
from llama_index.llms import OpenAI
|
||||
|
||||
response = OpenAI(model="claude-2", api_key="your-anthropic-key",api_base="http://0.0.0.0:8000").complete('Paul Graham is ')
|
||||
print(response)
|
||||
```
|
||||
</TabItem>
|
||||
</Tabs> -->
|
||||
|
||||
|
|
|
|||
|
|
@ -1,19 +0,0 @@
|
|||
### KEYS ###
|
||||
# HUGGINGFACE_API_KEY="" # Uncomment to save your Hugging Face API key
|
||||
# OPENAI_API_KEY="" # Uncomment to save your OpenAI API Key
|
||||
# TOGETHERAI_API_KEY="" # Uncomment to save your TogetherAI API key
|
||||
# NLP_CLOUD_API_KEY="" # Uncomment to save your NLP Cloud API key
|
||||
# ANTHROPIC_API_KEY="" # Uncomment to save your Anthropic API key
|
||||
|
||||
### MODEL CUSTOM PROMPT TEMPLATE ###
|
||||
# MODEL_SYSTEM_MESSAGE_START_TOKEN = "<|prompter|>" # This does not need to be a token, can be any string
|
||||
# MODEL_SYSTEM_MESSAGE_END_TOKEN = "<|endoftext|>" # This does not need to be a token, can be any string
|
||||
|
||||
# MODEL_USER_MESSAGE_START_TOKEN = "<|prompter|>" # This does not need to be a token, can be any string
|
||||
# MODEL_USER_MESSAGE_END_TOKEN = "<|endoftext|>" # Applies only to user messages. Can be any string.
|
||||
|
||||
# MODEL_ASSISTANT_MESSAGE_START_TOKEN = "<|prompter|>" # Applies only to assistant messages. Can be any string.
|
||||
# MODEL_ASSISTANT_MESSAGE_END_TOKEN = "<|endoftext|>" # Applies only to system messages. Can be any string.
|
||||
|
||||
# MODEL_PRE_PROMPT = "You are a good bot" # Applied at the start of the prompt
|
||||
# MODEL_POST_PROMPT = "Now answer as best as you can" # Applied at the end of the prompt
|
||||
Loading…
Add table
Reference in a new issue