o
    g9                     @   s>  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 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 d d
l m!Z! d dl"m#Z#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-m.Z.m/Z/m0Z0 d dl1m2  m3Z4 G dd dee
Z5G dd dee	Z6dS )    )OptionalSequence)UUID)overrideN)AdminAPI	ClientAPI	ServerAPI)CollectionConfiguration)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultURIs)UserIdentity)maybe_set_tenant_and_database)SettingsSystem)DEFAULT_TENANTDEFAULT_DATABASE)
CollectionCollectionName)ChromaError)DatabaseTenantWhereWhereDocumentc                       sl  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	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 d'ee ddfd(d)Z)ededdfd*d+Z*e			d]d,e+d-e(d.e,d/ee- d0ee. d1ee/ de#fd2d3Z0e				d^d-e(d,e+d.ee, d/ee- d0ee. d1ee/ de#fd4d5Z1e			d]d-e(d,e+d.e,d/ee- d0ee. d1ee/ de#fd6d7Z2ed-e(defd8d9Z3ed_d-e(d;ede4fd<d=Z5eddddddddg d>f	d-e(d,ee+ d?ee6 d@ee dee dee dAee dBee dCee7 dDe8de4fdEdFZ9		d\d-e(d,ee+ d?ee6 dCee7 ddf
dGdHZ:ed:ddg dIfd-e(dJe,dKed?ee6 dCee7 dDe8de;fdLdMZ<ede#fdNdOZ=edefdPdQZ>edefdRdSZ?edefdTdUZ@eefdededdfdVdWZAededdfdXdYZBdededdfdZd[ZC  ZDS )`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__ J/var/www/visachat/venv/lib/python3.10/site-packages/chromadb/api/client.pyr2   4   s$   
zClient.__init__systemc                 C   s   t | | |||jd}|S )N)r&   r'   r*   r
   _populate_data_from_systemr*   )clsrC   r&   r'   r4   rA   rA   rB   r8   T   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(   r5   httpxConnectError
ValueErrorr    	Exceptionstr)r;   erA   rA   rB   r5   b   s   zClient.get_user_identityc                 C   
   | j  S N)r(   	heartbeatr;   rA   rA   rB   rP   r      
zClient.heartbeatlimitoffsetc                 C   s"   dd | j j||| j| jdD S )Nc                 S   s   g | ]}t |jqS rA   )r   name).0modelrA   rA   rB   
<listcomp>z   s    z+Client.list_collections.<locals>.<listcomp>r0   )r(   list_collectionsr&   r'   )r;   rS   rT   rA   rA   rB   rY   v   s
   zClient.list_collectionsc                 C   s   | j j| j| jdS Nr0   )r(   count_collectionsr&   r'   rQ   rA   rA   rB   r[      s   zClient.count_collectionsFrU   configurationmetadataembedding_functiondata_loaderget_or_createc                 C   s.   | j j||| j| j||d}t| j |||dS )N)rU   r]   r&   r'   r`   r\   clientrW   r^   r_   )r(   create_collectionr&   r'   r   )r;   rU   r\   r]   r^   r_   r`   rW   rA   rA   rB   rc      s   zClient.create_collectionc                 C   s(   | j j|| j| jd}t| j |||dS )NrU   r&   r'   ra   )r(   get_collectionr&   r'   r   )r;   rU   r^   r_   rW   rA   rA   rB   re      s   	zClient.get_collectionc                 C   s,   | j j||| j| j|d}t| j |||dS )N)rU   r]   r&   r'   r\   ra   )r(   get_or_create_collectionr&   r'   r   )r;   rU   r\   r]   r^   r_   rW   rA   rA   rB   rf      s   zClient.get_or_create_collectionidnew_namenew_metadatac                 C   s   | j j|| j| j||dS )N)rg   r&   r'   rh   ri   )r(   _modifyr&   r'   )r;   rg   rh   ri   rA   rA   rB   rj      s   zClient._modifyc                 C      | j j|| j| jdS )Nrd   )r(   delete_collectionr&   r'   r;   rU   rA   rA   rB   rl      s
   zClient.delete_collectionidscollection_id
embeddings	metadatas	documentsurisc              
   C       | j j|| j| j|||||dS )N)rn   r&   r'   ro   rp   rq   rr   rs   )r(   _addr&   r'   )r;   rn   ro   rp   rq   rr   rs   rA   rA   rB   ru         
