Spaces:
Running
Running
from typing import Any, Optional, Union | |
from pydantic import BaseModel | |
from litellm.types.utils import HiddenParams | |
def _add_headers_to_response(response: Any, headers: dict) -> Any: | |
""" | |
Helper function to add headers to a response's hidden params | |
""" | |
if response is None or not isinstance(response, BaseModel): | |
return response | |
hidden_params: Optional[Union[dict, HiddenParams]] = getattr( | |
response, "_hidden_params", {} | |
) | |
if hidden_params is None: | |
hidden_params = {} | |
elif isinstance(hidden_params, HiddenParams): | |
hidden_params = hidden_params.model_dump() | |
hidden_params.setdefault("additional_headers", {}) | |
hidden_params["additional_headers"].update(headers) | |
setattr(response, "_hidden_params", hidden_params) | |
return response | |
def add_retry_headers_to_response( | |
response: Any, | |
attempted_retries: int, | |
max_retries: Optional[int] = None, | |
) -> Any: | |
""" | |
Add retry headers to the request | |
""" | |
retry_headers = { | |
"x-litellm-attempted-retries": attempted_retries, | |
} | |
if max_retries is not None: | |
retry_headers["x-litellm-max-retries"] = max_retries | |
return _add_headers_to_response(response, retry_headers) | |
def add_fallback_headers_to_response( | |
response: Any, | |
attempted_fallbacks: int, | |
) -> Any: | |
""" | |
Add fallback headers to the response | |
Args: | |
response: The response to add the headers to | |
attempted_fallbacks: The number of fallbacks attempted | |
Returns: | |
The response with the headers added | |
Note: It's intentional that we don't add max_fallbacks in response headers | |
Want to avoid bloat in the response headers for performance. | |
""" | |
fallback_headers = { | |
"x-litellm-attempted-fallbacks": attempted_fallbacks, | |
} | |
return _add_headers_to_response(response, fallback_headers) | |