Spaces:
Runtime error
Runtime error
| # 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 | |