These commits are when the Protocol Buffers files have changed: (only the last 100 relevant commits are shown)
| Commit: | 72343b8 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](wqs): Add manual function DLQ RPC (#7612)
The documentation is generated from this commit.
| Commit: | 71e7649 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Add manual function DLQ RPC
The documentation is generated from this commit.
| Commit: | d747acb | |
|---|---|---|
| Author: | chroma-droid | |
| Committer: | GitHub | |
[HOTFIX] applying PR #7582 to release/2026-08-18 (#7604) This PR cherry-picks the commit 290a4788fa773b49ce899c57eda52240659ac6a5 onto release/2026-08-18. If there are unresolved conflicts, please resolve them manually. Co-authored-by: tanujnay112 <tanujnay112@live.com>
The documentation is generated from this commit.
| Commit: | 24ea8c4 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | github-actions[bot] | |
[ENH](wqs): Add manual function DLQ RPC (#7582) ## Summary - Adds a SysDB RPC to set an attached function’s failure count to an exact non-negative value, scoped by `(fn_id, input_coll_id)`. - Adds WQS `SetFunctionFailureCount`: updates SysDB first, then durably mirrors the returned count into the WQS Parquet snapshot. - Returns `NotFound` when the WQS entry is absent, while leaving SysDB as the authoritative count. ## Testing - Go SysDB DAO test for absolute assignment. - Tilt-gated WQS integration test covering SysDB state and `GetWork` DLQ filtering. - Go package compile check.
The documentation is generated from this commit.
| Commit: | 290a478 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](wqs): Add manual function DLQ RPC (#7582) ## Summary - Adds a SysDB RPC to set an attached function’s failure count to an exact non-negative value, scoped by `(fn_id, input_coll_id)`. - Adds WQS `SetFunctionFailureCount`: updates SysDB first, then durably mirrors the returned count into the WQS Parquet snapshot. - Returns `NotFound` when the WQS entry is absent, while leaving SysDB as the authoritative count. ## Testing - Go SysDB DAO test for absolute assignment. - Tilt-gated WQS integration test covering SysDB state and `GetWork` DLQ filtering. - Go package compile check.
The documentation is generated from this commit.
| Commit: | 8408ea2 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Add manual function DLQ RPC
The documentation is generated from this commit.
| Commit: | cad0707 | |
|---|---|---|
| Author: | Tanuj Nayak | |
[BUG](worker): Skip in-progress function work
| Commit: | 78ced9b | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Add manual work insertion RPC
| Commit: | 1d66e67 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Add manual work deletion RPC
| Commit: | a425453 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Add manual function DLQ RPC
The documentation is generated from this commit.
| Commit: | 5879991 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](fn-consumer): Dead-letter fn work (#7572) ## Summary Adds fn-consumer DLQ behavior for attached-function work. - Reports a failed function batch to WQS for each input collection. - Before dispatch, reads the attached function from SysDB. - Logs and skips functions whose failure count has reached the configurable threshold (default: 5). - Leaves skipped queue records in WQS, per the current design.
| Commit: | c95f10e | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Persist function failure counts
| Commit: | 584eb4a | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](wqs): Report fn failures (#7571) ## Summary Adds the WQS failure-reporting boundary. - Adds `FailFunction(fn_id, input_coll_id)` to the WQS API. - Validates IDs and forwards failures to SysDB for durable count increments. - Does not add WQS-specific DLQ persistence; queue records remain in WQS. - Adds Kubernetes integration coverage for WQS → SysDB failure reporting.
| Commit: | 46e9692 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Report fn failures
| Commit: | 1ca5cda | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](sysdb): Track fn failures (#7570) ## Summary Adds durable DLQ failure tracking for attached functions in SysDB. - Adds `attached_functions.failure_count` with an Atlas migration and updated checksum. - Adds the SysDB failure-reporting API used by WQS. - Resets `failure_count` in the existing successful invocation-completion SQL update; no separate reset query is issued. - Adds DAO coverage for failure-count increments.
| Commit: | 66c6a82 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Persist function failure counts
| Commit: | 44be6b5 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](wqs): Report fn failures
| Commit: | 870c402 | |
|---|---|---|
| Author: | Tanuj Nayak | |
[ENH](sysdb): Return attached failure count
| Commit: | 68db2e3 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](sysdb): Track fn failures
| Commit: | 87b3f2b | |
|---|---|---|
| Author: | dbeglord | |
[CLN](sysdb): Remove min_records_for_invocation The field claimed to control how many new records accumulate before an attached function is invoked. Nothing ever compared it to a record count — every reference across Go and Rust was storage, a re-attach idempotency check, a pass-through, or a display line. Foundation set it to 100 and got the compactor's default of 10. The real gate is `should_compact_at` in the log service: uncompacted record count against the compactor's `min_compaction_size`, plus a reinsert threshold and a time-on-log timeout. None of that is per-function, so there was no knob here to keep. An inert setting is worse than a missing one — it invites tuning that does nothing and misleads anyone reading the config to understand cadence. Proto fields 8 and 9 are reserved rather than freed, so the wire numbers can never be recycled. Removal is safe in both directions during a rolling deploy precisely because the value was never read: an old client still sending it is ignored, and a new client omitting it changes no behavior. The DB column is deliberately left in place. Dropping it in the same release would break old sysdb pods mid-rollout, which still SELECT it; the column is NOT NULL with a default, so new writes fill it harmlessly. A follow-up migration should drop it once this release has rolled out. One unrelated fix was required to land: examples/task_api_example.py treated attach_function's `(function, created)` tuple as a single object, which mypy rejects. Staging the file for the comment update surfaced it. Verified: `cargo check --workspace --all-targets` and `cargo fmt --check` clean; `go build` and `go vet` clean over pkg/sysdb, and vet compiles the test files so the test edits are covered.
| Commit: | 57b5710 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | tanujnay112 | |
[CHORE](sysdb): simplify finish API
| Commit: | 1bc5f24 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[BUG](work-queue): expose compaction frontier to consumer (#7394) ## Description of changes This PR fixes a bug where the fn-consumer work queue was not exposing the **compaction frontier** — the offset up to which the input collection has been compacted. Without this, the fn-consumer couldn't tell whether a queued work item was stale (i.e., the attached function had already processed past the queued offset), leading to redundant or incorrect re-execution. The fix threads `compaction_offset` through the entire pipeline: 1. Proto: add `compaction_offset` to `WorkItemResult` 2. Work queue server: populate it when serving work items 3. Fn-consumer manager: use it to build `FunctionExecutionInput` (replacing the raw `(CollectionUuid, i64)` tuple) 4. Log fetch orchestrator: fetch attached function state first (when in fn-consumer mode), then use the resolved `completion_offset` from sysdb instead of the stale value from the work queue 5. Function execution context: after fetching, skip work items where the attached function has already reached or passed the queued frontier - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 78d56b6 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | d6d11f0 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | 443b7ae | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](work-queue): require compaction offset (#7358) ## Description of changes This PR makes `compaction_offset` a required field throughout the work queue stack — removing the `Option<i64>` wrapper from the proto, Rust types, and all call sites. This also gets rid of sysdb-based filtering in get_work. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | d26b423 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | ed328f3 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | 0f9751c | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | b4e4361 | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | GitHub | |
[ENH](logservice): add conditional push and insert offset to proto (#7317) ## Description of changes Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. ## Test plan CI ## Migration plan Backwards compatible ## Observability plan N/A ## Documentation Changes N/A Co-authored-by: AI
| Commit: | 03e4a90 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | 7aaa20b | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | 33daa4d | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 65035af | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | cfef885 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
Revert "[BUG](fn-consumer): Read offsets from sysdb" This reverts commit f4ea0ff9c6e4c494a6ddf912cf985be639ade204.
| Commit: | 2198048 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](fn-consumer): Read offsets from sysdb
| Commit: | d864335 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 5af81e3 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | 295fbdc | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | 1dd69d9 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | 35b47e4 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
Revert "[BUG](fn-consumer): Read offsets from sysdb" This reverts commit f4ea0ff9c6e4c494a6ddf912cf985be639ade204.
| Commit: | 1598f57 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](fn-consumer): Read offsets from sysdb
| Commit: | 20ff80a | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | ac1778f | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH](work-queue): add optional compaction offset (#7354) ## Description of changes Part 1 of a stack of changes to persist the input collection compaction offset instead of the function completion offset in the WQS file. This diff starts off by requiring this compaction offset to be sent in the PushWork API. - Improvements & Bug fixes - - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 169b663 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | 615044f | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](fn-consumer): Read offsets from sysdb
| Commit: | 486b99a | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](work-queue): expose compaction frontier Return the queue compaction frontier from GetWork while completion_offset is no longer persisted in the WQS state file. Keep the field optional on the wire so older consumers remain compatible during rollout.
| Commit: | 76b70aa | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
Revert "[BUG](fn-consumer): Read offsets from sysdb" This reverts commit f4ea0ff9c6e4c494a6ddf912cf985be639ade204.
| Commit: | 0d4e9b5 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 566e9f4 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | f4ea0ff | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG](fn-consumer): Read offsets from sysdb
| Commit: | b0df5ac | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 0f14332 | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
document new fields
| Commit: | c384b77 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | 31bf79f | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 215e11d | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | e9e877e | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 2502aa4 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): add optional compaction offset
| Commit: | d2182db | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CHORE](sysdb): simplify finish API
| Commit: | b78eb70 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH](work-queue): require compaction offset
| Commit: | 9d44034 | |
|---|---|---|
| Author: | Tanuj Nayak | |
[ENH](work-queue): add optional compaction offset
| Commit: | 8e5bda3 | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI
| Commit: | 3f8fa38 | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI
| Commit: | 54c196d | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI
| Commit: | dd0ea9a | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI
| Commit: | dfd4413 | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
[ENH](logservice): add conditional push and insert offset to proto Extend PushLogsRequest and PushLogsResponse to support conditional log appends: - Add optional PushLogsCondition with observed_log_offset and read_ids - Add optional first_inserted_record_offset to PushLogsResponse Update all PushLogsRequest construction sites and the log-service response to populate the new fields with None defaults. Co-authored-by: AI
| Commit: | 7331b12 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | tanujnay112 | |
[ENH]: Finish_work and output collection flush are atomic
| Commit: | 6bd423f | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Add scaffolding for functions with many inputs in fn consumer (#7143) ## Description of changes This PR upgrades the fn consumer pipeline to support functions with **multiple input collections**. Previously, `AttachedFunctionExecutor::execute` received a single `Chunk` of records; now it receives a `Vec<Chunk>` — one chunk per input collection. The orchestration layer is restructured to carry batches of `(collection_id, materialized_logs)` pairs through the pipeline, and the fn consumer manager groups work items by function before dispatching them as a single batch. The key structural changes are: 1. `AttachedFunctionExecutor::execute` signature: `Chunk<…>` → `Vec<Chunk<…>>` 2. New `FunctionExecutionBatch` / `FunctionExecutionProgress` / `FunctionContext` types extracted into a new `function_execution` module 3. `ExecuteAttachedFunctionInput` gains `input_batches: Vec<ExecuteAttachedFunctionBatchInput>` replacing the flat `materialized_logs` + `input_record_segment` 4. `FinishAsyncWorkInput` now carries `Vec<FinishAsyncWorkItem>` instead of a single offset 5. `FnConsumerManager` groups work items by function ID and dispatches them as a batch via `FunctionExecutionContext::run` - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | ed66c10 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[CLN](worker): Box function execution fetch future
| Commit: | c136e32 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Add route to allow multiple inputs on an async function (#7142) ## Description of changes This PR adds a new `add_input` route that lets callers associate additional input collections with an existing async attached function. The key data model insight: the `attached_functions` table uses a composite primary key of `(id, input_collection_id)`, so one logical attached function can have multiple rows — one per input collection. Only async functions support multiple inputs. The change spans the full stack: protobuf → Go sysdb coordinator → Rust sysdb client → Rust frontend server → Python API client. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 78e4719 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[TEST](coordinator): Fix attach function collection mocks
| Commit: | 2cf2a47 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[BUG]: WQS repairs on bootup (#7126) ## Description of changes This PR renames `AreInvocationsDone` (which returned `[]bool`) to `CheckInvocationStatus` (which returns a three-state enum). The key semantic change is that the old binary done/not-done is replaced with three states: - `NOT_DONE` (0) — default, work still in progress - `DONE` (1) — completed (soft/hard deleted, or offset advanced with no pending heap entry) - `NEEDS_REPAIR` (2) — offset advanced but `heap_entry_pending=true`, meaning the WQS crashed mid-repair The new `NEEDS_REPAIR` state enables the work queue manager to automatically repair stale entries on bootup, which is the core bug fix this PR addresses. In the proto we replaced the RPC for `AreInvocationsDone` with ``CheckInvocationStatus` this is not backwards compatible but that is fine as there is not production use for the former RPC yet. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 30211ce | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG]: WQS repairs on bootup
| Commit: | 9db5d08 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[BUG]: Fn consumer manager keys its job scheduler on output collection id (#7117) ## Description of changes The `FnConsumerManager` was keying its "in-progress" job scheduler on `(fn_id, input_coll_id)` — a `FnJobKey`. The bug: multiple different attached functions could share the same output collection, and the old key didn't prevent two jobs from writing to the same output collection concurrently. The fix re-keys the in-progress map on `output_coll_id` (`CollectionUuid`), which is the actual resource that must be serialized. To support this, `GetAttachedFunctions` gains a batch `ids` parameter so the manager can look up all output collection IDs in a single sysdb call rather than one per work item. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan _How are these changes tested?_ - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | be08eca | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[BUG]: Fn consumer manager keys its job scheduler on output collection id
| Commit: | d5090bb | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | Robert Escriva | |
[ENH] implement stratified sampling endpoint for collections Add a new sample API that randomly selects records from a collection using stratified sampling over SPANN index strata. Records can be filtered by ID, metadata, or document predicates before sampling. The endpoint accepts a limit and optional seed for reproducibility. Full-stack implementation across all layers: - API types and request/response models (Rust, Python, JS/TS) - Protobuf IDL for distributed query execution - Frontend server routing, metrics, and executor integration - Sample operator with SPANN-aware stratified selection - Sample orchestrator with filter, projection, and shard fan-out - SPANN index reader support for head-count enumeration - Python and JS client bindings Co-authored-by: AI
| Commit: | 1e3c695 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | tanujnay112 | |
[ENH]: Function consumer server
| Commit: | 1d89afc | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH]: Function consumer server
| Commit: | 1f27121 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH]: Function consumer server
| Commit: | 0be016a | |
|---|---|---|
| Author: | Tanuj Nayak | |
[ENH]: Function consumer server
| Commit: | bb8d304 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Add sysdb endpoint to check if invocations are done (#7016) ## Description of changes This PR adds a new `AreInvocationsDone` endpoint to sysdb that lets callers batch-check whether attached function invocations have completed. The check works by comparing `completion_offset > invocation_id AND heap_repair_needed` in the database. - Improvements & Bug fixes - ... - New functionality - New SysDB endpoint as described. ## Test plan _How are these changes tested?_ Go tests added to test the filtering logic of this endpoint. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?
| Commit: | 4491214 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | tanujnay112 | |
[ENH]: Add sysdb endpoint to check if invocations are done
| Commit: | f6a2a2f | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Sysdb calls for finishing function invocation (#7015) ## Description of changes This PR adds two new sysdb RPC endpoints for finishing async attached function invocations: 1. **`TryFinishAsyncAttachedFunctionInvocation`** — records a new completion offset for an async function. If the offset is behind the collection's current log position, it signals that a repair is needed (returns `NeedsRepair`); otherwise it returns `Success`. 2. **`FinalizeAsyncAttachedFunctionRepair`** — called after repair is complete to flip `can_gc` back to `true`. A new `can_gc` column is added to the `attached_functions` table to track whether the function's output is safe to garbage-collect. - Improvements & Bug fixes - N/A - New functionality - Aforementioned new endpoints ## Test plan _How are these changes tested?_ Go tests have been added to test the repair and non-repair cases of these new methods. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ A migration has been added to add a 'can_gc' column to the `attached_functions` table. ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 4552eb8 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Add work queue proto definitions and core types (#7020) ## Description of changes This is the base PR for the work queue service stack. It introduces two things: 1. A protobuf contract (`workqueue.proto`) defining the gRPC API surface 2. Rust core types (`WorkQueueRecord`, `WorkQueueError`, `FinishResult`) that the rest of the stack builds on Nothing is wired up in this change. This is scaffolding for later PRs. - Improvements & Bug fixes - N/A - New functionality - N/A ## Test plan N/A - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 9a5e35a | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | tanujnay112 | |
[ENH]: Sysdb call for function invocation
| Commit: | a2c4068 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Add async mode to functions (#7014) ## Description of changes This PR adds an `is_async` field to the `Function` model, propagating it through the full stack: database schema → Go model → protobuf → Rust types → orchestrator logic. The core behavioral change is in the orchestrator: async functions skip updating the `completion_offset` during processing, because they'll be handled through a separate queue mechanism in later PRs. - Improvements & Bug fixes - N/A - New functionality - Can define a function to be async, attached functions runs of such functions will do the aforementioned async behavior. ## Test plan _How are these changes tested?_ Existing function go tests have been adjusted for this new field. - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ A new `is_async` boolean column is added to `attached_functions` with `NOT NULL DEFAULT false`, ensuring backward compatibility — all existing rows default to synchronous behavior. ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 7e588a3 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
feat: Expose work queue service in Kubernetes - Add port 50054 to compaction service container ports - Create work-queue-service Service to expose the gRPC endpoint - Enable work queue via environment variable CHROMA_WORK_QUEUE__ENABLED - Remove separate work-queue-config.yaml (configuration via env vars)
| Commit: | 2c10700 | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH]: Add async mode to functions
| Commit: | 01e39bf | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
feat: Expose work queue service in Kubernetes - Add port 50054 to compaction service container ports - Create work-queue-service Service to expose the gRPC endpoint - Enable work queue via environment variable CHROMA_WORK_QUEUE__ENABLED - Remove separate work-queue-config.yaml (configuration via env vars)
| Commit: | b7c878c | |
|---|---|---|
| Author: | Claude | |
[ENH]: Add metadata support to Database entity This adds optional metadata field to databases, following the pattern used for Collections. Users can now store arbitrary key-value metadata on databases for organizational and tagging purposes. Changes: - New database_metadata table in Go PostgreSQL and Rust SQLite - Proto updates to Database message and CreateDatabaseRequest - Go backend: dbmodel, DAO, catalog, and gRPC handlers - Rust backend: table definitions, sqlite.rs queries - Python client: AdminAPI, FastAPI endpoints - JavaScript client: AdminClient.createDatabase - Integration tests for database metadata https://claude.ai/code/session_019rHB7PwwuyJvyypxuJVCCs
| Commit: | 3fe4aa5 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | github-actions[bot] | |
Cherry-pick with conflicts: fdcd2165154b6bd6394983c49a9ba02cc71ff925
| Commit: | fdcd216 | |
|---|---|---|
| Author: | tanujnay112 | |
| Committer: | GitHub | |
[ENH]: Enable rebuilds for sharded collections (#6916) ## Description of changes This change adds rebuild capabilities for sharded collections. A rebuild command can now specify a shard index it wants to rebuild. An unspecified one defaults to 0 (first shard). This shard's filepaths are set to empty during rebuild compaction, analogous to all of the segment's filepaths being set to empty before this change. A new struct packaging the rebuild command parameters called `RebuildInfo` is passed to `CompactionContext` now. This contains the desired shard index to be rebuilt. - Improvements & Bug fixes - ... - New functionality - ... ## Test plan Tests have been added in compact.rs. They test rebuilding various shards in the full and partial rebuild scenarios. - [ ] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan _Are there any migrations, or any forwards/backwards compatibility changes needed in order to make sure this change deploys reliably?_ ## Observability plan _What is the plan to instrument and monitor this change?_ ## Documentation Changes _Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the_ [_docs section](https://github.com/chroma-core/chroma/tree/main/docs/docs.trychroma.com)?_
| Commit: | 398cb8e | |
|---|---|---|
| Author: | Tanuj Nayak | |
| Committer: | Tanuj Nayak | |
[ENH]: Enable rebuilds for sharded collections
| Commit: | 602efec | |
|---|---|---|
| Author: | chroma-droid | |
| Committer: | GitHub | |
[HOTFIX] applying PR #6914 to release/2026-04-03 (#6920) This PR cherry-picks the commit f749f58f881830ad5ed4d728529b5d491656f825 onto release/2026-04-03. If there are unresolved conflicts, please resolve them manually. Co-authored-by: Macronova <60079945+Sicheng-Pan@users.noreply.github.com>
| Commit: | ec570d9 | |
|---|---|---|
| Author: | Macronova | |
| Committer: | github-actions[bot] | |
[ENH] Add IndexAndBoundedWal read level (#6914) ## Description of changes Add a new `IndexAndBoundedWal` read level for collection search and count APIs. This level reads from the index plus up to a server-configured number of write-ahead log entries, providing a consistent prefix of the WAL with bounded query latency. Unlike `IndexAndWal` (which reads the entire WAL) or `IndexOnly` (which skips it entirely), `IndexAndBoundedWal` caps the log fetch via the existing `maximum_fetch_count` on `FetchLogOperator`. The limit is controlled by a new `bounded_wal_limit` config field on `QueryServiceConfig` (default 250). - New functionality - `INDEX_AND_BOUNDED_WAL` proto enum variant in `ReadLevel` - `IndexAndBoundedWal` Rust type with bidirectional proto conversions - `bounded_wal_limit` config field on `QueryServiceConfig` (default 250) - Bounded WAL fetch logic in `CountOrchestrator` and `KnnFilterOrchestrator` — clones `FetchLogOperator` with `maximum_fetch_count = Some(bounded_wal_limit)` ## Test plan - [x] Behavioral unit test (`test_read_level_semantics`) in `count.rs` — sets up 5 compacted + 10 uncompacted records and verifies: - `IndexAndWal` → 15 (all records) - `IndexOnly` → 5 (compacted only) - `IndexAndBoundedWal` with limit 3 → 8 (partial WAL) - `IndexAndBoundedWal` with limit 10 → 15 (full WAL) - `IndexAndBoundedWal` with limit 100 → 15 (limit exceeds WAL, reads all available)
| Commit: | f749f58 | |
|---|---|---|
| Author: | Macronova | |
| Committer: | GitHub | |
[ENH] Add IndexAndBoundedWal read level (#6914) ## Description of changes Add a new `IndexAndBoundedWal` read level for collection search and count APIs. This level reads from the index plus up to a server-configured number of write-ahead log entries, providing a consistent prefix of the WAL with bounded query latency. Unlike `IndexAndWal` (which reads the entire WAL) or `IndexOnly` (which skips it entirely), `IndexAndBoundedWal` caps the log fetch via the existing `maximum_fetch_count` on `FetchLogOperator`. The limit is controlled by a new `bounded_wal_limit` config field on `QueryServiceConfig` (default 250). - New functionality - `INDEX_AND_BOUNDED_WAL` proto enum variant in `ReadLevel` - `IndexAndBoundedWal` Rust type with bidirectional proto conversions - `bounded_wal_limit` config field on `QueryServiceConfig` (default 250) - Bounded WAL fetch logic in `CountOrchestrator` and `KnnFilterOrchestrator` — clones `FetchLogOperator` with `maximum_fetch_count = Some(bounded_wal_limit)` ## Test plan - [x] Behavioral unit test (`test_read_level_semantics`) in `count.rs` — sets up 5 compacted + 10 uncompacted records and verifies: - `IndexAndWal` → 15 (all records) - `IndexOnly` → 5 (compacted only) - `IndexAndBoundedWal` with limit 3 → 8 (partial WAL) - `IndexAndBoundedWal` with limit 10 → 15 (full WAL) - `IndexAndBoundedWal` with limit 100 → 15 (limit exceeds WAL, reads all available)
| Commit: | a760f7e | |
|---|---|---|
| Author: | Robert Escriva | |
| Committer: | GitHub | |
[ENH](faults): add fault injection control plane (#6795) ## Description of changes Add the fault injection proto service and the new chroma-faults crate for in-process fault state management. Implement inject, list, and clear RPCs over a shared FaultRegistry, and wire log-service to build and expose the new tonic service while registering the shared Arc in the config registry. ## Test plan CI + further dev ## Migration plan N/A ## Observability plan N/A ## Documentation Changes N/A Co-authored-by: AI
| Commit: | 8a1aacc | |
|---|---|---|
| Author: | Sanket Kedia | |
| Committer: | GitHub | |
[ENH]: Pass down shard_index, num_shards and log_upper_bound_offset to query (#6810) ## Description of changes _Summarize the changes made by this PR._ - Improvements & Bug fixes - New functionality - Introduces new fields - shard_index, num_shards and log_upper_bound_offset in ScanProto and Scan types. - Currently FE just sets shard_index=0, num_shards=1 and log_upper_bound_offset=0. The query nodes don't use these fields - These fields will be used by worker in a future PR to execute logic for only its shard - Handled backwards and forward compatibility. If num_shards is set to 0 (i.e. absent) then query node sets it to 1 ## Test plan _How are these changes tested?_ - [x] Tests pass locally with `pytest` for python, `yarn test` for js, `cargo test` for rust ## Migration plan None ## Observability plan None ## Documentation Changes None
| Commit: | 5e96f83 | |
|---|---|---|
| Author: | Sanket Kedia | |
add log offset upper bound
| Commit: | 0b18bdd | |
|---|---|---|
| Author: | Sanket Kedia | |
[ENH]: Pass down shard id and num shards to query
| Commit: | bac0279 | |
|---|---|---|
| Author: | Claude | |
[ENH] Add description field to collections Add an optional text description field to collections across the full stack: - Python types, proto definitions, and conversion functions - Go model, DB model, DAO, catalog, and gRPC layers - Postgres and SQLite migrations - FastAPI server endpoints and HTTP clients (sync + async) - Abstract API interfaces and SegmentAPI implementation - Collection model classes (sync + async) with modify() support https://claude.ai/code/session_01XmGiw5KPfuugfHgSbPL2pX