
    ti/                     0   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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 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(m)Z) d dl*m+c m,Z-  G d dee
          Z. G d dee	          Z/dS )    )OptionalSequence)UUID)overrideN)AdminAPI	ClientAPI	ServerAPI)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultURIs)SettingsSystem)DEFAULT_TENANTDEFAULT_DATABASE)
Collection)ChromaError)DatabaseTenantWhereWhereDocumentc                       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	Zeeeefd
edededd fd                        Zedefd            Ze	 d@dee         dee         dee         fd            Zedefd            Zed ej                    ddfdedee         deee                  deee                  de defd            Z!ed ej                    dfdedee"         deee                  deee                  def
d            Z#ed ej                    dfdedee         deee                  deee                  def
d            Z$e	 	 d@de"dee         dee         ddfd            Z%ededdfd            Z&e	 	 	 dAde'd e"d!e(d"ee)         d#ee*         d$ee+         de fd%            Z,e	 	 	 	 dBd e"de'd!ee(         d"ee)         d#ee*         d$ee+         de fd&            Z-e	 	 	 dAd e"de'd!e(d"ee)         d#ee*         d$ee+         de fd'            Z.ed e"defd(            Z/edCd e"d*ede0fd+            Z1edi dddddi g d,f	d e"dee'         d-ee2         d.ee         dee         dee         d/ee         d0ee         d1ee3         d2e4de0fd3            Z5i i fd e"dee'         d-ee2         d1ee3         de'f
d4Z6ed)i i g d5fd e"d6e(d7ed-e2d1e3d2e4de7fd8            Z8ede fd9            Z9edefd:            Z:edefd;            Z;edefd<            Z<eefdededdfd=            Z=ededdfd>            Z>dededdfd?Z? xZ@S )D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                 N   t                                          |           || _        || _        t                              | j                  | _        |                     ||           | j        	                    t                    | _        |                                  d S )Nr(   r$   r%   )super__init__r$   r%   AdminClientfrom_system_systemr'   _validate_tenant_databaseinstancer	   r&   _submit_client_start_event)selfr$   r%   r(   	__class__s       F/var/www/icac/venv/lib/python3.11/site-packages/chromadb/api/client.pyr.   zClient.__init__1   s     	(+++ (44T\BB&&fx&HHH |,,Y77'')))))    systemc                 T    t          j        |            | |||j                  }|S )N)r$   r%   r(   r
   _populate_data_from_systemr(   )clsr9   r$   r%   r3   s        r7   r0   zClient.from_systemC   s2     	5f===3fx&/RRRr8   c                 4    | j                                         S N)r&   	heartbeatr5   s    r7   r@   zClient.heartbeatS   s    |%%'''r8   limitoffsetc                 R    | j                             ||| j        | j                  S Nr,   )r&   list_collectionsr$   r%   )r5   rB   rC   s      r7   rF   zClient.list_collectionsW   s0     |,,6$+ - 
 
 	
r8   c                 N    | j                             | j        | j                  S rE   )r&   count_collectionsr$   r%   rA   s    r7   rH   zClient.count_collections_   s*    |--; . 
 
 	
r8   Fnamemetadataembedding_functiondata_loaderget_or_createc           	      X    | j                             ||||| j        | j        |          S )N)rI   rJ   rK   rL   r$   r%   rM   )r&   create_collectionr$   r%   )r5   rI   rJ   rK   rL   rM   s         r7   rO   zClient.create_collectione   s<     |--1#;]' . 
 
 	
r8   idc                 V    | j                             ||||| j        | j                  S )N)rP   rI   rK   rL   r$   r%   )r&   get_collectionr$   r%   )r5   rI   rP   rK   rL   s        r7   rR   zClient.get_collectionz   s9     |**1#;] + 
 
 	
r8   c                 V    | j                             ||||| j        | j                  S )N)rI   rJ   rK   rL   r$   r%   )r&   get_or_create_collectionr$   r%   )r5   rI   rJ   rK   rL   s        r7   rT   zClient.get_or_create_collection   s9     |441#;] 5 
 
 	
r8   new_namenew_metadatac                 <    | j                             |||          S )N)rP   rU   rV   )r&   _modify)r5   rP   rU   rV   s       r7   rX   zClient._modify   s,     |##% $ 
 
 	
r8   c                 P    | j                             || j        | j                  S )N)rI   r$   r%   )r&   delete_collectionr$   r%   r5   rI   s     r7   rZ   zClient.delete_collection   s0    
 |--;] . 
 
 	
r8   idscollection_id
embeddings	metadatas	documentsurisc                 B    | j                             ||||||          S )N)r\   r]   r^   r_   r`   ra   )r&   _add)r5   r\   r]   r^   r_   r`   ra   s          r7   rc   zClient._add   s5     |  '! ! 
 
 	
r8   c                 B    | j                             ||||||          S N)r]   r\   r^   r_   r`   ra   )r&   _updater5   r]   r\   r^   r_   r`   ra   s          r7   rf   zClient._update   5     |##'! $ 
 
 	
r8   c                 B    | j                             ||||||          S re   )r&   _upsertrg   s          r7   rj   zClient._upsert   rh   r8   c                 8    | j                             |          S )N)r]   )r&   _count)r5   r]   s     r7   rl   zClient._count   s$    |""' # 
 
 	
r8   
   nc                 :    | j                             ||          S )N)r]   rn   )r&   _peek)r5   r]   rn   s      r7   rp   zClient._peek   s'    |!!' " 
 
 	
r8   )r^   r_   r`   wheresortpage	page_sizewhere_documentincludec                 J    | j                             |||||||||	|

  
        S )N)
r]   r\   rq   rr   rB   rC   rs   rt   ru   rv   )r&   _get)r5   r]   r\   rq   rr   rB   rC   rs   rt   ru   rv   s              r7   rx   zClient._get  sA     |  ') ! 
 
 	
r8   c                 >    | j                             ||||          S )N)r]   r\   rq   ru   )r&   _delete)r5   r]   r\   rq   ru   s        r7   rz   zClient._delete  s/     |##')	 $ 
 
 	
r8   )r^   r_   r`   	distancesquery_embeddings	n_resultsc                 B    | j                             ||||||          S )N)r]   r|   r}   rq   ru   rv   )r&   _query)r5   r]   r|   r}   rq   ru   rv   s          r7   r   zClient._query+  s5     |""'-) # 
 
 	
r8   c                 4    | j                                         S r?   )r&   resetrA   s    r7   r   zClient.reset>  s    |!!###r8   c                 4    | j                                         S r?   )r&   get_versionrA   s    r7   r   zClient.get_versionB  s    |'')))r8   c                 4    | j                                         S r?   )r&   get_settingsrA   s    r7   r   zClient.get_settingsF  s    |((***r8   c                 4    | j                                         S r?   )r&   get_max_batch_sizerA   s    r7   r   zClient.get_max_batch_sizeJ  s    |..000r8   c                 P    |                      ||           || _        || _        d S rE   r2   r$   r%   )r5   r$   r%   s      r7   
set_tenantzClient.set_tenantR  s-    &&fx&HHH r8   c                 L    |                      | j        |           || _        d S rE   r   )r5   r%   s     r7   set_databasezClient.set_databaseX  s(    &&dkH&MMM r8   c                    	 | j                             |           nR# t          j        j        $ r t          d          t          $ r}|d }~wt          $ r t          d| d          w xY w	 | j                             ||           d S # t          j        j        $ r t          d          t          $ r t          d| d| d          w xY w)NrI   zACould not connect to a Chroma server. Are you sure it is running?zCould not connect to tenant z. Are you sure it exists?rI   r$   zCould not connect to database z for tenant )	r'   
get_tenantrequests
exceptionsConnectionError
ValueErrorr   	Exceptionget_database)r5   r$   r%   es       r7   r2   z Client._validate_tenant_database]  sB   	))v)6666"2 	 	 	S    	 	 	G 	 	 	PvPPP  	
		++&+IIIII"2 	 	 	S    	 	 	hhhvhhh  	s"    ,A-
A!A-1B AC)NN)NNN)NNNN)rm   )A__name__
__module____qualname____doc__r   r$   str__annotations__r   r%   r	   r   r   r.   classmethodr   r   r0   intr@   r   r   r   rF   rH   efDefaultEmbeddingFunctionr   r   r   r   r   boolrO   r   rR   rT   rX   rZ   r   r   r   r   r   rc   rf   rj   rl   r   rp   r    r!   r   rx   rz   r   r   r   r   r   r   r   r   r2   __classcell__r6   s   @r7   r#   r#      s          !FC   $Hc$$$
 %(%XZZ	* ** * 	*
 
* * * * * *$  %(	   	
 
   X [ (3 ( ( ( X( CG
 
c]
3;C=
	*	
 
 
 X
 
3 
 
 
 X

  26 (B'))6:#
 

 -.
 %j)
	
 j23
 
 

 
 
 X
(  " (B'))6:
 

 TN
 %j)
	
 j23
 

 
 
 X
$  26 (B'))6:
 

 -.
 %j)
	
 j23
 

 
 
 X
$  #'59	

 



 3-

 12	


 


 

 

 X

 

 

 
 
 X
  *.)-#
 

 
 	

 I&
 I&
 tn
 

 
 
 X
$ 
 ,0)-)-#
 

 
 Z(	

 I&
 I&
 tn
 

 
 
 X
$  *.)-#
 

 
 	

 I&
 I&
 tn
 

 
 
 X
$ 
D 
S 
 
 
 X

 
 
4 
C 
 
 
 
 X
  "!#"# $"#'24CCC
 

 c]
 	

 sm
 }
 
 sm
 C=
 !/
 
 

 
 
 X
< "$24
 

 c]
 	

 !/
 

 
 
 
 
 (*PPP
 

 %
 	

 
 &
 
 

 
 
 X
$ $t $ $ $ X$ *S * * * X* +h + + + X+ 1C 1 1 1 X1 6F ! ! ! !4 ! ! ! X!
 !S !T ! ! ! X! s t        r8   r#   c                       e Zd ZU eed<    e            fdeddf fdZeefde	de	ddfd            Z
eefde	de	defd	            Zede	ddfd
            Zede	defd            Zeededd fd                        Z xZS )r/   r&   r(   r)   Nc                     t                                          |           | j                            t                    | _        d S r?   )r-   r.   r1   r3   r	   r&   )r5   r(   r6   s     r7   r.   zAdminClient.__init__}  s6    """|,,Y77r8   rI   r$   c                 :    | j                             ||          S Nr   )r&   create_databaser5   rI   r$   s      r7   r   zAdminClient.create_database  s    |++f+EEEr8   c                 :    | j                             ||          S r   )r&   r   r   s      r7   r   zAdminClient.get_database  s    |((d6(BBBr8   c                 8    | j                             |          S Nr   )r&   create_tenantr[   s     r7   r   zAdminClient.create_tenant  s    |))t)444r8   c                 8    | j                             |          S r   )r&   r   r[   s     r7   r   zAdminClient.get_tenant  s    |&&D&111r8   r9   c                 P    t          j        |            | |j                  }|S )Nr+   r;   )r=   r9   r3   s      r7   r0   zAdminClient.from_system  s.     	5f===3000r8   )r   r   r   r	   r   r   r.   r   r   r   r   r   r   r   r   r   r   r   r0   r   r   s   @r7   r/   r/   z  s        ,4HJJ 8 8 84 8 8 8 8 8 8 7E F FC F F$ F F F XF 4B C C Cc Cx C C C XC 5# 5$ 5 5 5 X5 2s 2v 2 2 2 X2  
   X [    r8   r/   )0typingr   r   uuidr   	overridesr   r   chromadb.apir   r   r	   !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.api.models.Collectionr   chromadb.errorsr   chromadb.typesr   r   r    r!   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r#   r/    r8   r7   <module>r      s   % % % % % % % %              7 7 7 7 7 7 7 7 7 7 @ @ @ @ @ @                              - , , , , , , , < < < < < < < < 5 5 5 5 5 5 ' ' ' ' ' ' A A A A A A A A A A A A / / / / / / / / /V V V V V V V Vv
    $h     r8   