o
    g;                     @   s>  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 d dlmZmZ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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l-m.Z.m/Z/m0Z0m1Z1 d dl2m3  m4Z5 G dd deeZ6G dd deeZ7dS )    N)OptionalSequence)UUID)override)CollectionName)UserIdentity)maybe_set_tenant_and_database)AsyncAdminAPIAsyncClientAPIAsyncServerAPI)CollectionConfiguration)AsyncCollection)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultURIs)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)ChromaError)DatabaseTenantWhereWhereDocumentc                   @   s~  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" ddfd1d2Z-ed"eddfd3d4Z.e			d`d5e/d6e,d7e0d8ee1 d9ee2 d:ee3 de'fd;d<Z4e				dad6e,d5e/d7ee0 d8ee1 d9ee2 d:ee3 de'fd=d>Z5e			d`d6e,d5e/d7e0d8ee1 d9ee2 d:ee3 de'fd?d@Z6ed6e,defdAdBZ7edbd6e,dDede8fdEdFZ9eddddddddg dGf	d6e,d5ee/ dHee: dIee dee dee dJee dKee dLee; dMe<de8fdNdOZ=		d_d6e,d5ee/ dHee: dLee; ddf
dPdQZ>edCddg dRfd6e,dSe0dTedHee: dLee; dMe<de?fdUdVZ@ede'fdWdXZAedefdYdZZBedefd[d\ZCedefd]d^ZDdS )c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 r?   P/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/api/async_client.pycreate4   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%   rA   r*   )r:   rB   r'   r(   r?   r?   r@   from_system_asyncY   s   	zAsyncClient.from_system_asyncr   c                 C   s   t d )zNAsyncClient cannot be created synchronously. Use .from_system_async() instead.)NotImplementedError)r:   rB   r?   r?   r@   r7   d   s   zAsyncClient.from_systemc                       | j  I d H S N)r)   r4   r;   r?   r?   r@   r4   o      zAsyncClient.get_user_identityNc                    s&   | j ||dI d H  || _|| _d S Nr0   r8   r'   r(   )r;   r'   r(   r?   r?   r@   
set_tenants   s   
zAsyncClient.set_tenantc                    s"   | j | j|dI d H  || _d S rI   rJ   )r;   r(   r?   r?   r@   set_databasey   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?rN   r'   )r&   
get_tenanthttpxConnectError
ValueErrorr    	Exceptionget_database)r;   r'   r(   er?   r?   r@   r8   ~   s,   
z%AsyncClient._validate_tenant_databasec                    rE   rF   )r)   	heartbeatrG   r?   r?   r@   rW      rH   zAsyncClient.heartbeatlimitoffsetc                    s.   | j j||| j| jdI d H }dd |D S )Nr0   c                 S   s   g | ]}t |jqS r?   )r   rN   ).0modelr?   r?   r@   
<listcomp>   s    z0AsyncClient.list_collections.<locals>.<listcomp>)r)   list_collectionsr'   r(   )r;   rX   rY   modelsr?   r?   r@   r]      s
   zAsyncClient.list_collectionsc                    s   | j j| j| jdI d H S rI   )r)   count_collectionsr'   r(   rG   r?   r?   r@   r_      s   zAsyncClient.count_collectionsFrN   configurationmetadataembedding_functiondata_loaderget_or_createc                    s6   | j j|||| j| j|dI d H }t| j |||dS )N)rN   r`   ra   r'   r(   rd   clientr[   rb   rc   )r)   create_collectionr'   r(   r   )r;   rN   r`   ra   rb   rc   rd   r[   r?   r?   r@   rg      s   zAsyncClient.create_collectionc                    s0   | j j|| j| jdI d H }t| j |||dS )NrN   r'   r(   re   )r)   get_collectionr'   r(   r   )r;   rN   rb   rc   r[   r?   r?   r@   ri      s   	zAsyncClient.get_collectionc                    s4   | j j|||| j| jdI d H }t| j |||dS )N)rN   r`   ra   r'   r(   re   )r)   get_or_create_collectionr'   r(   r   )r;   rN   r`   ra   rb   rc   r[   r?   r?   r@   rj      s   z$AsyncClient.get_or_create_collectionidnew_namenew_metadatac                    s"   | j j|||| j| jdI d H S )N)rk   rl   rm   r'   r(   )r)   _modifyr'   r(   )r;   rk   rl   rm   r?   r?   r@   rn      s   zAsyncClient._modifyc                    s   | j j|| j| jdI d H S )Nrh   )r)   delete_collectionr'   r(   r;   rN   r?   r?   r@   ro     s   zAsyncClient.delete_collectionidscollection_id
embeddings	metadatas	documentsurisc              
      (   | j j||||||| j| jdI d H S )N)rq   rr   rs   rt   ru   rv   r'   r(   )r)   _addr'   r(   )r;   rq   rr   rs   rt   ru   rv   r?   r?   r@   rx        
