From 22aa33e8b5cd93124aa8fa92b48711906bac9ba6 Mon Sep 17 00:00:00 2001 From: Ishaan Jaff Date: Sat, 17 May 2025 17:28:59 -0700 Subject: [PATCH] bump litellm_enterprise-0.1.4 --- .../litellm_enterprise-0.1.4-py3-none-any.whl | Bin 0 -> 83174 bytes .../dist/litellm_enterprise-0.1.4.tar.gz | Bin 0 -> 28189 bytes enterprise/pyproject.toml | 4 +- poetry.lock | 368 +++++++++++++++--- pyproject.toml | 2 +- requirements.txt | 2 +- 6 files changed, 328 insertions(+), 48 deletions(-) create mode 100644 enterprise/dist/litellm_enterprise-0.1.4-py3-none-any.whl create mode 100644 enterprise/dist/litellm_enterprise-0.1.4.tar.gz diff --git a/enterprise/dist/litellm_enterprise-0.1.4-py3-none-any.whl b/enterprise/dist/litellm_enterprise-0.1.4-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..f862a55b18b2d54e2dc2ce9ff1d39031ec6efdd3 GIT binary patch literal 83174 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 VDgXb$(bTLeVdaGcoEakA{{f~W5y}7n literal 0 HcmV?d00001 diff --git a/enterprise/pyproject.toml b/enterprise/pyproject.toml index b27257829e..73b730facc 100644 --- a/enterprise/pyproject.toml +++ b/enterprise/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "litellm-enterprise" -version = "0.1.3" +version = "0.1.4" description = "Package for LiteLLM Enterprise features" authors = ["BerriAI"] readme = "README.md" @@ -22,7 +22,7 @@ requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" [tool.commitizen] -version = "0.1.3" +version = "0.1.4" version_files = [ "pyproject.toml:version", "../requirements.txt:litellm-enterprise==", diff --git a/poetry.lock b/poetry.lock index 52b4927ec4..a355cac5f1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.2 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -6,6 +6,7 @@ version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, @@ -17,6 +18,7 @@ version = "3.10.11" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "aiohttp-3.10.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5077b1a5f40ffa3ba1f40d537d3bec4383988ee51fbba6b74aa8fb1bc466599e"}, {file = "aiohttp-3.10.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8d6a14a4d93b5b3c2891fca94fa9d41b2322a68194422bef0dd5ec1e57d7d298"}, @@ -121,7 +123,7 @@ multidict = ">=4.5,<7.0" yarl = ">=1.12.0,<2.0" [package.extras] -speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] +speedups = ["Brotli ; platform_python_implementation == \"CPython\"", "aiodns (>=3.2.0) ; sys_platform == \"linux\" or sys_platform == \"darwin\"", "brotlicffi ; platform_python_implementation != \"CPython\""] [[package]] name = "aiosignal" @@ -129,6 +131,7 @@ version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, @@ -143,6 +146,8 @@ version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, @@ -154,6 +159,7 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -168,6 +174,7 @@ version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, @@ -181,7 +188,7 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21.0b1) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -190,6 +197,8 @@ version = "3.11.0" description = "In-process task scheduler with Cron-like capabilities" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "APScheduler-3.11.0-py3-none-any.whl", hash = "sha256:fc134ca32e50f5eadcc4938e3a4545ab19131435e851abb40b34d63d5141c6da"}, {file = "apscheduler-3.11.0.tar.gz", hash = "sha256:4c622d250b0955a65d5d0eb91c33e6d43fd879834bf541e0a18661ae60460133"}, @@ -207,7 +216,7 @@ mongodb = ["pymongo (>=3.0)"] redis = ["redis (>=3.0)"] rethinkdb = ["rethinkdb (>=2.4.0)"] sqlalchemy = ["sqlalchemy (>=1.4)"] -test = ["APScheduler[etcd,mongodb,redis,rethinkdb,sqlalchemy,tornado,zookeeper]", "PySide6", "anyio (>=4.5.2)", "gevent", "pytest", "pytz", "twisted"] +test = ["APScheduler[etcd,mongodb,redis,rethinkdb,sqlalchemy,tornado,zookeeper]", "PySide6 ; platform_python_implementation == \"CPython\" and python_version < \"3.14\"", "anyio (>=4.5.2)", "gevent ; python_version < \"3.14\"", "pytest", "pytz", "twisted ; python_version < \"3.14\""] tornado = ["tornado (>=4.3)"] twisted = ["twisted"] zookeeper = ["kazoo"] @@ -216,8 +225,10 @@ zookeeper = ["kazoo"] name = "async-timeout" version = "5.0.1" description = "Timeout context manager for asyncio programs" -optional = false +optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_full_version < \"3.11.3\" and (extra == \"extra-proxy\" or extra == \"proxy\") or python_version <= \"3.10\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -229,18 +240,19 @@ version = "25.3.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, ] [package.extras] -benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] -tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "azure-core" @@ -248,6 +260,8 @@ version = "1.33.0" description = "Microsoft Azure Core Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "azure_core-1.33.0-py3-none-any.whl", hash = "sha256:9b5b6d0223a1d38c37500e6971118c1e0f13f54951e6893968b38910bc9cda8f"}, {file = "azure_core-1.33.0.tar.gz", hash = "sha256:f367aa07b5e3005fec2c1e184b882b0b039910733907d001c20fb08ebb8c0eb9"}, @@ -268,6 +282,8 @@ version = "1.21.0" description = "Microsoft Azure Identity Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "azure_identity-1.21.0-py3-none-any.whl", hash = "sha256:258ea6325537352440f71b35c3dffe9d240eae4a5126c1b7ce5efd5766bd9fd9"}, {file = "azure_identity-1.21.0.tar.gz", hash = "sha256:ea22ce6e6b0f429bc1b8d9212d5b9f9877bd4c82f1724bfa910760612c07a9a6"}, @@ -286,6 +302,8 @@ version = "4.9.0" description = "Microsoft Azure Key Vault Secrets Client Library for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "azure_keyvault_secrets-4.9.0-py3-none-any.whl", hash = "sha256:33c7e2aca2cc2092cebc8c6e96eca36a5cc30c767e16ea429c5fa21270e9fba6"}, {file = "azure_keyvault_secrets-4.9.0.tar.gz", hash = "sha256:2a03bb2ffd9a0d6c8ad1c330d9d0310113985a9de06607ece378fd72a5889fe1"}, @@ -302,6 +320,8 @@ version = "2.17.0" description = "Internationalization utilities" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, @@ -311,7 +331,7 @@ files = [ pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} [package.extras] -dev = ["backports.zoneinfo", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata"] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] [[package]] name = "backoff" @@ -319,6 +339,8 @@ version = "2.2.1" description = "Function decoration for backoff and retry" optional = true python-versions = ">=3.7,<4.0" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, @@ -330,6 +352,8 @@ version = "0.2.1" description = "Backport of the standard library zoneinfo module" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"proxy\" and python_version < \"3.9\"" files = [ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, @@ -358,6 +382,7 @@ version = "23.12.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "black-23.12.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0aaf6041986767a5e0ce663c7a2f0e9eaf21e6ff87a5f95cbf3675bfd4c41d2"}, {file = "black-23.12.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c88b3711d12905b74206227109272673edce0cb29f27e1385f33b0163c414bba"}, @@ -394,7 +419,7 @@ typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] +d = ["aiohttp (>=3.7.4) ; sys_platform != \"win32\" or implementation_name != \"pypy\"", "aiohttp (>=3.7.4,!=3.9.0) ; sys_platform == \"win32\" and implementation_name == \"pypy\""] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] @@ -404,6 +429,8 @@ version = "1.34.34" description = "The AWS SDK for Python" optional = true python-versions = ">= 3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "boto3-1.34.34-py3-none-any.whl", hash = "sha256:33a8b6d9136fa7427160edb92d2e50f2035f04e9d63a2d1027349053e12626aa"}, {file = "boto3-1.34.34.tar.gz", hash = "sha256:b2f321e20966f021ec800b7f2c01287a3dd04fc5965acdfbaa9c505a24ca45d1"}, @@ -423,6 +450,8 @@ version = "1.34.162" description = "Low-level, data-driven core of boto 3." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "botocore-1.34.162-py3-none-any.whl", hash = "sha256:2d918b02db88d27a75b48275e6fb2506e9adaaddbec1ffa6a8a0898b34e769be"}, {file = "botocore-1.34.162.tar.gz", hash = "sha256:adc23be4fb99ad31961236342b7cbf3c0bfc62532cd02852196032e8c0d682f3"}, @@ -432,8 +461,8 @@ files = [ jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = [ - {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, ] [package.extras] @@ -445,6 +474,8 @@ version = "5.5.2" description = "Extensible memoizing collections and decorators" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, @@ -456,6 +487,7 @@ version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, @@ -467,6 +499,7 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -536,6 +569,7 @@ files = [ {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] +markers = {main = "(extra == \"proxy\" or extra == \"extra-proxy\") and (platform_python_implementation != \"PyPy\" or extra == \"proxy\")", dev = "platform_python_implementation != \"PyPy\""} [package.dependencies] pycparser = "*" @@ -546,6 +580,7 @@ version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, @@ -647,6 +682,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -661,10 +697,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "extra == \"utils\" and sys_platform == \"win32\" or platform_system == \"Windows\"", dev = "platform_system == \"Windows\" or sys_platform == \"win32\"", proxy-dev = "platform_system == \"Windows\""} [[package]] name = "coloredlogs" @@ -672,6 +710,8 @@ version = "15.0.1" description = "Colored terminal output for Python's logging module" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, @@ -689,6 +729,7 @@ version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -718,6 +759,7 @@ files = [ {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] +markers = {main = "extra == \"proxy\" or extra == \"extra-proxy\""} [package.dependencies] cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} @@ -738,6 +780,7 @@ version = "1.2.18" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["dev", "proxy-dev"] files = [ {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, @@ -747,7 +790,7 @@ files = [ wrapt = ">=1.10,<2" [package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools", "tox"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] [[package]] name = "distro" @@ -755,6 +798,7 @@ version = "1.9.0" description = "Distro - an OS platform information API" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, @@ -766,6 +810,8 @@ version = "2.6.1" description = "DNS toolkit" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "dnspython-2.6.1-py3-none-any.whl", hash = "sha256:5ef3b9680161f6fa89daf8ad451b5f1a33b18ae8a1c6778cdf4b43f08c0a6e50"}, {file = "dnspython-2.6.1.tar.gz", hash = "sha256:e8f0f9c23a7b7cb99ded64e6c3a6f3e701d78f50c55e002b839dea7225cff7cc"}, @@ -786,6 +832,8 @@ version = "0.20.1" description = "Docutils -- Python Documentation Utilities" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "docutils-0.20.1-py3-none-any.whl", hash = "sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6"}, {file = "docutils-0.20.1.tar.gz", hash = "sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b"}, @@ -797,6 +845,8 @@ version = "2.2.0" description = "A robust email address syntax and deliverability validation library." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, @@ -812,6 +862,8 @@ version = "1.3.0" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, @@ -829,6 +881,8 @@ version = "0.115.12" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "fastapi-0.115.12-py3-none-any.whl", hash = "sha256:e94613d6c05e27be7ffebdd6ea5f388112e5e430c8f7d6494a9d1d88d43e814d"}, {file = "fastapi-0.115.12.tar.gz", hash = "sha256:1e2c2a2646905f9e83d32f04a3f86aff4a286669c6c950ca95b5fd68c2602681"}, @@ -849,6 +903,8 @@ version = "0.16.0" description = "FastAPI plugin to enable SSO to most common providers (such as Facebook login, Google login and login via Microsoft Office 365 Account)" optional = true python-versions = "<4.0,>=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "fastapi_sso-0.16.0-py3-none-any.whl", hash = "sha256:3a66a942474ef9756d3a9d8b945d55bd9faf99781facdb9b87a40b73d6d6b0c3"}, {file = "fastapi_sso-0.16.0.tar.gz", hash = "sha256:f3941f986347566b7d3747c710cf474a907f581bfb6697ff3bb3e44eb76b438c"}, @@ -867,6 +923,7 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -875,7 +932,7 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "flake8" @@ -883,6 +940,7 @@ version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" optional = false python-versions = ">=3.8.1" +groups = ["dev"] files = [ {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, @@ -899,6 +957,7 @@ version = "1.5.0" description = "A list-like structure which implements collections.abc.MutableSequence" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5b6a66c18b5b9dd261ca98dffcb826a525334b2f29e7caa54e182255c5f6a65a"}, {file = "frozenlist-1.5.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d1b3eb7b05ea246510b43a7e53ed1653e55c2121019a97e60cad7efb881a97bb"}, @@ -1000,6 +1059,7 @@ version = "2025.3.0" description = "File-system specification" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "fsspec-2025.3.0-py3-none-any.whl", hash = "sha256:efb87af3efa9103f94ca91a7f8cb7a4df91af9f74fc106c9c7ea0efd7277c1b3"}, {file = "fsspec-2025.3.0.tar.gz", hash = "sha256:a935fd1ea872591f2b5148907d103488fc523295e6c64b835cfad8c3eca44972"}, @@ -1039,6 +1099,8 @@ version = "2.24.2" description = "Google API client core library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "google_api_core-2.24.2-py3-none-any.whl", hash = "sha256:810a63ac95f3c441b7c0e43d344e372887f62ce9071ba972eacf32672e072de9"}, {file = "google_api_core-2.24.2.tar.gz", hash = "sha256:81718493daf06d96d6bc76a91c23874dbf2fac0adbbf542831b805ee6e974696"}, @@ -1048,15 +1110,15 @@ files = [ google-auth = ">=2.14.1,<3.0.0" googleapis-common-protos = ">=1.56.2,<2.0.0" grpcio = [ - {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, {version = ">=1.49.1,<2.0dev", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0dev", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, ] grpcio-status = [ - {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "python_version < \"3.11\" and extra == \"grpc\""}, {version = ">=1.49.1,<2.0.dev0", optional = true, markers = "python_version >= \"3.11\" and extra == \"grpc\""}, + {version = ">=1.33.2,<2.0.dev0", optional = true, markers = "extra == \"grpc\""}, ] proto-plus = [ - {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, + {version = ">=1.22.3,<2.0.0"}, {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, ] protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" @@ -1064,7 +1126,7 @@ requests = ">=2.18.0,<3.0.0" [package.extras] async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.dev0)"] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] @@ -1074,6 +1136,8 @@ version = "2.40.1" description = "Google Authentication Library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "google_auth-2.40.1-py2.py3-none-any.whl", hash = "sha256:ed4cae4f5c46b41bae1d19c036e06f6c371926e97b19e816fc854eff811974ee"}, {file = "google_auth-2.40.1.tar.gz", hash = "sha256:58f0e8416a9814c1d86c9b7f6acf6816b51aba167b2c76821965271bac275540"}, @@ -1087,11 +1151,11 @@ rsa = ">=3.1.4,<5" [package.extras] aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] enterprise-cert = ["cryptography", "pyopenssl"] -pyjwt = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] -pyopenssl = ["cryptography (<39.0.0)", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +pyjwt = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] requests = ["requests (>=2.20.0,<3.0.0)"] -testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0)", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] +testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] urllib3 = ["packaging", "urllib3"] [[package]] @@ -1100,6 +1164,8 @@ version = "2.24.2" description = "Google Cloud Kms API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "google_cloud_kms-2.24.2-py2.py3-none-any.whl", hash = "sha256:368209b035dfac691a467c1cf50986d8b1b26cac1166bdfbaa25d738df91ff7b"}, {file = "google_cloud_kms-2.24.2.tar.gz", hash = "sha256:e9e18bbfafd1a4035c76c03fb5ff03f4f57f596d08e1a9ede7e69ec0151b27a1"}, @@ -1118,10 +1184,12 @@ version = "1.70.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8"}, {file = "googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257"}, ] +markers = {main = "extra == \"extra-proxy\""} [package.dependencies] grpcio = {version = ">=1.44.0,<2.0.0", optional = true, markers = "extra == \"grpc\""} @@ -1136,6 +1204,8 @@ version = "0.14.2" description = "IAM API client library" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "grpc_google_iam_v1-0.14.2-py3-none-any.whl", hash = "sha256:a3171468459770907926d56a440b2bb643eec1d7ba215f48f3ecece42b4d8351"}, {file = "grpc_google_iam_v1-0.14.2.tar.gz", hash = "sha256:b3e1fc387a1a329e41672197d0ace9de22c78dd7d215048c4c78712073f7bd20"}, @@ -1152,6 +1222,7 @@ version = "1.70.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "grpcio-1.70.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:95469d1977429f45fe7df441f586521361e235982a0b39e33841549143ae2851"}, {file = "grpcio-1.70.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:ed9718f17fbdb472e33b869c77a16d0b55e166b100ec57b016dc7de9c8d236bf"}, @@ -1209,6 +1280,7 @@ files = [ {file = "grpcio-1.70.0-cp39-cp39-win_amd64.whl", hash = "sha256:a31d7e3b529c94e930a117b2175b2efd179d96eb3c7a21ccb0289a8ab05b645c"}, {file = "grpcio-1.70.0.tar.gz", hash = "sha256:8d1584a68d5922330025881e63a6c1b54cc8117291d382e4fa69339b6d914c56"}, ] +markers = {main = "extra == \"extra-proxy\""} [package.extras] protobuf = ["grpcio-tools (>=1.70.0)"] @@ -1219,6 +1291,8 @@ version = "1.62.3" description = "Status proto mapping for gRPC" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "grpcio-status-1.62.3.tar.gz", hash = "sha256:289bdd7b2459794a12cf95dc0cb727bd4a1742c37bd823f760236c937e53a485"}, {file = "grpcio_status-1.62.3-py3-none-any.whl", hash = "sha256:f9049b762ba8de6b1086789d8315846e094edac2c50beaf462338b301a8fd4b8"}, @@ -1235,6 +1309,8 @@ version = "23.0.0" description = "WSGI HTTP Server for UNIX" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "gunicorn-23.0.0-py3-none-any.whl", hash = "sha256:ec400d38950de4dfd418cff8328b2c8faed0edb0d517d3394e457c317908ca4d"}, {file = "gunicorn-23.0.0.tar.gz", hash = "sha256:f014447a0101dc57e294f6c18ca6b40227a4c90e9bdb586042628030cba004ec"}, @@ -1256,6 +1332,7 @@ version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -1267,6 +1344,7 @@ version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, @@ -1282,6 +1360,7 @@ version = "4.0.0" description = "Pure-Python HPACK header compression" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, @@ -1293,6 +1372,7 @@ version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, @@ -1314,6 +1394,7 @@ version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, @@ -1326,7 +1407,7 @@ httpcore = "==1.*" idna = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -1338,6 +1419,8 @@ version = "0.4.0" description = "Consume Server-Sent Event (SSE) messages with HTTPX." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, @@ -1349,6 +1432,7 @@ version = "0.31.2" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" +groups = ["main"] files = [ {file = "huggingface_hub-0.31.2-py3-none-any.whl", hash = "sha256:8138cd52aa2326b4429bb00a4a1ba8538346b7b8a808cdce30acb6f1f1bdaeec"}, {file = "huggingface_hub-0.31.2.tar.gz", hash = "sha256:7053561376ed7f6ffdaecf09cc54d70dc784ac6315fa4bb9b93e19662b029675"}, @@ -1384,6 +1468,8 @@ version = "10.0" description = "Human friendly output for text interfaces using Python" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, @@ -1398,6 +1484,7 @@ version = "0.15.0" description = "A ASGI Server based on Hyper libraries and inspired by Gunicorn" optional = false python-versions = ">=3.7" +groups = ["proxy-dev"] files = [ {file = "hypercorn-0.15.0-py3-none-any.whl", hash = "sha256:5008944999612fd188d7a1ca02e89d20065642b89503020ac392dfed11840730"}, {file = "hypercorn-0.15.0.tar.gz", hash = "sha256:d517f68d5dc7afa9a9d50ecefb0f769f466ebe8c1c18d2c2f447a24e763c9a63"}, @@ -1415,7 +1502,7 @@ wsproto = ">=0.14.0" docs = ["pydata_sphinx_theme", "sphinxcontrib_mermaid"] h3 = ["aioquic (>=0.9.0,<1.0)"] trio = ["exceptiongroup (>=1.1.0)", "trio (>=0.22.0)"] -uvloop = ["uvloop"] +uvloop = ["uvloop ; platform_system != \"Windows\""] [[package]] name = "hyperframe" @@ -1423,6 +1510,7 @@ version = "6.0.1" description = "HTTP/2 framing layer for Python" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, @@ -1434,6 +1522,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -1448,6 +1537,8 @@ version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" optional = true python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, @@ -1459,6 +1550,7 @@ version = "7.1.0" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, @@ -1470,7 +1562,7 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "importlib-resources" @@ -1478,6 +1570,8 @@ version = "6.4.5" description = "Read resources from Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version < \"3.9\"" files = [ {file = "importlib_resources-6.4.5-py3-none-any.whl", hash = "sha256:ac29d5f956f01d5e4bb63102a5a19957f1b9175e45649977264a1416783bb717"}, {file = "importlib_resources-6.4.5.tar.gz", hash = "sha256:980862a1d16c9e147a59603677fa2aa5fd82b87f223b6cb870695bcfce830065"}, @@ -1487,7 +1581,7 @@ files = [ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] @@ -1500,6 +1594,7 @@ version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -1511,6 +1606,8 @@ version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, @@ -1522,6 +1619,7 @@ version = "3.1.6" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main", "proxy-dev"] files = [ {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, @@ -1539,6 +1637,7 @@ version = "0.9.0" description = "Fast iterable JSON parser." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jiter-0.9.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:816ec9b60fdfd1fec87da1d7ed46c66c44ffec37ab2ef7de5b147b2fce3fd5ad"}, {file = "jiter-0.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b1d3086f8a3ee0194ecf2008cf81286a5c3e540d977fa038ff23576c023c0ea"}, @@ -1624,6 +1723,8 @@ version = "1.0.1" description = "JSON Matching Expressions" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, @@ -1635,6 +1736,7 @@ version = "4.23.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, @@ -1658,6 +1760,7 @@ version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, @@ -1669,12 +1772,14 @@ referencing = ">=0.31.0" [[package]] name = "litellm-enterprise" -version = "0.1.3" +version = "0.1.4" description = "Package for LiteLLM Enterprise features" optional = true python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ - {file = "litellm_enterprise-0.1.3.tar.gz", hash = "sha256:57fcf4b3e16806de7ffb6540cb8a21532d6031d2b9560870ea5fb368500d05b3"}, + {file = "litellm_enterprise-0.1.4.tar.gz", hash = "sha256:a07d027565793c0dd3ba7941204e28352d997ee8fcc6a612da083668066c70af"}, ] [[package]] @@ -1683,6 +1788,8 @@ version = "0.1.21" description = "Additional files for the LiteLLM Proxy. Reduces the size of the main litellm package." optional = true python-versions = "!=2.7.*,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,!=3.7.*,>=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "litellm_proxy_extras-0.1.21.tar.gz", hash = "sha256:9cbbae014748e266374e7995d2cdfcba19e72e55b3f96c7916d4cbb6c23005d8"}, ] @@ -1693,6 +1800,8 @@ version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, @@ -1717,6 +1826,7 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["main", "proxy-dev"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -1786,6 +1896,7 @@ version = "0.7.0" description = "McCabe checker, plugin for flake8" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, @@ -1797,6 +1908,8 @@ version = "1.5.0" description = "Model Context Protocol SDK" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "mcp-1.5.0-py3-none-any.whl", hash = "sha256:51c3f35ce93cb702f7513c12406bbea9665ef75a08db909200b07da9db641527"}, {file = "mcp-1.5.0.tar.gz", hash = "sha256:5b2766c05e68e01a2034875e250139839498c61792163a7b221fc170c12f5aa9"}, @@ -1823,6 +1936,8 @@ version = "0.1.2" description = "Markdown URL utilities" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, @@ -1834,6 +1949,8 @@ version = "0.4.1" description = "" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "ml_dtypes-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1fe8b5b5e70cd67211db94b05cfd58dace592f24489b038dc6f9fe347d2e07d5"}, {file = "ml_dtypes-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c09a6d11d8475c2a9fd2bc0695628aec105f97cab3b3a3fb7c9660348ff7d24"}, @@ -1856,10 +1973,10 @@ files = [ [package.dependencies] numpy = [ - {version = ">1.20", markers = "python_version < \"3.10\""}, + {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, + {version = ">1.20"}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, - {version = ">=1.23.3", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] [package.extras] @@ -1871,6 +1988,8 @@ version = "1.32.3" description = "The Microsoft Authentication Library (MSAL) for Python library enables your app to access the Microsoft Cloud by supporting authentication of users with Microsoft Azure Active Directory accounts (AAD) and Microsoft Accounts (MSA) using industry standard OAuth2 and OpenID Connect." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "msal-1.32.3-py3-none-any.whl", hash = "sha256:b2798db57760b1961b142f027ffb7c8169536bf77316e99a0df5c4aaebb11569"}, {file = "msal-1.32.3.tar.gz", hash = "sha256:5eea038689c78a5a70ca8ecbe1245458b55a857bd096efb6989c69ba15985d35"}, @@ -1882,7 +2001,7 @@ PyJWT = {version = ">=1.0.0,<3", extras = ["crypto"]} requests = ">=2.0.0,<3" [package.extras] -broker = ["pymsalruntime (>=0.14,<0.18)", "pymsalruntime (>=0.17,<0.18)"] +broker = ["pymsalruntime (>=0.14,<0.18) ; python_version >= \"3.6\" and platform_system == \"Windows\"", "pymsalruntime (>=0.17,<0.18) ; python_version >= \"3.8\" and platform_system == \"Darwin\""] [[package]] name = "msal-extensions" @@ -1890,6 +2009,8 @@ version = "1.3.0" description = "Microsoft Authentication Library extensions (MSAL EX) provides a persistence API that can save your data on disk, encrypted on Windows, macOS and Linux. Concurrent data access will be coordinated by a file lock mechanism." optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "msal_extensions-1.3.0-py3-none-any.whl", hash = "sha256:105328ddcbdd342016c9949d8f89e3917554740c8ab26669c0fa0e069e730a0e"}, {file = "msal_extensions-1.3.0.tar.gz", hash = "sha256:96918996642b38c78cd59b55efa0f06fd1373c90e0949be8615697c048fba62c"}, @@ -1907,6 +2028,7 @@ version = "6.1.0" description = "multidict implementation" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3380252550e372e8511d49481bd836264c009adb826b23fefcc5dd3c69692f60"}, {file = "multidict-6.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:99f826cbf970077383d7de805c0681799491cb939c25450b9b5b3ced03ca99f1"}, @@ -2011,6 +2133,7 @@ version = "1.14.1" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy-1.14.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52686e37cf13d559f668aa398dd7ddf1f92c5d613e4f8cb262be2fb4fedb0fcb"}, {file = "mypy-1.14.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1fb545ca340537d4b45d3eecdb3def05e913299ca72c290326be19b3804b39c0"}, @@ -2070,6 +2193,7 @@ version = "1.1.0" description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, @@ -2081,6 +2205,7 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "proxy-dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -2092,6 +2217,8 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.12\"" files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -2137,6 +2264,8 @@ version = "2.2.5" description = "Fundamental package for array computing in Python" optional = true python-versions = ">=3.10" +groups = ["main"] +markers = "python_version < \"3.14\" and extra == \"extra-proxy\" and python_version >= \"3.12\"" files = [ {file = "numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26"}, {file = "numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a"}, @@ -2201,6 +2330,8 @@ version = "1.7.0" description = "Sphinx extension to support docstrings in Numpy format" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "numpydoc-1.7.0-py3-none-any.whl", hash = "sha256:5a56419d931310d79a06cfc2a126d1558700feeb9b4f3d8dcae1a8134be829c9"}, {file = "numpydoc-1.7.0.tar.gz", hash = "sha256:866e5ae5b6509dcf873fc6381120f5c31acf13b135636c1a81d68c166a95f921"}, @@ -2212,7 +2343,7 @@ tabulate = ">=0.8.10" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} [package.extras] -developer = ["pre-commit (>=3.3)", "tomli"] +developer = ["pre-commit (>=3.3)", "tomli ; python_version < \"3.11\""] doc = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pydata-sphinx-theme (>=0.13.3)", "sphinx (>=7)"] test = ["matplotlib", "pytest", "pytest-cov"] @@ -2222,6 +2353,8 @@ version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -2238,6 +2371,7 @@ version = "1.75.0" description = "The official Python library for the openai API" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "openai-1.75.0-py3-none-any.whl", hash = "sha256:fe6f932d2ded3b429ff67cc9ad118c71327db32eb9d32dd723de3acfca337125"}, {file = "openai-1.75.0.tar.gz", hash = "sha256:fb3ea907efbdb1bcfd0c44507ad9c961afd7dce3147292b54505ecfd17be8fd1"}, @@ -2264,6 +2398,7 @@ version = "1.25.0" description = "OpenTelemetry Python API" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_api-1.25.0-py3-none-any.whl", hash = "sha256:757fa1aa020a0f8fa139f8959e53dec2051cc26b832e76fa839a6d76ecefd737"}, {file = "opentelemetry_api-1.25.0.tar.gz", hash = "sha256:77c4985f62f2614e42ce77ee4c9da5fa5f0bc1e1821085e9a47533a9323ae869"}, @@ -2279,6 +2414,7 @@ version = "1.25.0" description = "OpenTelemetry Collector Exporters" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp-1.25.0-py3-none-any.whl", hash = "sha256:d67a831757014a3bc3174e4cd629ae1493b7ba8d189e8a007003cacb9f1a6b60"}, {file = "opentelemetry_exporter_otlp-1.25.0.tar.gz", hash = "sha256:ce03199c1680a845f82e12c0a6a8f61036048c07ec7a0bd943142aca8fa6ced0"}, @@ -2294,6 +2430,7 @@ version = "1.25.0" description = "OpenTelemetry Protobuf encoding" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp_proto_common-1.25.0-py3-none-any.whl", hash = "sha256:15637b7d580c2675f70246563363775b4e6de947871e01d0f4e3881d1848d693"}, {file = "opentelemetry_exporter_otlp_proto_common-1.25.0.tar.gz", hash = "sha256:c93f4e30da4eee02bacd1e004eb82ce4da143a2f8e15b987a9f603e0a85407d3"}, @@ -2308,6 +2445,7 @@ version = "1.25.0" description = "OpenTelemetry Collector Protobuf over gRPC Exporter" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp_proto_grpc-1.25.0-py3-none-any.whl", hash = "sha256:3131028f0c0a155a64c430ca600fd658e8e37043cb13209f0109db5c1a3e4eb4"}, {file = "opentelemetry_exporter_otlp_proto_grpc-1.25.0.tar.gz", hash = "sha256:c0b1661415acec5af87625587efa1ccab68b873745ca0ee96b69bb1042087eac"}, @@ -2328,6 +2466,7 @@ version = "1.25.0" description = "OpenTelemetry Collector Protobuf over HTTP Exporter" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_exporter_otlp_proto_http-1.25.0-py3-none-any.whl", hash = "sha256:2eca686ee11b27acd28198b3ea5e5863a53d1266b91cda47c839d95d5e0541a6"}, {file = "opentelemetry_exporter_otlp_proto_http-1.25.0.tar.gz", hash = "sha256:9f8723859e37c75183ea7afa73a3542f01d0fd274a5b97487ea24cb683d7d684"}, @@ -2348,6 +2487,7 @@ version = "1.25.0" description = "OpenTelemetry Python Proto" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_proto-1.25.0-py3-none-any.whl", hash = "sha256:f07e3341c78d835d9b86665903b199893befa5e98866f63d22b00d0b7ca4972f"}, {file = "opentelemetry_proto-1.25.0.tar.gz", hash = "sha256:35b6ef9dc4a9f7853ecc5006738ad40443701e52c26099e197895cbda8b815a3"}, @@ -2362,6 +2502,7 @@ version = "1.25.0" description = "OpenTelemetry Python SDK" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_sdk-1.25.0-py3-none-any.whl", hash = "sha256:d97ff7ec4b351692e9d5a15af570c693b8715ad78b8aafbec5c7100fe966b4c9"}, {file = "opentelemetry_sdk-1.25.0.tar.gz", hash = "sha256:ce7fc319c57707ef5bf8b74fb9f8ebdb8bfafbe11898410e0d2a761d08a98ec7"}, @@ -2378,6 +2519,7 @@ version = "0.46b0" description = "OpenTelemetry Semantic Conventions" optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "opentelemetry_semantic_conventions-0.46b0-py3-none-any.whl", hash = "sha256:6daef4ef9fa51d51855d9f8e0ccd3a1bd59e0e545abe99ac6203804e36ab3e07"}, {file = "opentelemetry_semantic_conventions-0.46b0.tar.gz", hash = "sha256:fbc982ecbb6a6e90869b15c1673be90bd18c8a56ff1cffc0864e38e2edffaefa"}, @@ -2392,6 +2534,8 @@ version = "3.10.15" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "orjson-3.10.15-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:552c883d03ad185f720d0c09583ebde257e41b9521b74ff40e08b7dec4559c04"}, {file = "orjson-3.10.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:616e3e8d438d02e4854f70bfdc03a6bcdb697358dbaa6bcd19cbe24d24ece1f8"}, @@ -2480,6 +2624,7 @@ version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, @@ -2491,6 +2636,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -2502,6 +2648,8 @@ version = "1.3.10" description = "Resolve a name to an object." optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version < \"3.9\"" files = [ {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, @@ -2513,6 +2661,7 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -2529,6 +2678,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -2544,6 +2694,7 @@ version = "2.0.0" description = "A pure-Python implementation of the HTTP/2 priority tree" optional = false python-versions = ">=3.6.1" +groups = ["proxy-dev"] files = [ {file = "priority-2.0.0-py3-none-any.whl", hash = "sha256:6f8eefce5f3ad59baf2c080a664037bb4725cd0a790d53d59ab4059288faf6aa"}, {file = "priority-2.0.0.tar.gz", hash = "sha256:c965d54f1b8d0d0b19479db3924c7c36cf672dbf2aec92d43fbdaf4492ba18c0"}, @@ -2555,6 +2706,7 @@ version = "0.11.0" description = "Prisma Client Python is an auto-generated and fully type-safe database client" optional = false python-versions = ">=3.7.0" +groups = ["main", "proxy-dev"] files = [ {file = "prisma-0.11.0-py3-none-any.whl", hash = "sha256:22bb869e59a2968b99f3483bb417717273ffbc569fd1e9ceed95e5614cbaf53a"}, {file = "prisma-0.11.0.tar.gz", hash = "sha256:3f2f2fd2361e1ec5ff655f2a04c7860c2f2a5bc4c91f78ca9c5c6349735bf693"}, @@ -2580,6 +2732,7 @@ version = "0.20.0" description = "Python client for the Prometheus monitoring system." optional = false python-versions = ">=3.8" +groups = ["proxy-dev"] files = [ {file = "prometheus_client-0.20.0-py3-none-any.whl", hash = "sha256:cde524a85bce83ca359cc837f28b8c0db5cac7aa653a588fd7e84ba061c329e7"}, {file = "prometheus_client-0.20.0.tar.gz", hash = "sha256:287629d00b147a32dcb2be0b9df905da599b2d82f80377083ec8463309a4bb89"}, @@ -2594,6 +2747,7 @@ version = "0.2.0" description = "Accelerated property cache" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, @@ -2701,6 +2855,8 @@ version = "1.26.1" description = "Beautiful, Pythonic protocol buffers" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, @@ -2718,6 +2874,7 @@ version = "4.25.7" description = "" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "protobuf-4.25.7-cp310-abi3-win32.whl", hash = "sha256:dc582cf1a73a6b40aa8e7704389b8d8352da616bc8ed5c6cc614bdd0b5ce3f7a"}, {file = "protobuf-4.25.7-cp310-abi3-win_amd64.whl", hash = "sha256:cd873dbddb28460d1706ff4da2e7fac175f62f2a0bebc7b33141f7523c5a2399"}, @@ -2731,6 +2888,7 @@ files = [ {file = "protobuf-4.25.7-py3-none-any.whl", hash = "sha256:e9d969f5154eaeab41404def5dcf04e62162178f4b9de98b2d3c1c70f5f84810"}, {file = "protobuf-4.25.7.tar.gz", hash = "sha256:28f65ae8c14523cc2c76c1e91680958700d3eac69f45c96512c12c63d9a38807"}, ] +markers = {main = "extra == \"extra-proxy\""} [[package]] name = "pyasn1" @@ -2738,6 +2896,8 @@ version = "0.6.1" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, @@ -2749,6 +2909,8 @@ version = "0.4.2" description = "A collection of ASN.1-based protocols modules" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, @@ -2763,6 +2925,7 @@ version = "2.11.1" description = "Python style guide checker" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, @@ -2774,10 +2937,12 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] +markers = {main = "(extra == \"proxy\" or extra == \"extra-proxy\") and (platform_python_implementation != \"PyPy\" or extra == \"proxy\")", dev = "platform_python_implementation != \"PyPy\""} [[package]] name = "pydantic" @@ -2785,6 +2950,7 @@ version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, @@ -2798,7 +2964,7 @@ typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] [[package]] name = "pydantic-core" @@ -2806,6 +2972,7 @@ version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -2918,6 +3085,8 @@ version = "2.9.1" description = "Settings management using Pydantic" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "pydantic_settings-2.9.1-py3-none-any.whl", hash = "sha256:59b4f431b1defb26fe620c71a7d3968a710d719f5f4cdbbdb7926edeb770f6ef"}, {file = "pydantic_settings-2.9.1.tar.gz", hash = "sha256:c509bf79d27563add44e8446233359004ed85066cd096d8b510f715e6ef5d268"}, @@ -2941,6 +3110,7 @@ version = "3.1.0" description = "passive checker of Python programs" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, @@ -2952,6 +3122,8 @@ version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\" or extra == \"proxy\"" files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -2966,6 +3138,8 @@ version = "2.9.0" description = "JSON Web Token implementation in Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"extra-proxy\" or extra == \"proxy\"" files = [ {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, @@ -2986,6 +3160,8 @@ version = "1.5.0" description = "Python binding to the Networking and Cryptography (NaCl) library" optional = true python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "PyNaCl-1.5.0-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:401002a4aaa07c9414132aaed7f6836ff98f59277a234704ff66878c2ee4a0d1"}, {file = "PyNaCl-1.5.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cb72a79269189d4e0dc537556f4740f7f0a9ec41c1322598799b0bdad4ef92"}, @@ -3012,6 +3188,8 @@ version = "3.5.4" description = "A python implementation of GNU readline." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.9\" and sys_platform == \"win32\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, @@ -3026,6 +3204,7 @@ version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -3048,6 +3227,7 @@ version = "0.21.2" description = "Pytest support for asyncio" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, @@ -3066,6 +3246,7 @@ version = "3.14.0" description = "Thin-wrapper around the mock package for easier use with pytest" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pytest-mock-3.14.0.tar.gz", hash = "sha256:2719255a1efeceadbc056d6bf3df3d1c5015530fb40cf347c0f9afac88410bd0"}, {file = "pytest_mock-3.14.0-py3-none-any.whl", hash = "sha256:0b72c38033392a5f4621342fe11e9219ac11ec9d375f8e2a0c164539e0d70f6f"}, @@ -3083,6 +3264,8 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -3097,6 +3280,7 @@ version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -3111,6 +3295,8 @@ version = "0.0.18" description = "A streaming multipart parser for Python" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "python_multipart-0.0.18-py3-none-any.whl", hash = "sha256:efe91480f485f6a361427a541db4796f9e1591afc0fb8e7a4ba06bfbc6708996"}, {file = "python_multipart-0.0.18.tar.gz", hash = "sha256:7a68db60c8bfb82e460637fa4750727b45af1d5e2ed215593f917f64694d34fe"}, @@ -3122,6 +3308,8 @@ version = "3.0.0" description = "Universally unique lexicographically sortable identifier" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "python_ulid-3.0.0-py3-none-any.whl", hash = "sha256:e4c4942ff50dbd79167ad01ac725ec58f924b4018025ce22c858bfcff99a5e31"}, {file = "python_ulid-3.0.0.tar.gz", hash = "sha256:e50296a47dc8209d28629a22fc81ca26c00982c78934bd7766377ba37ea49a9f"}, @@ -3136,6 +3324,8 @@ version = "2025.2" description = "World timezone definitions, modern and historical" optional = true python-versions = "*" +groups = ["main"] +markers = "extra == \"utils\" and python_version < \"3.9\"" files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -3147,6 +3337,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -3209,6 +3400,8 @@ version = "5.3.0" description = "Python client for Redis database and key-value store" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.9\" and (extra == \"extra-proxy\" or extra == \"proxy\") and python_version < \"3.14\" or extra == \"proxy\"" files = [ {file = "redis-5.3.0-py3-none-any.whl", hash = "sha256:f1deeca1ea2ef25c1e4e46b07f4ea1275140526b1feea4c6459c0ec27a10ef83"}, {file = "redis-5.3.0.tar.gz", hash = "sha256:8d69d2dde11a12dc85d0dbf5c45577a5af048e2456f7077d87ad35c1c81c310e"}, @@ -3228,6 +3421,8 @@ version = "0.4.1" description = "Python client library and CLI for using Redis as a vector database" optional = true python-versions = "<3.14,>=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "redisvl-0.4.1-py3-none-any.whl", hash = "sha256:6db5d5bc95b1fe8032a1cdae74ce1c65bc7fe9054e5429b5d34d5a91d28bae5f"}, {file = "redisvl-0.4.1.tar.gz", hash = "sha256:fd6a36426ba94792c0efca20915c31232d4ee3cc58eb23794a62c142696401e6"}, @@ -3252,7 +3447,7 @@ bedrock = ["boto3[bedrock] (>=1.36.0,<2.0.0)"] cohere = ["cohere (>=4.44)"] mistralai = ["mistralai (>=1.0.0)"] openai = ["openai (>=1.13.0,<2.0.0)"] -sentence-transformers = ["scipy (<1.15)", "scipy (>=1.15,<2.0)", "sentence-transformers (>=3.4.0,<4.0.0)"] +sentence-transformers = ["scipy (<1.15) ; python_version < \"3.10\"", "scipy (>=1.15,<2.0) ; python_version >= \"3.10\"", "sentence-transformers (>=3.4.0,<4.0.0)"] vertexai = ["google-cloud-aiplatform (>=1.26,<2.0)", "protobuf (>=5.29.1,<6.0.0)"] voyageai = ["voyageai (>=0.2.2)"] @@ -3262,6 +3457,7 @@ version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, @@ -3277,6 +3473,7 @@ version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, @@ -3380,6 +3577,7 @@ version = "2.31.0" description = "Python HTTP for Humans." optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -3401,6 +3599,7 @@ version = "1.12.1" description = "Mock out responses from the requests package" optional = false python-versions = ">=3.5" +groups = ["dev"] files = [ {file = "requests-mock-1.12.1.tar.gz", hash = "sha256:e9e12e333b525156e82a3c852f22016b9158220d2f47454de9cae8a77d371401"}, {file = "requests_mock-1.12.1-py2.py3-none-any.whl", hash = "sha256:b1e37054004cdd5e56c84454cc7df12b25f90f382159087f4b6915aaeef39563"}, @@ -3418,6 +3617,8 @@ version = "0.8.0" description = "Resend Python SDK" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "resend-0.8.0-py2.py3-none-any.whl", hash = "sha256:adc1515dadf4f4fc6b90db55a237f0f37fc56fd74287a986519a8a187fdb661d"}, {file = "resend-0.8.0.tar.gz", hash = "sha256:94142394701724dbcfcd8f760f675c662a1025013e741dd7cc773ca885526257"}, @@ -3432,6 +3633,7 @@ version = "0.25.7" description = "A utility library for mocking out the `requests` Python library." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "responses-0.25.7-py3-none-any.whl", hash = "sha256:92ca17416c90fe6b35921f52179bff29332076bb32694c0df02dcac2c6bc043c"}, {file = "responses-0.25.7.tar.gz", hash = "sha256:8ebae11405d7a5df79ab6fd54277f6f2bc29b2d002d0dd2d5c632594d1ddcedb"}, @@ -3443,7 +3645,7 @@ requests = ">=2.30.0,<3.0" urllib3 = ">=1.25.10,<3.0" [package.extras] -tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli", "tomli-w", "types-PyYAML", "types-requests"] +tests = ["coverage (>=6.0.0)", "flake8", "mypy", "pytest (>=7.0.0)", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "tomli ; python_version < \"3.11\"", "tomli-w", "types-PyYAML", "types-requests"] [[package]] name = "respx" @@ -3451,6 +3653,7 @@ version = "0.22.0" description = "A utility for mocking out the Python HTTPX and HTTP Core libraries." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "respx-0.22.0-py2.py3-none-any.whl", hash = "sha256:631128d4c9aba15e56903fb5f66fb1eff412ce28dd387ca3a81339e52dbd3ad0"}, {file = "respx-0.22.0.tar.gz", hash = "sha256:3c8924caa2a50bd71aefc07aa812f2466ff489f1848c96e954a5362d17095d91"}, @@ -3465,6 +3668,8 @@ version = "13.7.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = true python-versions = ">=3.7.0" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, @@ -3484,6 +3689,7 @@ version = "0.20.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "rpds_py-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a649dfd735fff086e8a9d0503a9f0c7d01b7912a333c7ae77e1515c08c146dad"}, {file = "rpds_py-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f16bc1334853e91ddaaa1217045dd7be166170beec337576818461268a3de67f"}, @@ -3596,6 +3802,8 @@ version = "2.3.3" description = "RQ is a simple, lightweight, library for creating background jobs, and processing them." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "rq-2.3.3-py3-none-any.whl", hash = "sha256:2202c4409c4c527ac4bee409867d6c02515dd110030499eb0de54c7374aee0ce"}, {file = "rq-2.3.3.tar.gz", hash = "sha256:20c41c977b6f27c852a41bd855893717402bae7b8d9607dca21fe9dd55453e22"}, @@ -3611,6 +3819,8 @@ version = "4.9.1" description = "Pure-Python RSA implementation" optional = true python-versions = "<4,>=3.6" +groups = ["main"] +markers = "extra == \"extra-proxy\"" files = [ {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, @@ -3625,6 +3835,7 @@ version = "0.1.15" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:5fe8d54df166ecc24106db7dd6a68d44852d14eb0729ea4672bb4d96c320b7df"}, {file = "ruff-0.1.15-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f0bfbb53c4b4de117ac4d6ddfd33aa5fc31beeaa21d23c45c6dd249faf9126f"}, @@ -3651,6 +3862,8 @@ version = "0.10.4" description = "An Amazon S3 Transfer Manager" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "s3transfer-0.10.4-py3-none-any.whl", hash = "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e"}, {file = "s3transfer-0.10.4.tar.gz", hash = "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7"}, @@ -3668,6 +3881,8 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +markers = "extra == \"extra-proxy\" or extra == \"proxy\"" files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -3679,6 +3894,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -3690,6 +3906,8 @@ version = "3.0.1" description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." optional = true python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, @@ -3701,6 +3919,8 @@ version = "7.1.2" description = "Python documentation generator" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinx-7.1.2-py3-none-any.whl", hash = "sha256:d170a81825b2fcacb6dfd5a0d7f578a053e45d3f2b153fecc948c37344eb4cbe"}, {file = "sphinx-7.1.2.tar.gz", hash = "sha256:780f4d32f1d7d1126576e0e5ecc19dc32ab76cd24e950228dcf7b1f6d3d9e22f"}, @@ -3736,6 +3956,8 @@ version = "1.0.4" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, @@ -3751,6 +3973,8 @@ version = "1.0.2" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, @@ -3766,6 +3990,8 @@ version = "2.0.1" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, @@ -3781,6 +4007,8 @@ version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, @@ -3795,6 +4023,8 @@ version = "1.0.3" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, @@ -3810,6 +4040,8 @@ version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." optional = true python-versions = ">=3.5" +groups = ["main"] +markers = "extra == \"utils\"" files = [ {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, @@ -3825,6 +4057,8 @@ version = "2.1.3" description = "SSE plugin for Starlette" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "sse_starlette-2.1.3-py3-none-any.whl", hash = "sha256:8ec846438b4665b9e8c560fcdea6bc8081a3abf7942faa95e5a744999d219772"}, {file = "sse_starlette-2.1.3.tar.gz", hash = "sha256:9cd27eb35319e1414e3d2558ee7414487f9529ce3b3cf9b21434fd110e017169"}, @@ -3844,6 +4078,8 @@ version = "0.44.0" description = "The little ASGI library that shines." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "starlette-0.44.0-py3-none-any.whl", hash = "sha256:19edeb75844c16dcd4f9dd72f22f9108c1539f3fc9c4c88885654fef64f85aea"}, {file = "starlette-0.44.0.tar.gz", hash = "sha256:e35166950a3ccccc701962fe0711db0bc14f2ecd37c6f9fe5e3eae0cbaea8715"}, @@ -3862,6 +4098,8 @@ version = "0.9.0" description = "Pretty-print tabular data" optional = true python-versions = ">=3.7" +groups = ["main"] +markers = "python_version >= \"3.9\" and (extra == \"extra-proxy\" or extra == \"utils\") and python_version < \"3.14\" or extra == \"utils\"" files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -3876,6 +4114,8 @@ version = "0.2.2" description = "backport of asyncio.TaskGroup, asyncio.Runner and asyncio.timeout" optional = false python-versions = "*" +groups = ["proxy-dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "taskgroup-0.2.2-py2.py3-none-any.whl", hash = "sha256:e2c53121609f4ae97303e9ea1524304b4de6faf9eb2c9280c7f87976479a52fb"}, {file = "taskgroup-0.2.2.tar.gz", hash = "sha256:078483ac3e78f2e3f973e2edbf6941374fbea81b9c5d0a96f51d297717f4752d"}, @@ -3891,6 +4131,8 @@ version = "9.1.2" description = "Retry code until it succeeds" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.9\" and extra == \"extra-proxy\" and python_version < \"3.14\"" files = [ {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, @@ -3906,6 +4148,7 @@ version = "0.7.0" description = "tiktoken is a fast BPE tokeniser for use with OpenAI's models" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "tiktoken-0.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:485f3cc6aba7c6b6ce388ba634fbba656d9ee27f766216f45146beb4ac18b25f"}, {file = "tiktoken-0.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e54be9a2cd2f6d6ffa3517b064983fb695c9a9d8aa7d574d1ef3c3f931a99225"}, @@ -3958,6 +4201,7 @@ version = "0.21.0" description = "" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2"}, {file = "tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e"}, @@ -3990,6 +4234,7 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -4024,6 +4269,7 @@ files = [ {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] +markers = {main = "extra == \"utils\" and python_version <= \"3.10\"", dev = "python_version <= \"3.10\"", proxy-dev = "python_version <= \"3.10\""} [[package]] name = "tomlkit" @@ -4031,6 +4277,7 @@ version = "0.13.2" description = "Style preserving TOML library" optional = false python-versions = ">=3.8" +groups = ["main", "proxy-dev"] files = [ {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, @@ -4042,6 +4289,7 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -4063,6 +4311,7 @@ version = "1.16.0.20241221" description = "Typing stubs for cffi" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_cffi-1.16.0.20241221-py3-none-any.whl", hash = "sha256:e5b76b4211d7a9185f6ab8d06a106d56c7eb80af7cdb8bfcb4186ade10fb112f"}, {file = "types_cffi-1.16.0.20241221.tar.gz", hash = "sha256:1c96649618f4b6145f58231acb976e0b448be6b847f7ab733dabe62dfbff6591"}, @@ -4077,6 +4326,7 @@ version = "24.1.0.20240722" description = "Typing stubs for pyOpenSSL" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-pyOpenSSL-24.1.0.20240722.tar.gz", hash = "sha256:47913b4678a01d879f503a12044468221ed8576263c1540dcb0484ca21b08c39"}, {file = "types_pyOpenSSL-24.1.0.20240722-py3-none-any.whl", hash = "sha256:6a7a5d2ec042537934cfb4c9d4deb0e16c4c6250b09358df1f083682fe6fda54"}, @@ -4092,6 +4342,7 @@ version = "6.0.12.20241230" description = "Typing stubs for PyYAML" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_PyYAML-6.0.12.20241230-py3-none-any.whl", hash = "sha256:fa4d32565219b68e6dee5f67534c722e53c00d1cfc09c435ef04d7353e1e96e6"}, {file = "types_pyyaml-6.0.12.20241230.tar.gz", hash = "sha256:7f07622dbd34bb9c8b264fe860a17e0efcad00d50b5f27e93984909d9363498c"}, @@ -4103,6 +4354,7 @@ version = "4.6.0.20241004" description = "Typing stubs for redis" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types-redis-4.6.0.20241004.tar.gz", hash = "sha256:5f17d2b3f9091ab75384153bfa276619ffa1cf6a38da60e10d5e6749cc5b902e"}, {file = "types_redis-4.6.0.20241004-py3-none-any.whl", hash = "sha256:ef5da68cb827e5f606c8f9c0b49eeee4c2669d6d97122f301d3a55dc6a63f6ed"}, @@ -4118,6 +4370,8 @@ version = "2.31.0.6" description = "Typing stubs for requests" optional = false python-versions = ">=3.7" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "types-requests-2.31.0.6.tar.gz", hash = "sha256:cd74ce3b53c461f1228a9b783929ac73a666658f223e28ed29753771477b3bd0"}, {file = "types_requests-2.31.0.6-py3-none-any.whl", hash = "sha256:a2db9cb228a81da8348b49ad6db3f5519452dd20a9c1e1a868c83c5fe88fd1a9"}, @@ -4132,6 +4386,8 @@ version = "2.32.0.20241016" description = "Typing stubs for requests" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version >= \"3.10\"" files = [ {file = "types-requests-2.32.0.20241016.tar.gz", hash = "sha256:0d9cad2f27515d0e3e3da7134a1b6f28fb97129d86b867f24d9c726452634d95"}, {file = "types_requests-2.32.0.20241016-py3-none-any.whl", hash = "sha256:4195d62d6d3e043a4eaaf08ff8a62184584d2e8684e9d2aa178c7915a7da3747"}, @@ -4146,6 +4402,7 @@ version = "75.8.0.20250110" description = "Typing stubs for setuptools" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "types_setuptools-75.8.0.20250110-py3-none-any.whl", hash = "sha256:a9f12980bbf9bcdc23ecd80755789085bad6bfce4060c2275bc2b4ca9f2bc480"}, {file = "types_setuptools-75.8.0.20250110.tar.gz", hash = "sha256:96f7ec8bbd6e0a54ea180d66ad68ad7a1d7954e7281a710ea2de75e355545271"}, @@ -4157,6 +4414,8 @@ version = "1.26.25.14" description = "Typing stubs for urllib3" optional = false python-versions = "*" +groups = ["dev"] +markers = "python_version < \"3.10\"" files = [ {file = "types-urllib3-1.26.25.14.tar.gz", hash = "sha256:229b7f577c951b8c1b92c1bc2b2fdb0b49847bd2af6d1cc2a2e3dd340f3bda8f"}, {file = "types_urllib3-1.26.25.14-py3-none-any.whl", hash = "sha256:9683bbb7fb72e32bfe9d2be6e04875fbe1b3eeec3cbb4ea231435aa7fd6b4f0e"}, @@ -4168,6 +4427,7 @@ version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, @@ -4179,6 +4439,8 @@ version = "0.4.0" description = "Runtime typing introspection tools" optional = true python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\" and extra == \"proxy\"" files = [ {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, @@ -4193,6 +4455,8 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = true python-versions = ">=2" +groups = ["main"] +markers = "extra == \"proxy\" and platform_system == \"Windows\"" files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -4204,6 +4468,8 @@ version = "5.2" description = "tzinfo object for the local timezone" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "tzlocal-5.2-py3-none-any.whl", hash = "sha256:49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8"}, {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, @@ -4222,14 +4488,16 @@ version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version < \"3.10\"" files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -4238,13 +4506,15 @@ version = "2.2.3" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] +markers = "python_version >= \"3.10\"" files = [ {file = "urllib3-2.2.3-py3-none-any.whl", hash = "sha256:ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac"}, {file = "urllib3-2.2.3.tar.gz", hash = "sha256:e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -4255,6 +4525,8 @@ version = "0.29.0" description = "The lightning-fast ASGI server." optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, @@ -4266,7 +4538,7 @@ h11 = ">=0.8" typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} [package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] +standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] [[package]] name = "uvloop" @@ -4274,6 +4546,8 @@ version = "0.21.0" description = "Fast implementation of asyncio event loop on top of libuv" optional = true python-versions = ">=3.8.0" +groups = ["main"] +markers = "sys_platform != \"win32\" and extra == \"proxy\"" files = [ {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ec7e6b09a6fdded42403182ab6b832b71f4edaf7f37a9a0e371a01db5f0cb45f"}, {file = "uvloop-0.21.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:196274f2adb9689a289ad7d65700d37df0c0930fd8e4e743fa4834e850d7719d"}, @@ -4325,6 +4599,8 @@ version = "13.1" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" optional = true python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"proxy\"" files = [ {file = "websockets-13.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f48c749857f8fb598fb890a75f540e3221d0976ed0bf879cf3c7eef34151acee"}, {file = "websockets-13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c7e72ce6bda6fb9409cc1e8164dd41d7c91466fb599eb047cfda72fe758a34a7"}, @@ -4420,6 +4696,7 @@ version = "1.17.2" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.8" +groups = ["dev", "proxy-dev"] files = [ {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, @@ -4508,6 +4785,7 @@ version = "1.2.0" description = "WebSockets state-machine based protocol implementation" optional = false python-versions = ">=3.7.0" +groups = ["proxy-dev"] files = [ {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, @@ -4522,6 +4800,7 @@ version = "1.15.2" description = "Yet another URL library" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e4ee8b8639070ff246ad3649294336b06db37a94bdea0d09ea491603e0be73b8"}, {file = "yarl-1.15.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a7cf963a357c5f00cb55b1955df8bbe68d2f2f65de065160a1c26b85a1e44172"}, @@ -4634,17 +4913,18 @@ version = "3.20.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" +groups = ["main", "dev", "proxy-dev"] files = [ {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] enabler = ["pytest-enabler (>=2.2)"] -test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] type = ["pytest-mypy"] [extras] @@ -4653,6 +4933,6 @@ proxy = ["PyJWT", "apscheduler", "backoff", "boto3", "cryptography", "fastapi", utils = ["numpydoc"] [metadata] -lock-version = "2.0" +lock-version = "2.1" python-versions = ">=3.8.1,<4.0, !=3.9.7" -content-hash = "1c83475f086973411d66d5d345885e697136e17c294e3f8d7251bcb01611286d" +content-hash = "2ee503465b2a777af30cff9bc869bc0e2eade15fc19983260ae1b864ea8cabf7" diff --git a/pyproject.toml b/pyproject.toml index 3f09068a43..48378068fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -58,7 +58,7 @@ redisvl = {version = "^0.4.1", optional = true, markers = "python_version >= '3. mcp = {version = "1.5.0", optional = true, python = ">=3.10"} litellm-proxy-extras = {version = "0.1.21", optional = true} rich = {version = "13.7.1", optional = true} -litellm-enterprise = {version = "0.1.3", optional = true} +litellm-enterprise = {version = "0.1.4", optional = true} [tool.poetry.extras] proxy = [ diff --git a/requirements.txt b/requirements.txt index 9900134917..76a9e890aa 100644 --- a/requirements.txt +++ b/requirements.txt @@ -56,4 +56,4 @@ websockets==13.1.0 # for realtime API ######################## # LITELLM ENTERPRISE DEPENDENCIES ######################## -litellm-enterprise==0.1.3 +litellm-enterprise==0.1.4