o
    1Xxi5                     @   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	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)m*Z*m+Z+ d dl,m-  m.Z/ G dd dee
Z0G dd dee	Z1dS )    N)OptionalSequence)UUID)override)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                   @   sn  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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de dfd ed(e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 d.ee  ddfd/d0Z*ed eddfd1d2Z+e			d^d3e,d4e'd5e-d6ee. d7ee/ d8ee0 de%fd9d:Z1e				d_d4e'd3e,d5ee- d6ee. d7ee/ d8ee0 de%fd;d<Z2e			d^d4e'd3e,d5e-d6ee. d7ee/ d8ee0 de%fd=d>Z3ed4e'defd?d@Z4ed`d4e'dBede5fdCdDZ6edi dddddi g dEf	d4e'd3ee, dFee7 dGee dee dee dHee dIee dJee8 dKe9de5fdLdMZ:i i fd4e'd3ee, dFee7 dJee8 de,f
dNdOZ;edAi i g dPfd4e'dQe-dRedFe7dJe8dKe9de<fdSdTZ=ede%fdUdVZ>edefdWdXZ?edefdYdZZ@edefd[d\ZAdS )a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 t|j|_|j||dI d H  ||_||_|j	t
|_|  |S )Nr'   r$   r%   )r   _populate_data_from_system_systemAsyncAdminClientfrom_systemr#   _validate_tenant_databaser$   r%   instancer   r&   _submit_client_start_event)clsr$   r%   r'   self r4   X/home/air/biblejyuku/back/venv/lib/python3.10/site-packages/chromadb/api/async_client.pycreate0   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"   r6   r'   )r2   r7   r$   r%   r4   r4   r5   from_system_asyncG   s   	zAsyncClient.from_system_asyncr   c                 C   s   t d )zNAsyncClient cannot be created synchronously. Use .from_system_async() instead.)NotImplementedError)r2   r7   r4   r4   r5   r.   R   s   zAsyncClient.from_systemNc                    s&   | j ||dI d H  || _|| _d S Nr*   r/   r$   r%   )r3   r$   r%   r4   r4   r5   
set_tenant]   s   
zAsyncClient.set_tenantc                    s"   | j | j|dI d H  || _d S r:   r;   )r3   r%   r4   r4   r5   set_databasec   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 ty`   td| d| 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?r?   r$   zCould not connect to database z for tenant )r#   
get_tenanthttpxConnectError
ValueErrorr   	Exceptionget_database)r3   r$   r%   er4   r4   r5   r/   h   s4   
z%AsyncClient._validate_tenant_databasec                       | j  I d H S N)r&   	heartbeatr3   r4   r4   r5   rJ         zAsyncClient.heartbeatlimitoffsetc                    s2    j j|| j jdI d H } fdd|D S )Nr*   c                    s   g | ]	}t  j|d qS ))clientmodel)r
   r&   ).0rP   rK   r4   r5   
<listcomp>   s    z0AsyncClient.list_collections.<locals>.<listcomp>)r&   list_collectionsr$   r%   )r3   rM   rN   modelsr4   rK   r5   rS      s   
zAsyncClient.list_collectionsc                    s   | j j| j| jdI d H S r:   )r&   count_collectionsr$   r%   rK   r4   r4   r5   rU      s   zAsyncClient.count_collectionsFr?   configurationmetadataembedding_functiondata_loaderget_or_createc                    s6   | j j|||| j| j|dI d H }t| j |||dS )N)r?   rV   rW   r$   r%   rZ   rO   rP   rX   rY   )r&   create_collectionr$   r%   r
   )r3   r?   rV   rW   rX   rY   rZ   rP   r4   r4   r5   r\      s   zAsyncClient.create_collectionidc                    s2   | j j||| j| jdI d H }t| j |||dS )N)r]   r?   r$   r%   r[   )r&   get_collectionr$   r%   r
   )r3   r?   r]   rX   rY   rP   r4   r4   r5   r^      s   