zAsyncClient._addc              
      rw   N)rr   rq   rs   rt   ru   rv   r'   r(   )r)   _updater'   r(   r;   rr   rq   rs   rt   ru   rv   r?   r?   r@   r{   %  ry   zAsyncClient._updatec              
      rw   rz   )r)   _upsertr'   r(   r|   r?   r?   r@   r}   :  ry   zAsyncClient._upsertc                       | j j|dI d H S )N)rr   )r)   _count)r;   rr   r?   r?   r@   r   O  s   zAsyncClient._count
   nc                       | j j||dI d H S )N)rr   r   )r)   _peek)r;   rr   r   r?   r?   r@   r   U  s
   zAsyncClient._peek)rs   rt   ru   wheresortpage	page_sizewhere_documentincludec                    s0   | j j|||||||||	|
| j| jdI d H S )N)rr   rq   r   r   rX   rY   r   r   r   r   r'   r(   )r)   _getr'   r(   )r;   rr   rq   r   r   rX   rY   r   r   r   r   r?   r?   r@   r   \  s   zAsyncClient._getc                    s(   | j j||||| j| jdI d H  d S )N)rr   rq   r   r   r'   r(   )r)   _deleter'   r(   )r;   rr   rq   r   r   r?   r?   r@   r   y  s   zAsyncClient._delete)rs   rt   ru   	distancesquery_embeddings	n_resultsc              
      rw   )N)rr   r   r   r   r   r   r'   r(   )r)   _queryr'   r(   )r;   rr   r   r   r   r   r   r?   r?   r@   r     ry   zAsyncClient._queryc                    rE   rF   )r)   resetrG   r?   r?   r@   r     rH   zAsyncClient.resetc                    rE   rF   )r)   get_versionrG   r?   r?   r@   r     rH   zAsyncClient.get_versionc                 C   s
   | j  S rF   )r)   get_settingsrG   r?   r?   r@   r     s   
zAsyncClient.get_settingsc                    rE   rF   )r)   get_max_batch_sizerG   r?   r?   r@   r     rH   zAsyncClient.get_max_batch_size)NN)NNN)NNNN)r   )E__name__
__module____qualname____doc__r	   __annotations__r   r'   strr   r(   r   classmethodr   rA   r   rC   r   r7   r   r4   rK   rL   r8   intrW   r   r   r   r]   r_   efDefaultEmbeddingFunctionr   r   r   r   r   r   boolr   rg   ri   rj   r   rn   ro   r   r   r   r   r   rx   r{   r}   r   r   r   r#   r$   r   r   r   r   r   r   r   r   r   r?   r?   r?   r@   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 )r6   r)   r*   r+   Nc                    s   t  | | jt| _d S rF   )super__init__r2   r3   r   r)   )r;   r*   	__class__r?   r@   r     s   zAsyncAdminClient.__init__rN   r'   c                    r   NrO   )r)   create_databaser;   rN   r'   r?   r?   r@   r        z AsyncAdminClient.create_databasec                    r   r   )r)   rU   r   r?   r?   r@   rU     r   zAsyncAdminClient.get_databasec                    r   r   )r)   delete_databaser   r?   r?   r@   r     r   z AsyncAdminClient.delete_databaserX   rY   c                    s   | j j|||dI d H S )N)rX   rY   r'   )r)   list_databases)r;   rX   rY   r'   r?   r?   r@   r     s   zAsyncAdminClient.list_databasesc                    r~   NrM   )r)   create_tenantrp   r?   r?   r@   r        zAsyncAdminClient.create_tenantc                    r~   r   )r)   rP   rp   r?   r?   r@   rP     r   zAsyncAdminClient.get_tenantrB   c                 C   s   t | | |jd}|S )Nr,   )r   r1   r*   )r:   rB   r3   r?   r?   r@   r7     s   
zAsyncAdminClient.from_system)r   r   r   r   r   r   r   r   r   r   r   r!   rU   r   r   r   r   r   r   r"   rP   r   r   r7   __classcell__r?   r?   r   r@   r6     sB   
 
r6   )8rQ   typingr   r   uuidr   	overridesr   chromadb.api.models.Collectionr   chromadb.authr   chromadb.auth.utilsr   chromadb.apir	   r
   r   chromadb.api.configurationr   #chromadb.api.models.AsyncCollectionr   !chromadb.api.shared_system_clientr   chromadb.api.typesr   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%   r6   r?   r?   r?   r@   <module>   s*    <   