mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-26 03:04:13 +00:00
Improved wildcard route handling on /models
and /model_group/info
(#8473)
* fix(model_checks.py): update returning known model from wildcard to filter based on given model prefix ensures wildcard route - `vertex_ai/gemini-*` just returns known vertex_ai/gemini- models * test(test_proxy_utils.py): add unit testing for new 'get_known_models_from_wildcard' helper * test(test_models.py): add e2e testing for `/model_group/info` endpoint * feat(prometheus.py): support tracking total requests by user_email on prometheus adds initial support for tracking total requests by user_email * test(test_prometheus.py): add testing to ensure user email is always tracked * test: update testing for new prometheus metric * test(test_prometheus_unit_tests.py): add user email to total proxy metric * test: update tests * test: fix spend tests * test: fix test * fix(pagerduty.py): fix linting error
This commit is contained in:
parent
5e58ae0347
commit
57e5ec07cc
15 changed files with 190 additions and 38 deletions
|
@ -17,16 +17,8 @@ def _check_wildcard_routing(model: str) -> bool:
|
|||
- openai/*
|
||||
- *
|
||||
"""
|
||||
if model == "*":
|
||||
if "*" in model:
|
||||
return True
|
||||
|
||||
if "/" in model:
|
||||
llm_provider, potential_wildcard = model.split("/", 1)
|
||||
if (
|
||||
llm_provider in litellm.provider_list and potential_wildcard == "*"
|
||||
): # e.g. anthropic/*
|
||||
return True
|
||||
|
||||
return False
|
||||
|
||||
|
||||
|
@ -156,6 +148,28 @@ def get_complete_model_list(
|
|||
return list(unique_models) + all_wildcard_models
|
||||
|
||||
|
||||
def get_known_models_from_wildcard(wildcard_model: str) -> List[str]:
|
||||
try:
|
||||
provider, model = wildcard_model.split("/", 1)
|
||||
except ValueError: # safely fail
|
||||
return []
|
||||
# get all known provider models
|
||||
wildcard_models = get_provider_models(provider=provider)
|
||||
if wildcard_models is None:
|
||||
return []
|
||||
if model == "*":
|
||||
return wildcard_models or []
|
||||
else:
|
||||
model_prefix = model.replace("*", "")
|
||||
filtered_wildcard_models = [
|
||||
wc_model
|
||||
for wc_model in wildcard_models
|
||||
if wc_model.split("/")[1].startswith(model_prefix)
|
||||
]
|
||||
|
||||
return filtered_wildcard_models
|
||||
|
||||
|
||||
def _get_wildcard_models(
|
||||
unique_models: Set[str], return_wildcard_routes: Optional[bool] = False
|
||||
) -> List[str]:
|
||||
|
@ -165,13 +179,13 @@ def _get_wildcard_models(
|
|||
if _check_wildcard_routing(model=model):
|
||||
|
||||
if (
|
||||
return_wildcard_routes is True
|
||||
return_wildcard_routes
|
||||
): # will add the wildcard route to the list eg: anthropic/*.
|
||||
all_wildcard_models.append(model)
|
||||
|
||||
provider = model.split("/")[0]
|
||||
# get all known provider models
|
||||
wildcard_models = get_provider_models(provider=provider)
|
||||
wildcard_models = get_known_models_from_wildcard(wildcard_model=model)
|
||||
|
||||
if wildcard_models is not None:
|
||||
models_to_remove.add(model)
|
||||
all_wildcard_models.extend(wildcard_models)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue