[project] name = "dify-api" version = "1.13.3" requires-python = "~=3.12.0" dependencies = [ # Legacy: mature and widely deployed "bleach>=6.3.0", "boto3>=1.42.88", "celery>=5.6.3", "croniter>=6.2.2", "flask-cors>=6.0.2", "gevent>=26.4.0", "gmpy2>=2.3.0", "google-api-python-client>=2.194.0", "gunicorn>=25.3.0", "psycogreen>=1.0.2", "psycopg2-binary>=2.9.11", "redis[hiredis]>=7.4.0", "sendgrid>=6.12.5", # Stable: production-proven, cap below the next major "aliyun-log-python-sdk>=0.9.44,<1.0.0", "azure-identity>=1.25.3,<2.0.0", "flask-compress>=1.24,<2.0.0", "flask-login>=0.6.3,<1.0.0", "flask-migrate>=4.1.0,<5.0.0", "flask-orjson>=2.0.0,<3.0.0", "flask-restx>=1.3.2,<2.0.0", "google-cloud-aiplatform>=1.147.0,<2.0.0", "httpx[socks]>=0.28.1,<1.0.0", "langfuse>=4.2.0,<5.0.0", "langsmith>=0.7.30,<1.0.0", "mlflow-skinny>=3.11.1,<4.0.0", "opentelemetry-distro>=0.62b0,<1.0.0", "opentelemetry-instrumentation-celery>=0.62b0,<1.0.0", "opentelemetry-instrumentation-flask>=0.62b0,<1.0.0", "opentelemetry-instrumentation-httpx>=0.62b0,<1.0.0", "opentelemetry-instrumentation-redis>=0.62b0,<1.0.0", "opentelemetry-instrumentation-sqlalchemy>=0.62b0,<1.0.0", "opentelemetry-propagator-b3>=1.41.0,<2.0.0", "readabilipy>=0.3.0,<1.0.0", "resend>=2.27.0,<3.0.0", "weave>=0.52.36,<1.0.0", # Emerging: newer and fast-moving, use compatible pins "arize-phoenix-otel~=0.15.0", "fastopenapi[flask]~=0.7.0", "graphon~=0.1.2", "httpx-sse~=0.4.0", "json-repair~=0.59.2", "opik~=1.11.2", ] # Before adding new dependency, consider place it in # alphabet order (a-z) and suitable group. [tool.setuptools] packages = [] [tool.uv.workspace] members = ["providers/vdb/*"] exclude = ["providers/vdb/__pycache__"] [tool.uv.sources] dify-vdb-alibabacloud-mysql = { workspace = true } dify-vdb-analyticdb = { workspace = true } dify-vdb-baidu = { workspace = true } dify-vdb-chroma = { workspace = true } dify-vdb-clickzetta = { workspace = true } dify-vdb-couchbase = { workspace = true } dify-vdb-elasticsearch = { workspace = true } dify-vdb-hologres = { workspace = true } dify-vdb-huawei-cloud = { workspace = true } dify-vdb-iris = { workspace = true } dify-vdb-lindorm = { workspace = true } dify-vdb-matrixone = { workspace = true } dify-vdb-milvus = { workspace = true } dify-vdb-myscale = { workspace = true } dify-vdb-oceanbase = { workspace = true } dify-vdb-opengauss = { workspace = true } dify-vdb-opensearch = { workspace = true } dify-vdb-oracle = { workspace = true } dify-vdb-pgvecto-rs = { workspace = true } dify-vdb-pgvector = { workspace = true } dify-vdb-qdrant = { workspace = true } dify-vdb-relyt = { workspace = true } dify-vdb-tablestore = { workspace = true } dify-vdb-tencent = { workspace = true } dify-vdb-tidb-on-qdrant = { workspace = true } dify-vdb-tidb-vector = { workspace = true } dify-vdb-upstash = { workspace = true } dify-vdb-vastbase = { workspace = true } dify-vdb-vikingdb = { workspace = true } dify-vdb-weaviate = { workspace = true } [tool.uv] default-groups = ["storage", "tools", "vdb-all"] package = false override-dependencies = [ "pyarrow>=18.0.0", ] [dependency-groups] ############################################################ # [ Dev ] dependency group # Required for development and running tests ############################################################ dev = [ "coverage>=7.13.4", "dotenv-linter>=0.7.0", "faker>=20.1.0", "lxml-stubs>=0.5.1", "basedpyright>=1.39.0", "ruff>=0.15.10", "pytest>=9.0.3", "pytest-benchmark>=5.2.3", "pytest-cov>=7.1.0", "pytest-env>=1.6.0", "pytest-mock>=3.15.1", "testcontainers>=4.14.2", "types-aiofiles>=25.1.0", "types-beautifulsoup4>=4.12.0", "types-cachetools>=6.2.0", "types-colorama>=0.4.15", "types-defusedxml>=0.7.0", "types-deprecated>=1.3.1", "types-docutils>=0.22.3", "types-flask-cors>=6.0.0", "types-flask-migrate>=4.1.0", "types-gevent>=26.4.0", "types-greenlet>=3.4.0", "types-html5lib>=1.1.11", "types-markdown>=3.10.2", "types-oauthlib>=3.3.0", "types-objgraph>=3.6.0", "types-olefile>=0.47.0", "types-openpyxl>=3.1.5", "types-pexpect>=4.9.0", "types-protobuf>=7.34.1", "types-psutil>=7.2.2", "types-psycopg2>=2.9.21", "types-pygments>=2.20.0", "types-pymysql>=1.1.0", "types-python-dateutil>=2.9.0", "types-pywin32>=311.0.0", "types-pyyaml>=6.0.12", "types-regex>=2026.4.4", "types-shapely>=2.1.0", "types-simplejson>=3.20.0.20260408", "types-six>=1.17.0.20260408", "types-tensorflow>=2.18.0.20260408", "types-tqdm>=4.67.3.20260408", "types-ujson>=5.10.0", "boto3-stubs>=1.42.88", "types-jmespath>=1.1.0.20260408", "hypothesis>=6.151.12", "types_pyOpenSSL>=24.1.0", "types_cffi>=2.0.0.20260408", "types_setuptools>=82.0.0.20260408", "pandas-stubs>=3.0.0", "scipy-stubs>=1.15.3.0", "types-python-http-client>=3.3.7.20260408", "import-linter>=2.3", "types-redis>=4.6.0.20241004", "celery-types>=0.23.0", "mypy>=1.20.1", # "locust>=2.40.4", # Temporarily removed due to compatibility issues. Uncomment when resolved. "sseclient-py>=1.8.0", "pytest-timeout>=2.4.0", "pytest-xdist>=3.8.0", "pyrefly>=0.60.0", "xinference-client>=2.4.0", ] ############################################################ # [ Storage ] dependency group # Required for storage clients ############################################################ storage = [ "azure-storage-blob>=12.28.0", "bce-python-sdk>=0.9.69", "cos-python-sdk-v5>=1.9.41", "esdk-obs-python>=3.22.2", "google-cloud-storage>=3.10.1", "opendal>=0.46.0", "oss2>=2.19.1", "supabase>=2.18.1", "tos>=2.9.0", ] ############################################################ # [ Tools ] dependency group ############################################################ tools = ["cloudscraper>=1.2.71", "nltk>=3.9.1"] ############################################################ # [ VDB ] workspace plugins — hollow packages under providers/vdb/* # Each declares its own third-party deps and registers dify.vector_backends entry points. # Use: uv sync --group vdb-all | uv sync --group vdb-qdrant ############################################################ vdb-all = [ "dify-vdb-alibabacloud-mysql", "dify-vdb-analyticdb", "dify-vdb-baidu", "dify-vdb-chroma", "dify-vdb-clickzetta", "dify-vdb-couchbase", "dify-vdb-elasticsearch", "dify-vdb-hologres", "dify-vdb-huawei-cloud", "dify-vdb-iris", "dify-vdb-lindorm", "dify-vdb-matrixone", "dify-vdb-milvus", "dify-vdb-myscale", "dify-vdb-oceanbase", "dify-vdb-opengauss", "dify-vdb-opensearch", "dify-vdb-oracle", "dify-vdb-pgvecto-rs", "dify-vdb-pgvector", "dify-vdb-qdrant", "dify-vdb-relyt", "dify-vdb-tablestore", "dify-vdb-tencent", "dify-vdb-tidb-on-qdrant", "dify-vdb-tidb-vector", "dify-vdb-upstash", "dify-vdb-vastbase", "dify-vdb-vikingdb", "dify-vdb-weaviate", ] vdb-alibabacloud-mysql = ["dify-vdb-alibabacloud-mysql"] vdb-analyticdb = ["dify-vdb-analyticdb"] vdb-baidu = ["dify-vdb-baidu"] vdb-chroma = ["dify-vdb-chroma"] vdb-clickzetta = ["dify-vdb-clickzetta"] vdb-couchbase = ["dify-vdb-couchbase"] vdb-elasticsearch = ["dify-vdb-elasticsearch"] vdb-hologres = ["dify-vdb-hologres"] vdb-huawei-cloud = ["dify-vdb-huawei-cloud"] vdb-iris = ["dify-vdb-iris"] vdb-lindorm = ["dify-vdb-lindorm"] vdb-matrixone = ["dify-vdb-matrixone"] vdb-milvus = ["dify-vdb-milvus"] vdb-myscale = ["dify-vdb-myscale"] vdb-oceanbase = ["dify-vdb-oceanbase"] vdb-opengauss = ["dify-vdb-opengauss"] vdb-opensearch = ["dify-vdb-opensearch"] vdb-oracle = ["dify-vdb-oracle"] vdb-pgvecto-rs = ["dify-vdb-pgvecto-rs"] vdb-pgvector = ["dify-vdb-pgvector"] vdb-qdrant = ["dify-vdb-qdrant"] vdb-relyt = ["dify-vdb-relyt"] vdb-tablestore = ["dify-vdb-tablestore"] vdb-tencent = ["dify-vdb-tencent"] vdb-tidb-on-qdrant = ["dify-vdb-tidb-on-qdrant"] vdb-tidb-vector = ["dify-vdb-tidb-vector"] vdb-upstash = ["dify-vdb-upstash"] vdb-vastbase = ["dify-vdb-vastbase"] vdb-vikingdb = ["dify-vdb-vikingdb"] vdb-weaviate = ["dify-vdb-weaviate"] # Optional client used by some tests / integrations (not a vector backend plugin) vdb-xinference = ["xinference-client>=2.4.0"] [tool.pyrefly] project-includes = ["."] project-excludes = [".venv", "migrations/"] python-platform = "linux" python-version = "3.12.0" infer-with-first-use = false