o
    1XxiG0                     @   s   d dl mZmZmZ d dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZ d dlZeeZerEd dlmZ G dd ded ZdS )	    )TYPE_CHECKINGOptionalUnionN)CollectionCommon)URICollectionMetadata	EmbeddingIncludeMetadataDocumentImageWhereIDs	GetResultQueryResultID	OneOrManyWhereDocument)	ServerAPIc                   @   s  e Zd ZdefddZ					d)dee deeee	 ee
j f  deee  deee  d	eee  d
eee  ddfddZdddddddgfdeee  dee dee dee dee dedefddZd*dedefddZdddddddg dfdeeee	 ee
j f  deee  deee  deee  dedee dee dedefddZ	d+dee d ee ddfd!d"Z					d)dee deeee	 ee
j f  deee  deee  d	eee  d
eee  ddfd#d$Z					d)dee deeee	 ee
j f  deee  deee  d	eee  d
eee  ddfd%d&Z			d,dee dee dee ddfd'd(ZdS )-
Collectionreturnc                 C   s   | j j| jdS )zThe total number of embeddings added to the database

        Returns:
            int: The total number of embeddings added to the database

        )collection_id)_client_countid)self r   ]/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/api/models/Collection.pycount   s   zCollection.countNids
embeddings	metadatas	documentsimagesurisc                 C   s:   |  ||||||\}}}}}| j|| j|||| dS )a]  Add embeddings to the data store.
        Args:
            ids: The ids of the embeddings you wish to add
            embeddings: The embeddings to add. If None, embeddings will be computed based on the documents or images using the embedding_function set for the Collection. Optional.
            metadatas: The metadata to associate with the embeddings. When querying, you can filter on this metadata. Optional.
            documents: The documents to associate with the embeddings. Optional.
            images: The images to associate with the embeddings. Optional.
            uris: The uris of the images to associate with the embeddings. Optional.

        Returns:
            None

        Raises:
            ValueError: If you don't provide either embeddings or documents
            ValueError: If the length of ids, embeddings, metadatas, or documents don't match
            ValueError: If you don't provide an embedding function and don't provide embeddings
            ValueError: If you provide both embeddings and documents
            ValueError: If you provide an id that already exists

        N)#_validate_and_prepare_embedding_setr   _addr   r   r   r    r!   r"   r#   r$   r   r   r   add(   s   (zCollection.addwherelimitoffsetwhere_documentincludec              
   C   sB   |  ||||\}}}	}
| jj| j||d|||	|
d}| ||S )a  Get embeddings and their associate data from the data store. If no ids or where filter is provided returns
        all embeddings up to limit starting at offset.

        Args:
            ids: The ids of the embeddings to get. Optional.
            where: A Where type dict used to filter results by. E.g. `{"$and": [{"color" : "red"}, {"price": {"$gte": 4.20}}]}`. Optional.
            limit: The number of documents to return. Optional.
            offset: The offset to start returning results from. Useful for paging results with limit. Optional.
            where_document: A WhereDocument type dict used to filter by the documents. E.g. `{$contains: {"text": "hello"}}`. Optional.
            include: A list of what to include in the results. Can contain `"embeddings"`, `"metadatas"`, `"documents"`. Ids are always included. Defaults to `["metadatas", "documents"]`. Optional.

        Returns:
            GetResult: A GetResult object containing the results.

        N)r,   r-   )!_validate_and_prepare_get_requestr   _getr   _transform_get_response)r   r   r)   r*   r+   r,   r-   	valid_idsvalid_wherevalid_where_documentvalid_includeget_resultsr   r   r   getV   s"   zCollection.get
   c                 C   s   | j | j|S )zGet the first few results in the database up to limit

        Args:
            limit: The number of results to return.

        Returns:
            GetResult: A GetResult object containing the results.
        )r   _peekr   )r   r*   r   r   r   peek   s   	zCollection.peek)r!   r"   	distancesquery_embeddingsquery_textsquery_images
