[project] name = "dify-api" version = "1.13.3" requires-python = "~=3.12.0" dependencies = [ "aliyun-log-python-sdk~=0.9.44", "arize-phoenix-otel~=0.15.0", "azure-identity==1.25.3", "beautifulsoup4==4.14.3", "boto3==1.42.88", "bs4~=0.0.1", "cachetools~=7.0.5", "celery~=5.6.3", "charset-normalizer>=3.4.7", "flask~=3.1.3", "flask-compress>=1.24,<1.25", "flask-cors~=6.0.2", "flask-login~=0.6.3", "flask-migrate~=4.1.0", "flask-orjson~=2.0.0", "flask-sqlalchemy~=3.1.1", "gevent~=26.4.0", "gmpy2~=2.3.0", "google-api-core>=2.30.3", "google-api-python-client==2.194.0", "google-auth>=2.49.2", "google-auth-httplib2==0.3.1", "google-cloud-aiplatform>=1.147.0", "googleapis-common-protos>=1.74.0", "graphon>=0.1.2", "gunicorn~=25.3.0", "httpx[socks]~=0.28.1", "jieba==0.42.1", "json-repair>=0.59.2", "langfuse>=4.2.0,<5.0.0", "langsmith~=0.7.30", "markdown~=3.10.2", "mlflow-skinny>=3.11.1", "numpy~=2.4.4", "openpyxl~=3.1.5", "opik~=1.11.2", "litellm==1.83.0", # Pinned to avoid madoka dependency issue "opentelemetry-api==1.41.0", "opentelemetry-distro==0.62b0", "opentelemetry-exporter-otlp==1.41.0", "opentelemetry-exporter-otlp-proto-common==1.41.0", "opentelemetry-exporter-otlp-proto-grpc==1.41.0", "opentelemetry-exporter-otlp-proto-http==1.41.0", "opentelemetry-instrumentation==0.62b0", "opentelemetry-instrumentation-celery==0.62b0", "opentelemetry-instrumentation-flask==0.62b0", "opentelemetry-instrumentation-httpx==0.62b0", "opentelemetry-instrumentation-redis==0.62b0", "opentelemetry-instrumentation-sqlalchemy==0.62b0", "opentelemetry-propagator-b3==1.41.0", "opentelemetry-proto==1.41.0", "opentelemetry-sdk==1.41.0", "opentelemetry-semantic-conventions==0.62b0", "opentelemetry-util-http==0.62b0", "pandas[excel,output-formatting,performance]~=3.0.2", "psycogreen~=1.0.2", "psycopg2-binary~=2.9.11", "pycryptodome==3.23.0", "pydantic~=2.12.5", "pydantic-settings~=2.13.1", "pyjwt~=2.12.1", "pypdfium2==5.6.0", "python-docx~=1.2.0", "python-dotenv==1.2.2", "pyyaml~=6.0.1", "readabilipy~=0.3.0", "redis[hiredis]~=7.4.0", "resend~=2.27.0", "sentry-sdk[flask]~=2.57.0", "sqlalchemy~=2.0.49", "starlette==1.0.0", "tiktoken~=0.12.0", "transformers~=5.3.0", "unstructured[docx,epub,md,ppt,pptx]~=0.21.5", "pypandoc~=1.13", "yarl~=1.23.0", "sseclient-py~=1.9.0", "httpx-sse~=0.4.0", "sendgrid~=6.12.5", "flask-restx~=1.3.2", "packaging~=26.0", "croniter>=6.2.2", "apscheduler>=3.11.2", "weave>=0.52.36", "fastopenapi[flask]>=0.7.0", "bleach~=6.3.0", ] # 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~=40.13.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.26.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