mirror of
https://github.com/deepset-ai/haystack.git
synced 2025-12-31 00:57:37 +00:00
* Add BasePipeline.validate_config, BasePipeline.validate_yaml, and some new custom exception classes * Make error composition work properly * Clarify typing * Help mypy a bit more * Update Documentation & Code Style * Enable autogenerated docs for Milvus1 and 2 separately * Revert "Enable autogenerated docs for Milvus1 and 2 separately" This reverts commit 282be4a78a6e95862a9b4c924fc3dea5ca71e28d. * Update Documentation & Code Style * Re-enable 'additionalProperties: False' * Add pipeline.type to JSON Schema, was somehow forgotten * Disable additionalProperties on the pipeline properties too * Fix json-schemas for 1.1.0 and 1.2.0 (should not do it again in the future) * Cal super in PipelineValidationError * Improve _read_pipeline_config_from_yaml's error handling * Fix generate_json_schema.py to include document stores * Fix json schemas (retro-fix 1.1.0 again) * Improve custom errors printing, add link to docs * Add function in BaseComponent to list its subclasses in a module * Make some document stores base classes abstract * Add marker 'integration' in pytest flags * Slighly improve validation of pipelines at load * Adding tests for YAML loading and validation * Make custom_query Optional for validation issues * Fix bug in _read_pipeline_config_from_yaml * Improve error handling in BasePipeline and Pipeline and add DAG check * Move json schema generation into haystack/nodes/_json_schema.py (useful for tests) * Simplify errors slightly * Add some YAML validation tests * Remove load_from_config from BasePipeline, it was never used anyway * Improve tests * Include json-schemas in package * Fix conftest imports * Make BasePipeline abstract * Improve mocking by making the test independent from the YAML version * Add exportable_to_yaml decorator to forget about set_config on mock nodes * Fix mypy errors * Comment out one monkeypatch * Fix typing again * Improve error message for validation * Add required properties to pipelines * Fix YAML version for REST API YAMLs to 1.2.0 * Fix load_from_yaml call in load_from_deepset_cloud * fix HaystackError.__getattr__ * Add super().__init__()in most nodes and docstore, comment set_config * Remove type from REST API pipelines * Remove useless init from doc2answers * Call super in Seq3SeqGenerator * Typo in deepsetcloud.py * Fix rest api indexing error mismatch and mock version of JSON schema in all tests * Working on pipeline tests * Improve errors printing slightly * Add back test_pipeline.yaml * _json_schema.py supports different versions with identical schemas * Add type to 0.7 schema for backwards compatibility * Fix small bug in _json_schema.py * Try alternative to generate json schemas on the CI * Update Documentation & Code Style * Make linux CI match autoformat CI * Fix super-init-not-called * Accidentally committed file * Update Documentation & Code Style * fix test_summarizer_translation.py's import * Mock YAML in a few suites, split and simplify test_pipeline_debug_and_validation.py::test_invalid_run_args * Fix json schema for ray tests too * Update Documentation & Code Style * Reintroduce validation * Usa unstable version in tests and rest api * Make unstable support the latest versions * Update Documentation & Code Style * Remove needless fixture * Make type in pipeline optional in the strings validation * Fix schemas * Fix string validation for pipeline type * Improve validate_config_strings * Remove type from test p[ipelines * Update Documentation & Code Style * Fix test_pipeline * Removing more type from pipelines * Temporary CI patc * Fix issue with exportable_to_yaml never invoking the wrapped init * rm stray file * pipeline tests are green again * Linux CI now needs .[all] to generate the schema * Bugfixes, pipeline tests seems to be green * Typo in version after merge * Implement missing methods in Weaviate * Trying to avoid FAISS tests from running in the Milvus1 test suite * Fix some stray test paths and faiss index dumping * Fix pytest markers list * Temporarily disable cache to be able to see tests failures * Fix pyproject.toml syntax * Use only tmp_path * Fix preprocessor signature after merge * Fix faiss bug * Fix Ray test * Fix documentation issue by removing quotes from faiss type * Update Documentation & Code Style * use document properly in preprocessor tests * Update Documentation & Code Style * make preprocessor capable of handling documents * import document * Revert support for documents in preprocessor, do later * Fix bug in _json_schema.py that was breaking validation * re-enable cache * Update Documentation & Code Style * Simplify calling _json_schema.py from the CI * Remove redundant ABC inheritance * Ensure exportable_to_yaml works only on implementations * Rename subclass to class_ in Meta * Make run() and get_config() abstract in BasePipeline * Revert unintended change in preprocessor * Move outgoing_edges_input_node check inside try block * Rename VALID_CODE_GEN_INPUT_REGEX into VALID_INPUT_REGEX * Add check for a RecursionError on validate_config_strings * Address usages of _pipeline_config in data silo and elasticsearch * Rename _pipeline_config into _init_parameters * Fix pytest marker and remove unused imports * Remove most redundant ABCs * Rename _init_parameters into _component_configuration * Remove set_config and type from _component_configuration's dict * Remove last instances of set_config and replace with super().__init__() * Implement __init_subclass__ approach * Simplify checks on the existence of _component_configuration * Fix faiss issue * Dynamic generation of node schemas & weed out old schemas * Add debatable test * Add docstring to debatable test * Positive diff between schemas implemented * Improve diff printing * Rename REST API YAML files to trigger IDE validation * Fix typing issues * Fix more typing * Typo in YAML filename * Remove needless type:ignore * Add tests * Fix tests & validation feedback for accessory classes in custom nodes * Refactor RAGeneratorType out * Fix broken import in conftest * Improve source error handling * Remove unused import in test_eval.py breaking tests * Fix changed error message in tests matches too * Normalize generate_openapi_specs.py and generate_json_schema.py in the actions * Fix path to generate_openapi_specs.py in autoformat.yml * Update Documentation & Code Style * Add test for FAISSDocumentStore-like situations (superclass with init params) * Update Documentation & Code Style * Fix indentation * Remove commented set_config * Store model_name_or_path in FARMReader to use in DistillationDataSilo * Rename _component_configuration into _component_config * Update Documentation & Code Style Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
349 lines
12 KiB
YAML
349 lines
12 KiB
YAML
name: Linux CI
|
|
|
|
on:
|
|
# Activate this workflow manually
|
|
workflow_dispatch:
|
|
# Activate this workflow when the PR is opened and code is added to it
|
|
# Note: using pull_request instead of push to keep the CI workflows
|
|
# running on our repo, not the contributor's. See autoformat.yml
|
|
pull_request:
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
- '**/*.txt'
|
|
- '**/*.png'
|
|
- '**/*.gif'
|
|
# Activate this workflow on every push of code changes on master
|
|
push:
|
|
branches:
|
|
- master
|
|
paths-ignore:
|
|
- '**/*.md'
|
|
- '**/*.txt'
|
|
- '**/*.png'
|
|
- '**/*.gif'
|
|
|
|
jobs:
|
|
|
|
build-cache:
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
|
|
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.7
|
|
|
|
- name: Cache
|
|
id: cache-python-env
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
# The cache will be rebuild every day and at every change of the dependency files
|
|
key: linux-${{ env.date }}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/setup.cfg') }}-${{ hashFiles('**/pyproject.toml') }}
|
|
|
|
- name: Install dependencies
|
|
if: steps.cache-python-env.outputs.cache-hit != 'true'
|
|
run: |
|
|
pip install --upgrade pip
|
|
pip install .[test]
|
|
pip install rest_api/
|
|
pip install ui/
|
|
pip install torch-scatter -f https://data.pyg.org/whl/torch-1.10.0+cpu.html
|
|
echo "=== pip freeze ==="
|
|
pip freeze
|
|
|
|
|
|
type-check:
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
# Mypy can't run properly on 3.7 as it misses support for Literal types.
|
|
# FIXME once we drop support for 3.7, use the cache.
|
|
python-version: 3.8
|
|
- name: Setup mypy
|
|
run: |
|
|
# FIXME installing the packages before running mypy raises
|
|
# a lot of errors which were never detected before!
|
|
# pip install .
|
|
# pip install rest_api/
|
|
# pip install ui/
|
|
|
|
# FIXME --install-types does not work properly yet, see https://github.com/python/mypy/issues/10600
|
|
# Hotfixing by installing type packages explicitly.
|
|
# Run mypy --install-types haystack locally to ensure the list is still up to date
|
|
# mypy --install-types --non-interactive .
|
|
|
|
pip install mypy pydantic types-Markdown types-PyYAML types-requests types-setuptools types-six types-tabulate types-chardet types-emoji types-protobuf
|
|
|
|
- name: Test with mypy
|
|
run: |
|
|
echo "=== haystack/ ==="
|
|
mypy haystack
|
|
|
|
echo "=== rest_api/ ==="
|
|
mypy rest_api --exclude=rest_api/build/ --exclude=rest_api/test/
|
|
|
|
echo "=== ui/ ==="
|
|
mypy ui --exclude=ui/build/ --exclude=ui/test/
|
|
|
|
|
|
linter:
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2
|
|
- run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
|
|
- uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.7
|
|
|
|
- name: Cache Python
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: linux-${{ env.date }}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/setup.cfg') }}-${{ hashFiles('**/pyproject.toml') }}
|
|
|
|
- name: Install Dependencies (on cache miss only)
|
|
# The cache might miss during the execution of an action: there should always be a fallback step to
|
|
# rebuild it in case it goes missing
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
pip install --upgrade pip
|
|
pip install .[all]
|
|
pip install rest_api/
|
|
pip install ui/
|
|
pip install torch-scatter -f https://data.pyg.org/whl/torch-1.10.0+cpu.html
|
|
echo "=== pip freeze ==="
|
|
pip freeze
|
|
|
|
- name: Linter
|
|
run: |
|
|
pylint -ry haystack/
|
|
pylint -ry rest_api/
|
|
pylint -ry ui/
|
|
|
|
|
|
code-and-docs-check:
|
|
needs: build-cache
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name }} != "push"
|
|
|
|
steps:
|
|
- run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
|
|
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
fetch-depth: 0
|
|
repository: ${{github.event.pull_request.head.repo.full_name}}
|
|
ref: ${{ github.head_ref }}
|
|
|
|
- name: Set up Python 3.7
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.7
|
|
|
|
- name: Cache Python
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: linux-${{ env.date }}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/setup.cfg') }}-${{ hashFiles('**/pyproject.toml') }}
|
|
|
|
- name: Install Dependencies (on cache miss only)
|
|
# The cache might miss during the execution of an action: there should always be a fallback step to
|
|
# rebuild it in case it goes missing
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
pip install --upgrade pip
|
|
pip install .[all]
|
|
pip install rest_api/
|
|
pip install ui/
|
|
pip install torch-scatter -f https://data.pyg.org/whl/torch-1.10.0+cpu.html
|
|
echo "=== pip freeze ==="
|
|
pip freeze
|
|
|
|
# Get any additional commit that might have been pushed in the meantime
|
|
- name: Pull changes (if any)
|
|
run: git pull origin ${{ github.head_ref }}
|
|
|
|
# Apply Black on the entire codebase
|
|
- name: Blacken
|
|
run: black .
|
|
|
|
# Convert the Jupyter notebooks into markdown tutorials
|
|
- name: Generate Tutorials
|
|
run: |
|
|
cd docs/_src/tutorials/tutorials/
|
|
python3 convert_ipynb.py
|
|
|
|
# Generate markdown files from the docstrings with pydoc-markdown
|
|
- name: Generate Docstrings
|
|
run: |
|
|
set -e # Fails on any error in the following loop
|
|
cd docs/_src/api/api/
|
|
for file in ../pydoc/* ; do
|
|
echo "Processing" $file
|
|
pydoc-markdown "$file"
|
|
done
|
|
|
|
# Generates the OpenAPI specs file to be used on the documentation website
|
|
- name: Generate OpenAPI Specs
|
|
run: python .github/utils/generate_openapi_specs.py
|
|
|
|
# Generates a new JSON schema for the pipeline YAML validation
|
|
- name: Generate JSON schema for pipelines
|
|
run: python .github/utils/generate_json_schema.py
|
|
|
|
# If there is anything to commit, fail
|
|
# Note: this CI action mirrors autoformat.yml, with the difference that it
|
|
# runs on Haystack's end. If the contributor hasn't run autoformat.yml, then this
|
|
# check will fail.
|
|
- name: Check git status
|
|
run: |
|
|
if [[ `git status --porcelain` ]]; then
|
|
git status
|
|
echo ""
|
|
echo "This means that the 'autoformat.yml' action didn't run."
|
|
echo "Please enable GitHub Action on your fork to pass this check!"
|
|
exit 1
|
|
fi
|
|
|
|
|
|
prepare-matrix:
|
|
needs: build-cache
|
|
runs-on: ubuntu-20.04
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- id: set-matrix
|
|
run: |
|
|
find $(find . -type d -name test -not -path "./*env*/*") -type f -name test_*.py | jq -SR . | jq -cs .
|
|
echo "::set-output name=matrix::$(find $(find . -type d -name test -not -path "./*env*/*") -type f -name test_*.py | jq -SR . | jq -cs .)"
|
|
outputs:
|
|
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
|
|
|
|
|
tests:
|
|
needs: prepare-matrix
|
|
runs-on: ubuntu-20.04
|
|
strategy:
|
|
matrix:
|
|
test-path: ${{fromJson(needs.prepare-matrix.outputs.matrix)}}
|
|
fail-fast: false
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
|
|
|
|
- name: Set up Python 3.7
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.7
|
|
|
|
- name: Cache Python
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: linux-${{ env.date }}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/setup.cfg') }}-${{ hashFiles('**/pyproject.toml') }}
|
|
|
|
- name: Run Elasticsearch
|
|
run: docker run -d -p 9200:9200 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms128m -Xmx128m" elasticsearch:7.9.2
|
|
|
|
- name: Run Milvus
|
|
run: |
|
|
cd ../../ # Avoid causing permission issues on hashFiles later by creating unreadable folders like "volumes"
|
|
wget https://github.com/milvus-io/milvus/releases/download/v2.0.0/milvus-standalone-docker-compose.yml -O docker-compose.yml
|
|
sudo docker-compose up -d
|
|
sudo docker-compose ps
|
|
|
|
- name: Run Weaviate
|
|
run: docker run -d -p 8080:8080 --name haystack_test_weaviate --env AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED='true' --env PERSISTENCE_DATA_PATH='/var/lib/weaviate' semitechnologies/weaviate:1.7.2
|
|
|
|
- name: Run GraphDB
|
|
run: docker run -d -p 7200:7200 --name haystack_test_graphdb deepset/graphdb-free:9.4.1-adoptopenjdk11
|
|
|
|
- name: Run Apache Tika
|
|
run: docker run -d -p 9998:9998 -e "TIKA_CHILD_JAVA_OPTS=-JXms128m" -e "TIKA_CHILD_JAVA_OPTS=-JXmx128m" apache/tika:1.24.1
|
|
|
|
- name: Run Parsr
|
|
run: docker run -d -p 3001:3001 axarev/parsr:v1.2.2
|
|
|
|
- name: Install pdftotext
|
|
run: wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.03.tar.gz && tar -xvf xpdf-tools-linux-4.03.tar.gz && sudo cp xpdf-tools-linux-4.03/bin64/pdftotext /usr/local/bin
|
|
|
|
- name: Install tesseract
|
|
run: sudo apt-get install tesseract-ocr libtesseract-dev poppler-utils
|
|
|
|
- name: Install Dependencies (on cache miss only)
|
|
# The cache might miss during the execution of an action: there should always be a fallback step to
|
|
# rebuild it in case it goes missing
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
pip install --upgrade pip
|
|
pip install .[all]
|
|
pip install rest_api/
|
|
pip install ui/
|
|
pip install torch-scatter -f https://data.pyg.org/whl/torch-1.10.0+cpu.html
|
|
|
|
# Haystack needs to be reinstalled at this stage to make sure the current commit's version is the one getting tested.
|
|
# The cache can last way longer than a specific action's run, so older Haystack version could be carried over.
|
|
- name: Reinstall Haystack
|
|
run: |
|
|
pip install .[test]
|
|
pip install rest_api/
|
|
pip install ui/
|
|
|
|
- name: Run tests
|
|
run: pytest -s ${{ matrix.test-path }}
|
|
|
|
|
|
test-milvus1:
|
|
needs: build-cache
|
|
runs-on: ubuntu-20.04
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
|
|
|
|
- name: Set up Python 3.7
|
|
uses: actions/setup-python@v2
|
|
with:
|
|
python-version: 3.7
|
|
|
|
- name: Cache Python
|
|
uses: actions/cache@v2
|
|
with:
|
|
path: ${{ env.pythonLocation }}
|
|
key: linux-${{ env.date }}-${{ hashFiles('**/setup.py') }}-${{ hashFiles('**/setup.cfg') }}-${{ hashFiles('**/pyproject.toml') }}
|
|
|
|
- name: Run Milvus 1
|
|
run: docker run -d -p 19530:19530 -p 19121:19121 milvusdb/milvus:1.1.0-cpu-d050721-5e559c
|
|
|
|
- name: Install pdftotext
|
|
run: wget --no-check-certificate https://dl.xpdfreader.com/xpdf-tools-linux-4.03.tar.gz && tar -xvf xpdf-tools-linux-4.03.tar.gz && sudo cp xpdf-tools-linux-4.03/bin64/pdftotext /usr/local/bin
|
|
|
|
- name: Install Dependencies (on cache miss only)
|
|
# The cache might miss during the execution of an action: there should always be a fallback step to
|
|
# rebuild it in case it goes missing
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
pip install --upgrade pip
|
|
pip install .[test]
|
|
pip install torch-scatter -f https://data.pyg.org/whl/torch-1.10.0+cpu.html
|
|
|
|
# Haystack needs to be reinstalled at this stage to make sure the current commit's version is the one getting tested.
|
|
# The cache can last way longer than a specific action's run, so older Haystack version could be carried over.
|
|
- name: Reinstall Haystack
|
|
run: |
|
|
pip install .[test]
|
|
pip install .[milvus1]
|
|
|
|
- name: Run Milvus1 tests
|
|
run: |
|
|
export MILVUS1_ENABLED=1
|
|
pytest -s test/test_document_store.py test/test_eval.py test/test_faiss_and_milvus.py test/test_pipeline.py test/test_retriever.py test/test_standard_pipelines.py --document_store_type="milvus1"
|