
    Ig 8                     F   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( d dl)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1c m2Z3  G d dee
      Z4 G d dee	      Z5y)    )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)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efd       Ze	 dBdee   dee   dee   fd       Zedefd       Zedd ej8                         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       Z$e ej8                         dfdedeee       dee!e"      defd       Z%edd ej8                         dfdedee   dee   deee       dee!e"      defd       Z&e	 	 dBde'dee   dee   ddfd       Z(ededdfd        Z)e	 	 	 dCd!e*d"e'd#e+d$ee,   d%ee-   d&ee.   de#fd'       Z/e	 	 	 	 dDd"e'd!e*d#ee+   d$ee,   d%ee-   d&ee.   de#fd(       Z0e	 	 	 dCd"e'd!e*d#e+d$ee,   d%ee-   d&ee.   de#fd)       Z1ed"e'defd*       Z2edEd"e'd,ede3fd-       Z4eddddddddg d.f	d"e'd!ee*   d/ee5   d0ee   dee   dee   d1ee   d2ee   d3ee6   d4e7de3fd5       Z8	 	 dBd"e'd!ee*   d/ee5   d3ee6   ddf
d6Z9ed+ddg d7fd"e'd8e+d9ed/ee5   d3ee6   d4e7de:fd:       Z;ede#fd;       Z<e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@       ZAdededdfdAZB xZCS )F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                    t         |   |       || _        || _        | j                  j                  t              | _        | j                         }t        ||j                  ||      \  }}|r|| _        |r|| _        t        j                  | j                        | _        | j                  | j                  | j                         | j                          y )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__s          P/var/www/html/answerous/venv/lib/python3.12/site-packages/chromadb/api/client.pyr4   zClient.__init__4   s     	(+  ||,,Y7..0'DAI  BF  BF!'#+	(
$n &DK*DM )44T\\B&&dkkDMM&R'')    systemc                 Z    t        j                  |        | |||j                        }|S )N)r'   r(   r+   r   _populate_data_from_systemr+   )clsrD   r'   r(   r6   s        rB   r:   zClient.from_systemT   s)     	55f=fx&//RrC   c                     	 | j                   j                         S # t        j                  $ r t	        d      t
        $ r}|d }~wt        $ r}t	        t        |            d }~ww xY w)NACould not connect to a Chroma server. Are you sure it is running?)r)   r7   httpxConnectError
ValueErrorr    	Exceptionstr)r=   es     rB   r7   zClient.get_user_identityb   sg    
	%<<1133!! 	S   	G 	%SV$$	%s!    &A)AA)A$$A)c                 6    | j                   j                         S N)r)   	heartbeatr=   s    rB   rS   zClient.heartbeatr   s    ||%%''rC   limitoffsetc                     | j                   j                  ||| j                  | j                        D cg c]  }t	        | j                   |       c}S c c}w )Nr2   )clientmodel)r)   list_collectionsr'   r(   r   )r=   rU   rV   rY   s       rB   rZ   zClient.list_collectionsv   sT     66vdkkDMM 7 
 dll%8
 	
 
s   Ac                 d    | j                   j                  | j                  | j                        S Nr2   )r)   count_collectionsr'   r(   rT   s    rB   r]   zClient.count_collections   s+    ||--;; . 
 	
rC   Fnameconfigurationmetadataembedding_functiondata_loaderget_or_createc                     | j                   j                  ||| j                  | j                  ||      }t	        | j                   |||      S )N)r^   r`   r'   r(   rc   r_   rX   rY   ra   rb   )r)   create_collectionr'   r(   r   )r=   r^   r_   r`   ra   rb   rc   rY   s           rB   rf   zClient.create_collection   sV     ..;;]]'' / 
 <<1#	
 	
rC   c                     | j                   j                  || j                  | j                        }t	        | j                   |||      S )Nr^   r'   r(   re   )r)   get_collectionr'   r(   r   )r=   r^   ra   rb   rY   s        rB   ri   zClient.get_collection   sM     ++;;]] , 

 <<1#	
 	
