Spaces:
Paused
Paused
| """HTTP client for making requests to the LiteLLM proxy server.""" | |
| from typing import Any, Dict, Optional, Union | |
| import requests | |
| class HTTPClient: | |
| """HTTP client for making requests to the LiteLLM proxy server.""" | |
| def __init__(self, base_url: str, api_key: Optional[str] = None, timeout: int = 30): | |
| """Initialize the HTTP client. | |
| Args: | |
| base_url: Base URL of the LiteLLM proxy server | |
| api_key: Optional API key for authentication | |
| timeout: Request timeout in seconds (default: 30) | |
| """ | |
| self._base_url = base_url.rstrip("/") | |
| self._api_key = api_key | |
| self._timeout = timeout | |
| def request( | |
| self, | |
| method: str, | |
| uri: str, | |
| *, | |
| data: Optional[Union[Dict[str, Any], list, bytes]] = None, | |
| json: Optional[Union[Dict[str, Any], list]] = None, | |
| headers: Optional[Dict[str, str]] = None, | |
| **kwargs: Any, | |
| ) -> Any: | |
| """Make an HTTP request to the LiteLLM proxy server. | |
| This method is used to make generic requests to the LiteLLM proxy | |
| server, when there is not a specific client or method for the request. | |
| Args: | |
| method: HTTP method (GET, POST, PUT, DELETE, etc.) | |
| uri: URI path (will be appended to base_url) (e.g., "/credentials") | |
| data: (optional) Dictionary, list of tuples, bytes, or file-like | |
| object to send in the body of the request. | |
| json: (optional) A JSON serializable Python object to send in the body | |
| of the request. | |
| headers: (optional) Dictionary of HTTP headers to send with the request. | |
| **kwargs: Additional keyword arguments to pass to the request. | |
| Returns: | |
| Parsed JSON response from the server | |
| Raises: | |
| requests.exceptions.RequestException: If the request fails | |
| ValueError: If the response is not valid JSON | |
| Example: | |
| >>> client.http.request("POST", "/health/test_connection", json={ | |
| "litellm_params": { | |
| "model": "gpt-4", | |
| "custom_llm_provider": "azure_ai", | |
| "litellm_credential_name": None, | |
| "api_key": "6xxxxxxx", | |
| "api_base": "https://litellm8397336933.openai.azure.com/openai/deployments/gpt-4o/chat/completions?api-version=2024-10-21", | |
| }, | |
| "mode": "chat", | |
| }) | |
| {'status': 'error', | |
| 'result': {'model': 'gpt-4', | |
| 'custom_llm_provider': 'azure_ai', | |
| 'litellm_credential_name': None, | |
| ... | |
| """ | |
| # Build complete URL | |
| url = f"{self._base_url}/{uri.lstrip('/')}" | |
| # Prepare headers | |
| request_headers = {} | |
| if headers: | |
| request_headers.update(headers) | |
| if self._api_key: | |
| request_headers["Authorization"] = f"Bearer {self._api_key}" | |
| response = requests.request( | |
| method=method, | |
| url=url, | |
| data=data, | |
| json=json, | |
| headers=request_headers, | |
| timeout=self._timeout, | |
| **kwargs, | |
| ) | |
| # Raise for HTTP errors | |
| response.raise_for_status() | |
| # Parse and return JSON response | |
| return response.json() | |