
    ug9                     J   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l1m2c m3Z4  G d dee
      Z5 G d dee	      Z6y)    )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                       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'       Z0e	 	 	 	 dDd"e(d!e+d#ee,   d$ee-   d%ee.   d&ee/   de#fd(       Z1e	 	 	 dCd"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dEd"e(d,ede4fd-       Z5eddddddddg d.f	d"e(d!ee+   d/ee6   d0ee   dee   dee   d1ee   d2ee   d3ee7   d4e8de4fd5       Z9	 	 dBd"e(d!ee+   d/ee6   d3ee7   ddf
d6Z:ed+ddg d7fd"e(d8e,d9ed/ee6   d3ee7   d4e8d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?       ZAededdfd@       ZBdededdfdAZC xZDS )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          H/var/www/openai/venv/lib/python3.12/site-packages/chromadb/api/client.pyr5   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,   )clsrE   r(   r)   r7   s        rC   r;   zClient.from_systemT   s)     	55f=fx&//RrD   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*   r8   httpxConnectError
ValueErrorr!   	Exceptionstr)r>   es     rC   r8   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    rC   rT   zClient.heartbeatr   s    ||%%''rD   limitoffsetc                     | j                   j                  ||| j                  | j                        D cg c]  }t	        |j
                         c}S c c}w Nr3   )r*   list_collectionsr(   r)   r    name)r>   rV   rW   models       rC   rZ   zClient.list_collectionsv   s[     66vdkkDMM 7 
 5::&
 	
 
s   Ac                 d    | j                   j                  | j                  | j                        S rY   )r*   count_collectionsr(   r)   rU   s    rC   r^   zClient.count_collections   s+    ||--;; . 
 	
rD   Fr[   configurationmetadataembedding_functiondata_loaderget_or_createc                     | j                   j                  ||| j                  | j                  ||      }t	        | j                   |||      S )N)r[   r`   r(   r)   rc   r_   clientr\   ra   rb   )r*   create_collectionr(   r)   r   )r>   r[   r_   r`   ra   rb   rc   r\   s           rC   rg   zClient.create_collection   sV     ..;;]]'' / 
 <<1#	
 	
rD   c                     | j                   j                  || j                  | j                        }t	        | j                   |||      S )Nr[   r(   r)   re   )r*   get_collectionr(   r)   r   )r>   r[   ra   rb   r\   s        rC   rj   zClient.get_collection   sM     ++;;]] , 

 <<1#	
 	
rD   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   r\   s          rC   rl   zClient.get_or_create_collection   sS     55;;]]' 6 
 <<1#	
 	
rD   idnew_namenew_metadatac                 j    | j                   j                  || j                  | j                  ||      S )N)rm   r(   r)   rn   ro   )r*   _modifyr(   r)   )r>   rm   rn   ro   s       rC   rq   zClient._modify   s7     ||##;;]]% $ 
 	
rD   c                 f    | j                   j                  || j                  | j                        S )Nri   )r*   delete_collectionr(   r)   r>   r[   s     rC   rs   zClient.delete_collection   s1    
 ||--;;]] . 
 	
rD   idscollection_id
embeddings	metadatas	documentsurisc           
      p    | j                   j                  || j                  | j                  |||||      S )N)ru   r(   r)   rv   rw   rx   ry   rz   )r*   _addr(   r)   )r>   ru   rv   rw   rx   ry   rz   s          rC   r|   zClient._add   s@     ||  ;;]]'! ! 	
 		
rD   c           
      p    | j                   j                  || j                  | j                  |||||      S N)rv   r(   r)   ru   rw   rx   ry   rz   )r*   _updater(   r)   r>   rv   ru   rw   rx   ry   rz   s          rC   r   zClient._update  @     ||##';;]]! $ 	
 		
rD   c           
      p    | j                   j                  || j                  | j                  |||||      S r~   )r*   _upsertr(   r)   r   s          rC   r   zClient._upsert  r   rD   c                 f    | j                   j                  || j                  | j                        S )N)rv   r(   r)   )r*   _countr(   r)   )r>   rv   s     rC   r   zClient._count-  s/    ||""';;]] # 
 	
rD   
   nc                 h    | j                   j                  ||| j                  | j                        S )N)rv   r   r(   r)   )r*   _peekr(   r)   )r>   rv   r   s      rC   r   zClient._peek5  s2    ||!!';;]]	 " 
 	
