--- title: "Chroma" id: integrations-chroma description: "Chroma integration for Haystack" slug: "/integrations-chroma" --- ## haystack_integrations.components.retrievers.chroma.retriever ### ChromaQueryTextRetriever A component for retrieving documents from a [Chroma database](https://docs.trychroma.com/) using the `query` API. Example usage: ```python from haystack import Pipeline from haystack.components.converters import TextFileToDocument from haystack.components.writers import DocumentWriter from haystack_integrations.document_stores.chroma import ChromaDocumentStore from haystack_integrations.components.retrievers.chroma import ChromaQueryTextRetriever file_paths = ... # Chroma is used in-memory so we use the same instances in the two pipelines below document_store = ChromaDocumentStore() indexing = Pipeline() indexing.add_component("converter", TextFileToDocument()) indexing.add_component("writer", DocumentWriter(document_store)) indexing.connect("converter", "writer") indexing.run({"converter": {"sources": file_paths}}) querying = Pipeline() querying.add_component("retriever", ChromaQueryTextRetriever(document_store)) results = querying.run({"retriever": {"query": "Variable declarations", "top_k": 3}}) for d in results["retriever"]["documents"]: print(d.meta, d.score) ``` #### __init__ ```python __init__( document_store: ChromaDocumentStore, filters: dict[str, Any] | None = None, top_k: int = 10, filter_policy: str | FilterPolicy = FilterPolicy.REPLACE, ) -> None ``` Initialize the ChromaQueryTextRetriever. **Parameters:** - **document_store** (ChromaDocumentStore) – an instance of `ChromaDocumentStore`. - **filters** (dict\[str, Any\] | None) – filters to narrow down the search space. - **top_k** (int) – the maximum number of documents to retrieve. - **filter_policy** (str | FilterPolicy) – Policy to determine how filters are applied. #### run ```python run( query: str, filters: dict[str, Any] | None = None, top_k: int | None = None ) -> dict[str, Any] ``` Run the retriever on the given input data. **Parameters:** - **query** (str) – The input data for the retriever. In this case, a plain-text query. - **filters** (dict\[str, Any\] | None) – Filters applied to the retrieved Documents. The way runtime filters are applied depends on the `filter_policy` chosen at retriever initialization. See init method docstring for more details. - **top_k** (int | None) – The maximum number of documents to retrieve. If not specified, the default value from the constructor is used. **Returns:** - dict\[str, Any\] – A dictionary with the following keys: - `documents`: List of documents returned by the search engine. **Raises:** - ValueError – If the specified document store is not found or is not a MemoryDocumentStore instance. #### run_async ```python run_async( query: str, filters: dict[str, Any] | None = None, top_k: int | None = None ) -> dict[str, Any] ``` Asynchronously run the retriever on the given input data. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **query** (str) – The input data for the retriever. In this case, a plain-text query. - **filters** (dict\[str, Any\] | None) – Filters applied to the retrieved Documents. The way runtime filters are applied depends on the `filter_policy` chosen at retriever initialization. See init method docstring for more details. - **top_k** (int | None) – The maximum number of documents to retrieve. If not specified, the default value from the constructor is used. **Returns:** - dict\[str, Any\] – A dictionary with the following keys: - `documents`: List of documents returned by the search engine. **Raises:** - ValueError – If the specified document store is not found or is not a MemoryDocumentStore instance. #### from_dict ```python from_dict(data: dict[str, Any]) -> ChromaQueryTextRetriever ``` Deserializes the component from a dictionary. **Parameters:** - **data** (dict\[str, Any\]) – Dictionary to deserialize from. **Returns:** - ChromaQueryTextRetriever – Deserialized component. #### to_dict ```python to_dict() -> dict[str, Any] ``` Serializes the component to a dictionary. **Returns:** - dict\[str, Any\] – Dictionary with serialized data. ### ChromaEmbeddingRetriever A component for retrieving documents from a [Chroma database](https://docs.trychroma.com/) using embeddings. #### __init__ ```python __init__( document_store: ChromaDocumentStore, filters: dict[str, Any] | None = None, top_k: int = 10, filter_policy: str | FilterPolicy = FilterPolicy.REPLACE, ) -> None ``` Initialize the ChromaEmbeddingRetriever. **Parameters:** - **document_store** (ChromaDocumentStore) – an instance of `ChromaDocumentStore`. - **filters** (dict\[str, Any\] | None) – filters to narrow down the search space. - **top_k** (int) – the maximum number of documents to retrieve. - **filter_policy** (str | FilterPolicy) – Policy to determine how filters are applied. #### run ```python run( query_embedding: list[float], filters: dict[str, Any] | None = None, top_k: int | None = None, ) -> dict[str, Any] ``` Run the retriever on the given input data. **Parameters:** - **query_embedding** (list\[float\]) – the query embeddings. - **filters** (dict\[str, Any\] | None) – Filters applied to the retrieved Documents. The way runtime filters are applied depends on the `filter_policy` chosen at retriever initialization. See init method docstring for more details. - **top_k** (int | None) – the maximum number of documents to retrieve. If not specified, the default value from the constructor is used. **Returns:** - dict\[str, Any\] – a dictionary with the following keys: - `documents`: List of documents returned by the search engine. #### run_async ```python run_async( query_embedding: list[float], filters: dict[str, Any] | None = None, top_k: int | None = None, ) -> dict[str, Any] ``` Asynchronously run the retriever on the given input data. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **query_embedding** (list\[float\]) – the query embeddings. - **filters** (dict\[str, Any\] | None) – Filters applied to the retrieved Documents. The way runtime filters are applied depends on the `filter_policy` chosen at retriever initialization. See init method docstring for more details. - **top_k** (int | None) – the maximum number of documents to retrieve. If not specified, the default value from the constructor is used. **Returns:** - dict\[str, Any\] – a dictionary with the following keys: - `documents`: List of documents returned by the search engine. #### from_dict ```python from_dict(data: dict[str, Any]) -> ChromaEmbeddingRetriever ``` Deserializes the component from a dictionary. **Parameters:** - **data** (dict\[str, Any\]) – Dictionary to deserialize from. **Returns:** - ChromaEmbeddingRetriever – Deserialized component. #### to_dict ```python to_dict() -> dict[str, Any] ``` Serializes the component to a dictionary. **Returns:** - dict\[str, Any\] – Dictionary with serialized data. ## haystack_integrations.document_stores.chroma.document_store ### ChromaDocumentStore A document store using [Chroma](https://docs.trychroma.com/) as the backend. We use the `collection.get` API to implement the document store protocol, the `collection.search` API will be used in the retriever instead. #### __init__ ```python __init__( collection_name: str = "documents", embedding_function: str = "default", persist_path: str | None = None, host: str | None = None, port: int | None = None, distance_function: Literal["l2", "cosine", "ip"] = "l2", metadata: dict | None = None, client_settings: dict[str, Any] | None = None, **embedding_function_params: Any ) -> None ``` Creates a new ChromaDocumentStore instance. It is meant to be connected to a Chroma collection. Note: for the component to be part of a serializable pipeline, the __init__ parameters must be serializable, reason why we use a registry to configure the embedding function passing a string. **Parameters:** - **collection_name** (str) – the name of the collection to use in the database. - **embedding_function** (str) – the name of the embedding function to use to embed the query - **persist_path** (str | None) – Path for local persistent storage. Cannot be used in combination with `host` and `port`. If none of `persist_path`, `host`, and `port` is specified, the database will be `in-memory`. - **host** (str | None) – The host address for the remote Chroma HTTP client connection. Cannot be used with `persist_path`. - **port** (int | None) – The port number for the remote Chroma HTTP client connection. Cannot be used with `persist_path`. - **distance_function** (Literal['l2', 'cosine', 'ip']) – The distance metric for the embedding space. - `"l2"` computes the Euclidean (straight-line) distance between vectors, where smaller scores indicate more similarity. - `"cosine"` computes the cosine similarity between vectors, with higher scores indicating greater similarity. - `"ip"` stands for inner product, where higher scores indicate greater similarity between vectors. **Note**: `distance_function` can only be set during the creation of a collection. To change the distance metric of an existing collection, consider cloning the collection. - **metadata** (dict | None) – a dictionary of chromadb collection parameters passed directly to chromadb's client method `create_collection`. If it contains the key `"hnsw:space"`, the value will take precedence over the `distance_function` parameter above. - **client_settings** (dict\[str, Any\] | None) – a dictionary of Chroma Settings configuration options passed to `chromadb.config.Settings`. These settings configure the underlying Chroma client behavior. For available options, see [Chroma's config.py](https://github.com/chroma-core/chroma/blob/main/chromadb/config.py). **Note**: specifying these settings may interfere with standard client initialization parameters. This option is intended for advanced customization. - **embedding_function_params** (Any) – additional parameters to pass to the embedding function. #### count_documents ```python count_documents() -> int ``` Returns how many documents are present in the document store. **Returns:** - int – how many documents are present in the document store. #### count_documents_async ```python count_documents_async() -> int ``` Asynchronously returns how many documents are present in the document store. Asynchronous methods are only supported for HTTP connections. **Returns:** - int – how many documents are present in the document store. #### filter_documents ```python filter_documents(filters: dict[str, Any] | None = None) -> list[Document] ``` Returns the documents that match the filters provided. For a detailed specification of the filters, refer to the [documentation](https://docs.haystack.deepset.ai/docs/metadata-filtering). **Parameters:** - **filters** (dict\[str, Any\] | None) – the filters to apply to the document list. **Returns:** - list\[Document\] – a list of Documents that match the given filters. #### filter_documents_async ```python filter_documents_async(filters: dict[str, Any] | None = None) -> list[Document] ``` Asynchronously returns the documents that match the filters provided. Asynchronous methods are only supported for HTTP connections. For a detailed specification of the filters, refer to the [documentation](https://docs.haystack.deepset.ai/docs/metadata-filtering). **Parameters:** - **filters** (dict\[str, Any\] | None) – the filters to apply to the document list. **Returns:** - list\[Document\] – a list of Documents that match the given filters. #### write_documents ```python write_documents( documents: list[Document], policy: DuplicatePolicy = DuplicatePolicy.NONE ) -> int ``` Writes documents into the store. **Parameters:** - **documents** (list\[Document\]) – A list of documents to write into the document store. - **policy** (DuplicatePolicy) – How to handle documents whose `id` already exists in the store: - `NONE` (default): treated as `FAIL`. - `OVERWRITE`: replace the existing document. - `SKIP`: keep the existing document and skip the new one. - `FAIL`: raise `DuplicateDocumentError`. **Returns:** - int – The number of documents written. **Raises:** - ValueError – When input is not valid. - DuplicateDocumentError – When `policy` is `FAIL` (or `NONE`) and any document `id` already exists. #### write_documents_async ```python write_documents_async( documents: list[Document], policy: DuplicatePolicy = DuplicatePolicy.NONE ) -> int ``` Asynchronously writes documents into the store. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **documents** (list\[Document\]) – A list of documents to write into the document store. - **policy** (DuplicatePolicy) – How to handle documents whose `id` already exists in the store: - `NONE` (default): treated as `FAIL`. - `OVERWRITE`: replace the existing document. - `SKIP`: keep the existing document and skip the new one. - `FAIL`: raise `DuplicateDocumentError`. **Returns:** - int – The number of documents written. **Raises:** - ValueError – When input is not valid. - DuplicateDocumentError – When `policy` is `FAIL` (or `NONE`) and any document `id` already exists. #### delete_documents ```python delete_documents(document_ids: list[str]) -> None ``` Deletes all documents with a matching document_ids from the document store. **Parameters:** - **document_ids** (list\[str\]) – the document ids to delete #### delete_documents_async ```python delete_documents_async(document_ids: list[str]) -> None ``` Asynchronously deletes all documents with a matching document_ids from the document store. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **document_ids** (list\[str\]) – the document ids to delete #### delete_by_filter ```python delete_by_filter(filters: dict[str, Any]) -> int ``` Deletes all documents that match the provided filters. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to select documents for deletion. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) **Returns:** - int – The number of documents deleted. #### delete_by_filter_async ```python delete_by_filter_async(filters: dict[str, Any]) -> int ``` Asynchronously deletes all documents that match the provided filters. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to select documents for deletion. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) **Returns:** - int – The number of documents deleted. #### update_by_filter ```python update_by_filter(filters: dict[str, Any], meta: dict[str, Any]) -> int ``` Updates the metadata of all documents that match the provided filters. **Note**: This operation is not atomic. Documents matching the filter are fetched first, then updated. If documents are modified between the fetch and update operations, those changes may be lost. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to select documents for updating. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) - **meta** (dict\[str, Any\]) – The metadata fields to update. This will be merged with existing metadata. **Returns:** - int – The number of documents updated. #### update_by_filter_async ```python update_by_filter_async(filters: dict[str, Any], meta: dict[str, Any]) -> int ``` Asynchronously updates the metadata of all documents that match the provided filters. Asynchronous methods are only supported for HTTP connections. **Note**: This operation is not atomic. Documents matching the filter are fetched first, then updated. If documents are modified between the fetch and update operations, those changes may be lost. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to select documents for updating. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) - **meta** (dict\[str, Any\]) – The metadata fields to update. This will be merged with existing metadata. **Returns:** - int – The number of documents updated. #### delete_all_documents ```python delete_all_documents(*, recreate_index: bool = False) -> None ``` Deletes all documents in the document store. A fast way to clear all documents from the document store while preserving any collection settings and mappings. **Parameters:** - **recreate_index** (bool) – Whether to recreate the index after deleting all documents. #### delete_all_documents_async ```python delete_all_documents_async(*, recreate_index: bool = False) -> None ``` Asynchronously deletes all documents in the document store. A fast way to clear all documents from the document store while preserving any collection settings and mappings. **Parameters:** - **recreate_index** (bool) – Whether to recreate the index after deleting all documents. #### search ```python search( queries: list[str], top_k: int, filters: dict[str, Any] | None = None ) -> list[list[Document]] ``` Search the documents in the store using the provided text queries. **Parameters:** - **queries** (list\[str\]) – the list of queries to search for. - **top_k** (int) – top_k documents to return for each query. - **filters** (dict\[str, Any\] | None) – a dictionary of filters to apply to the search. Accepts filters in haystack format. **Returns:** - list\[list\[Document\]\] – matching documents for each query. #### search_async ```python search_async( queries: list[str], top_k: int, filters: dict[str, Any] | None = None ) -> list[list[Document]] ``` Asynchronously search the documents in the store using the provided text queries. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **queries** (list\[str\]) – the list of queries to search for. - **top_k** (int) – top_k documents to return for each query. - **filters** (dict\[str, Any\] | None) – a dictionary of filters to apply to the search. Accepts filters in haystack format. **Returns:** - list\[list\[Document\]\] – matching documents for each query. #### search_embeddings ```python search_embeddings( query_embeddings: list[list[float]], top_k: int, filters: dict[str, Any] | None = None, ) -> list[list[Document]] ``` Perform vector search on the stored document, pass the embeddings of the queries instead of their text. **Parameters:** - **query_embeddings** (list\[list\[float\]\]) – a list of embeddings to use as queries. - **top_k** (int) – the maximum number of documents to retrieve. - **filters** (dict\[str, Any\] | None) – a dictionary of filters to apply to the search. Accepts filters in haystack format. **Returns:** - list\[list\[Document\]\] – a list of lists of documents that match the given filters. #### search_embeddings_async ```python search_embeddings_async( query_embeddings: list[list[float]], top_k: int, filters: dict[str, Any] | None = None, ) -> list[list[Document]] ``` Asynchronously perform vector search using query embeddings instead of text. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **query_embeddings** (list\[list\[float\]\]) – a list of embeddings to use as queries. - **top_k** (int) – the maximum number of documents to retrieve. - **filters** (dict\[str, Any\] | None) – a dictionary of filters to apply to the search. Accepts filters in haystack format. **Returns:** - list\[list\[Document\]\] – a list of lists of documents that match the given filters. #### count_documents_by_filter ```python count_documents_by_filter(filters: dict[str, Any]) -> int ``` Returns the number of documents that match the provided filters. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to count documents. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) **Returns:** - int – The number of documents that match the filters. #### count_documents_by_filter_async ```python count_documents_by_filter_async(filters: dict[str, Any]) -> int ``` Asynchronously returns the number of documents that match the provided filters. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to count documents. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) **Returns:** - int – The number of documents that match the filters. #### count_unique_metadata_by_filter ```python count_unique_metadata_by_filter( filters: dict[str, Any], metadata_fields: list[str] ) -> dict[str, int] ``` Return unique value counts for metadata fields of documents matching the provided filters. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to count documents. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) - **metadata_fields** (list\[str\]) – List of field names to calculate unique values for. Field names can include or omit the "meta." prefix. **Returns:** - dict\[str, int\] – A dictionary mapping each metadata field name to the count of its unique values among the filtered documents. #### count_unique_metadata_by_filter_async ```python count_unique_metadata_by_filter_async( filters: dict[str, Any], metadata_fields: list[str] ) -> dict[str, int] ``` Asynchronously return unique value counts for metadata fields of documents matching the provided filters. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **filters** (dict\[str, Any\]) – The filters to apply to count documents. For filter syntax, see [Haystack metadata filtering](https://docs.haystack.deepset.ai/docs/metadata-filtering) - **metadata_fields** (list\[str\]) – List of field names to calculate unique values for. Field names can include or omit the "meta." prefix. **Returns:** - dict\[str, int\] – A dictionary mapping each metadata field name to the count of its unique values among the filtered documents. #### get_metadata_fields_info ```python get_metadata_fields_info() -> dict[str, dict[str, str]] ``` Returns information about the metadata fields in the collection. Since ChromaDB doesn't maintain a schema, this method samples documents to infer field types. If we populated the collection with documents like: ```python Document(content="Doc 1", meta={"category": "A", "status": "active", "priority": 1}) Document(content="Doc 2", meta={"category": "B", "status": "inactive"}) ``` This method would return: ```python { 'category': {'type': 'keyword'}, 'status': {'type': 'keyword'}, 'priority': {'type': 'long'}, } ``` **Returns:** - dict\[str, dict\[str, str\]\] – Dictionary mapping field names to their type information. #### get_metadata_fields_info_async ```python get_metadata_fields_info_async() -> dict[str, dict[str, str]] ``` Asynchronously returns information about the metadata fields in the collection. Asynchronous methods are only supported for HTTP connections. Since ChromaDB doesn't maintain a schema, this method samples documents to infer field types. If we populated the collection with documents like: ```python Document(content="Doc 1", meta={"category": "A", "status": "active", "priority": 1}) Document(content="Doc 2", meta={"category": "B", "status": "inactive"}) ``` This method would return: ```python { 'category': {'type': 'keyword'}, 'status': {'type': 'keyword'}, 'priority': {'type': 'long'}, } ``` **Returns:** - dict\[str, dict\[str, str\]\] – Dictionary mapping field names to their type information. #### get_metadata_field_min_max ```python get_metadata_field_min_max(metadata_field: str) -> dict[str, Any] ``` Returns the minimum and maximum values for the given metadata field. **Parameters:** - **metadata_field** (str) – The metadata field to get the minimum and maximum values for. Can include or omit the "meta." prefix. **Returns:** - dict\[str, Any\] – A dictionary with the keys "min" and "max", where each value is the minimum or maximum value of the metadata field across all documents. Returns: ```python {"min": None, "max": None} ``` if field doesn't exist or has no values. #### get_metadata_field_min_max_async ```python get_metadata_field_min_max_async(metadata_field: str) -> dict[str, Any] ``` Asynchronously returns the minimum and maximum values for the given metadata field. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **metadata_field** (str) – The metadata field to get the minimum and maximum values for. Can include or omit the "meta." prefix. **Returns:** - dict\[str, Any\] – A dictionary with the keys "min" and "max", where each value is the minimum or maximum value of the metadata field across all documents. Returns: ```python {"min": None, "max": None} ``` if field doesn't exist or has no values. #### get_metadata_field_unique_values ```python get_metadata_field_unique_values( metadata_field: str, search_term: str | None = None, from_: int = 0, size: int = 10, ) -> tuple[list[str], int] ``` Return unique metadata field values, optionally filtered by a content search term, with pagination. **Parameters:** - **metadata_field** (str) – The metadata field to get unique values for. Can include or omit the "meta." prefix. - **search_term** (str | None) – Optional search term to filter documents by matching in the content field. - **from\_** (int) – The offset to start returning values from (for pagination). - **size** (int) – The maximum number of unique values to return. **Returns:** - tuple\[list\[str\], int\] – A tuple containing list of unique values and total count of unique values. #### get_metadata_field_unique_values_async ```python get_metadata_field_unique_values_async( metadata_field: str, search_term: str | None = None, from_: int = 0, size: int = 10, ) -> tuple[list[str], int] ``` Asynchronously return unique metadata field values, optionally filtered by content, with pagination. Asynchronous methods are only supported for HTTP connections. **Parameters:** - **metadata_field** (str) – The metadata field to get unique values for. Can include or omit the "meta." prefix. - **search_term** (str | None) – Optional search term to filter documents by matching in the content field. - **from\_** (int) – The offset to start returning values from (for pagination). - **size** (int) – The maximum number of unique values to return. **Returns:** - tuple\[list\[str\], int\] – A tuple containing list of unique values and total count of unique values. #### from_dict ```python from_dict(data: dict[str, Any]) -> ChromaDocumentStore ``` Deserializes the component from a dictionary. **Parameters:** - **data** (dict\[str, Any\]) – Dictionary to deserialize from. **Returns:** - ChromaDocumentStore – Deserialized component. #### to_dict ```python to_dict() -> dict[str, Any] ``` Serializes the component to a dictionary. **Returns:** - dict\[str, Any\] – Dictionary with serialized data. ## haystack_integrations.document_stores.chroma.errors ### ChromaDocumentStoreError Bases: DocumentStoreError Parent class for all ChromaDocumentStore exceptions. ### ChromaDocumentStoreFilterError Bases: FilterError, ValueError Raised when a filter is not valid for a ChromaDocumentStore. ### ChromaDocumentStoreConfigError Bases: ChromaDocumentStoreError Raised when a configuration is not valid for a ChromaDocumentStore. ## haystack_integrations.document_stores.chroma.utils ### get_embedding_function ```python get_embedding_function(function_name: str, **kwargs: Any) -> EmbeddingFunction ``` Load an embedding function by name. **Parameters:** - **function_name** (str) – the name of the embedding function. - **kwargs** (Any) – additional arguments to pass to the embedding function. **Returns:** - EmbeddingFunction – the loaded embedding function. **Raises:** - ChromaDocumentStoreConfigError – if the function name is invalid.