forked from phoenix/litellm-mirror
Merge pull request #2493 from BerriAI/litellm_return_429_no_models_available
[Proxy] return 429 when no models available
This commit is contained in:
commit
d82be720d2
2 changed files with 18 additions and 12 deletions
|
@ -171,6 +171,15 @@ class ProxyException(Exception):
|
||||||
self.param = param
|
self.param = param
|
||||||
self.code = code
|
self.code = code
|
||||||
|
|
||||||
|
# rules for proxyExceptions
|
||||||
|
# Litellm router.py returns "No healthy deployment available" when there are no deployments available
|
||||||
|
# Should map to 429 errors https://github.com/BerriAI/litellm/issues/2487
|
||||||
|
if (
|
||||||
|
"No healthy deployment available" in self.message
|
||||||
|
or "No deployments available" in self.message
|
||||||
|
):
|
||||||
|
self.code = 429
|
||||||
|
|
||||||
def to_dict(self) -> dict:
|
def to_dict(self) -> dict:
|
||||||
"""Converts the ProxyException instance to a dictionary."""
|
"""Converts the ProxyException instance to a dictionary."""
|
||||||
return {
|
return {
|
||||||
|
@ -2919,10 +2928,7 @@ async def chat_completion(
|
||||||
param=getattr(e, "param", "None"),
|
param=getattr(e, "param", "None"),
|
||||||
code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST),
|
code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST),
|
||||||
)
|
)
|
||||||
else:
|
error_msg = f"{str(e)}"
|
||||||
error_traceback = traceback.format_exc()
|
|
||||||
error_msg = f"{str(e)}\n\n{error_traceback}"
|
|
||||||
|
|
||||||
raise ProxyException(
|
raise ProxyException(
|
||||||
message=getattr(e, "message", error_msg),
|
message=getattr(e, "message", error_msg),
|
||||||
type=getattr(e, "type", "None"),
|
type=getattr(e, "type", "None"),
|
||||||
|
@ -3105,8 +3111,7 @@ async def embeddings(
|
||||||
code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST),
|
code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
error_traceback = traceback.format_exc()
|
error_msg = f"{str(e)}"
|
||||||
error_msg = f"{str(e)}\n\n{error_traceback}"
|
|
||||||
raise ProxyException(
|
raise ProxyException(
|
||||||
message=getattr(e, "message", error_msg),
|
message=getattr(e, "message", error_msg),
|
||||||
type=getattr(e, "type", "None"),
|
type=getattr(e, "type", "None"),
|
||||||
|
@ -3256,8 +3261,7 @@ async def image_generation(
|
||||||
code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST),
|
code=getattr(e, "status_code", status.HTTP_400_BAD_REQUEST),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
error_traceback = traceback.format_exc()
|
error_msg = f"{str(e)}"
|
||||||
error_msg = f"{str(e)}\n\n{error_traceback}"
|
|
||||||
raise ProxyException(
|
raise ProxyException(
|
||||||
message=getattr(e, "message", error_msg),
|
message=getattr(e, "message", error_msg),
|
||||||
type=getattr(e, "type", "None"),
|
type=getattr(e, "type", "None"),
|
||||||
|
@ -3420,7 +3424,7 @@ async def audio_transcriptions(
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
error_traceback = traceback.format_exc()
|
error_traceback = traceback.format_exc()
|
||||||
error_msg = f"{str(e)}\n\n{error_traceback}"
|
error_msg = f"{str(e)}"
|
||||||
raise ProxyException(
|
raise ProxyException(
|
||||||
message=getattr(e, "message", error_msg),
|
message=getattr(e, "message", error_msg),
|
||||||
type=getattr(e, "type", "None"),
|
type=getattr(e, "type", "None"),
|
||||||
|
@ -3573,7 +3577,7 @@ async def moderations(
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
error_traceback = traceback.format_exc()
|
error_traceback = traceback.format_exc()
|
||||||
error_msg = f"{str(e)}\n\n{error_traceback}"
|
error_msg = f"{str(e)}"
|
||||||
raise ProxyException(
|
raise ProxyException(
|
||||||
message=getattr(e, "message", error_msg),
|
message=getattr(e, "message", error_msg),
|
||||||
type=getattr(e, "type", "None"),
|
type=getattr(e, "type", "None"),
|
||||||
|
|
|
@ -2204,7 +2204,7 @@ class Router:
|
||||||
f"healthy deployments: length {len(healthy_deployments)} {healthy_deployments}"
|
f"healthy deployments: length {len(healthy_deployments)} {healthy_deployments}"
|
||||||
)
|
)
|
||||||
if len(healthy_deployments) == 0:
|
if len(healthy_deployments) == 0:
|
||||||
raise ValueError("No models available")
|
raise ValueError(f"No healthy deployment available, passed model={model}")
|
||||||
if litellm.model_alias_map and model in litellm.model_alias_map:
|
if litellm.model_alias_map and model in litellm.model_alias_map:
|
||||||
model = litellm.model_alias_map[
|
model = litellm.model_alias_map[
|
||||||
model
|
model
|
||||||
|
@ -2275,7 +2275,9 @@ class Router:
|
||||||
verbose_router_logger.info(
|
verbose_router_logger.info(
|
||||||
f"get_available_deployment for model: {model}, No deployment available"
|
f"get_available_deployment for model: {model}, No deployment available"
|
||||||
)
|
)
|
||||||
raise ValueError("No models available.")
|
raise ValueError(
|
||||||
|
f"No deployments available for selected model, passed model={model}"
|
||||||
|
)
|
||||||
verbose_router_logger.info(
|
verbose_router_logger.info(
|
||||||
f"get_available_deployment for model: {model}, Selected deployment: {self.print_deployment(deployment)} for model: {model}"
|
f"get_available_deployment for model: {model}, Selected deployment: {self.print_deployment(deployment)} for model: {model}"
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue