o
    3Ih/A                     @   sF  d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
m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 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*m+Z+m,Z,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 )    N)OptionalSequence)UUID)override)UserIdentity)maybe_set_tenant_and_database)AsyncAdminAPIAsyncClientAPIAsyncServerAPI)CreateCollectionConfigurationUpdateCollectionConfiguration.validate_embedding_function_conflict_on_create+validate_embedding_function_conflict_on_get)AsyncCollection)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeIncludeMetadataDocuments!IncludeMetadataDocumentsDistancesLoadable	MetadatasQueryResultURIs)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)ChromaError)DatabaseTenantWhereWhereDocumentc                   @   sl  e Zd ZU dZeed< eZeed< e	Z
eed< eed< eee	e fdedededd fdd	Zeee	fd
edededd fddZeed
eddfddZedefddZee	fdededdfddZededdfddZdededdfddZedefddZe	d[d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			d\d.e+d/ee d0ee" d1ee, ddf
d2d3Z-ed"eddfd4d5Z.e			d\d6e/d7e+d8e0d9ee1 d:ee2 d;ee3 de'fd<d=Z4e				d]d7e+d6e/d8ee0 d9ee1 d:ee2 d;ee3 de'fd>d?Z5e			d\d7e+d6e/d8e0d9ee1 d:ee2 d;ee3 de'fd@dAZ6ed7e+defdBdCZ7ed^d7e+dEede8fdFdGZ9eddddde:fd7e+d6ee/ dHee; dee dee dIee< dJe=de8fdKdLZ>		d[d7e+d6ee/ dHee; dIee< ddf
dMdNZ?eddDdde@fd7e+dOe0d6ee/ dPedHee; dIee< dJe=deAfdQdRZBede'fdSdTZCedefdUdVZDedefdWdXZEedefdYdZZFdS )_AsyncClienta  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.
    _admin_clienttenantdatabase_serversettingsreturnc                    s   | |d}t |j ||_||_|jt|_| I d H }t	||j
||d\}}|r0||_|r5||_t|j|_|j|j|jdI d H  |  |S )Nr.   )4overwrite_singleton_tenant_database_access_from_authuser_provided_tenantuser_provided_databaser+   r,   )r   _populate_data_from_system_systemr+   r,   instancer
   r-   get_user_identityr   ;chroma_overwrite_singleton_tenant_database_access_from_authAsyncAdminClientfrom_systemr*   _validate_tenant_database_submit_client_start_event)clsr+   r,   r.   selfuser_identitymaybe_tenantmaybe_database rC   Y/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/chromadb/api/async_client.pycreate:   s*   

zAsyncClient.createsystemc                    s   t |||jI dH S )zRCreate a client from an existing system. This is useful for testing and debugging.N)r)   rE   r.   )r>   rF   r+   r,   rC   rC   rD   from_system_async_   s   	zAsyncClient.from_system_asyncr   c                 C   s   t d )zNAsyncClient cannot be created synchronously. Use .from_system_async() instead.)NotImplementedError)r>   rF   rC   rC   rD   r;   j   s   zAsyncClient.from_systemc                       | j  I d H S N)r-   r8   r?   rC   rC   rD   r8   u      zAsyncClient.get_user_identityNc                    s&   | j ||dI d H  || _|| _d S Nr4   r<   r+   r,   )r?   r+   r,   rC   rC   rD   
set_tenanty   s   
zAsyncClient.set_tenantc                    s"   | j | j|dI d H  || _d S rM   rN   )r?   r,   rC   rC   rD   set_database   s   
zAsyncClient.set_databasec              
      s   z| j j|dI d H  W n' tjy   td ty& } z|d }~w ty4   td| dw z| j j||dI d H  W d S  tjyO   tdw )NnamezACould not connect to a Chroma server. Are you sure it is running?zCould not connect to tenant z. Are you sure it exists?rR   r+   )r*   
get_tenanthttpxConnectError
ValueErrorr$   	Exceptionget_database)r?   r+   r,   erC   rC   rD   r<      s,   
z%AsyncClient._validate_tenant_databasec                    rI   rJ   )r-   	heartbeatrK   rC   rC   rD   r[      rL   zAsyncClient.heartbeatlimitoffsetc                    s2    j j|| j jdI d H } fdd|D S )Nr4   c                    s   g | ]	}t  j|d qS ))clientmodel)r   r-   ).0r_   rK   rC   rD   
<listcomp>   s    z0AsyncClient.list_collections.<locals>.<listcomp>)r-   list_collectionsr+   r,   )r?   r\   r]   modelsrC   rK   rD   rb      s
   zAsyncClient.list_collectionsc                    s   | j j| j| jdI d H S rM   )r-   count_collectionsr+   r,   rK   rC   rC   rD   rd      s   zAsyncClient.count_collectionsFrR   configurationmetadataembedding_functiondata_loaderget_or_createc           	         sn   |d u ri }| d}t|| |d ur|d u r||d< | jj|||| j| j|dI d H }t| j|||dS )Nrg   )rR   re   rf   r+   r,   ri   r^   r_   rg   rh   )getr   r-   create_collectionr+   r,   r   )	r?   rR   re   rf   rg   rh   ri   configuration_efr_   rC   rC   rD   rl      s.   
zAsyncClient.create_collectionc                    sF   | j j|| j| jdI d H }|jd}t|| t| j |||dS )NrR   r+   r,   rg   rj   )r-   get_collectionr+   r,   configuration_jsonrk   r   r   )r?   rR   rg   rh   r_   persisted_ef_configrC   rC   rD   ro      s    	zAsyncClient.get_collectionc           	         s   |d u ri }| d}t|| |d ur|d u r||d< | jj|||| j| jdI d H }|j d}t|| t| j|||dS )Nrg   )rR   re   rf   r+   r,   rj   )	rk   r   r-   get_or_create_collectionr+   r,   rp   r   r   )	r?   rR   re   rf   rg   rh   rm   r_   rq   rC   rC   rD   rr      s4   
z$AsyncClient.get_or_create_collectionidnew_namenew_metadatanew_configurationc                    s$   | j j||||| j| jdI d H S )N)rs   rt   ru   rv   r+   r,   )r-   _modifyr+   r,   )r?   rs   rt   ru   rv   rC   rC   rD   rw     s   zAsyncClient._modifyc                    s   | j j|| j| jdI d H S )Nrn   )r-   delete_collectionr+   r,   r?   rR   rC   rC   rD   rx   /  s   zAsyncClient.delete_collectionidscollection_id
embeddings	metadatas	documentsurisc              
      (   | j j||||||| j| jdI d H S )N)rz   r{   r|   r}   r~   r   r+   r,   )r-   _addr+   r,   )r?   rz   r{   r|   r}   r~   r   rC   rC   rD   r   >     
zAsyncClient._addc              
      r   N)r{   rz   r|   r}   r~   r   r+   r,   )r-   _updater+   r,   r?   r{   rz   r|   r}   r~   r   rC   rC   rD   r   S  r   zAsyncClient._updatec              
      r   r   )r-   _upsertr+   r,   r   rC   rC   rD   r   h  r   zAsyncClient._upsertc                       | j j|dI d H S )N)r{   )r-   _count)r?   r{   rC   rC   rD   r   }  s   zAsyncClient._count
   nc                       | j j||dI d H S )N)r{   r   )r-   _peek)r?   r{   r   rC   rC   rD   r     s
   zAsyncClient._peekwherewhere_documentincludec                    *   | j j|||||||| j| jd	I d H S )N)	r{   rz   r   r\   r]   r   r   r+   r,   )r-   _getr+   r,   )r?   r{   rz   r   r\   r]   r   r   rC   rC   rD   r        zAsyncClient._getc                    s(   | j j||||| j| jdI d H  d S )N)r{   rz   r   r   r+   r,   )r-   _deleter+   r,   )r?   r{   rz   r   r   rC   rC   rD   r     s   zAsyncClient._deletequery_embeddings	n_resultsc                    r   )N)	r{   r   rz   r   r   r   r   r+   r,   )r-   _queryr+   r,   )r?   r{   r   rz   r   r   r   r   rC   rC   rD   r     r   zAsyncClient._queryc                    rI   rJ   )r-   resetrK   rC   rC   rD   r     rL   zAsyncClient.resetc                    rI   rJ   )r-   get_versionrK   rC   rC   rD   r     rL   zAsyncClient.get_versionc                 C   s
   | j  S rJ   )r-   get_settingsrK   rC   rC   rD   r     s   
zAsyncClient.get_settingsc                    rI   rJ   )r-   get_max_batch_sizerK   rC   rC   rD   r     rL   zAsyncClient.get_max_batch_size)NN)NNN)NNNN)r   )G__name__
__module____qualname____doc__r   __annotations__r!   r+   strr    r,   r
   classmethodr"   rE   r#   rG   r   r;   r   r8   rO   rP   r<   intr[   r   r   r   rb   rd   efDefaultEmbeddingFunctionr   r   r   r   r   r   boolrl   ro   rr   r   r   rw   rx   r   r   r   r   r   r   r   r   r   r   r   r   r'   r(   r   r   r   r   r   r   r   r   r   r   rC   rC   rC   rD   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 rJ   )super__init__r6   r7   r
   r-   )r?   r.   	__class__rC   rD   r     s   zAsyncAdminClient.__init__rR   r+   c                    r   NrS   )r-   create_databaser?   rR   r+   rC   rC   rD   r        z AsyncAdminClient.create_databasec                    r   r   )r-   rY   r   rC   rC   rD   rY     r   zAsyncAdminClient.get_databasec                    r   r   )r-   delete_databaser   rC   rC   rD   r     r   z AsyncAdminClient.delete_databaser\   r]   c                    s   | j j|||dI d H S )N)r\   r]   r+   )r-   list_databases)r?   r\   r]   r+   rC   rC   rD   r     s   zAsyncAdminClient.list_databasesc                    r   NrQ   )r-   create_tenantry   rC   rC   rD   r        zAsyncAdminClient.create_tenantc                    r   r   )r-   rT   ry   rC   rC   rD   rT     r   zAsyncAdminClient.get_tenantrF   c                 C   s   t | | |jd}|S )Nr0   )r   r5   r.   )r>   rF   r7   rC   rC   rD   r;     s   
zAsyncAdminClient.from_system)r   r   r   r
   r   r"   r   r   r!   r   r   r%   rY   r   r   r   r   r   r   r&   rT   r   r#   r;   __classcell__rC   rC   r   rD   r:     sB   
 
r:   );rU   typingr   r   uuidr   	overridesr   chromadb.authr   chromadb.auth.utilsr   chromadb.apir   r	   r
   %chromadb.api.collection_configurationr   r   r   r   #chromadb.api.models.AsyncCollectionr   !chromadb.api.shared_system_clientr   chromadb.api.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   chromadb.configr    r!   r"   r#   chromadb.errorsr$   chromadb.typesr%   r&   r'   r(   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r)   r:   rC   rC   rC   rD   <module>   s(    D   6