rC   c                     | j                   j                  ||| j                  | j                  |      }t	        | j                   |||      S )N)r^   r`   r'   r(   r_   re   )r)   get_or_create_collectionr'   r(   r   )r=   r^   r_   r`   ra   rb   rY   s          rB   rk   zClient.get_or_create_collection   sS     55;;]]' 6 
 <<1#	
 	
rC   idnew_namenew_metadatac                 j    | j                   j                  || j                  | j                  ||      S )N)rl   r'   r(   rm   rn   )r)   _modifyr'   r(   )r=   rl   rm   rn   s       rB   rp   zClient._modify   s7     ||##;;]]% $ 
 	
rC   c                 f    | j                   j                  || j                  | j                        S )Nrh   )r)   delete_collectionr'   r(   r=   r^   s     rB   rr   zClient.delete_collection   s1    
 ||--;;]] . 
 	
rC   idscollection_id
embeddings	metadatas	documentsurisc           
      p    | j                   j                  || j                  | j                  |||||      S )N)rt   r'   r(   ru   rv   rw   rx   ry   )r)   _addr'   r(   )r=   rt   ru   rv   rw   rx   ry   s          rB   r{   zClient._add   s@     ||  ;;]]'! ! 	
 		
rC   c           
      p    | j                   j                  || j                  | j                  |||||      S N)ru   r'   r(   rt   rv   rw   rx   ry   )r)   _updater'   r(   r=   ru   rt   rv   rw   rx   ry   s          rB   r~   zClient._update  @     ||##';;]]! $ 	
 		
rC   c           
      p    | j                   j                  || j                  | j                  |||||      S r}   )r)   _upsertr'   r(   r   s          rB   r   zClient._upsert  r   rC   c                 f    | j                   j                  || j                  | j                        S )N)ru   r'   r(   )r)   _countr'   r(   )r=   ru   s     rB   r   zClient._count-  s/    ||""';;]] # 
 	
rC   
   nc                 h    | j                   j                  ||| j                  | j                        S )N)ru   r   r'   r(   )r)   _peekr'   r(   )r=   ru   r   s      rB   r   zClient._peek5  s2    ||!!';;]]	 " 
 	
rC   )rv   rw   rx   wheresortpage	page_sizewhere_documentincludec                 x    | j                   j                  || j                  | j                  ||||||||	|
      S )N)ru   r'   r(   rt   r   r   rU   rV   r   r   r   r   )r)   _getr'   r(   )r=   ru   rt   r   r   rU   rV   r   r   r   r   s              rB   r   zClient._get>  sL     ||  ';;]]) ! 
 	
rC   c                 n    | j                   j                  || j                  | j                  |||       y )N)ru   r'   r(   rt   r   r   )r)   _deleter'   r(   )r=   ru   rt   r   r   s        rB   r   zClient._delete[  s5     	';;]]) 	 	
rC   )rv   rw   rx   	distancesquery_embeddings	n_resultsc           
      p    | j                   j                  || j                  | j                  |||||      S )N)ru   r'   r(   r   r   r   r   r   )r)   _queryr'   r(   )r=   ru   r   r   r   r   r   s          rB   r   zClient._queryk  s@     ||""';;]]-) # 	
 		
rC   c                 6    | j                   j                         S rR   )r)   resetrT   s    rB   r   zClient.reset  s    ||!!##rC   c                 6    | j                   j                         S rR   )r)   get_versionrT   s    rB   r   zClient.get_version  s    ||''))rC   c                 6    | j                   j                         S rR   )r)   get_settingsrT   s    rB   r   zClient.get_settings  s    ||((**rC   c                 6    | j                   j                         S rR   )r)   get_max_batch_sizerT   s    rB   r   zClient.get_max_batch_size  s    ||..00rC   c                 F    | j                  ||       || _        || _        y r\   r;   r'   r(   )r=   r'   r(   s      rB   
set_tenantzClient.set_tenant  s#    &&fx&H rC   c                 L    | j                  | j                  |       || _        y r\   r   )r=   r(   s     rB   set_databasezClient.set_database  s     &&dkkH&M rC   c                 L   	 | j                   j                  |       	 | j                   j                  ||       y # t        j                  $ r t	        d      t
        $ r}|d }~wt        $ r t	        d| d      w xY w# t        j                  $ r t	        d      w xY w)Nr^   rJ   zCould not connect to tenant z. Are you sure it exists?r^   r'   )r*   
