
    ug;                     J   d dl Z d dlmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlm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 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(m)Z)m*Z* d dl+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1 d dl2m3c m4Z5  G d dee      Z6 G d dee      Z7y)    N)OptionalSequence)UUID)override)CollectionName)UserIdentity)maybe_set_tenant_and_database)AsyncAdminAPIAsyncClientAPIAsyncServerAPI)CollectionConfiguration)AsyncCollection)SharedSystemClient)CollectionMetadata
DataLoader	Documents
EmbeddableEmbeddingFunction
Embeddings	GetResultIDsIncludeLoadable	MetadatasQueryResultURIs)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)ChromaError)DatabaseTenantWhereWhereDocumentc                      e Zd ZU dZeed<   eZeed<   e	Z
eed<   eed<   eee	 e       fdedededd fd       Zeee	fd	edededd fd
       Zeed	edd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edefd       Ze	 dDdee   dee   dee   fd       Zedefd       Zedd ej@                         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j@                         dfdedee#e$      dee%e&      de(fd       Z*edd ej@                         dfdedee!   dee"   dee#e$      dee%e&      de(fd        Z+e	 	 dDd!e,d"ee   d#ee"   ddfd$       Z-ededdfd%       Z.e	 	 	 dEd&e/d'e,d(e0d)ee1   d*ee2   d+ee3   de'fd,       Z4e	 	 	 	 dFd'e,d&e/d(ee0   d)ee1   d*ee2   d+ee3   de'fd-       Z5e	 	 	 dEd'e,d&e/d(e0d)ee1   d*ee2   d+ee3   de'fd.       Z6ed'e,defd/       Z7edGd'e,d1ede8fd2       Z9eddddddddg d3f	d'e,d&ee/   d4ee:   d5ee   dee   dee   d6ee   d7ee   d8ee;   d9e<de8fd:       Z=	 	 dDd'e,d&ee/   d4ee:   d8ee;   ddf
d;Z>ed0ddg d<fd'e,d=e0d>ed4ee:   d8ee;   d9e<de?fd?       Z@ede'fd@       ZAedefdA       ZBedefdB       ZCedefdC       ZDy)HAsyncClienta  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.
    _admin_clienttenantdatabase_serversettingsreturnc                   K    | |      }t        j                  |j                         ||_        ||_        |j                  j                  t              |_        |j                          d {   }t        ||j                  ||      \  }}|r||_        |r||_        t        j                  |j                        |_        |j                  |j                  |j                         d {    |j                          |S 7 7 w)Nr,   )4overwrite_singleton_tenant_database_access_from_authuser_provided_tenantuser_provided_databaser)   r*   )r   _populate_data_from_system_systemr)   r*   instancer   r+   get_user_identityr	   ;chroma_overwrite_singleton_tenant_database_access_from_authAsyncAdminClientfrom_systemr(   _validate_tenant_database_submit_client_start_event)clsr)   r*   r,   selfuser_identitymaybe_tenantmaybe_databases           N/var/www/openai/venv/lib/python3.12/site-packages/chromadb/api/async_client.pycreatezAsyncClient.create4   s      H%55dllC  ||,,^<"4466'DAI  BF  BF!'#+	(
$n &DK*DM-99$,,G,,DKK$--,XXX'')% 7 	Ys%   A.D0D1B D1D
2D
Dsystemc                 `   K   t         j                  |||j                         d{   S 7 w)zRCreate a client from an existing system. This is useful for testing and debugging.N)r'   rC   r,   )r=   rD   r)   r*   s       rB   from_system_asynczAsyncClient.from_system_asyncY   s'      !''&//JJJJs   %.,.r   c                     t        d       )zNAsyncClient cannot be created synchronously. Use .from_system_async() instead.)NotImplementedError)r=   rD   s     rB   r:   zAsyncClient.from_systemd   s     "\
 	
    c                 R   K   | j                   j                          d {   S 7 wN)r+   r7   r>   s    rB   r7   zAsyncClient.get_user_identityo   s     \\335555   '%'Nc                 b   K   | j                  ||       d {    || _        || _        y 7 wNr3   r;   r)   r*   )r>   r)   r*   s      rB   
set_tenantzAsyncClient.set_tenants   s3     ,,FX,NNN  	Os   /-/c                 h   K   | j                  | j                  |       d {    || _        y 7 wrO   rP   )r>   r*   s     rB   set_databasezAsyncClient.set_databasey   s0     ,,DKK(,SSS  	Ts   !202c                 |  K   	 | j                   j                  |       d {    	 | j                   j                  ||       d {    y 7 +# t        j                  $ r t	        d      t
        $ r}|d }~wt        $ r t	        d| d      w xY w7 N# t        j                  $ r t	        d      w xY ww)NnamezACould not connect to a Chroma server. Are you sure it is running?zCould not connect to tenant z. Are you sure it exists?rV   r)   )r(   
get_tenanthttpxConnectError
ValueErrorr!   	Exceptionget_database)r>   r)   r*   es       rB   r;   z%AsyncClient._validate_tenant_database~   s     	$$//V/<<<	$$11x1OOO =!! 	S   	G 	.vh6OP 	 P!! 	S 	s[   B<A AA  B 	B
B B<A &B7A99BB<B B99B<c                 R   K   | j                   j                          d {   S 7 wrK   )r+   	heartbeatrL   s    rB   r`   zAsyncClient.heartbeat   s     \\++----rM   limitoffsetc                    K   | j                   j                  ||| j                  | j                         d {   }|D cg c]  }t	        |j
                         c}S 7 'c c}w wrO   )r+   list_collectionsr)   r*   r   rV   )r>   ra   rb   modelsmodels        rB   rd   zAsyncClient.list_collections   sb      ||446$++ 5 
 
 9??uuzz*??
 @s!   7A(A!A(A#A(#A(c                    K   | j                   j                  | j                  | j                         d {   S 7 wrO   )r+   count_collectionsr)   r*   rL   s    rB   rh   zAsyncClient.count_collections   s9     \\33;; 4 
 
 	
 
s   5><>FrV   configurationmetadataembedding_functiondata_loaderget_or_createc                    K   | j                   j                  |||| j                  | j                  |       d {   }t	        | j                   |||      S 7 w)N)rV   ri   rj   r)   r*   rm   clientrf   rk   rl   )r+   create_collectionr)   r*   r   )r>   rV   ri   rj   rk   rl   rm   rf   s           rB   rq   zAsyncClient.create_collection   sd      ll44';;]]' 5 
 
 <<1#	
 	