query_uris	n_resultsc	              
   C   sF   |  ||||||||\}	}
}}| jj| j|	|
|||d}| ||S )a  Get the n_results nearest neighbor embeddings for provided query_embeddings or query_texts.

        Args:
            query_embeddings: The embeddings to get the closes neighbors of. Optional.
            query_texts: The document texts to get the closes neighbors of. Optional.
            query_images: The images to get the closes neighbors of. Optional.
            n_results: The number of neighbors to return for each query_embedding or query_texts. Optional.
            where: A Where type dict used to filter results by. E.g. `{"$and": [{"color" : "red"}, {"price": {"$gte": 4.20}}]}`. Optional.
            where_document: A WhereDocument type dict used to filter by the documents. E.g. `{$contains: {"text": "hello"}}`. Optional.
            include: A list of what to include in the results. Can contain `"embeddings"`, `"metadatas"`, `"documents"`, `"distances"`. Ids are always included. Defaults to `["metadatas", "documents", "distances"]`. Optional.

        Returns:
            QueryResult: A QueryResult object containing the results.

        Raises:
            ValueError: If you don't provide either query_embeddings, query_texts, or query_images
            ValueError: If you provide both query_embeddings and query_texts
            ValueError: If you provide both query_embeddings and query_images
            ValueError: If you provide both query_texts and query_images

        )r   r;   r?   r)   r,   r-   )#_validate_and_prepare_query_requestr   _queryr   _transform_query_response)r   r;   r<   r=   r>   r?   r)   r,   r-   valid_query_embeddingsvalid_n_resultsr2   r3   query_resultsr   r   r   query   s0   +	zCollection.querynamemetadatac                 C   s.   |  | | jj| j||d | || dS )zModify the collection name or metadata

        Args:
            name: The updated name for the collection. Optional.
            metadata: The updated metadata for the collection. Optional.

        Returns:
            None
        )r   new_namenew_metadataN)_validate_modify_requestr   _modifyr   "_update_model_after_modify_success)r   rG   rH   r   r   r   modify   s   
zCollection.modifyc                 C   s:   |  ||||||\}}}}}| j| j||||| dS )a  Update the embeddings, metadatas or documents for provided ids.

        Args:
            ids: The ids of the embeddings to update
            embeddings: The embeddings to update. If None, embeddings will be computed based on the documents or images using the embedding_function set for the Collection. Optional.
            metadatas:  The metadata to associate with the embeddings. When querying, you can filter on this metadata. Optional.
            documents: The documents to associate with the embeddings. Optional.
            images: The images to associate with the embeddings. Optional.
        Returns:
            None
        N)$_validate_and_prepare_update_requestr   _updater   r'   r   r   r   update   s   zCollection.updatec                 C   s<   |  ||||||\}}}}}| jj| j|||||d dS )aO  Update the embeddings, metadatas or documents for provided ids, or create them if they don't exist.

        Args:
            ids: The ids of the embeddings to update
            embeddings: The embeddings to add. If None, embeddings will be computed based on the documents using the embedding_function set for the Collection. Optional.
            metadatas:  The metadata to associate with the embeddings. When querying, you can filter on this metadata. Optional.
            documents: The documents to associate with the embeddings. Optional.

        Returns:
            None
        )r   r   r    r!   r"   r$   N)$_validate_and_prepare_upsert_requestr   _upsertr   r'   r   r   r   upsert	  s"   
zCollection.upsertc                 C   s,   |  |||\}}}| j| j||| dS )a8  Delete the embeddings based on ids and/or a where filter

        Args:
            ids: The ids of the embeddings to delete
            where: A Where type dict used to filter the delection by. E.g. `{"$and": [{"color" : "red"}, {"price": {"$gte": 4.20}]}}`. Optional.
            where_document: A WhereDocument type dict used to filter the deletion by the document content. E.g. `{$contains: {"text": "hello"}}`. Optional.

        Returns:
            None

        Raises:
            ValueError: If you don't provide either ids, where, or where_document
        N)$_validate_and_prepare_delete_requestr   _deleter   )r   r   r)   r,   r   r   r   delete5  s   
zCollection.delete)NNNNN)r7   )NN)NNN) __name__
__module____qualname__intr   r   r   r   r   r   npndarrayr
   r   r   r   r(   r   r   r	   r   r6   r9   r   rF   strr   rN   rQ   rT   r   rW   r   r   r   r   r      s6   
	




0

,

	


B

	




-
	




.r   r   )typingr   r   r   numpyr\   $chromadb.api.models.CollectionCommonr   chromadb.api.typesr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   logging	getLoggerrX   loggerchromadb.apir   r   r   r   r   r   <module>   s    @
