forked from phoenix/litellm-mirror
* docs(config_settings.md): document all router_settings * ci(config.yml): add router_settings doc test to ci/cd * test: debug test on ci/cd * test: debug ci/cd test * test: fix test * fix(team_endpoints.py): skip invalid team object. don't fail `/team/list` call Causes downstream errors if ui just fails to load team list * test(base_llm_unit_tests.py): add 'response_format={"type": "text"}' test to base_llm_unit_tests adds complete coverage for all 'response_format' values to ci/cd * feat(router.py): support wildcard routes in `get_router_model_info()` Addresses https://github.com/BerriAI/litellm/issues/6914 * build(model_prices_and_context_window.json): add tpm/rpm limits for all gemini models Allows for ratelimit tracking for gemini models even with wildcard routing enabled Addresses https://github.com/BerriAI/litellm/issues/6914 * feat(router.py): add tpm/rpm tracking on success/failure to global_router Addresses https://github.com/BerriAI/litellm/issues/6914 * feat(router.py): support wildcard routes on router.get_model_group_usage() * fix(router.py): fix linting error * fix(router.py): implement get_remaining_tokens_and_requests Addresses https://github.com/BerriAI/litellm/issues/6914 * fix(router.py): fix linting errors * test: fix test * test: fix tests * docs(config_settings.md): add missing dd env vars to docs * fix(router.py): check if hidden params is dict
140 lines
3.9 KiB
Markdown
140 lines
3.9 KiB
Markdown
import Tabs from '@theme/Tabs';
|
|
import TabItem from '@theme/TabItem';
|
|
|
|
# Provider specific Wildcard routing
|
|
|
|
**Proxy all models from a provider**
|
|
|
|
Use this if you want to **proxy all models from a specific provider without defining them on the config.yaml**
|
|
|
|
## Step 1. Define provider specific routing
|
|
|
|
<Tabs>
|
|
<TabItem value="sdk" label="SDK">
|
|
|
|
```python
|
|
from litellm import Router
|
|
|
|
router = Router(
|
|
model_list=[
|
|
{
|
|
"model_name": "anthropic/*",
|
|
"litellm_params": {
|
|
"model": "anthropic/*",
|
|
"api_key": os.environ["ANTHROPIC_API_KEY"]
|
|
}
|
|
},
|
|
{
|
|
"model_name": "groq/*",
|
|
"litellm_params": {
|
|
"model": "groq/*",
|
|
"api_key": os.environ["GROQ_API_KEY"]
|
|
}
|
|
},
|
|
{
|
|
"model_name": "fo::*:static::*", # all requests matching this pattern will be routed to this deployment, example: model="fo::hi::static::hi" will be routed to deployment: "openai/fo::*:static::*"
|
|
"litellm_params": {
|
|
"model": "openai/fo::*:static::*",
|
|
"api_key": os.environ["OPENAI_API_KEY"]
|
|
}
|
|
}
|
|
]
|
|
)
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="proxy" label="PROXY">
|
|
|
|
**Step 1** - define provider specific routing on config.yaml
|
|
```yaml
|
|
model_list:
|
|
# provider specific wildcard routing
|
|
- model_name: "anthropic/*"
|
|
litellm_params:
|
|
model: "anthropic/*"
|
|
api_key: os.environ/ANTHROPIC_API_KEY
|
|
- model_name: "groq/*"
|
|
litellm_params:
|
|
model: "groq/*"
|
|
api_key: os.environ/GROQ_API_KEY
|
|
- model_name: "fo::*:static::*" # all requests matching this pattern will be routed to this deployment, example: model="fo::hi::static::hi" will be routed to deployment: "openai/fo::*:static::*"
|
|
litellm_params:
|
|
model: "openai/fo::*:static::*"
|
|
api_key: os.environ/OPENAI_API_KEY
|
|
```
|
|
</TabItem>
|
|
</Tabs>
|
|
|
|
## [PROXY-Only] Step 2 - Run litellm proxy
|
|
|
|
```shell
|
|
$ litellm --config /path/to/config.yaml
|
|
```
|
|
|
|
## Step 3 - Test it
|
|
|
|
<Tabs>
|
|
<TabItem value="sdk" label="SDK">
|
|
|
|
```python
|
|
from litellm import Router
|
|
|
|
router = Router(model_list=...)
|
|
|
|
# Test with `anthropic/` - all models with `anthropic/` prefix will get routed to `anthropic/*`
|
|
resp = completion(model="anthropic/claude-3-sonnet-20240229", messages=[{"role": "user", "content": "Hello, Claude!"}])
|
|
print(resp)
|
|
|
|
# Test with `groq/` - all models with `groq/` prefix will get routed to `groq/*`
|
|
resp = completion(model="groq/llama3-8b-8192", messages=[{"role": "user", "content": "Hello, Groq!"}])
|
|
print(resp)
|
|
|
|
# Test with `fo::*::static::*` - all requests matching this pattern will be routed to `openai/fo::*:static::*`
|
|
resp = completion(model="fo::hi::static::hi", messages=[{"role": "user", "content": "Hello, Claude!"}])
|
|
print(resp)
|
|
```
|
|
|
|
</TabItem>
|
|
<TabItem value="proxy" label="PROXY">
|
|
|
|
Test with `anthropic/` - all models with `anthropic/` prefix will get routed to `anthropic/*`
|
|
```bash
|
|
curl http://localhost:4000/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer sk-1234" \
|
|
-d '{
|
|
"model": "anthropic/claude-3-sonnet-20240229",
|
|
"messages": [
|
|
{"role": "user", "content": "Hello, Claude!"}
|
|
]
|
|
}'
|
|
```
|
|
|
|
Test with `groq/` - all models with `groq/` prefix will get routed to `groq/*`
|
|
```shell
|
|
curl http://localhost:4000/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer sk-1234" \
|
|
-d '{
|
|
"model": "groq/llama3-8b-8192",
|
|
"messages": [
|
|
{"role": "user", "content": "Hello, Claude!"}
|
|
]
|
|
}'
|
|
```
|
|
|
|
Test with `fo::*::static::*` - all requests matching this pattern will be routed to `openai/fo::*:static::*`
|
|
```shell
|
|
curl http://localhost:4000/v1/chat/completions \
|
|
-H "Content-Type: application/json" \
|
|
-H "Authorization: Bearer sk-1234" \
|
|
-d '{
|
|
"model": "fo::hi::static::hi",
|
|
"messages": [
|
|
{"role": "user", "content": "Hello, Claude!"}
|
|
]
|
|
}'
|
|
```
|
|
|
|
</TabItem>
|
|
</Tabs>
|