rD   )rw   rx   ry   wheresortpage	page_sizewhere_documentincludec                 x    | j                   j                  || j                  | j                  ||||||||	|
      S )N)rv   r(   r)   ru   r   r   rV   rW   r   r   r   r   )r*   _getr(   r)   )r>   rv   ru   r   r   rV   rW   r   r   r   r   s              rC   r   zClient._get>  sL     ||  ';;]]) ! 
 	
rD   c                 n    | j                   j                  || j                  | j                  |||       y )N)rv   r(   r)   ru   r   r   )r*   _deleter(   r)   )r>   rv   ru   r   r   s        rC   r   zClient._delete[  s5     	';;]]) 	 	
rD   )rw   rx   ry   	distancesquery_embeddings	n_resultsc           
      p    | j                   j                  || j                  | j                  |||||      S )N)rv   r(   r)   r   r   r   r   r   )r*   _queryr(   r)   )r>   rv   r   r   r   r   r   s          rC   r   zClient._queryk  s@     ||""';;]]-) # 	
 		
rD   c                 6    | j                   j                         S rS   )r*   resetrU   s    rC   r   zClient.reset  s    ||!!##rD   c                 6    | j                   j                         S rS   )r*   get_versionrU   s    rC   r   zClient.get_version  s    ||''))rD   c                 6    | j                   j                         S rS   )r*   get_settingsrU   s    rC   r   zClient.get_settings  s    ||((**rD   c                 6    | j                   j                         S rS   )r*   get_max_batch_sizerU   s    rC   r   zClient.get_max_batch_size  s    ||..00rD   c                 F    | j                  ||       || _        || _        y rY   r<   r(   r)   )r>   r(   r)   s      rC   
set_tenantzClient.set_tenant  s#    &&fx&H rD   c                 L    | j                  | j                  |       || _        y rY   r   )r>   r)   s     rC   set_databasezClient.set_database  s     &&dkkH&M rD   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[   rK   zCould not connect to tenant z. Are you sure it exists?r[   r(   )r+   
get_tenantrL   rM   rN   r!   rO   get_database)r>   r(   r)   rQ   s       rC   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   )E__name__
__module____qualname____doc__r   r(   rP   __annotations__r   r)   r	   r   r   r5   classmethodr   r   r;   r   r8   intrT   r   r   r    rZ   r^   efDefaultEmbeddingFunctionr
   r   r   r   r   r   boolr   rg   rj   rl   r   rq   rs   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__rB   s   @rC   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 rD   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 )r:   r*   r,   r-   Nc                 l    t         |   |       | j                  j                  t              | _        y rS   )r4   r5   r6   r7   r	   r*   )r>   r,   rB   s     rC   r5   zAdminClient.__init__  s&    "||,,Y7rD   r[   r(   c                 <    | j                   j                  ||      S Nr   )r*   create_databaser>   r[   r(   s      rC   r   zAdminClient.create_database      ||++f+EErD   c                 <    | j                   j                  ||      S r   )r*   r   r   s      rC   r   zAdminClient.get_database  s    ||((d6(BBrD   c                 <    | j                   j                  ||      S r   )r*   delete_databaser   s      rC   r   zAdminClient.delete_database  r   rD   rV   rW   c                 >    | j                   j                  |||      S )N)r(   )r*   list_databases)r>   rV   rW   r(   s       rC   r   zAdminClient.list_databases  s      ||**5&*HHrD   c                 :    | j                   j                  |      S Nr   )r*   create_tenantrt   s     rC   r   zAdminClient.create_tenant  s    ||))t)44rD   c                 :    | j                   j                  |      S r   )r*   r   rt   s     rC   r   zAdminClient.get_tenant  s    ||&&D&11rD   rE   c                 V    t        j                  |        | |j                        }|S )Nr/   rG   )rI   rE   r7   s      rC   r;   zAdminClient.from_system  s%     	55f=0rD   )r   r   r   r	   r   r   r5   r   r   rP   r   r"   r   r   r   r   r   r   r   r#   r   r   r   r;   r   r   s   @rC   r:   r:     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  
  rD   r:   )7typingr   r   uuidr   	overridesr   rL   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'   r:    rD   rC   <module>r      sr    %    7 7 > @    ' = , < E ' A A / /Q Ql,$h ,rD   