
    ugQ                     h   d dl Z d dlmZ d dlZd dlZd dlmZmZm	Z	m
Z
mZmZ d dlZd dl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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'm(Z(m)Z* d dl+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9  ejt                  e;      Z< G d dee      Z=y)    N)UUID)AnyOptionalcastTupleSequenceDict)override)UserIdentity)AsyncServerAPI)BaseHTTPClient)CollectionConfigurationInternal)DEFAULT_DATABASEDEFAULT_TENANTSystemSettings)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClient)async_to_sync)DatabaseTenant
Collection)	Documents
EmbeddingsPyEmbeddingsIDsInclude	MetadatasURIsWhereWhereDocument	GetResultQueryResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_listc                       e Zd ZU i Zeeej                  f   ed<   de	f fdZ
dhdZdidZded	ed
eddfdZedi fd       Zdej                  fdZdededeeef   defdZ edej,                        edefd              Z edej,                        eefdededdfd              Z edej,                        eefdededefd              Z edej,                        eefdededdfd              Z edej,                        eddefdee   dee   dedee   fd              Z ed ej,                        ededdfd!              Z  ed"ej,                        edede!fd#              Z" ed$ej,                        ede#fd%              Z$ ed&ej,                        eddee%fdee   dee   ded'edee&   f
d(              Z' ed)ej,                        eee%fded'edefd*              Z( ed+ej,                        eddd,ee%fded-ee)   d.ee*   d/e+ded'ede&fd0              Z, ed1ej,                        eee%fdeded'ede&fd2              Z- ed3ej,                        eddee%fded-ee)   d.ee*   ded'ede&fd4              Z. ed5ej,                        eddee%fd6e/d7ee   d8ee*   ded'eddfd9              Z0 ed:ej,                        eee%fdeded'eddfd;              Z1 ed<ej,                        eee%fd=e/ded'edefd>              Z2 ed?ej,                        ed@ee%fd=e/dAeded'ede3f
dB              Z4 edCej,                        edddddddddDdEgee%fd=e/dFee5   dGee6   dHee   dee   dee   dIee   dJee   dKee7   dLe8ded'ede3fdM              Z9 edNej,                        edddee%fd=e/dFee5   dGee6   dKee7   ded'eddfdO              Z: edPejv                        dQe<e5ee=   ee>   ee?   ee@   f   dRedefdS       ZA edTejv                        edddee%fdFe5d=e/dUeBdDee>   dEee?   dVee@   ded'ede+fdW              ZC edXejv                        eddddee%fd=e/dFe5dUeeB   dDee>   dEee?   dVee@   ded'ede+fdY              ZD edZejv                        edddee%fd=e/dFe5dUeBdDee>   dEee?   dVee@   ded'ede+fd[              ZE ed\ejv                        ed@ddg d]ee%fd=e/d^eBd_edGee6   dKee7   dLe8ded'edeFfd`              ZG edaejv                        ede+fdb              ZH edcej,                        edefdd              ZIedeJfde       ZK edfej,                        edefdg              ZL xZMS )jAsyncFastAPI_clientssystemc                    t         |   |       |j                  j                  d       |j                  j                  d       | j                  t              | _        | j                  t              | _        |j                  | _        t        j                  t        |j                  j                        |j                  j                  |j                  j                  |j                  j                        | _        y )Nchroma_server_hostchroma_server_http_port)r.   r/   chroma_server_ssl_enableddefault_api_path)super__init__settingsrequirer   _opentelemetry_clientr   _product_telemetry_client	_settingsr*   resolve_urlstrr.   r/   r0   chroma_server_api_default_path_api_url)selfr,   	__class__s     O/var/www/openai/venv/lib/python3.12/site-packages/chromadb/api/async_fastapi.pyr3   zAsyncFastAPI.__init__8   s      45 9:%)\\2E%F")-6L)M&$00"6??#E#EF$*OO$K$K&,oo&O&O#__KK	 1 
    returnc                 .   K   | j                          | S wN)_get_clientr=   s    r?   
__aenter__zAsyncFastAPI.__aenter__I   s     s   Nc                    K   t        | j                        dkD  rO| j                  j                         \  }}|j                          d {    t        | j                        dkD  rNy y 7 w)Nr   )lenr+   popitemaclose)r=   _clients      r?   _cleanupzAsyncFastAPI._cleanupM   sR     $-- 1$--//1KQ--/!! $-- 1$!s   A	A-A+A-)A-exc_type	exc_value	tracebackc                 @   K   | j                          d {    y 7 wrC   rM   )r=   rN   rO   rP   s       r?   	__aexit__zAsyncFastAPI.__aexit__R   s     mmos   c                 P     t                    t        d fd       } |        y )Nc                  B   K    j                          d {    y 7 wrC   rR   rE   s   r?   sync_cleanupz'AsyncFastAPI.stop.<locals>.sync_cleanupY   s     --/!!s   rA   N)r2   stopr   )r=   rV   r>   s   ` r?   rX   zAsyncFastAPI.stopU   s%    		" 
	" 	r@   c                 N   d }	 t        j                         }|j                         }|| j                  vrQt        j                  d | j                  j                  | j                  j                  xs d      | j                  |<   | j                  |   S # t        $ r d}Y {w xY w)Nr   F)timeoutheadersverify)
