mirror of
https://github.com/hwchase17/langchain.git
synced 2025-08-18 00:51:18 +00:00
unit test / code coverage improvements (#322)
This PR has two contributions: 1. Add test for when stop token is found in middle of text 2. Add code coverage tooling and instructions - Add pytest-cov via poetry - Add necessary config files - Add new make instruction for `coverage` - Update README with coverage guidance - Update minor README formatting/spelling Co-authored-by: Hunter Gerlach <hunter@huntergerlach.com>
This commit is contained in:
parent
8861770bd0
commit
482611f426
2
.coveragerc
Normal file
2
.coveragerc
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
[run]
|
||||||
|
omit = tests/*
|
40
.github/workflows/lint.yml
vendored
40
.github/workflows/lint.yml
vendored
@ -6,7 +6,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
POETRY_VERSION: "1.2.0"
|
POETRY_VERSION: "1.3.1"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -14,23 +14,23 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version:
|
python-version:
|
||||||
- "3.8"
|
- "3.8"
|
||||||
- "3.9"
|
- "3.9"
|
||||||
- "3.10"
|
- "3.10"
|
||||||
- "3.11"
|
- "3.11"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Install poetry
|
- name: Install poetry
|
||||||
run: |
|
run: |
|
||||||
pipx install poetry==$POETRY_VERSION
|
pipx install poetry==$POETRY_VERSION
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
cache: poetry
|
cache: poetry
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: |
|
run: |
|
||||||
poetry install
|
poetry install
|
||||||
- name: Analysing the code with our lint
|
- name: Analysing the code with our lint
|
||||||
run: |
|
run: |
|
||||||
make lint
|
make lint
|
||||||
|
36
.github/workflows/test.yml
vendored
36
.github/workflows/test.yml
vendored
@ -6,7 +6,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
POETRY_VERSION: "1.2.0"
|
POETRY_VERSION: "1.3.1"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
@ -14,21 +14,21 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
python-version:
|
python-version:
|
||||||
- "3.8"
|
- "3.8"
|
||||||
- "3.9"
|
- "3.9"
|
||||||
- "3.10"
|
- "3.10"
|
||||||
- "3.11"
|
- "3.11"
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Install poetry
|
- name: Install poetry
|
||||||
run: pipx install poetry==$POETRY_VERSION
|
run: pipx install poetry==$POETRY_VERSION
|
||||||
- name: Set up Python ${{ matrix.python-version }}
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
uses: actions/setup-python@v4
|
uses: actions/setup-python@v4
|
||||||
with:
|
with:
|
||||||
python-version: ${{ matrix.python-version }}
|
python-version: ${{ matrix.python-version }}
|
||||||
cache: 'poetry'
|
cache: "poetry"
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: poetry install
|
run: poetry install
|
||||||
- name: Run unit tests
|
- name: Run unit tests
|
||||||
run: |
|
run: |
|
||||||
make tests
|
make tests
|
||||||
|
@ -18,7 +18,7 @@ with sorting and discovery of issues of interest. These include:
|
|||||||
- prompts: related to prompt tooling/infra.
|
- prompts: related to prompt tooling/infra.
|
||||||
- llms: related to LLM wrappers/tooling/infra.
|
- llms: related to LLM wrappers/tooling/infra.
|
||||||
- chains
|
- chains
|
||||||
- utilities: related to different types of utilities to integrate with (Python, SQL, etc).
|
- utilities: related to different types of utilities to integrate with (Python, SQL, etc.).
|
||||||
- agents
|
- agents
|
||||||
- memory
|
- memory
|
||||||
- applications: related to example applications to build
|
- applications: related to example applications to build
|
||||||
@ -26,7 +26,7 @@ with sorting and discovery of issues of interest. These include:
|
|||||||
If you start working on an issue, please assign it to yourself.
|
If you start working on an issue, please assign it to yourself.
|
||||||
|
|
||||||
If you are adding an issue, please try to keep it focused on a single modular bug/improvement/feature.
|
If you are adding an issue, please try to keep it focused on a single modular bug/improvement/feature.
|
||||||
If two issues are related, or blocking, please link them rather than keep them as one single one.
|
If the two issues are related, or blocking, please link them rather than keep them as one single one.
|
||||||
|
|
||||||
We will try to keep these issues as up to date as possible, though
|
We will try to keep these issues as up to date as possible, though
|
||||||
with the rapid rate of develop in this field some may get out of date.
|
with the rapid rate of develop in this field some may get out of date.
|
||||||
@ -55,12 +55,11 @@ even patch releases may contain [non-backwards-compatible changes](https://semve
|
|||||||
If your contribution has made its way into a release, we will want to give you credit on Twitter (only if you want though)!
|
If your contribution has made its way into a release, we will want to give you credit on Twitter (only if you want though)!
|
||||||
If you have a Twitter account you would like us to mention, please let us know in the PR or in another manner.
|
If you have a Twitter account you would like us to mention, please let us know in the PR or in another manner.
|
||||||
|
|
||||||
|
|
||||||
## 🤖Developer Setup
|
## 🤖Developer Setup
|
||||||
|
|
||||||
### 🚀Quick Start
|
### 🚀Quick Start
|
||||||
|
|
||||||
This project uses [Poetry](https://python-poetry.org/) as a dependency manager. Check out Poetry's own [documentation on how to install it](https://python-poetry.org/docs/#installation) on your system before proceeding.
|
This project uses [Poetry](https://python-poetry.org/) as a dependency manager. Check out Poetry's [documentation on how to install it](https://python-poetry.org/docs/#installation) on your system before proceeding.
|
||||||
|
|
||||||
To install requirements:
|
To install requirements:
|
||||||
|
|
||||||
@ -68,7 +67,7 @@ To install requirements:
|
|||||||
poetry install -E all
|
poetry install -E all
|
||||||
```
|
```
|
||||||
|
|
||||||
This will install all requirements for running the package, examples, linting, formatting, and tests. Note the `-E all` flag will install all optional dependencies necessary for integration testing.
|
This will install all requirements for running the package, examples, linting, formatting, tests, and coverage. Note the `-E all` flag will install all optional dependencies necessary for integration testing.
|
||||||
|
|
||||||
Now, you should be able to run the common tasks in the following section.
|
Now, you should be able to run the common tasks in the following section.
|
||||||
|
|
||||||
@ -76,7 +75,7 @@ Now, you should be able to run the common tasks in the following section.
|
|||||||
|
|
||||||
#### Code Formatting
|
#### Code Formatting
|
||||||
|
|
||||||
Formatting for this project is a combination of [Black](https://black.readthedocs.io/en/stable/) and [isort](https://pycqa.github.io/isort/).
|
Formatting for this project is done via a combination of [Black](https://black.readthedocs.io/en/stable/) and [isort](https://pycqa.github.io/isort/).
|
||||||
|
|
||||||
To run formatting for this project:
|
To run formatting for this project:
|
||||||
|
|
||||||
@ -86,7 +85,7 @@ make format
|
|||||||
|
|
||||||
#### Linting
|
#### Linting
|
||||||
|
|
||||||
Linting for this project is a combination of [Black](https://black.readthedocs.io/en/stable/), [isort](https://pycqa.github.io/isort/), [flake8](https://flake8.pycqa.org/en/latest/), and [mypy](http://mypy-lang.org/).
|
Linting for this project is done via a combination of [Black](https://black.readthedocs.io/en/stable/), [isort](https://pycqa.github.io/isort/), [flake8](https://flake8.pycqa.org/en/latest/), and [mypy](http://mypy-lang.org/).
|
||||||
|
|
||||||
To run linting for this project:
|
To run linting for this project:
|
||||||
|
|
||||||
@ -94,11 +93,21 @@ To run linting for this project:
|
|||||||
make lint
|
make lint
|
||||||
```
|
```
|
||||||
|
|
||||||
We recognize linting can be annoying - if you do not want to do it, please contact a project maintainer and they can help you with it. We do not want this to be a blocker for good code getting contributed.
|
We recognize linting can be annoying - if you do not want to do it, please contact a project maintainer, and they can help you with it. We do not want this to be a blocker for good code getting contributed.
|
||||||
|
|
||||||
|
#### 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.
|
||||||
|
|
||||||
|
To get a report of current coverage, run the following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make coverage
|
||||||
|
```
|
||||||
|
|
||||||
#### Testing
|
#### Testing
|
||||||
|
|
||||||
Unit tests cover modular logic that does not require calls to outside apis.
|
Unit tests cover modular logic that does not require calls to outside APIs.
|
||||||
|
|
||||||
To run unit tests:
|
To run unit tests:
|
||||||
|
|
||||||
@ -142,4 +151,4 @@ Docs are largely autogenerated by [sphinx](https://www.sphinx-doc.org/en/master/
|
|||||||
|
|
||||||
For that reason, we ask that you add good documentation to all classes and methods.
|
For that reason, we ask that you add good documentation to all classes and methods.
|
||||||
|
|
||||||
Similar to linting, we recognize documentation can be annoying - if you do not want to do it, please contact a project maintainer and they can help you with it. We do not want this to be a blocker for good code getting contributed.
|
Similar to linting, we recognize documentation can be annoying. If you do not want to do it, please contact a project maintainer, and they can help you with it. We do not want this to be a blocker for good code getting contributed.
|
||||||
|
6
Makefile
6
Makefile
@ -1,5 +1,11 @@
|
|||||||
.PHONY: format lint tests integration_tests
|
.PHONY: format lint tests integration_tests
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
poetry run pytest --cov \
|
||||||
|
--cov-config=.coveragerc \
|
||||||
|
--cov-report xml \
|
||||||
|
--cov-report term-missing:skip-covered
|
||||||
|
|
||||||
format:
|
format:
|
||||||
poetry run black .
|
poetry run black .
|
||||||
poetry run isort .
|
poetry run isort .
|
||||||
|
@ -13,23 +13,24 @@
|
|||||||
Large language models (LLMs) are emerging as a transformative technology, enabling
|
Large language models (LLMs) are emerging as a transformative technology, enabling
|
||||||
developers to build applications that they previously could not.
|
developers to build applications that they previously could not.
|
||||||
But using these LLMs in isolation is often not enough to
|
But using these LLMs in isolation is often not enough to
|
||||||
create a truly powerful app - the real power comes when you are able to
|
create a truly powerful app - the real power comes when you can combine them with other sources of computation or knowledge.
|
||||||
combine them with other sources of computation or knowledge.
|
|
||||||
|
|
||||||
This library is aimed at assisting in the development of those types of applications.
|
This library is aimed at assisting in the development of those types of applications.
|
||||||
|
|
||||||
## 📖 Documentation
|
## 📖 Documentation
|
||||||
|
|
||||||
Please see [here](https://langchain.readthedocs.io/en/latest/?) for full documentation on:
|
Please see [here](https://langchain.readthedocs.io/en/latest/?) for full documentation on:
|
||||||
- Getting started (installation, setting up environment, simple examples)
|
|
||||||
|
- Getting started (installation, setting up the environment, simple examples)
|
||||||
- How-To examples (demos, integrations, helper functions)
|
- How-To examples (demos, integrations, helper functions)
|
||||||
- Reference (full API docs)
|
- Reference (full API docs)
|
||||||
- Resources (high level explanation of core concepts)
|
Resources (high-level explanation of core concepts)
|
||||||
|
|
||||||
## 🚀 What can this help with?
|
## 🚀 What can this help with?
|
||||||
|
|
||||||
There are four main areas that LangChain is designed to help with.
|
There are four main areas that LangChain is designed to help with.
|
||||||
These are, in increasing order of complexity:
|
These are, in increasing order of complexity:
|
||||||
|
|
||||||
1. LLM and Prompts
|
1. LLM and Prompts
|
||||||
2. Chains
|
2. Chains
|
||||||
3. Agents
|
3. Agents
|
||||||
|
4799
poetry.lock
generated
4799
poetry.lock
generated
File diff suppressed because it is too large
Load Diff
@ -25,6 +25,7 @@ beautifulsoup4 = {version = "^4", optional = true}
|
|||||||
|
|
||||||
[tool.poetry.group.test.dependencies]
|
[tool.poetry.group.test.dependencies]
|
||||||
pytest = "^7.2.0"
|
pytest = "^7.2.0"
|
||||||
|
pytest-cov = "^4.0.0"
|
||||||
pytest-dotenv = "^0.5.2"
|
pytest-dotenv = "^0.5.2"
|
||||||
|
|
||||||
[tool.poetry.group.lint.dependencies]
|
[tool.poetry.group.lint.dependencies]
|
||||||
|
@ -10,6 +10,9 @@ def test_enforce_stop_tokens() -> None:
|
|||||||
text = "foo bar baz"
|
text = "foo bar baz"
|
||||||
output = enforce_stop_tokens(text, ["moo", "baz", "bar"])
|
output = enforce_stop_tokens(text, ["moo", "baz", "bar"])
|
||||||
assert output == "foo "
|
assert output == "foo "
|
||||||
|
text = "foo bar baz"
|
||||||
|
output = enforce_stop_tokens(text, ["moo", "bar"])
|
||||||
|
assert output == "foo "
|
||||||
|
|
||||||
|
|
||||||
def test_enforce_stop_tokens_none() -> None:
|
def test_enforce_stop_tokens_none() -> None:
|
||||||
|
Loading…
Reference in New Issue
Block a user