mirror of
https://github.com/hwchase17/langchain.git
synced 2026-06-09 10:17:00 +00:00
**TL;DR much of the provided `Makefile` targets were broken, and any time I wanted to preview changes locally I either had to refer to a command Chester gave me or try waiting on a Vercel preview deployment. With this PR, everything should behave like normal.** Significant updates to the `Makefile` and documentation files, focusing on improving usability, adding clear messaging, and fixing/enhancing documentation workflows. ### Updates to `Makefile`: #### Enhanced build and cleaning processes: - Added informative messages (e.g., "📚 Building LangChain documentation...") to makefile targets like `docs_build`, `docs_clean`, and `api_docs_build` for better user feedback during execution. - Introduced a `clean-cache` target to the `docs` `Makefile` to clear cached dependencies and ensure clean builds. #### Improved dependency handling: - Modified `install-py-deps` to create a `.venv/deps_installed` marker, preventing redundant/duplicate dependency installations and improving efficiency. #### Streamlined file generation and infrastructure setup: - Added caching for the LangServe README download and parallelized feature table generation - Added user-friendly completion messages for targets like `copy-infra` and `render`. #### Documentation server updates: - Enhanced the `start` target with messages indicating server start and URL for local documentation viewing. --- ### Documentation Improvements: #### Content clarity and consistency: - Standardized section titles for consistency across documentation files. [[1]](diffhunk://#diff-9b1a85ea8a9dcf79f58246c88692cd7a36316665d7e05a69141cfdc50794c82aL1-R1) [[2]](diffhunk://#diff-944008ad3a79d8a312183618401fcfa71da0e69c75803eff09b779fc8e03183dL1-R1) - Refined phrasing and formatting in sections like "Dependency management" and "Formatting and linting" for better readability. [[1]](diffhunk://#diff-2069d4f956ab606ae6d51b191439283798adaf3a6648542c409d258131617059L6-R6) [[2]](diffhunk://#diff-2069d4f956ab606ae6d51b191439283798adaf3a6648542c409d258131617059L84-R82) #### Enhanced workflows: - Updated instructions for building and viewing documentation locally, including tips for specifying server ports and handling API reference previews. [[1]](diffhunk://#diff-048deddcfd44b242e5b23aed9f2e9ec73afc672244ce14df2a0a316d95840c87L60-R94) [[2]](diffhunk://#diff-048deddcfd44b242e5b23aed9f2e9ec73afc672244ce14df2a0a316d95840c87L82-R126) - Expanded guidance on cleaning documentation artifacts and using linting tools effectively. [[1]](diffhunk://#diff-048deddcfd44b242e5b23aed9f2e9ec73afc672244ce14df2a0a316d95840c87L82-R126) [[2]](diffhunk://#diff-048deddcfd44b242e5b23aed9f2e9ec73afc672244ce14df2a0a316d95840c87L107-R142) #### API reference documentation: - Improved instructions for generating and formatting in-code documentation, highlighting best practices for docstring writing. [[1]](diffhunk://#diff-048deddcfd44b242e5b23aed9f2e9ec73afc672244ce14df2a0a316d95840c87L107-R142) [[2]](diffhunk://#diff-048deddcfd44b242e5b23aed9f2e9ec73afc672244ce14df2a0a316d95840c87L144-R186) --- ### Minor Changes: - Added support for a new package name (`langchain_v1`) in the API documentation generation script. - Fixed minor capitalization and formatting issues in documentation files. [[1]](diffhunk://#diff-2069d4f956ab606ae6d51b191439283798adaf3a6648542c409d258131617059L40-R40) [[2]](diffhunk://#diff-2069d4f956ab606ae6d51b191439283798adaf3a6648542c409d258131617059L166-R160) --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
142 lines
4.0 KiB
Plaintext
142 lines
4.0 KiB
Plaintext
---
|
|
sidebar_position: 6
|
|
---
|
|
|
|
# Testing
|
|
|
|
All of our packages have unit tests and integration tests, and we favor unit tests over integration tests.
|
|
|
|
Unit tests run on every pull request, so they should be fast and reliable.
|
|
|
|
Integration tests run once a day, and they require more setup, so they should be reserved for confirming interface points with external services.
|
|
|
|
## Unit tests
|
|
|
|
Unit tests cover modular logic that does not require calls to outside APIs.
|
|
If you add new logic, please add a unit test.
|
|
|
|
To install dependencies for unit tests:
|
|
|
|
```bash
|
|
poetry install --with test
|
|
```
|
|
|
|
To run unit tests:
|
|
|
|
```bash
|
|
make test
|
|
```
|
|
|
|
To run a specific test:
|
|
|
|
```bash
|
|
TEST_FILE=tests/unit_tests/test_imports.py make test
|
|
```
|
|
|
|
## Integration tests
|
|
|
|
Integration tests cover logic that requires making calls to outside APIs (often integration with other services).
|
|
If you add support for a new external API, please add a new integration test.
|
|
|
|
**Warning:** Almost no tests should be integration tests.
|
|
|
|
Tests that require making network connections make it difficult for other
|
|
developers to test the code.
|
|
|
|
Instead favor relying on `responses` library and/or mock.patch to mock
|
|
requests using small fixtures.
|
|
|
|
To install dependencies for integration tests:
|
|
|
|
```bash
|
|
poetry install --with test,test_integration
|
|
```
|
|
|
|
To run integration tests:
|
|
|
|
```bash
|
|
make integration_tests
|
|
```
|
|
|
|
### Prepare
|
|
|
|
The integration tests use several search engines and databases. The tests
|
|
aim to verify the correct behavior of the engines and databases according to
|
|
their specifications and requirements.
|
|
|
|
To run some integration tests, such as tests located in
|
|
`tests/integration_tests/vectorstores/`, you will need to install the following
|
|
software:
|
|
|
|
- Docker
|
|
- Python 3.8.1 or later
|
|
|
|
Any new dependencies should be added by running:
|
|
|
|
```bash
|
|
# add package and install it after adding:
|
|
poetry add tiktoken@latest --group "test_integration" && poetry install --with test_integration
|
|
```
|
|
|
|
Before running any tests, you should start a specific Docker container that has all the
|
|
necessary dependencies installed. For instance, we use the `elasticsearch.yml` container
|
|
for `test_elasticsearch.py`:
|
|
|
|
```bash
|
|
cd tests/integration_tests/vectorstores/docker-compose
|
|
docker-compose -f elasticsearch.yml up
|
|
```
|
|
|
|
For environments that requires more involving preparation, look for `*.sh`. For instance,
|
|
`opensearch.sh` builds a required docker image and then launch opensearch.
|
|
|
|
|
|
### Prepare environment variables for local testing:
|
|
|
|
- copy `tests/integration_tests/.env.example` to `tests/integration_tests/.env`
|
|
- set variables in `tests/integration_tests/.env` file, e.g `OPENAI_API_KEY`
|
|
|
|
Additionally, it's important to note that some integration tests may require certain
|
|
environment variables to be set, such as `OPENAI_API_KEY`. Be sure to set any required
|
|
environment variables before running the tests to ensure they run correctly.
|
|
|
|
### Recording HTTP interactions with pytest-vcr
|
|
|
|
Some of the integration tests in this repository involve making HTTP requests to
|
|
external services. To prevent these requests from being made every time the tests are
|
|
run, we use pytest-vcr to record and replay HTTP interactions.
|
|
|
|
When running tests in a CI/CD pipeline, you may not want to modify the existing
|
|
cassettes. You can use the --vcr-record=none command-line option to disable recording
|
|
new cassettes. Here's an example:
|
|
|
|
```bash
|
|
pytest --log-cli-level=10 tests/integration_tests/vectorstores/test_pinecone.py --vcr-record=none
|
|
pytest tests/integration_tests/vectorstores/test_elasticsearch.py --vcr-record=none
|
|
|
|
```
|
|
|
|
### Run some tests with coverage:
|
|
|
|
```bash
|
|
pytest tests/integration_tests/vectorstores/test_elasticsearch.py --cov=langchain --cov-report=html
|
|
start "" htmlcov/index.html || open htmlcov/index.html
|
|
|
|
```
|
|
|
|
## Coverage
|
|
|
|
Code coverage (i.e. the amount of code that is covered by unit tests) helps identify areas of the code that are potentially more or less brittle.
|
|
|
|
Coverage requires the dependencies for integration tests:
|
|
|
|
```bash
|
|
poetry install --with test_integration
|
|
```
|
|
|
|
To get a report of current coverage, run the following:
|
|
|
|
```bash
|
|
make coverage
|
|
```
|