asyncioget_event_loop__hash__RuntimeErrorr+   httpxAsyncClientr8   chroma_server_headerschroma_server_ssl_verify)r=   	loop_hashloops      r?   rD   zAsyncFastAPI._get_client_   s     		))+DI DMM)','8'8<<~~>>G%(DMM)$ }}Y''  	I	s   $B B$#B$methodpathkwargsc                   K   d|v r)t        j                  |j                  d            }||d<   t        j                  j                  |dd d       }| j                  |z   } | j                         j                  ||fi t        t        |       d {   }t        j                  |       t        j                  |j                        S 7 8w)Njsoncontent/)safeencodingerrors)orjsondumpspopurllibparsequoter<   rD   requestr   r   r   _raise_chroma_errorloadstext)r=   rg   rh   ri   dataescaped_pathurlresponses           r?   _make_requestzAsyncFastAPI._make_requestu   s      V<<

6 23D $F9 ||))$S4PT)Umml*3))+33FCU4VCTUU**84||HMM** Vs   BCC9CzAsyncFastAPI.heartbeatc                 ^   K   | j                  dd       d {   }t        |d         S 7 w)Nget znanosecond heartbeat)r   int)r=   r~   s     r?   	heartbeatzAsyncFastAPI.heartbeat   s3      ++E26682344 7s   -+-zAsyncFastAPI.create_databasenametenantc                 T   K   | j                  dd| dd|i       d {    y 7 w)Npost	/tenants/
/databasesr   rk   r   r=   r   r   s      r?   create_databasezAsyncFastAPI.create_database   s;        xz*$ ! 
 	
 	
s   (&(zAsyncFastAPI.get_databasec                    K   | j                  dd| d| d|i       d {   }t        |d   |d   |d         S 7 w)	Nr   r   /databases/r   paramsidr   r   r   r   )r   r   )r=   r   r   r~   s       r?   get_databasezAsyncFastAPI.get_database   sf      ++x{4&1f% , 
 
 ~HV$4Xh=O
 	

s    A >A zAsyncFastAPI.delete_databasec                 P   K   | j                  dd| d|        d {    y 7 w)Ndeleter   r   r   r   s      r?   delete_databasezAsyncFastAPI.delete_database   s3        x{4&1
 	
 	
s   &$&zAsyncFastAPI.list_databaseslimitoffsetc           	         K   | j                  dd| dt        j                  ||d             d {   }|D cg c]  }t        |d   |d   |d   	       c}S 7 )c c}w w)
Nr   r   r   r   r   r   r   r   r   r   )r   r   _clean_paramsr   )r=   r   r   r   r~   dbs         r?   list_databaseszAsyncFastAPI.list_databases   s      ++xz*!//"$ , 	
 	
 
 4r&z"X,G
 	
	

