62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
import os
|
|
from typing import Optional, Union
|
|
|
|
import httpx
|
|
|
|
try:
|
|
from litellm._version import version
|
|
except Exception:
|
|
version = "0.0.0"
|
|
|
|
|
|
def get_default_headers() -> dict:
|
|
"""
|
|
Get default headers for HTTP requests.
|
|
|
|
- Default: `User-Agent: litellm/{version}`
|
|
- Override: set `LITELLM_USER_AGENT` to fully override the header value.
|
|
"""
|
|
user_agent = os.environ.get("LITELLM_USER_AGENT")
|
|
if user_agent is not None:
|
|
return {"User-Agent": user_agent}
|
|
|
|
return {"User-Agent": f"litellm/{version}"}
|
|
|
|
|
|
class HTTPHandler:
|
|
def __init__(self, concurrent_limit=1000):
|
|
headers = get_default_headers()
|
|
# Create a client with a connection pool
|
|
self.client = httpx.AsyncClient(
|
|
limits=httpx.Limits(
|
|
max_connections=concurrent_limit,
|
|
max_keepalive_connections=concurrent_limit,
|
|
),
|
|
headers=headers,
|
|
)
|
|
|
|
async def close(self):
|
|
# Close the client when you're done with it
|
|
await self.client.aclose()
|
|
|
|
async def get(
|
|
self, url: str, params: Optional[dict] = None, headers: Optional[dict] = None
|
|
):
|
|
response = await self.client.get(url, params=params, headers=headers)
|
|
return response
|
|
|
|
async def post(
|
|
self,
|
|
url: str,
|
|
data: Optional[Union[dict, str]] = None,
|
|
params: Optional[dict] = None,
|
|
headers: Optional[dict] = None,
|
|
):
|
|
try:
|
|
response = await self.client.post(
|
|
url, data=data, params=params, headers=headers # type: ignore
|
|
)
|
|
return response
|
|
except Exception as e:
|
|
raise e
|