zClient._addc              
   C   rt   N)ro   r&   r'   rn   rp   rq   rr   rs   )r(   _updater&   r'   r;   ro   rn   rp   rq   rr   rs   rA   rA   rB   rx     rv   zClient._updatec              
   C   rt   rw   )r(   _upsertr&   r'   ry   rA   rA   rB   rz     rv   zClient._upsertc                 C   rk   )N)ro   r&   r'   )r(   _countr&   r'   )r;   ro   rA   rA   rB   r{   -  s
   zClient._count
   nc                 C   s   | j j||| j| jdS )N)ro   r}   r&   r'   )r(   _peekr&   r'   )r;   ro   r}   rA   rA   rB   r~   5  s   zClient._peek)rp   rq   rr   wheresortpage	page_sizewhere_documentincludec                 C   s(   | j j|| j| j||||||||	|
dS )N)ro   r&   r'   rn   r   r   rS   rT   r   r   r   r   )r(   _getr&   r'   )r;   ro   rn   r   r   rS   rT   r   r   r   r   rA   rA   rB   r   >  s   zClient._getc                 C   s    | j j|| j| j|||d d S )N)ro   r&   r'   rn   r   r   )r(   _deleter&   r'   )r;   ro   rn   r   r   rA   rA   rB   r   [  s   
zClient._delete)rp   rq   rr   	distancesquery_embeddings	n_resultsc              
   C   rt   )N)ro   r&   r'   r   r   r   r   r   )r(   _queryr&   r'   )r;   ro   r   r   r   r   r   rA   rA   rB   r   k  rv   zClient._queryc                 C   rN   rO   )r(   resetrQ   rA   rA   rB   r     rR   zClient.resetc                 C   rN   rO   )r(   get_versionrQ   rA   rA   rB   r     rR   zClient.get_versionc                 C   rN   rO   )r(   get_settingsrQ   rA   rA   rB   r     rR   zClient.get_settingsc                 C   rN   rO   )r(   get_max_batch_sizerQ   rA   rA   rB   r     rR   zClient.get_max_batch_sizec                 C   s   | j ||d || _|| _d S rZ   r9   r&   r'   )r;   r&   r'   rA   rA   rB   
set_tenant  s   
zClient.set_tenantc                 C   s   | j | j|d || _d S rZ   r   )r;   r'   rA   rA   rB   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rU   rG   zCould not connect to tenant z. Are you sure it exists?rU   r&   )r)   
get_tenantrH   rI   rJ   r    rK   get_database)r;   r&   r'   rM   rA   rA   rB   r9     s*   
z Client._validate_tenant_database)NN)NNN)NNNN)r|   )E__name__
__module____qualname____doc__r   r&   rL   __annotations__r   r'   r   r   r   r2   classmethodr   r   r8   r   r5   intrP   r   r   r   rY   r[   efDefaultEmbeddingFunctionr	   r   r   r   r   r   boolr   rc   re   rf   r   rj   rl   r   r   r   r   r   ru   rx   rz   r{   r   r~   r#   r$   r   r   r   r   r   r   r   r   r   r   r   r9   __classcell__rA   rA   r?   rB   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 )r7   r(   r*   r+   Nc                    s   t  | | jt| _d S rO   )r1   r2   r3   r4   r   r(   )r;   r*   r?   rA   rB   r2     s   zAdminClient.__init__rU   r&   c                 C      | j j||dS Nr   )r(   create_databaser;   rU   r&   rA   rA   rB   r        zAdminClient.create_databasec                 C   r   r   )r(   r   r   rA   rA   rB   r     r   zAdminClient.get_databasec                 C   r   r   )r(   delete_databaser   rA   rA   rB   r     r   zAdminClient.delete_databaserS   rT   c                 C   s   | j j|||dS )N)r&   )r(   list_databases)r;   rS   rT   r&   rA   rA   rB   r     s   zAdminClient.list_databasesc                 C      | j j|dS Nr   )r(   create_tenantrm   rA   rA   rB   r        zAdminClient.create_tenantc                 C   r   r   )r(   r   rm   rA   rA   rB   r     r   zAdminClient.get_tenantrC   c                 C   s   t | | |jd}|S )Nr,   rD   )rF   rC   r4   rA   rA   rB   r8     s   
zAdminClient.from_system)r   r   r   r   r   r   r2   r   r   rL   r   r!   r   r   r   r   r   r   r   r"   r   r   r   r8   r   rA   rA   r?   rB   r7     sB   
 r7   )7typingr   r   uuidr   	overridesr   rH   chromadb.apir   r   r   chromadb.api.configurationr	   !chromadb.api.shared_system_clientr
   chromadb.api.typesr   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   r   chromadb.errorsr    chromadb.typesr!   r"   r#   r$   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r%   r7   rA   rA   rA   rB   <module>   s*    <   