o
    3Ihf?                     @   sN  d dl mZmZ d dlmZ d dlmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZmZm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!m"Z" d d	l#m$Z$ d d
l%m&Z& d dl'm(Z(m)Z) d dl'm*Z*m+Z+ d dl,m-Z- d dl.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 d dl5m6  m7Z8 G dd dee
Z9G dd dee	Z:dS )    )OptionalSequence)UUID)overrideN)AdminAPI	ClientAPI	ServerAPI)CreateCollectionConfigurationUpdateCollectionConfiguration.validate_embedding_function_conflict_on_create+validate_embedding_function_conflict_on_get)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultURIsIncludeMetadataDocuments!IncludeMetadataDocumentsDistances)UserIdentity)maybe_set_tenant_and_database)SettingsSystem)DEFAULT_TENANTDEFAULT_DATABASE)
Collection)ChromaError)DatabaseTenantWhereWhereDocumentc                       sZ  e Zd ZU dZeZeed< eZ	eed< e
ed< eed< eee fdedededdf fd	d
Zeeeefdedededd fddZedefddZedefddZe	dXdee dee dee fddZedefddZedde ddfdedee dee deee   dee!e"  de#defdd Z$ee dfdedeee   dee!e"  defd!d"Z%edde dfdedee dee deee   dee!e"  defd#d$Z&e			dYd%e'd&ee d'ee d(ee( ddf
d)d*Z)ededdfd+d,Z*e			dYd-e+d.e'd/e,d0ee- d1ee. d2ee/ de#fd3d4Z0e				dZd.e'd-e+d/ee, d0ee- d1ee. d2ee/ de#fd5d6Z1e			dYd.e'd-e+d/e,d0ee- d1ee. d2ee/ de#fd7d8Z2ed.e'defd9d:Z3ed[d.e'd<ede4fd=d>Z5eddddde6fd.e'd-ee+ d?ee7 dee dee d@ee8 dAe9de4fdBdCZ:		dXd.e'd-ee+ d?ee7 d@ee8 ddf
dDdEZ;edd;dde<fd.e'dFe,d-ee+ dGed?ee7 d@ee8 dAe9de=fdHdIZ>ede#fdJdKZ?edefdLdMZ@edefdNdOZAedefdPdQZBeefdededdfdRdSZCededdfdTdUZDdededdfdVdWZE  ZFS )\Clienta  A client for Chroma. This is the main entrypoint for interacting with Chroma.
    A client internally stores its tenant and database and proxies calls to a
    Server API instance of Chroma. It treats the Server API and corresponding System
    as a singleton, so multiple clients connecting to the same resource will share the
    same API instance.

    Client implementations should be implement their own API-caching strategies.
    tenantdatabase_server_admin_clientsettingsreturnNc                    s   t  j|d || _|| _| jt| _|  }t	||j
||d\}}|r(|| _|r-|| _t| j| _| j| j| jd |   d S )Nr.   )4overwrite_singleton_tenant_database_access_from_authuser_provided_tenantuser_provided_databaser*   r+   )super__init__r*   r+   _systeminstancer   r,   get_user_identityr   ;chroma_overwrite_singleton_tenant_database_access_from_authAdminClientfrom_systemr-   _validate_tenant_database_submit_client_start_event)selfr*   r+   r.   user_identitymaybe_tenantmaybe_database	__class__ S/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/api/client.pyr6   ;   s$   
zClient.__init__systemc                 C   s   t | | |||jd}|S )N)r*   r+   r.   r   _populate_data_from_systemr.   )clsrG   r*   r+   r8   rE   rE   rF   r<   [   s   
zClient.from_systemc              
   C   sb   z| j  W S  tjy   td ty } z|d }~w ty0 } ztt|d }~ww )NACould not connect to a Chroma server. Are you sure it is running?)r,   r9   httpxConnectError
ValueErrorr$   	Exceptionstr)r?   erE   rE   rF   r9   i   s   zClient.get_user_identityc                 C   
   | j  S N)r,   	heartbeatr?   rE   rE   rF   rT   y      