zAsyncClient.get_collectionc                    s4   | j j|||| j| jdI d H }t| j |||dS )N)r?   rV   rW   r$   r%   r[   )r&   get_or_create_collectionr$   r%   r
   )r3   r?   rV   rW   rX   rY   rP   r4   r4   r5   r_      s   z$AsyncClient.get_or_create_collectionnew_namenew_metadatac                    s   | j j|||dI d H S )N)r]   r`   ra   )r&   _modify)r3   r]   r`   ra   r4   r4   r5   rb      s   zAsyncClient._modifyc                    s   | j j|| j| jdI d H S )N)r?   r$   r%   )r&   delete_collectionr$   r%   r3   r?   r4   r4   r5   rc      s   zAsyncClient.delete_collectionidscollection_id
embeddings	metadatas	documentsurisc                        | j j||||||dI d H S )N)re   rf   rg   rh   ri   rj   )r&   _add)r3   re   rf   rg   rh   ri   rj   r4   r4   r5   rl        
zAsyncClient._addc                    rk   N)rf   re   rg   rh   ri   rj   )r&   _updater3   rf   re   rg   rh   ri   rj   r4   r4   r5   ro     rm   zAsyncClient._updatec                    rk   rn   )r&   _upsertrp   r4   r4   r5   rq   *  rm   zAsyncClient._upsertc                       | j j|dI d H S )N)rf   )r&   _count)r3   rf   r4   r4   r5   rs   =  s   zAsyncClient._count
   nc                       | j j||dI d H S )N)rf   ru   )r&   _peek)r3   rf   ru   r4   r4   r5   rw   C  s
   zAsyncClient._peek)rg   rh   ri   wheresortpage	page_sizewhere_documentincludec                    s(   | j j|||||||||	|
d
I d H S )N)
rf   re   rx   ry   rM   rN   rz   r{   r|   r}   )r&   _get)r3   rf   re   rx   ry   rM   rN   rz   r{   r|   r}   r4   r4   r5   r~   J  s   zAsyncClient._getc                    s   | j j||||dI d H S )N)rf   re   rx   r|   )r&   _delete)r3   rf   re   rx   r|   r4   r4   r5   r   e  s   zAsyncClient._delete)rg   rh   ri   	distancesquery_embeddings	n_resultsc                    rk   )N)rf   r   r   rx   r|   r}   )r&   _query)r3   rf   r   r   rx   r|   r}   r4   r4   r5   r   s  rm   zAsyncClient._queryc                    rH   rI   )r&   resetrK   r4   r4   r5   r     rL   zAsyncClient.resetc                    rH   rI   )r&   get_versionrK   r4   r4   r5   r     rL   zAsyncClient.get_versionc                 C   s
   | j  S rI   )r&   get_settingsrK   r4   r4   r5   r     s   
zAsyncClient.get_settingsc                    rH   rI   )r&   get_max_batch_sizerK   r4   r4   r5   r     rL   zAsyncClient.get_max_batch_size)NN)NNN)NNNN)rt   )B__name__
__module____qualname____doc__r   __annotations__r   r$   strr   r%   r   classmethodr   r6   r   r8   r   r.   r<   r=   r/   intrJ   r   r   r
   rS   rU   efDefaultEmbeddingFunctionr	   r   r   r   r   r   boolr\   r   r^   r_   rb   rc   r   r   r   r   r   rl   ro   rq   rs   r   rw   r    r!   r   r~   r   r   r   r   r   r   r   r4   r4   r4   r5   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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 rI   )super__init__r,   r0   r   r&   )r3   r'   	__class__r4   r5   r     s   zAsyncAdminClient.__init__r?   r$   c                    rv   Nr@   )r&   create_databaser3   r?   r$   r4   r4   r5   r        z AsyncAdminClient.create_databasec                    rv   r   )r&   rF   r   r4   r4   r5   rF     r   zAsyncAdminClient.get_databasec                    rr   Nr>   )r&   create_tenantrd   r4   r4   r5   r        zAsyncAdminClient.create_tenantc                    rr   r   )r&   rA   rd   r4   r4   r5   rA     r   zAsyncAdminClient.get_tenantr7   c                 C   s   t | | |jd}|S )Nr)   )r   r+   r'   )r2   r7   r0   r4   r4   r5   r.     s   
zAsyncAdminClient.from_system)r   r   r   r   r   r   r   r   r   r   r   r   rF   r   r   rA   r   r   r.   __classcell__r4   r4   r   r5   r-     s$   
 r-   )2rB   typingr   r   uuidr   	overridesr   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"   r-   r4   r4   r4   r5   <module>   s"    <  }