
    q9iHB                     T   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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 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l0m1Z1m2Z2 d dl3m4Z4m5Z5m6Z6m7Z7  G d dee
      Z8 G d dee	      Z9y)    )OptionalSequence)UUID)overrideN)AdminAPI	ClientAPI	ServerAPI)CreateCollectionConfigurationUpdateCollectionConfiguration.validate_embedding_function_conflict_on_create+validate_embedding_function_conflict_on_get)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultSchemaURIsIncludeMetadataDocuments!IncludeMetadataDocumentsDistancesDefaultEmbeddingFunction)UserIdentity)maybe_set_tenant_and_database)SettingsSystem)DEFAULT_TENANTDEFAULT_DATABASE)
Collection)ChromaAuthErrorChromaError)DatabaseTenantWhereWhereDocumentc                   V    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e   de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	 d?dee   dee   dee   fd       Zedefd       Zeddd e       ddfdedee   dee   dee   deee       dee!e"      de#defd       Z$e e       dfdedeee       dee!e"      defd       Z%eddd e       dfdedee   de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 ee(   ddf
d!       Z)ededdfd"       Z*e	 	 	 d@d#e+d$e'd%e,d&ee-   d'ee.   d(ee/   de#fd)       Z0e	 	 	 	 dAd$e'd#e+d%ee,   d&ee-   d'ee.   d(ee/   de#fd*       Z1e	 	 	 d@d$e'd#e+d%e,d&ee-   d'ee.   d(ee/   de#fd+       Z2ed$e'defd,       Z3edBd$e'd.ede4fd/       Z5eddddde6fd$e'd#ee+   d0ee7   dee   dee   d1ee8   d2e9de4fd3       Z:	 	 d?d$e'd#ee+   d0ee7   d1ee8   ddf
d4Z;edd-dde<fd$e'd5e,d#ee+   d6ed0ee7   d1ee8   d2e9de=fd7       Z>ede#fd8       Z?edefd9       Z@edefd:       ZAedefd;       ZBeefdededdfd<       ZCededdfd=       ZDdededdfd>ZE xZFS )C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                  ||      \  }}||t        d      ||t        d      |r|| _        |r|| _        t        j                  | j                        | _        | j                  | j                  | j                         | j!                          y )Nr3   )4overwrite_singleton_tenant_database_access_from_authuser_provided_tenantuser_provided_databasez]Could not determine a tenant from the current authentication method. Please provide a tenant.zkCould not determine a database name from the current authentication method. Please provide a database name.r/   r0   )super__init__r/   r0   _systeminstancer	   r1   get_user_identityr!   ;chroma_overwrite_singleton_tenant_database_access_from_authr'   AdminClientfrom_systemr2   _validate_tenant_database_submit_client_start_event)selfr/   r0   r3   user_identitymaybe_tenantmaybe_database	__class__s          \/var/www/html/leadgen/airagagent/rag_env/lib/python3.12/site-packages/chromadb/api/client.pyr<   zClient.__init__<   s    	(+ DK$DM ||,,Y7..0'DAI  BF  BF!'#+	(
$n FN!o  !h&6!}  &DK*DM )44T\\B&&dkkDMM&R'')    systemc                 Z    t        j                  |        | |||j                        }|S )N)r/   r0   r3   r   _populate_data_from_systemr3   )clsrL   r/   r0   r>   s        rJ   rB   zClient.from_systemi   s)     	55f=fx&//RrK   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?)r1   r?   httpxConnectError
ValueErrorr(   	Exceptionstr)rE   es     rJ   r?   zClient.get_user_identityw   sg    
	%<<1133!! 	S   	G 	%SV$$	%s!    &A)AA)A$$A)c                 6    | j                   j                         S N)r1   	heartbeatrE   s    rJ   r[   zClient.heartbeat   s    ||%%''rK   limitoffsetc                     | j                   j                  ||| j                  | j                        D cg c]  }t	        | j                   |       c}S c c}w )Nr:   )clientmodel)r1   list_collectionsr/   r0   r&   )rE   r]   r^   ra   s       rJ   rb   zClient.list_collections   sT     66vdkkDMM 7 
 dll%8
 	
 
s   Ac                 d    | j                   j                  | j                  | j                        S Nr:   )r1   count_collectionsr/   r0   r\   s    rJ   re   zClient.count_collections   s+    ||--;; . 
 	
