|
| 1 | +# Contributing to LangChain |
| 2 | + |
| 3 | +Hi there! Thank you for even being interested in contributing to LangChain. |
| 4 | +As an open source project in a rapidly developing field, we are extremely open |
| 5 | +to contributions, whether it be in the form of a new feature, improved infra, or better documentation. |
| 6 | + |
| 7 | +To contribute to this project, please follow a ["fork and pull request"](https://docs.github.com/en/get-started/quickstart/contributing-to-projects) workflow. |
| 8 | +Please do not try to push directly to this repo unless you are maintainer. |
| 9 | + |
| 10 | +## πΊοΈContributing Guidelines |
| 11 | + |
| 12 | +### π©GitHub Issues |
| 13 | + |
| 14 | +Our [issues](https://github.com/hwchase17/langchainjs/issues) page is kept up to date |
| 15 | +with bugs, improvements, and feature requests. There is a taxonomy of labels to help |
| 16 | +with sorting and discovery of issues of interest. These include: |
| 17 | + |
| 18 | +- prompts: related to prompt tooling/infra. |
| 19 | +- llms: related to LLM wrappers/tooling/infra. |
| 20 | +- chains |
| 21 | +- utilities: related to different types of utilities to integrate with (Python, SQL, etc.). |
| 22 | +- agents |
| 23 | +- memory |
| 24 | +- applications: related to example applications to build |
| 25 | + |
| 26 | +If you start working on an issue, please assign it to yourself. |
| 27 | + |
| 28 | +If you are adding an issue, please try to keep it focused on a single modular bug/improvement/feature. |
| 29 | +If the two issues are related, or blocking, please link them rather than keep them as one single one. |
| 30 | + |
| 31 | +We will try to keep these issues as up to date as possible, though |
| 32 | +with the rapid rate of develop in this field some may get out of date. |
| 33 | +If you notice this happening, please just let us know. |
| 34 | + |
| 35 | +### πGetting Help |
| 36 | + |
| 37 | +Although we try to have a developer setup to make it as easy as possible for others to contribute (see below) |
| 38 | +it is possible that some pain point may arise around environment setup, linting, documentation, or other. |
| 39 | +Should that occur, please contact a maintainer! Not only do we want to help get you unblocked, |
| 40 | +but we also want to make sure that the process is smooth for future contributors. |
| 41 | + |
| 42 | +In a similar vein, we do enforce certain linting, formatting, and documentation standards in the codebase. |
| 43 | +If you are finding these difficult (or even just annoying) to work with, |
| 44 | +feel free to contact a maintainer for help - we do not want these to get in the way of getting |
| 45 | +good code into the codebase. |
| 46 | + |
| 47 | +### πRelease process |
| 48 | + |
| 49 | +# TODO: |
| 50 | +As of now, LangChain has an ad hoc release process: releases are cut with high frequency via by |
| 51 | +a developer and published to [PyPI](https://pypi.org/project/langchain/). |
| 52 | + |
| 53 | +LangChain follows the [semver](https://semver.org/) versioning standard. However, as pre-1.0 software, |
| 54 | +even patch releases may contain [non-backwards-compatible changes](https://semver.org/#spec-item-4). |
| 55 | + |
| 56 | +If your contribution has made its way into a release, we will want to give you credit on Twitter (only if you want though)! |
| 57 | +If you have a Twitter account you would like us to mention, please let us know in the PR or in another manner. |
| 58 | + |
| 59 | +## πQuick Start |
| 60 | + |
| 61 | +# TODO |
| 62 | + |
| 63 | +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. |
| 64 | + |
| 65 | +βNote: If you use `Conda` or `Pyenv` as your environment / package manager, avoid dependency conflicts by doing the following first: |
| 66 | +1. *Before installing Poetry*, create and activate a new Conda env (e.g. `conda create -n langchain python=3.9`) |
| 67 | +2. Install Poetry (see above) |
| 68 | +3. Tell Poetry to use the virtualenv python environment (`poetry config virtualenvs.prefer-active-python true`) |
| 69 | +4. Continue with the following steps. |
| 70 | + |
| 71 | +To install requirements: |
| 72 | + |
| 73 | +```bash |
| 74 | +poetry install -E all |
| 75 | +``` |
| 76 | + |
| 77 | +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. |
| 78 | + |
| 79 | +Now, you should be able to run the common tasks in the following section. |
| 80 | + |
| 81 | +## β
Common Tasks |
| 82 | + |
| 83 | + |
| 84 | +### Testing: TODO |
| 85 | + |
| 86 | +Unit tests cover modular logic that does not require calls to outside APIs. |
| 87 | + |
| 88 | +To run unit tests: |
| 89 | + |
| 90 | +```bash |
| 91 | +make test |
| 92 | +``` |
| 93 | + |
| 94 | +If you add new logic, please add a unit test. |
| 95 | + |
| 96 | +Integration tests cover logic that requires making calls to outside APIs (often integration with other services). |
| 97 | + |
| 98 | +To run integration tests: |
| 99 | + |
| 100 | +```bash |
| 101 | +make integration_tests |
| 102 | +``` |
| 103 | + |
| 104 | +If you add support for a new external API, please add a new integration test. |
| 105 | + |
| 106 | + |
| 107 | +## Documentation: TODO |
| 108 | + |
| 109 | +### Contribute Documentation |
| 110 | + |
| 111 | +Docs are largely autogenerated by [sphinx](https://www.sphinx-doc.org/en/master/) from the code. |
| 112 | + |
| 113 | +For that reason, we ask that you add good documentation to all classes and methods. |
| 114 | + |
| 115 | +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. |
| 116 | + |
| 117 | +### Build Documentation Locally |
| 118 | + |
| 119 | +Before building the documentation, it is always a good idea to clean the build directory: |
| 120 | + |
| 121 | +```bash |
| 122 | +make docs_clean |
| 123 | +``` |
| 124 | + |
| 125 | +Next, you can run the linkchecker to make sure all links are valid: |
| 126 | + |
| 127 | +```bash |
| 128 | +make docs_linkcheck |
| 129 | +``` |
| 130 | + |
| 131 | +Finally, you can build the documentation as outlined below: |
| 132 | + |
| 133 | +```bash |
| 134 | +make docs_build |
| 135 | +``` |
0 commit comments