s    2A%AA%A A% A%zAsyncFastAPI.create_tenantc                 L   K   | j                  ddd|i       d {    y 7 w)Nr   z/tenantsr   r   r   )r=   r   s     r?   create_tenantzAsyncFastAPI.create_tenant   s2        $ ! 
 	
 	
s   $"$zAsyncFastAPI.get_tenantc                 f   K   | j                  dd|z          d {   }t        |d         S 7 w)Nr   r   r   )r   )r   r   )r=   r   	resp_jsons      r?   
get_tenantzAsyncFastAPI.get_tenant   s?      ,,$
 
	
 9V,--
s   1/1zAsyncFastAPI.get_user_identityc                 T   K   t        di | j                  dd       d {   S 7 w)Nr   z/auth/identity )r   r   rE   s    r?   get_user_identityzAsyncFastAPI.get_user_identity   s*      RT%7%7?O%PPRRPs   (&(zAsyncFastAPI.list_collectionsdatabasec           	         K   | j                  dd| d| dt        j                  ||d             d {   }|D cg c]  }t        j                  |       }}|S 7 (c c}w w)Nr   r   r   /collectionsr   r   )r   r   r   CollectionModel	from_json)r=   r   r   r   r   r   json_collectionmodelss           r?   list_collectionszAsyncFastAPI.list_collections   s      ,,x{8*LA!//"$ - 	
 	
	 OX
NW?O%%o6i 	 
 	

s!   5A'A A' A"A'"A'zAsyncFastAPI.count_collectionsc                 p   K   | j                  dd| d| d       d {   }t        t        |      S 7 w)Nr   r   r   z/collections_countr   r   r   )r=   r   r   r   s       r?   count_collectionszAsyncFastAPI.count_collections   sG     
 ,,x{8*4FG
 
	
 C##
s   646zAsyncFastAPI.create_collectionFconfigurationmetadataget_or_createc           	         K   | j                  dd| d| d|||r|j                         nd|d       d{   }t        j                  |      }|S 7 w)zCreates a collectionr   r   r   r   N)r   r   r   r   r   )r   to_jsonr   r   )	r=   r   r   r   r   r   r   r   models	            r?   create_collectionzAsyncFastAPI.create_collection  sq      ,,x{8*LA$<I!6!6!8t!.	 - 	
 	
	  )))4	
s   6AAAzAsyncFastAPI.get_collectionc           	         K   | j                  dd| d| d|        d {   }t        j                  |      }|S 7 w)Nr   r   r   /collections/)r   r   r   )r=   r   r   r   r   r   s         r?   get_collectionzAsyncFastAPI.get_collection'  sR      ,,x{8*M$H
 
	
  )))4
s   ?=?z%AsyncFastAPI.get_or_create_collectionc                 L   K   | j                  |||d||       d {   S 7 w)NT)r   r   r   r   r   r   )r   )r=   r   r   r   r   r   s         r?   get_or_create_collectionz%AsyncFastAPI.get_or_create_collection8  s<      ++' , 
 
 	
 
s   $"$zAsyncFastAPI._modifyr   new_namenew_metadatac           	      `   K   | j                  dd| d| d| ||d       d {    y 7 w)Nputr   r   r   )r   r   r   r   )r=   r   r   r   r   r   s         r?   _modifyzAsyncFastAPI._modifyM  sF        x{8*M"F".HE ! 
 	
 	
s   $.,.zAsyncFastAPI.delete_collectionc           	      V   K   | j                  dd| d| d|        d {    y 7 w)Nr   r   r   r   r   )r=   r   r   r   s       r?   delete_collectionzAsyncFastAPI.delete_collection]  s9        x{8*M$H
 	
 	
s   )')zAsyncFastAPI._countcollection_idc           
      v   K   | j                  dd| d| d| d       d{   }t        t        |      S 7 w)z0Returns the number of embeddings in the databaser   r   r   r   z/countNr   )r=   r   r   r   r   s        r?   _countzAsyncFastAPI._countj  sM      ,,x{8*M-PVW
 
	
 C##
s    979zAsyncFastAPI._peek
   nc                 R   K   | j                  ||||g d       d {   }|S 7 w)N)
