mirror of
https://github.com/BerriAI/litellm.git
synced 2026-08-28 05:25:59 +00:00
Uvicorn 0.31.x falsely advertised ASGI spec_version "2.4" without implementing send() raising OSError on disconnect. Starlette trusted this and skipped its disconnect listener, causing generators to run forever. Uvicorn 0.32.1 corrected this to "2.3", restoring native disconnect detection. The monkey-patch is no longer needed. Also adds fallback_response cleanup in stream_with_fallbacks and moves inline import anyio to module level in streaming_handler.
206 lines
6 KiB
TOML
206 lines
6 KiB
TOML
[tool.poetry]
|
|
name = "litellm"
|
|
version = "1.81.11"
|
|
description = "Library to easily interface with LLM API providers"
|
|
authors = ["BerriAI"]
|
|
license = "MIT"
|
|
readme = "README.md"
|
|
packages = [
|
|
{ include = "litellm" },
|
|
{ include = "litellm/py.typed"},
|
|
]
|
|
|
|
[tool.poetry.urls]
|
|
homepage = "https://litellm.ai"
|
|
Homepage = "https://litellm.ai"
|
|
repository = "https://github.com/BerriAI/litellm"
|
|
Repository = "https://github.com/BerriAI/litellm"
|
|
documentation = "https://docs.litellm.ai"
|
|
Documentation = "https://docs.litellm.ai"
|
|
|
|
[tool.poetry.dependencies]
|
|
python = ">=3.9,<4.0"
|
|
fastuuid = ">=0.13.0"
|
|
httpx = ">=0.23.0"
|
|
openai = ">=2.8.0"
|
|
python-dotenv = ">=0.2.0"
|
|
tiktoken = ">=0.7.0"
|
|
importlib-metadata = ">=6.8.0"
|
|
tokenizers = "*"
|
|
click = "*"
|
|
jinja2 = "^3.1.2"
|
|
aiohttp = ">=3.10"
|
|
pydantic = "^2.5.0"
|
|
jsonschema = ">=4.23.0,<5.0.0"
|
|
numpydoc = {version = "*", optional = true} # used in utils.py
|
|
|
|
uvicorn = {version = ">=0.32.1", optional = true}
|
|
uvloop = {version = "^0.21.0", optional = true, markers="sys_platform != 'win32'"}
|
|
gunicorn = {version = "^23.0.0", optional = true}
|
|
fastapi = {version = ">=0.120.1", optional = true}
|
|
backoff = {version = "*", optional = true}
|
|
pyyaml = {version = "^6.0.1", optional = true}
|
|
rq = {version = "*", optional = true}
|
|
orjson = {version = "^3.9.7", optional = true}
|
|
apscheduler = {version = "^3.10.4", optional = true}
|
|
fastapi-sso = { version = "^0.16.0", optional = true }
|
|
PyJWT = { version = "^2.10.1", optional = true, python = ">=3.9" }
|
|
python-multipart = { version = "^0.0.22", optional = true, python = ">=3.10"}
|
|
cryptography = {version = "*", optional = true}
|
|
prisma = {version = "0.11.0", optional = true}
|
|
azure-identity = {version = "^1.15.0", optional = true, python = ">=3.9"}
|
|
azure-keyvault-secrets = {version = "^4.8.0", optional = true}
|
|
azure-storage-blob = {version="^12.25.1", optional=true}
|
|
google-cloud-kms = {version = "^2.21.3", optional = true}
|
|
google-cloud-iam = {version = "^2.19.1", optional = true}
|
|
google-cloud-aiplatform = {version = ">=1.38.0", optional = true}
|
|
resend = {version = ">=0.8.0", optional = true}
|
|
pynacl = {version = "^1.5.0", optional = true}
|
|
websockets = {version = "^15.0.1", optional = true}
|
|
boto3 = { version = "1.40.76", optional = true }
|
|
redisvl = {version = "^0.4.1", optional = true, markers = "python_version >= '3.9' and python_version < '3.14'"}
|
|
mcp = {version = ">=1.25.0,<2.0.0", optional = true, python = ">=3.10"}
|
|
a2a-sdk = {version = "^0.3.22", optional = true, python = ">=3.10"}
|
|
litellm-proxy-extras = {version = "0.4.37", optional = true}
|
|
rich = {version = "13.7.1", optional = true}
|
|
litellm-enterprise = {version = "0.1.31", optional = true}
|
|
diskcache = {version = "^5.6.1", optional = true}
|
|
polars = {version = "^1.31.0", optional = true, python = ">=3.10"}
|
|
semantic-router = {version = ">=0.1.12", optional = true, python = ">=3.9,<3.14"}
|
|
mlflow = {version = ">3.1.4", optional = true, python = ">=3.10"}
|
|
soundfile = {version = "^0.12.1", optional = true}
|
|
pyroscope-io = {version = "^0.8", optional = true, markers = "sys_platform != 'win32'"}
|
|
# grpcio constraints:
|
|
# - 1.62.3+ required by grpcio-status
|
|
# - 1.68.0-1.68.1 has reconnect bug (https://github.com/grpc/grpc/issues/38290)
|
|
# - 1.75.0+ has Python 3.14 wheels and bug fix
|
|
grpcio = [
|
|
{version = ">=1.62.3,!=1.68.*,!=1.69.*,!=1.70.*,!=1.71.0,!=1.71.1,!=1.72.0,!=1.72.1,!=1.73.0", python = "<3.14", optional = true},
|
|
{version = ">=1.75.0", python = ">=3.14", optional = true},
|
|
]
|
|
|
|
[tool.poetry.extras]
|
|
proxy = [
|
|
"gunicorn",
|
|
"uvicorn",
|
|
"uvloop",
|
|
"fastapi",
|
|
"backoff",
|
|
"pyyaml",
|
|
"rq",
|
|
"orjson",
|
|
"apscheduler",
|
|
"fastapi-sso",
|
|
"PyJWT",
|
|
"python-multipart",
|
|
"cryptography",
|
|
"pynacl",
|
|
"websockets",
|
|
"boto3",
|
|
"azure-identity",
|
|
"azure-storage-blob",
|
|
"mcp",
|
|
"litellm-proxy-extras",
|
|
"litellm-enterprise",
|
|
"rich",
|
|
"polars",
|
|
"soundfile",
|
|
"pyroscope-io",
|
|
]
|
|
|
|
extra_proxy = [
|
|
"prisma",
|
|
"azure-identity",
|
|
"azure-keyvault-secrets",
|
|
"google-cloud-kms",
|
|
"google-cloud-iam",
|
|
"resend",
|
|
"redisvl",
|
|
"a2a-sdk"
|
|
]
|
|
|
|
utils = [
|
|
"numpydoc",
|
|
]
|
|
|
|
|
|
|
|
caching = ["diskcache"]
|
|
|
|
semantic-router = ["semantic-router"]
|
|
|
|
mlflow = ["mlflow"]
|
|
|
|
grpc = ["grpcio"]
|
|
|
|
google = ["google-cloud-aiplatform"]
|
|
|
|
[tool.isort]
|
|
profile = "black"
|
|
|
|
[tool.poetry.scripts]
|
|
litellm = 'litellm:run_server'
|
|
litellm-proxy = 'litellm.proxy.client.cli:cli'
|
|
|
|
[tool.poetry.group.dev.dependencies]
|
|
diff-cover = "^9.0"
|
|
flake8 = "^6.1.0"
|
|
black = "^23.12.0"
|
|
mypy = "^1.0"
|
|
pytest = "^7.4.3"
|
|
pytest-mock = "^3.12.0"
|
|
pytest-asyncio = "^0.21.1"
|
|
pytest-retry = "^1.6.3"
|
|
requests-mock = "^1.12.1"
|
|
responses = "^0.25.7"
|
|
respx = "^0.22.0"
|
|
ruff = "^0.2.1"
|
|
types-requests = "*"
|
|
types-setuptools = "*"
|
|
types-redis = "*"
|
|
types-PyYAML = "*"
|
|
opentelemetry-api = "^1.28.0"
|
|
opentelemetry-sdk = "^1.28.0"
|
|
opentelemetry-exporter-otlp = "^1.28.0"
|
|
langfuse = "^2.45.0"
|
|
fastapi-offline = "^1.7.3"
|
|
|
|
[tool.poetry.group.proxy-dev.dependencies]
|
|
prisma = "0.11.0"
|
|
hypercorn = "^0.15.0"
|
|
prometheus-client = "0.20.0"
|
|
opentelemetry-api = "^1.28.0"
|
|
opentelemetry-sdk = "^1.28.0"
|
|
opentelemetry-exporter-otlp = "^1.28.0"
|
|
azure-identity = {version = "^1.15.0", python = ">=3.9"}
|
|
|
|
[build-system]
|
|
requires = ["poetry-core", "wheel"]
|
|
build-backend = "poetry.core.masonry.api"
|
|
|
|
[tool.commitizen]
|
|
version = "1.81.11"
|
|
version_files = [
|
|
"pyproject.toml:^version"
|
|
]
|
|
|
|
[tool.mypy]
|
|
plugins = "pydantic.mypy"
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
retries = 20
|
|
retry_delay = 5
|
|
markers = [
|
|
"asyncio: mark test as an asyncio test",
|
|
"limit_leaks: mark test with memory limit for leak detection (e.g., '40 MB')",
|
|
"no_parallel: mark test to run sequentially (not in parallel) - typically for memory measurement tests",
|
|
]
|
|
filterwarnings = [
|
|
# Suppress Pydantic serializer warnings from mock server responses (non-critical for memory tests)
|
|
# These occur because the mock server returns a simplified response format
|
|
"ignore:Pydantic serializer warnings:UserWarning",
|
|
"ignore::UserWarning:pydantic.main",
|
|
# Suppress pytest-asyncio event loop deprecation warning (handled automatically by pytest-asyncio)
|
|
"ignore::DeprecationWarning:pytest_asyncio.plugin",
|
|
]
|