s   9AAAc                    K   | j                   j                  || j                  | j                         d {   }t	        | j                   |||      S 7 w)NrV   r)   r*   ro   )r+   get_collectionr)   r*   r   )r>   rV   rk   rl   rf   s        rB   rt   zAsyncClient.get_collection   s[      ll11;;]] 2 
 

 <<1#	
 	

s   6AAAc                    K   | j                   j                  |||| j                  | j                         d {   }t	        | j                   |||      S 7 w)N)rV   ri   rj   r)   r*   ro   )r+   get_or_create_collectionr)   r*   r   )r>   rV   ri   rj   rk   rl   rf   s          rB   rv   z$AsyncClient.get_or_create_collection   sa      ll;;';;]] < 
 
 <<1#	
 	

s   8AAAidnew_namenew_metadatac                    K   | j                   j                  |||| j                  | j                         d {   S 7 w)N)rw   rx   ry   r)   r*   )r+   _modifyr)   r*   )r>   rw   rx   ry   s       rB   r{   zAsyncClient._modify   sE      \\))%;;]] * 
 
 	
 
s   8A?Ac                    K   | j                   j                  || j                  | j                         d {   S 7 w)Nrs   )r+   delete_collectionr)   r*   r>   rV   s     rB   r}   zAsyncClient.delete_collection  s?     
 \\33;;]] 4 
 
 	
 
s   6?=?idscollection_id
embeddings	metadatas	documentsurisc           
         K   | j                   j                  ||||||| j                  | j                         d {   S 7 w)N)r   r   r   r   r   r   r)   r*   )r+   _addr)   r*   )r>   r   r   r   r   r   r   s          rB   r   zAsyncClient._add  sN      \\&&'!;;]] ' 	
 	
 		
 	
   ;AAAc           
         K   | j                   j                  ||||||| j                  | j                         d {   S 7 wN)r   r   r   r   r   r   r)   r*   )r+   _updater)   r*   r>   r   r   r   r   r   r   s          rB   r   zAsyncClient._update%  N      \\))'!;;]] * 	
 	
 		
 	
