Spaces:
Sleeping
Sleeping
# CIP-5: Large Batch Handling Improvements Proposal | |
## Status | |
Current Status: `Under Discussion` | |
## **Motivation** | |
As users start putting Chroma in its paces and storing ever-increasing datasets, we must ensure that errors | |
related to significant and potentially expensive batches are handled gracefully. This CIP proposes to add a new | |
setting, `max_batch_size` API, on the local segment API and use it to split large batches into smaller ones. | |
## **Public Interfaces** | |
The following interfaces are impacted: | |
- New Server API endpoint - `/pre-flight-checks` | |
- New `max_batch_size` property on the `API` interface | |
- Updated `_add`, `_update` and `_upsert` methods on `chromadb.api.segment.SegmentAPI` | |
- Updated `_add`, `_update` and `_upsert` methods on `chromadb.api.fastapi.FastAPI` | |
- New utility library `batch_utils.py` | |
- New exception raised when batch size exceeds `max_batch_size` | |
## **Proposed Changes** | |
We propose the following changes: | |
- The new `max_batch_size` property is now available in the `API` interface. The property relies on the | |
underlying `Producer` class | |
to fetch the actual value. The property will be implemented by both `chromadb.api.segment.SegmentAPI` | |
and `chromadb.api.fastapi.FastAPI` | |
- `chromadb.api.segment.SegmentAPI` will implement the `max_batch_size` property by fetching the value from the | |
`Producer` class. | |
- `chromadb.api.fastapi.FastAPI` will implement the `max_batch_size` by fetching it from a new `/pre-flight-checks` | |
endpoint on the Server. | |
- New `/pre-flight-checks` endpoint on the Server will return a dictionary with pre-flight checks the client must | |
fulfil to integrate with the server side. For now, we propose using this only for `max_batch_size`, but we can | |
add more checks in the future. The pre-flight checks will be only fetched once per client and cached for the duration | |
of the client's lifetime. | |
- Updated `_add`, `_update` and `_upsert` method on `chromadb.api.segment.SegmentAPI` to validate batch size. | |
- Updated `_add`, `_update` and `_upsert` method on `chromadb.api.fastapi.FastAPI` to validate batch size (client-side | |
validation) | |
- New utility library `batch_utils.py` will contain the logic for splitting batches into smaller ones. | |
## **Compatibility, Deprecation, and Migration Plan** | |
The change will be fully compatible with existing implementations. The changes will be transparent to the user. | |
## **Test Plan** | |
New tests: | |
- Batch splitting tests for `chromadb.api.segment.SegmentAPI` | |
- Batch splitting tests for `chromadb.api.fastapi.FastAPI` | |
- Tests for `/pre-flight-checks` endpoint | |
## **Rejected Alternatives** | |
N/A | |