embeddings	documents	metadatas)r   r   r   include)_get)r=   r   r   r   r   resps         r?   _peekzAsyncFastAPI._peekz  s;      YY<  
 
 
s   '%'zAsyncFastAPI._getr   r   idswheresortpage	page_sizewhere_documentr   c                 P  K   |r|r
|dz
  |z  }|}| j                  dd| d| d| d||||||	|
d       d {   }t        |d	   |j                  d
d       |j                  dd       |j                  dd       d |j                  dd       |j                  d|
            S 7 iw)N   r   r   r   r   z/get)r   r   r   r   r   r   r   r   r   r   r   r   urisincluded)r   r   r   r   r{   r   r   )r   r$   r   )r=   r   r   r   r   r   r   r   r   r   r   r   r   r   s                 r?   r   zAsyncFastAPI._get  s     " IQh)+FE,,x{8*M-PTU "0" - 
 
	 %  }}\48mmK6mmK6vt,]]:w7
 	

s   8B&B$A*B&zAsyncFastAPI._deletec           
      d   K   | j                  dd| d| d| d|||d       d {    y 7 w)Nr   r   r   r   z/delete)r   r   r   r   r   )r=   r   r   r   r   r   r   s          r?   _deletezAsyncFastAPI._delete  sU        x{8*M-PWX O ! 
 	
 	

 	
s   &0.0zAsyncFastAPI._submit_batchbatchr}   c           
      p   K   | j                  d||d   |d   |d   |d   |d   d       d	{   S 7 w)
z?
        Submits a batch of embeddings to the database
        r   r   r            )r   r   r   r   r   r   Nr   )r=   r   r}   s      r?   _submit_batchzAsyncFastAPI._submit_batch  sX      ''Qx#Ah"1X"1Xa ( 

 

 
	
 

s   -646zAsyncFastAPI._addr   r   c	                    K   |t        |      |||f}	t        |	d| j                          d {   i       | j                  |	d| d| dt	        |       d       d {    y7 77 w)Nmax_batch_sizer   r   r   z/addTr(   r'   get_max_batch_sizer   r:   )
r=   r   r   r   r   r   r   r   r   r   s
             r?   _addzAsyncFastAPI._add  s      )*5
 	u/t7N7N7P1PQR  x{8*M#mBTAUUYZ
 	
 	
  2Q	
!   +A)A%1A)A' A)'A)zAsyncFastAPI._updatec	                    K   ||t        |      nd |||f}	t        |	d| j                          d {   i       | j                  |	d| d| dt	        |       d       d {    y7 77 w)Nr   r   r   r   z/updateTr   
r=   r   r   r   r   r   r   r   r   r   s
             r?   _updatezAsyncFastAPI._update  s      % **5
 	u/t7N7N7P1PQR  x{8*M#mBTAUU\]
 	
 	

  2Q	
s!   /A-A)1A-#A+$A-+A-zAsyncFastAPI._upsertc	                    K   |t        |      |||f}	t        |	d| j                          d {   i       | j                  |	d| d| dt	        |       d       d {    y7 77 w)Nr   r   r   r   z/upsertTr   r   s
             r?   _upsertzAsyncFastAPI._upsert!  s      )*5
 	u/t7N7N7P1PQR  x{8*M#mBTAUU\]
 	
 	
  2Q	
r   zAsyncFastAPI._query)r   r   	distancesquery_embeddings	n_resultsc	                 l  K   | j                  dd| d| d| d|t        |      nd ||||d       d {   }	t        |	d   |	j                  d	d       |	j                  d
d       |	j                  dd       |	j                  dd       |	j                  dd       d |	j                  d|            S 7 zw)Nr   r   r   r   z/query)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   r   r   r   r   r   s
             r?   _queryzAsyncFastAPI._query<  s      ,,x{8*M-PVW $/ %BBR$S&"0" - 
 
	 % mmK6 }}\48mmK6mmK6vt,]]:w7	
 		

