chroma-core/chroma · error · NotImplementedError

Indexing status is not implemented for SegmentAPI

Error message

Indexing status is not implemented for SegmentAPI

What it means

Chroma's embedded, in-process backend (SegmentAPI — used by chromadb.Client, EphemeralClient and PersistentClient) does not implement the indexing-status operation declared on the shared API base: _get_indexing_status unconditionally raises NotImplementedError. Indexing progress (indexed vs pending ops) only exists where a server-side indexer can lag behind writes; embedded mode writes records into local segments synchronously, so there is no status to report.

Source

Thrown at chromadb/api/segment.py:473

        )

    @override
    def _fork_count(
        self,
        collection_id: UUID,
        tenant: str = DEFAULT_TENANT,
        database: str = DEFAULT_DATABASE,
    ) -> int:
        raise NotImplementedError("Fork count is not implemented for SegmentAPI")

    @override
    def _get_indexing_status(
        self,
        collection_id: UUID,
        tenant: str = DEFAULT_TENANT,
        database: str = DEFAULT_DATABASE,
    ) -> "IndexingStatus":
        raise NotImplementedError("Indexing status is not implemented for SegmentAPI")

    @override
    def _search(
        self,
        collection_id: UUID,
        searches: List[Search],
        tenant: str = DEFAULT_TENANT,
        database: str = DEFAULT_DATABASE,
        read_level: ReadLevel = ReadLevel.INDEX_AND_WAL,
    ) -> SearchResult:
        raise NotImplementedError("Search is not implemented for SegmentAPI")

    @trace_method("SegmentAPI.delete_collection", OpenTelemetryGranularity.OPERATION)
    @override
    @rate_limit
    def delete_collection(
        self,
        name: str,

View on GitHub (pinned to aecdd12c8a)

Solutions

  1. Connect with chromadb.HttpClient to a running Chroma server, which implements get_indexing_status
  2. Feature-detect and degrade gracefully: wrap the call in try/except NotImplementedError and treat embedded mode as fully indexed
  3. Check client.get_settings().chroma_api_impl equals 'chromadb.api.segment.SegmentAPI' and skip the call in that case

Example fix

// before
coll = chromadb.PersistentClient(path='./chroma').get_collection('docs')
status = coll.get_indexing_status()  # NotImplementedError

// after
try:
    status = coll.get_indexing_status()
except NotImplementedError:
    status = None  # embedded mode: writes are synchronous, no indexing lag
Defensive patterns

Strategy: try-catch

Validate before calling

import chromadb

def supports_indexing_status(client: chromadb.ClientAPI) -> bool:
    impl = client.get_settings().chroma_api_impl
    return impl not in ('chromadb.api.segment.SegmentAPI', 'chromadb.api.rust.RustBindingsAPI')

Try / catch

try:
    status = coll.get_indexing_status()
except NotImplementedError:
    status = None  # embedded backend: treat as fully indexed

Prevention

When it happens

Trigger: Calling collection.get_indexing_status() (which delegates to client._get_indexing_status(collection_id, ...)) on any embedded client: chromadb.Client(), chromadb.EphemeralClient(), or chromadb.PersistentClient(path=...).

Common situations: Code written against a Chroma server (Docker) is reused in unit tests that swap in an embedded PersistentClient; CI replaces HttpClient with an in-process client for speed; progress reporting polls indexing status after bulk ingestion while running embedded.

Related errors


AI-assisted analysis of chroma-core/chroma@aecdd12c8a (2026-08-16). Data as JSON: /api/errors/d63ad68b3c932dd5. Report an issue: GitHub.