[tool.poetry] name = "litellm" version = "1.83.5" 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" # Dependencies pinned from `pip install litellm[proxy]==1.83.0` PyPI resolution. # Docker builds use requirements.txt (different pins). These two paths are independent. [tool.poetry.dependencies] python = ">=3.9,<4.0" fastuuid = "0.14.0" httpx = "0.28.1" openai = "2.30.0" python-dotenv = "1.0.1" tiktoken = "0.12.0" importlib-metadata = "8.5.0" tokenizers = "0.22.2" click = "8.1.8" jinja2 = "3.1.6" aiohttp = "3.13.5" pydantic = "2.12.5" jsonschema = "4.23.0" numpydoc = {version = "1.8.0", optional = true} # not in Docker or PyPI proxy extra uvicorn = {version = "0.33.0", optional = true} uvloop = {version = "0.21.0", optional = true, markers="sys_platform != 'win32'"} gunicorn = {version = "23.0.0", optional = true} fastapi = {version = "0.124.4", optional = true} backoff = {version = "2.2.1", optional = true} pyyaml = {version = "6.0.3", optional = true} rq = {version = "2.7.0", optional = true} orjson = {version = "3.10.15", optional = true} apscheduler = {version = "3.11.2", optional = true} fastapi-sso = { version = "0.16.0", optional = true } PyJWT = { version = "2.12.1", optional = true, python = ">=3.9" } python-multipart = { version = "0.0.20", optional = true} cryptography = {version = "43.0.3", optional = true} # Docker uses 46.0.5; pyproject uses 43.0.3 for Poetry Python 3.9.0/3.9.1 compat prisma = {version = "0.11.0", optional = true} azure-identity = {version = "1.25.3", optional = true, python = ">=3.9"} azure-keyvault-secrets = {version = "4.10.0", optional = true} azure-storage-blob = {version = "12.28.0", optional = true} google-cloud-kms = {version = "2.24.2", optional = true} # not in PyPI proxy extra google-cloud-iam = {version = "2.19.1", optional = true} google-cloud-aiplatform = {version = "1.133.0", optional = true} resend = {version = "2.23.0", optional = true} # not in PyPI proxy extra pynacl = {version = "1.6.2", optional = true} websockets = {version = "15.0.1", optional = true} boto3 = { version = "1.42.80", optional = true } redisvl = {version = "0.4.1", optional = true, markers = "python_version >= '3.9' and python_version < '3.14'"} mcp = {version = "1.26.0", optional = true, python = ">=3.10"} a2a-sdk = {version = "0.3.25", optional = true, python = ">=3.10"} litellm-proxy-extras = {version = "0.4.65", optional = true} rich = {version = "13.9.4", optional = true} litellm-enterprise = {version = "0.1.37", optional = true} diskcache = {version = "5.6.3", optional = true} polars = {version = "1.39.3", optional = true, python = ">=3.10"} semantic-router = {version = "0.1.12", optional = true, python = ">=3.9,<3.14"} mlflow = {version = "3.9.0", optional = true, python = ">=3.10"} # not in PyPI proxy extra soundfile = {version = "0.12.1", optional = true} pyroscope-io = {version = "0.8.16", optional = true, markers = "sys_platform != 'win32'"} # grpcio: pinned to 1.80.0 (past reconnect bug #38290 in 1.68.x, has Python 3.14 wheels) grpcio = {version = "1.80.0", 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.7.2" flake8 = "7.3.0" black = "24.10.0" mypy = "1.19.0" pytest = "8.3.5" pytest-mock = "3.15.1" pytest-asyncio = "1.2.0" pytest-postgresql = "7.0.2" pytest-xdist = "3.8.0" requests-mock = "1.12.1" responses = "0.26.0" respx = "0.22.0" ruff = "0.15.3" types-requests = {version = "2.32.4.20260107", python = ">=3.10"} types-setuptools = "75.8.0.20250225" types-redis = "4.6.0.20241004" types-PyYAML = "6.0.12.20250915" opentelemetry-api = "1.28.0" opentelemetry-sdk = "1.28.0" opentelemetry-exporter-otlp = "1.28.0" langfuse = "2.59.7" fastapi-offline = "1.7.6" fakeredis = "2.34.1" pytest-rerunfailures = "15.1" pytest-cov = "5.0.0" parameterized = "0.9.0" [tool.poetry.group.proxy-dev.dependencies] prisma = "0.11.0" hypercorn = "0.17.3" 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.25.3", python = ">=3.9"} a2a-sdk = {version = "0.3.25", python = ">=3.10"} [build-system] requires = ["poetry-core", "wheel"] build-backend = "poetry.core.masonry.api" [tool.commitizen] version = "1.83.5" version_files = [ "pyproject.toml:^version" ] [tool.mypy] plugins = "pydantic.mypy" [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "session" 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", ] [tool.coverage.run] source = ["litellm"] relative_files = true