Spaces:
Running
Running
# Development Instructions | |
This project uses the testing, build and release standards specified | |
by the PyPA organization and documented at | |
https://packaging.python.org. | |
## Setup | |
Because of the dependencies it relies on (like `pytorch`), this project does not support Python version >3.10.0. | |
Set up a virtual environment and install the project's requirements | |
and dev requirements: | |
``` | |
python3 -m venv venv # Only need to do this once | |
source venv/bin/activate # Do this each time you use a new shell for the project | |
pip install -r requirements.txt | |
pip install -r requirements_dev.txt | |
pre-commit install # install the precommit hooks | |
``` | |
You can also install `chromadb` the `pypi` package locally and in editable mode with `pip install -e .`. | |
## Running Chroma | |
Chroma can be run via 3 modes: | |
1. Standalone and in-memory: | |
```python | |
import chromadb | |
api = chromadb.Client() | |
print(api.heartbeat()) | |
``` | |
2. Standalone and in-memory with persistence: | |
This by default saves your db and your indexes to a `.chroma` directory and can also load from them. | |
```python | |
import chromadb | |
api = chromadb.PersistentClient(path="/path/to/persist/directory") | |
print(api.heartbeat()) | |
``` | |
3. With a persistent backend and a small frontend client | |
Run `chroma run --path /chroma_db_path` | |
```python | |
import chromadb | |
api = chromadb.HttpClient(host="localhost", port="8000") | |
print(api.heartbeat()) | |
``` | |
## Local dev setup for distributed chroma | |
We use tilt for providing local dev setup. Tilt is an open source project | |
##### Requirement | |
- Docker | |
- Local Kubernetes cluster (Recommended: [OrbStack](https://orbstack.dev/) for mac, [Kind](https://kind.sigs.k8s.io/) for linux) | |
- [Tilt](https://docs.tilt.dev/) | |
For starting the distributed Chroma in the workspace, use `tilt up`. It will create all the required resources and build the necessary Docker image in the current kubectl context. | |
Once done, it will expose Chroma on port 8000. You can also visit the Tilt dashboard UI at http://localhost:10350/. To clean and remove all the resources created by Tilt, use `tilt down`. | |
## Testing | |
Unit tests are in the `/chromadb/test` directory. | |
To run unit tests using your current environment, run `pytest`. | |
## Manual Build | |
To manually build a distribution, run `python -m build`. | |
The project's source and wheel distributions will be placed in the `dist` directory. | |
## Manual Release | |
Not yet implemented. | |
## Versioning | |
This project uses PyPA's `setuptools_scm` module to determine the | |
version number for build artifacts, meaning the version number is | |
derived from Git rather than hardcoded in the repository. For full | |
details, see the | |
[documentation for setuptools_scm](https://github.com/pypa/setuptools_scm/). | |
In brief, version numbers are generated as follows: | |
- If the current git head is tagged, the version number is exactly the | |
tag (e.g, `0.0.1`). | |
- If the the current git head is a clean checkout, but is not tagged, | |
the version number is a patch version increment of the most recent | |
tag, plus `devN` where N is the number of commits since the most | |
recent tag. For example, if there have been 5 commits since the | |
`0.0.1` tag, the generated version will be `0.0.2-dev5`. | |
- If the current head is not a clean checkout, a `+dirty` local | |
version will be appended to the version number. For example, | |
`0.0.2-dev5+dirty`. | |
At any point, you can manually run `python -m setuptools_scm` to see | |
what version would be assigned given your current state. | |
## Continuous Integration | |
This project uses Github Actions to run unit tests automatically upon | |
every commit to the main branch. See the documentation for Github | |
Actions and the flow definitions in `.github/workflows` for details. | |
## Continuous Delivery | |
Not yet implemented. | |