r   c           
         K   | j                   j                  ||||||| j                  | j                         d {   S 7 wr   )r+   _upsertr)   r*   r   s          rB   r   zAsyncClient._upsert:  r   r   c                 V   K   | j                   j                  |       d {   S 7 w)N)r   )r+   _count)r>   r   s     rB   r   zAsyncClient._countO  s/     \\((' ) 
 
 	
 
    )')
   nc                 X   K   | j                   j                  ||       d {   S 7 w)N)r   r   )r+   _peek)r>   r   r   s      rB   r   zAsyncClient._peekU  s2     \\''' ( 
 
 	
 
   !*(*)r   r   r   wheresortpage	page_sizewhere_documentincludec                    K   | j                   j                  |||||||||	|
| j                  | j                         d {   S 7 w)N)r   r   r   r   ra   rb   r   r   r   r   r)   r*   )r+   _getr)   r*   )r>   r   r   r   r   ra   rb   r   r   r   r   s              rB   r   zAsyncClient._get\  sZ      \\&&');;]] ' 
 
 	
 
s   ?AAAc                    K   | j                   j                  ||||| j                  | j                         d {    y 7 w)N)r   r   r   r   r)   r*   )r+   _deleter)   r*   )r>   r   r   r   r   s        rB   r   zAsyncClient._deletey  sC      ll""');;]] # 
 	
 	
s   9AAA)r   r   r   	distancesquery_embeddings	n_resultsc           
         K   | j                   j                  ||||||| j                  | j                         d {   S 7 w)N)r   r   r   r   r   r   r)   r*   )r+   _queryr)   r*   )r>   r   r   r   r   r   r   s          rB   r   zAsyncClient._query  sN      \\(('-);;]] ) 	
 	
 		
 	
r   c                 R   K   | j                   j                          d {   S 7 wrK   )r+   resetrL   s    rB   r   zAsyncClient.reset  s     \\''))))rM   c                 R   K   | j                   j                          d {   S 7 wrK   )r+   get_versionrL   s    rB   r   zAsyncClient.get_version  s     \\--////rM   c                 6    | j                   j                         S rK   )r+   get_settingsrL   s    rB   r   zAsyncClient.get_settings  s    ||((**rI   c                 R   K   | j                   j                          d {   S 7 wrK   )r+   get_max_batch_sizerL   s    rB   r   zAsyncClient.get_max_batch_size  s     \\446666rM   )NN)NNN)NNNN)r   )E__name__
__module____qualname____doc__r
   __annotations__r   r)   strr   r*   r   classmethodr   rC   r    rF   r   r:   r   r7   rQ   rS   r;   intr`   r   r   r   rd   rh   efDefaultEmbeddingFunctionr   r   r   r   r   r   boolr   rq   rt   rv   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    rI   rB   r'   r'   "   sg    !  FC $Hc$ %(%Z	"" " 	"
 
" "H 
 %(	KK K 	K
 
K K 

 

  
 6 6 6 <L !s !c !QU ! !
 !3 !4 ! !c S T 0 . . . CG@c]@3;C=@	.	!@ @ 
 
 

  <@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
 

 
( 
$ 
3 
 

 
 
# 
y 
 
  "!%"# $"#'26C

 c]
 	

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

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

 
 !/
 
 

 
( *T * * 03 0 0 +h + + 7# 7 7rI   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 )r9   r+   r,   r-   Nc                 l    t         |   |       | j                  j                  t              | _        y rK   )super__init__r5   r6   r   r+   )r>   r,   	__class__s     rB   r   zAsyncAdminClient.__init__  s&    "||,,^<rI   rV   r)   c                 X   K   | j                   j                  ||       d {   S 7 wNrW   )r+   create_databaser>   rV   r)   s      rB   r   z AsyncAdminClient.create_database  &     \\11tF1KKKKr   c                 X   K   | j                   j                  ||       d {   S 7 wr   )r+   r]   r   s      rB   r]   zAsyncAdminClient.get_database  s&     \\..D.HHHHr   c                 X   K   | j                   j                  ||       d {   S 7 wr   )r+   delete_databaser   s      rB   r   z AsyncAdminClient.delete_database  r   r   ra   rb   c                 Z   K   | j                   j                  |||       d {   S 7 w)N)ra   rb   r)   )r+   list_databases)r>   ra   rb   r)   s       rB   r   zAsyncAdminClient.list_databases  s5      \\00v 1 
 
 	
 
s   "+)+c                 V   K   | j                   j                  |       d {   S 7 wNrU   )r+   create_tenantr~   s     rB   r   zAsyncAdminClient.create_tenant  s$     \\//T/::::r   c                 V   K   | j                   j                  |       d {   S 7 wr   )r+   rX   r~   s     rB   rX   zAsyncAdminClient.get_tenant  s$     \\,,$,7777r   rD   c                 V    t        j                  |        | |j                        }|S )Nr/   )r   r4   r,   )r=   rD   r6   s      rB   r:   zAsyncAdminClient.from_system  s%     	55f=0rI   )r   r   r   r   r   r   r   r   r   r   r   r"   r]   r   r   r   r   r   r   r#   rX   r   r    r:   __classcell__)r   s   @rB   r9   r9     sz   ,4J = =4 = =K L# Ls LPT L L :H Is IC IX I I =K L# Ls LPT L L   $ $$	
}
 
 	

 
(	
 
 ; ; ; ; 8S 8V 8 8  
  rI   r9   )8rY   typingr   r   uuidr   	overridesr   chromadb.api.models.Collectionr   chromadb.authr   chromadb.auth.utilsr	   chromadb.apir
   r   r   chromadb.api.configurationr   #chromadb.api.models.AsyncCollectionr   !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.errorsr!   chromadb.typesr"   r#   r$   r%   "chromadb.utils.embedding_functionsutilsembedding_functionsr   r'   r9   r   rI   rB   <module>r      sv     %   9 & = F F > ? @    O N ' A A / /J7$n J7^.)= .rI   