s   5B4B2A;B4zAsyncFastAPI.resetc                 b   K   | j                  dd       d {   }t        t        |      S 7 w)Nr   z/reset)r   r   boolr=   r   s     r?   resetzAsyncFastAPI.resetb  s/      ,,VX>>	D)$$ ?   /-/zAsyncFastAPI.get_versionc                 b   K   | j                  dd       d {   }t        t        |      S 7 w)Nr   z/version)r   r   r:   r   s     r?   get_versionzAsyncFastAPI.get_versionh  s0      ,,UJ??	C## @r   c                     | j                   S rC   )r8   rE   s    r?   get_settingszAsyncFastAPI.get_settingsn  s    ~~r@   zAsyncFastAPI.get_max_batch_sizec                    K   | j                   dk(  r2| j                  dd       d {   }t        t        |d         | _         | j                   S 7 (w)Nr   z/pre-flight-checksr   )_max_batch_sizer   r   r   r   s     r?   r   zAsyncFastAPI.get_max_batch_sizer  sS      2%"008LMMI#'Y7G-H#ID ### Ns   %AA)A)rA   r*   rW   )N__name__
__module____qualname__r+   r	   r   ra   rb   __annotations__r   r3   rF   rM   r   rS   r
   rX   rD   r:   r   r   r   	OPERATIONr   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   r"   r#   r   r   r   ALLr   r   r    r   r!   r   r   r   r   r   r%   r   r   r   r   r   r   __classcell__)r>   s   @r?   r*   r*   -   s    .0Hd3)))*/
v 
""
   PT   (U.. (,++!$+04S#X+	+$ *,D,N,NO5 5  P5 02J2T2TU %	
	
 	
 
		
  V	
 -/G/Q/QR %

 
 
	
  S
 02J2T2TU %

 
 
	
  V
 /1I1S1ST  $ $$	
}
 
 	

 
(	
  U
, .0H0R0RS
 
 
  T
 +-E-O-OP.S .V .  Q. 24L4V4VWS S  XS 13K3U3UV  $ $$(}  	
  
/	"  W. 24L4V4VW*<L$$69$	$  X$ 24L4V4VW DH15#$(   ?@ -.	
    
  X2 /1I1S1ST %(	  	
 
  U /1I1S1S  DH15$(

   ?@
 -.	

 
 
 

 
" (*B*L*LM #'59$(

 3-
 12	

 
 
 

  N
 24L4V4VW %(		
	
 	
 		

 
	
  X	
 ')A)K)KL %(	$$ $ 	$
 
$  M$ &(@(J(JK $(  	
  
  L" %'?'I'IJ "!%"# $"#'26'5$()
)
 c])
 	)

 sm)
 })
 )
 sm)
 C=)
 !/)
 )
 )
 )
 
)
  K)
V (*B*L*LM "!%26$( c] 	
 !/   
  N  .0H0L0LM
\"YYTN	

 
 

 N
4 %'?'C'CD *.)-#$(  	
 I& I& tn   
  E2 (*B*F*FG
 ,0)-)-#$(  Z(	
 I& I& tn   
  H: (*B*F*FG *.)-#$(  	
 I& I& tn   
  H2 ')A)E)EF
 !%26B$("
"
 %"
 	"

 "
 !/"
 "
 "
 "
 
"
  G"
H &(@(D(DE%T %  F% ,.F.P.PQ$3 $  R$ h   35M5W5WX$# $  Y$r@   r*   )>r]   uuidr   urllib.parsert   rq   typingr   r   r   r   r   r	   loggingra   	overridesr
   chromadb.authr   chromadb.api.async_apir   chromadb.api.base_http_clientr   chromadb.api.configurationr   chromadb.configr   r   r   r    chromadb.telemetry.opentelemetryr   r   r   chromadb.telemetry.productr   chromadb.utils.async_to_syncr   chromadb.typesr   r   r   r   chromadb.api.typesr   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   	getLoggerr  loggerr*   r   r@   r?   <module>r     s        = =    & 1 8 F N N 
 > 6 J J   $ 
		8	$K	$>> K	$r@   