get_tenantrK   rL   rM   r    rN   get_database)r=   r'   r(   rP   s       rB   r;   z Client._validate_tenant_database  s    	))v)6	++&+I !! 	S   	G 	.vh6OP 	 !! 	S 	s    = B &B#A%%BB#)NN)NNN)NNNN)r   )D__name__
__module____qualname____doc__r   r'   rO   __annotations__r   r(   r	   r   r   r4   classmethodr   r   r:   r   r7   intrS   r   r   r   rZ   r]   efDefaultEmbeddingFunctionr
   r   r   r   r   r   boolrf   ri   rk   r   rp   rr   r   r   r   r   r   r{   r~   r   r   r   r   r#   r$   r   r   r   r   r   r   r   r   r   r   r   r;   __classcell__rA   s   @rB   r&   r&   "   s)    !FC $Hc$
 %(%Z	** * 	*
 
*@  %(	  	
 
   %< % % (3 ( ( CG
c]
3;C=
	*	
 
 
3 
 

  <@15 (B'')6:#

   78
 -.	

 %j)

 j23
 
 

 
4  (B'')6:

 %j)

 j23
 

 
(  <@15 (B'')6:

   78
 -.	

 %j)

 j23
 

 
0  #'59	

 3-
 12	

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

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

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

 I&
 I&
 tn
 

 
( 
D 
S 
 
 
4 
C 
 
 
  "!%"# $"#'26C

 c]
 	

 sm
 }
 
 sm
 C=
 !/
 
 

 
@ "&26

 c]
 	

 !/
 

  
 !%26P

 %
 	

 
 !/
 
 

 
( $t $ $ *S * * +h + + 1C 1 1 6F ! ! !4 ! !
 !S !T ! ! s t rC   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 )r9   r)   r+   r,   Nc                 l    t         |   |       | j                  j                  t              | _        y rR   )r3   r4   r5   r6   r	   r)   )r=   r+   rA   s     rB   r4   zAdminClient.__init__  s&    "||,,Y7rC   r^   r'   c                 <    | j                   j                  ||      S Nr   )r)   create_databaser=   r^   r'   s      rB   r   zAdminClient.create_database  s    ||++f+EErC   c                 <    | j                   j                  ||      S r   )r)   r   r   s      rB   r   zAdminClient.get_database  s    ||((d6(BBrC   c                 :    | j                   j                  |      S Nr   )r)   create_tenantrs   s     rB   r   zAdminClient.create_tenant  s    ||))t)44rC   c                 :    | j                   j                  |      S r   )r)   r   rs   s     rB   r   zAdminClient.get_tenant  s    ||&&D&11rC   rD   c                 V    t        j                  |        | |j                        }|S )Nr.   rF   )rH   rD   r6   s      rB   r:   zAdminClient.from_system  s%     	55f=0rC   )r   r   r   r	   r   r   r4   r   r   rO   r   r!   r   r   r"   r   r   r   r:   r   r   s   @rB   r9   r9     s    ,4J 8 84 8 7E FC F F$ F F 4B C Cc Cx C C 5# 5$ 5 5 2s 2v 2 2  
  rC   r9   )6typingr   r   uuidr   	overridesr   rK   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   chromadb.errorsr    chromadb.typesr!   r"   r#   r$   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r&   r9    rC   rB   <module>r      sr    %    7 7 > @    ' = , < 5 ' A A / /Q Ql$h rC   