rK   Fnameschemaconfigurationmetadataembedding_functiondata_loaderget_or_createc           	          |i }|j                  d      }t        ||       ||||d<   | j                  j                  |||| j                  | j
                  ||      }	t        | j                  |	||      S )Nrj   )rf   rg   ri   r/   r0   rl   rh   r`   ra   rj   rk   )getr   r1   create_collectionr/   r0   r&   )
rE   rf   rg   rh   ri   rj   rk   rl   configuration_efra   s
             rJ   rp   zClient.create_collection   s      M(,,-AB6 0	
 ).>.F2DM./..;;]]'' / 
 <<1#	
 	
rK   c                     | j                   j                  || j                  | j                        }|j                  j                  d      }t        ||       t        | j                   |||      S )Nrf   r/   r0   rj   rn   )r1   get_collectionr/   r0   configuration_jsonro   r   r&   )rE   rf   rj   rk   ra   persisted_ef_configs         rJ   rt   zClient.get_collection   su     ++;;]] , 

 $66::;OP3 3	
 <<1#	
 	
rK   c                 @   |i }|j                  d      }t        ||       ||||d<   | j                  j                  |||| j                  | j
                  |      }|j                  j                  d      }	t        ||	       t        | j                  |||      S )Nrj   )rf   rg   ri   r/   r0   rh   rn   )	ro   r   r1   get_or_create_collectionr/   r0   ru   r   r&   )
rE   rf   rg   rh   ri   rj   rk   rq   ra   rv   s
             rJ   rx   zClient.get_or_create_collection   s      M(,,-AB6 0	
 ).>.F2DM./55;;]]' 6 
 $66::;OP3 3	
 <<1#	
 	
rK   idnew_namenew_metadatanew_configurationc                 l    | j                   j                  || j                  | j                  |||      S )N)ry   r/   r0   rz   r{   r|   )r1   _modifyr/   r0   )rE   ry   rz   r{   r|   s        rJ   r~   zClient._modify  s:     ||##;;]]%/ $ 
 	
rK   c                 f    | j                   j                  || j                  | j                        S )Nrs   )r1   delete_collectionr/   r0   rE   rf   s     rJ   r   zClient.delete_collection   s1    
 ||--;;]] . 
 	
rK   idscollection_id
embeddings	metadatas	documentsurisc           
      p    | j                   j                  || j                  | j                  |||||      S )N)r   r/   r0   r   r   r   r   r   )r1   _addr/   r0   )rE   r   r   r   r   r   r   s          rJ   r   zClient._add/  s@     ||  ;;]]'! ! 	
 		
rK   c           
      p    | j                   j                  || j                  | j                  |||||      S N)r   r/   r0   r   r   r   r   r   )r1   _updater/   r0   rE   r   r   r   r   r   r   s          rJ   r   zClient._updateD  @     ||##';;]]! $ 	
 		
rK   c           
      p    | j                   j                  || j                  | j                  |||||      S r   )r1   _upsertr/   r0   r   s          rJ   r   zClient._upsertY  r   rK   c                 f    | j                   j                  || j                  | j                        S )N)r   r/   r0   )r1   _countr/   r0   )rE   r   s     rJ   r   zClient._countn  s/    ||""';;]] # 
 	
rK   
   nc                 h    | j                   j                  ||| j                  | j                        S )N)r   r   r/   r0   )r1   _peekr/   r0   )rE   r   r   s      rJ   r   zClient._peekv  s2    ||!!';;]]	 " 
 	
rK   wherewhere_documentincludec                 r    | j                   j                  || j                  | j                  ||||||	      S )N)	r   r/   r0   r   r   r]   r^   r   r   )r1   _getr/   r0   )rE   r   r   r   r]   r^   r   r   s           rJ   r   zClient._get  sC     ||  ';;]]) ! 

 
	
rK   c                 n    | j                   j                  || j                  | j                  |||       y )N)r   r/   r0   r   r   r   )r1   _deleter/   r0   )rE   r   r   r   r   s        rJ   r   zClient._delete  s5     	';;]]) 	 	
rK   query_embeddings	n_resultsc                 r    | j                   j                  ||| j                  | j                  |||||	      S )N)	r   r   r/   r0   r   r   r   r   r   )r1   _queryr/   r0   )rE   r   r   r   r   r   r   r   s           rJ   r   zClient._query  sC     ||""';;]]-) # 

 
	
rK   c                 6    | j                   j                         S rZ   )r1   resetr\   s    rJ   r   zClient.reset  s    ||!!##rK   c                 6    | j                   j                         S rZ   )r1   get_versionr\   s    rJ   r   zClient.get_version  s    ||''))rK   c                 6    | j                   j                         S rZ   )r1   get_settingsr\   s    rJ   r   zClient.get_settings  s    ||((**rK   c                 6    | j                   j                         S rZ   )r1   get_max_batch_sizer\   s    rJ   r   zClient.get_max_batch_size  s    ||..00rK   c                 F    | j                  ||       || _        || _        y rd   rC   r/   r0   )rE   r/   r0   s      rJ   
set_tenantzClient.set_tenant  s#    &&fx&H rK   c                 L    | j                  | j                  |       || _        y rd   r   )rE   r0   s     rJ   set_databasezClient.set_database  s     &&dkkH&M rK   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rf   rR   zCould not connect to tenant z. Are you sure it exists?rf   r/   )r2   
get_tenantrS   rT   rU   r(   rV   get_database)rE   r/   r0   rX   s       rJ   rC   z Client._validate_tenant_database  s    	))v)6	++&+I !! 	S   	G 	.vh6OP 	 !! 	S 	s    = B &B#A%%BB#)NN)NNN)NNNN)r   )G__name__
__module____qualname____doc__r$   r/   rW   __annotations__r%   r0   r	   r   r"   r   r<   classmethodr   r#   rB   r    r?   intr[   r   r&   rb   re   r   r   r
   r   r   r   r   r   boolrp   rt   rx   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   r   r   r   r   r   rC   __classcell__rI   s   @rJ   r.   r.   *   s-    !FC $Hc$
 !/"2%Z	+*+* 3-+* 	+*
 
+*Z  %(	  	
 
   %< % % (3 ( ( CG
c]
3;C=
	*	
 
 
3 
 

  $(AE15 %&6:#(
(
  (
   =>	(

 -.(
 %j)
(
 j23(
 (
 
(
 (
T  %&6:

 %j)

 j23
 

 
4  $(AE15 %&6:*
*
  *
   =>	*

 -.*
 %j)
*
 j23*
 
*
 *
X  #'59EI

 3-
 12	

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

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

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

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

 }
 
 !/
 
 

 
4 "&26

 c]
 	

 !/
 

  
 "!%26<

 %
 c]	

 
 
 !/
 
 

 
, $t $ $ *S * * +h + + 1C 1 1 6F ! ! !4 ! !
 !S !T ! ! s t rK   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efde	de	ddfd
       Zeddefdee   dee   de	de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 )rA   r1   r3   r4   Nc                 l    t         |   |       | j                  j                  t              | _        y rZ   )r;   r<   r=   r>   r	   r1   )rE   r3   rI   s     rJ   r<   zAdminClient.__init__  s&    "||,,Y7rK   rf   r/   c                 <    | j                   j                  ||      S Nr   )r1   create_databaserE   rf   r/   s      rJ   r   zAdminClient.create_database      ||++f+EErK   c                 <    | j                   j                  ||      S r   )r1   r   r   s      rJ   r   zAdminClient.get_database   s    ||((d6(BBrK   c                 <    | j                   j                  ||      S r   )r1   delete_databaser   s      rJ   r   zAdminClient.delete_database  r   rK   r]   r^   c                 >    | j                   j                  |||      S )N)r/   )r1   list_databases)rE   r]   r^   r/   s       rJ   r   zAdminClient.list_databases  s      ||**5&*HHrK   c                 :    | j                   j                  |      S Nr   )r1   create_tenantr   s     rJ   r   zAdminClient.create_tenant  s    ||))t)44rK   c                 :    | j                   j                  |      S r   )r1   r   r   s     rJ   r   zAdminClient.get_tenant  s    ||&&D&11rK   rL   c                 V    t        j                  |        | |j                        }|S )Nr6   rN   )rP   rL   r>   s      rJ   rB   zAdminClient.from_system  s%     	55f=0rK   )r   r   r   r	   r   r"   r<   r   r$   rW   r   r)   r   r   r   r   r   r   r   r*   r   r   r#   rB   r   r   s   @rJ   rA   rA     s~   ,4J 8 84 8 7E FC F F$ F F 4B C Cc Cx C C 7E FC F F$ F F   $ $$	I}I I 	I
 
(	I I 5# 5$ 5 5 2s 2v 2 2  
  rK   rA   ):typingr   r   uuidr   	overridesr   rS   chromadb.apir   r   r	   %chromadb.api.collection_configurationr
   r   r   r   !chromadb.api.shared_system_clientr   chromadb.api.typesr   r   r   r   r   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'   r(   chromadb.typesr)   r*   r+   r,   r.   rA    rK   rJ   <module>r      s{    %    7 7  A    & ' = , < 5 8 A AF FV,$h ,rK   