zClient.heartbeatlimitoffsetc                    s&    fdd j j|| j jdD S )Nc                    s   g | ]	}t  j|d qS ))clientmodel)r#   r,   ).0rZ   rU   rE   rF   
<listcomp>   s    z+Client.list_collections.<locals>.<listcomp>r4   )r,   list_collectionsr*   r+   )r?   rW   rX   rE   rU   rF   r]   }   s
   
zClient.list_collectionsc                 C   s   | j j| j| jdS Nr4   )r,   count_collectionsr*   r+   rU   rE   rE   rF   r_      s   zClient.count_collectionsFnameconfigurationmetadataembedding_functiondata_loaderget_or_createc           	      C   sf   |d u ri }| d}t|| |d ur|d u r||d< | jj||| j| j||d}t| j|||dS )Nrc   )r`   rb   r*   r+   re   ra   rY   rZ   rc   rd   )getr   r,   create_collectionr*   r+   r#   )	r?   r`   ra   rb   rc   rd   re   configuration_efrZ   rE   rE   rF   rh      s,   
zClient.create_collectionc                 C   s>   | j j|| j| jd}|jd}t|| t| j |||dS )Nr`   r*   r+   rc   rf   )r,   get_collectionr*   r+   configuration_jsonrg   r   r#   )r?   r`   rc   rd   rZ   persisted_ef_configrE   rE   rF   rk      s   	zClient.get_collectionc           	      C   sz   |d u ri }| d}t|| |d ur|d u r||d< | jj||| j| j|d}|j d}t|| t| j|||dS )Nrc   )r`   rb   r*   r+   ra   rf   )	rg   r   r,   get_or_create_collectionr*   r+   rl   r   r#   )	r?   r`   ra   rb   rc   rd   ri   rZ   rm   rE   rE   rF   rn      s2   
zClient.get_or_create_collectionidnew_namenew_metadatanew_configurationc                 C   s   | j j|| j| j|||dS )N)ro   r*   r+   rp   rq   rr   )r,   _modifyr*   r+   )r?   ro   rp   rq   rr   rE   rE   rF   rs      s   zClient._modifyc                 C      | j j|| j| jdS )Nrj   )r,   delete_collectionr*   r+   r?   r`   rE   rE   rF   ru     s
   zClient.delete_collectionidscollection_id
embeddings	metadatas	documentsurisc              
   C       | j j|| j| j|||||dS )N)rw   r*   r+   rx   ry   rz   r{   r|   )r,   _addr*   r+   )r?   rw   rx   ry   rz   r{   r|   rE   rE   rF   r~        
zClient._addc              
   C   r}   N)rx   r*   r+   rw   ry   rz   r{   r|   )r,   _updater*   r+   r?   rx   rw   ry   rz   r{   r|   rE   rE   rF   r   2  r   zClient._updatec              
   C   r}   r   )r,   _upsertr*   r+   r   rE   rE   rF   r   G  r   zClient._upsertc                 C   rt   )N)rx   r*   r+   )r,   _countr*   r+   )r?   rx   rE   rE   rF   r   \  s
   zClient._count
   nc                 C   s   | j j||| j| jdS )N)rx   r   r*   r+   )r,   _peekr*   r+   )r?   rx   r   rE   rE   rF   r   d  s   zClient._peekwherewhere_documentincludec                 C   s"   | j j|| j| j||||||d	S )N)	rx   r*   r+   rw   r   rW   rX   r   r   )r,   _getr*   r+   )r?   rx   rw   r   rW   rX   r   r   rE   rE   rF   r   m  s   zClient._getc                 C   s    | j j|| j| j|||d d S )N)rx   r*   r+   rw   r   r   )r,   _deleter*   r+   )r?   rx   rw   r   r   rE   rE   rF   r     s   
zClient._deletequery_embeddings	n_resultsc                 C   s"   | j j||| j| j|||||d	S )N)	rx   rw   r*   r+   r   r   r   r   r   )r,   _queryr*   r+   )r?   rx   r   rw   r   r   r   r   rE   rE   rF   r     s   zClient._queryc                 C   rR   rS   )r,   resetrU   rE   rE   rF   r     rV   zClient.resetc                 C   rR   rS   )r,   get_versionrU   rE   rE   rF   r     rV   zClient.get_versionc                 C   rR   rS   )r,   get_settingsrU   rE   rE   rF   r     rV   zClient.get_settingsc                 C   rR   rS   )r,   get_max_batch_sizerU   rE   rE   rF   r     rV   zClient.get_max_batch_sizec                 C   s   | j ||d || _|| _d S r^   r=   r*   r+   )r?   r*   r+   rE   rE   rF   
set_tenant  s   
zClient.set_tenantc                 C   s   | j | j|d || _d S r^   r   )r?   r+   rE   rE   rF   set_database  s   
zClient.set_databasec              
   C   s   z	| j j|d W n' tjy   td ty" } z|d }~w ty0   td| dw z| j j||d W d S  tjyH   tdw )Nr`   rK   zCould not connect to tenant z. Are you sure it exists?r`   r*   )r-   
get_tenantrL   rM   rN   r$   rO   get_database)r?   r*   r+   rQ   rE   rE   rF   r=     s*   
z Client._validate_tenant_database)NN)NNN)NNNN)r   )G__name__
__module____qualname____doc__r!   r*   rP   __annotations__r"   r+   r   r   r   r6   classmethodr   r    r<   r   r9   intrT   r   r   r#   r]   r_   efDefaultEmbeddingFunctionr	   r   r   r   r   r   boolrh   rk   rn   r   r
   rs   ru   r   r   r   r   r   r~   r   r   r   r   r   r   r'   r(   r   r   r   r   r   r   r   r   r   r   r   r   r=   __classcell__rE   rE   rC   rF   r)   )   s  
 	 

	
(

	*	
	r)   c                       s  e Zd ZU eed< e fdeddf fddZeefde	de	ddfd	d
Z
eefde	de	defddZeefde	de	ddfddZeddefdee dee de	dee fddZede	ddfddZede	defddZeededd fddZ  ZS )r;   r,   r.   r/   Nc                    s   t  | | jt| _d S rS   )r5   r6   r7   r8   r   r,   )r?   r.   rC   rE   rF   r6     s   zAdminClient.__init__r`   r*   c                 C      | j j||dS Nr   )r,   create_databaser?   r`   r*   rE   rE   rF   r        zAdminClient.create_databasec                 C   r   r   )r,   r   r   rE   rE   rF   r     r   zAdminClient.get_databasec                 C   r   r   )r,   delete_databaser   rE   rE   rF   r     r   zAdminClient.delete_databaserW   rX   c                 C   s   | j j|||dS )N)r*   )r,   list_databases)r?   rW   rX   r*   rE   rE   rF   r     s   zAdminClient.list_databasesc                 C      | j j|dS Nr   )r,   create_tenantrv   rE   rE   rF   r        zAdminClient.create_tenantc                 C   r   r   )r,   r   rv   rE   rE   rF   r     r   zAdminClient.get_tenantrG   c                 C   s   t | | |jd}|S )Nr0   rH   )rJ   rG   r8   rE   rE   rF   r<     s   
zAdminClient.from_system)r   r   r   r   r   r   r6   r   r!   rP   r   r%   r   r   r   r   r   r   r   r&   r   r   r    r<   r   rE   rE   rC   rF   r;     sB   
 r;   );typingr   r   uuidr   	overridesr   rL   chromadb.apir   r   r   %chromadb.api.collection_configurationr	   r
   r   r   !chromadb.api.shared_system_clientr   chromadb.api.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   chromadb.authr   chromadb.auth.utilsr   chromadb.configr   r    r!   r"   chromadb.api.models.Collectionr#   chromadb.errorsr$   chromadb.typesr%   r&   r'   r(   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r)   r;   rE   rE   rE   rF   <module>   s*    D   =