build: initial support for poetry build tool (#4513)

Co-authored-by: Bowen Liang <bowenliang@apache.org>
This commit is contained in:
Matri 2024-06-11 13:11:28 +08:00 committed by GitHub
parent f426e1b3bd
commit f62f71a81a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 7403 additions and 3 deletions

View File

@ -79,3 +79,75 @@ jobs:
- name: Test Vector Stores - name: Test Vector Stores
run: dev/pytest/pytest_vdb.sh run: dev/pytest/pytest_vdb.sh
test-in-poetry:
runs-on: ubuntu-latest
strategy:
matrix:
python-version:
- "3.10"
- "3.11"
steps:
- name: Install poetry
uses: abatilo/actions-poetry@v3
with:
poetry-version: "1.8.1"
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
cache: 'poetry'
cache-dependency-path: ./api/poetry.lock
- name: Poetry check
run: poetry check -C api
- name: Install dependencies
run: poetry install -C api
- name: Run Unit tests
run: poetry run -C api bash dev/pytest/pytest_unit_tests.sh
- name: Run ModelRuntime
run: poetry run -C api bash dev/pytest/pytest_model_runtime.sh
- name: Run Tool
run: poetry run -C api bash dev/pytest/pytest_tools.sh
- name: Set up Sandbox
uses: hoverkraft-tech/compose-action@v2.0.0
with:
compose-file: |
docker/docker-compose.middleware.yaml
services: |
sandbox
ssrf_proxy
- name: Run Workflow
run: poetry run -C api bash dev/pytest/pytest_workflow.sh
- name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS)
uses: hoverkraft-tech/compose-action@v2.0.0
with:
compose-file: |
docker/docker-compose.middleware.yaml
docker/docker-compose.qdrant.yaml
docker/docker-compose.milvus.yaml
docker/docker-compose.pgvecto-rs.yaml
docker/docker-compose.pgvector.yaml
services: |
weaviate
qdrant
etcd
minio
milvus-standalone
pgvecto-rs
pgvector
- name: Test Vector Stores
run: poetry run -C api bash dev/pytest/pytest_vdb.sh

View File

@ -17,7 +17,8 @@
"FLASK_DEBUG": "1", "FLASK_DEBUG": "1",
"GEVENT_SUPPORT": "True" "GEVENT_SUPPORT": "True"
}, },
"console": "integratedTerminal" "console": "integratedTerminal",
"python": "${command:python.interpreterPath}"
}, },
{ {
"name": "Python: Flask", "name": "Python: Flask",
@ -36,7 +37,8 @@
"--debug" "--debug"
], ],
"jinja": true, "jinja": true,
"justMyCode": true "justMyCode": true,
"python": "${command:python.interpreterPath}"
} }
] ]
} }

View File

@ -17,15 +17,30 @@
```bash ```bash
sed -i "/^SECRET_KEY=/c\SECRET_KEY=$(openssl rand -base64 42)" .env sed -i "/^SECRET_KEY=/c\SECRET_KEY=$(openssl rand -base64 42)" .env
``` ```
4. If you use Anaconda, create a new environment and activate it 4. Create environment.
- Anaconda
If you use Anaconda, create a new environment and activate it
```bash ```bash
conda create --name dify python=3.10 conda create --name dify python=3.10
conda activate dify conda activate dify
``` ```
- Poetry
If you use Poetry, you don't need to manually create the environment. You can execute `poetry shell` to activate the environment.
5. Install dependencies 5. Install dependencies
- Anaconda
```bash ```bash
pip install -r requirements.txt pip install -r requirements.txt
``` ```
- Poetry
```bash
poetry install
```
In case of contributors missing to update dependencies for `pyproject.toml`, you can perform the following shell instead.
```base
poetry shell # activate current environment
poetry add $(cat requirements.txt) # install dependencies of production and update pyproject.toml
poetry add $(cat requirements-dev.txt) --group dev # install dependencies of development and update pyproject.toml
```
6. Run migrate 6. Run migrate
Before the first launch, migrate the database to the latest version. Before the first launch, migrate the database to the latest version.

7197
api/poetry.lock generated Normal file

File diff suppressed because it is too large Load Diff

4
api/poetry.toml Normal file
View File

@ -0,0 +1,4 @@
[virtualenvs]
in-project = true
create = true
prefer-active-python = true

View File

