Contributing to PaperQA

Thank you for your interest in contributing to PaperQA! Here are some guidelines to help you get started.

Setting up the development environment

We use uvarrow-up-right for our local development.

  1. Install uv by following the instructions on the uv websitearrow-up-right.

  2. Run the following command to install all dependencies and set up the development environment:

    uv sync

Installing the package for development

If you prefer to use pip for installing the package in development mode, you can do so by running:

pip install -e ".[dev]"

Where the dev extra includes development dependencies such as pytest.

Running tests and other tooling

Use the following commands:

  • Run tests (requires an OpenAI key in your environment)

    pytest
    # or for multiprocessing based parallelism
    pytest -n auto
  • Run pre-commit for formatting and type checking

    pre-commit run --all-files
  • Run mypy, refurb, or pylint directly:

    mypy paperqa
    # or
    refurb paperqa
    # or
    pylint paperqa

See our GitHub Actions tests.ymlarrow-up-right for further reference.

Using pytest-recording and VCR cassettes

We use the pytest-recordingarrow-up-right plugin to create VCR cassettes to cache HTTP requests, making our unit tests more deterministic.

To record a new VCR cassette:

And the new cassette(s) should appear in tests/cassettesarrow-up-right.

Our configuration for pytest-recording can be found in tests/conftest.pyarrow-up-right. This includes header removals (e.g. OpenAI authorization key) from responses to ensure sensitive information is excluded from the cassettes.

Please ensure cassettes are less than 1 MB to keep tests loading quickly.

Happy coding!

Last updated