@ -77,3 +77,113 @@ MOCK_SWITCH = "true"
CODE_MAX_STRING_LENGTH = "80000" CODE_MAX_STRING_LENGTH = "80000"
CODE_EXECUTION_ENDPOINT="http://127.0.0.1:8194" CODE_EXECUTION_ENDPOINT="http://127.0.0.1:8194"
CODE_EXECUTION_API_KEY="dify-sandbox" CODE_EXECUTION_API_KEY="dify-sandbox"
[tool.poetry]
name = "dify-api"
version = "0.6.10"
description = ""
authors = ["Dify <hello@dify.ai>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
beautifulsoup4 = "^4.12.2"
flask = "^3.0.1"
flask-sqlalchemy = "^3.0.5"
sqlalchemy = "^2.0.29"
flask-compress = "^1.14"
flask-login = "^0.6.3"
flask-migrate = "^4.0.5"
flask-restful = "^0.3.10"
flask-cors = "^4.0.0"
gunicorn = "^22.0.0"
gevent = "^23.9.1"
openai = "^1.29.0"
tiktoken = "^0.7.0"
psycopg2-binary = "^2.9.6"
pycryptodome = "3.19.1"
python-dotenv = "1.0.0"
authlib = "1.2.0"
boto3 = "^1.28.17"
tenacity = "^8.2.2"
cachetools = "^5.3.0"
weaviate-client = "^3.21.0"
mailchimp-transactional = "^1.0.50"
scikit-learn = "1.2.2"
sentry-sdk = {version = "^1.39.2", extras = ["flask"]}
sympy = "1.12"
jieba = "0.42.1"
celery = "^5.3.6"
redis = {version = "^5.0.3", extras = ["hiredis"]}
openpyxl = "3.1.2"
chardet = "^5.1.0"
python-docx = "^1.1.0"
pypdfium2 = "^4.17.0"
resend = "^0.7.0"
pyjwt = "^2.8.0"
anthropic = "^0.23.1"
newspaper3k = "0.2.8"
wikipedia = "1.4.0"
readabilipy = "0.2.0"
google-ai-generativelanguage = "0.6.1"
google-api-core = "^2.18.0"
google-api-python-client = "^2.90.0"
google-auth = "^2.29.0"
google-auth-httplib2 = "0.2.0"
google-generativeai = "0.5.0"
google-search-results = "2.4.2"
googleapis-common-protos = "1.63.0"
google-cloud-storage = "2.16.0"
replicate = "^0.22.0"
websocket-client = "^1.7.0"
dashscope = {version = "^1.17.0", extras = ["tokenizer"]}
huggingface-hub = "^0.16.4"
transformers = "^4.35.0"
tokenizers = "^0.15.0"
pandas = "1.5.3"
xinference-client = "0.9.4"
safetensors = "^0.4.3"
zhipuai = "1.0.7"
werkzeug = "^3.0.1"
pymilvus = "2.3.1"
qdrant-client = "1.7.3"
cohere = "^5.2.4"
pyyaml = "^6.0.1"
numpy = "^1.26.4"
unstructured = {version = "^0.10.27", extras = ["docx", "epub", "md", "msg", "ppt", "pptx"]}
bs4 = "^0.0.1"
markdown = "^3.5.1"
httpx = {version = "^0.24.1", extras = ["socks"]}
matplotlib = "^3.8.2"
yfinance = "^0.2.35"
pydub = "^0.25.1"
gmpy2 = "^2.1.5"
numexpr = "^2.9.0"
duckduckgo-search = "5.2.2"
arxiv = "2.1.0"
yarl = "^1.9.4"
twilio = "^9.0.4"
qrcode = "^7.4.2"
azure-storage-blob = "12.9.0"
azure-identity = "1.15.0"
lxml = "5.1.0"
xlrd = "^2.0.1"
pydantic = "^1.10.0"
pgvecto-rs = "0.1.4"
firecrawl-py = "0.0.5"
oss2 = "2.15.0"
pgvector = "0.2.5"
pymysql = "^1.1.1"
tidb-vector = "^0.0.9"
google-cloud-aiplatform = "1.49.0"
vanna = {version = "==0.5.5", extras = ["postgres", "mysql", "clickhouse", "duckdb"]}
kaleido = "0.2.1"
[tool.poetry.group.dev.dependencies]
coverage = "^7.2.4"
pytest = "^8.1.1"
pytest-benchmark = "^4.0.0"
pytest-env = "^1.1.3"
pytest-mock = "^3.14.0"