
    ugw                    :   d dl mZmZmZmZ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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 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%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+ d dl*m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZL d dlMmNZN d dlOZOd dlPZQd dlRmSZS d dlTmUZUmVZW d dlXmYZY d dlZm[Z[ d dl\m]Z]m^Z^ d dl_m`Z`maZa d dlbmcZcmdZdmeZemfZf d dl\mgZh  eOj                  ej      Zkd  Zld!ed"dfd#Zmd$ed%eegef   d"efd&Znd$ed%eegef   d"efd'Zod$ed%eegef   d"efd(Zp e	d)e#d*+      Zqd,eeq   d-ed"eqfd.Zr G d/ d0ej                        Zt G d1 d2eB      Zy)3    )
Any	AwaitableCallablecastDictSequenceOptionalTypeTypeVarTupleN)	to_threadCapacityLimiter)FastAPIResponseRequest)get_openapi)CORSMiddlewareORJSONResponse)APIRoute)HTTPExceptionstatus)wraps)CollectionConfigurationInternal)	BaseModel)	Embedding	GetResultQueryResult
Embeddingsconvert_list_embeddings_to_np)UserIdentity)AuthzActionAuthzResourceServerAuthenticationProviderServerAuthorizationProvider)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)	ServerAPI)ChromaErrorInvalidDimensionExceptionInvalidHTTPVersionRateLimitError
QuotaError)QuotaEnforcer)AsyncRateLimitEnforcer)Server)	AddEmbeddingCreateDatabaseCreateTenantDeleteEmbeddingGetEmbeddingQueryEmbeddingCreateCollectionUpdateCollectionUpdateEmbedding)Headers)ServerStartEvent)fastapi_json_responsestring_to_uuid)trace)instrument_fastapi)DatabaseTenant)ServerContextProductTelemetryClient)OpenTelemetryClientOpenTelemetryGranularityadd_attributes_to_current_spantrace_method)
Collectionc                 T     t               dt        dt        dt        f fd       }|S )Nargskwargsreturnc                  l   K   | d   } |j                   j                        | i | d {   S 7 w)Nr   )_async_rate_limit_enforcer
rate_limit)rL   rM   selffuncs      U/var/www/openai/venv/lib/python3.12/site-packages/chromadb/server/fastapi/__init__.pywrapperzrate_limit.<locals>.wrapperY   s9     AwET44??EtVvVVVVs   *424)r   r   )rS   rU   s   ` rT   rQ   rQ   X   s:    
4[WS WC WC W W N    apprN   c                 j    | j                   D ]$  }t        |t              s|j                  |_        & y)z
    Simplify operation IDs so that generated API clients have simpler function
    names.
    Should be called only after all routes have been added.
    N)routes
isinstancer   nameoperation_id)rW   routes     rT    use_route_names_as_operation_idsr^   `   s(     eX&!&E rV   request	call_nextc                    K   t        j                         j                         j                  } ||        d {   }t	        |d      |j
                  d<   |S 7 w)NxzChroma-Trace-Id)r@   get_current_spanget_span_contexttrace_idformatheaders)r_   r`   re   responses       rT   #add_trace_id_to_response_middlewareri   k   sT      %%'88:CCHw''H*03*?H&'O (s   8AA Ac                   K   	  ||        d {   S 7 # t         $ r}t        |      cY d }~S d }~wt        $ r#}t        dt	        |      dd      cY d }~S d }~wt
        $ r#}t        dt	        |      dd      cY d }~S d }~wt        $ r7}t        j                  |       t        dt        |      id      cY d }~S d }~ww xY ww)NInvalidArgumentError)errormessage  )contentstatus_coderl     )
r+   r>   
ValueErrorr   str	TypeError	Exceptionlogger	exceptionrepr)r_   r`   es      rT   catch_exceptions_middlewarerz   t   s     Kw'''' ($Q'' 
4QH
 	
  
4QH
 	
  KwQ&8cJJKs   C	  C	 	C
/CC	CACC	C%B=C>C	C,C;C<C	CC	c                    K   | j                   j                  d      }|dvrt        d| d       ||        d {   S 7 w)Nhttp_version)z1.12zHTTP version z is not supported)scopegetr-   )r_   r`   r|   s      rT   check_http_version_middlewarer      sJ      ==$$^4L<' =>O!PQQ7####s   :AAADT)boundcontravariantmodeldatac                 f    	 | j                  |      S # t        $ r | j                  |      cY S w xY w)z1Used for backward compatibility with Pydantic 1.x)model_validateAttributeError	parse_obj)r   r   s     rT   validate_modelr      s6    %##D)) %t$$%s    00c                   0     e Zd Zdedededdf fdZ xZS )ChromaAPIRouterpathrL   rM   rN   Nc                     d|v xr |d    dt         dt        ffd} ||      |d<   t        |   |g|i | |j	                  d      r|d d }n|dz   } ||      |d<   t        |   |g|i | y )Ninclude_in_schemar   rN   c                 2     xr | j                  d       S )N/)endswith)r   exclude_from_schemas    rT   r   z8ChromaAPIRouter.add_api_route.<locals>.include_in_schema   s    **E4==3E/EErV   r   )rs   boolsuperadd_api_router   )rR   r   rL   rM   r   r   	__class__s        @rT   r   zChromaAPIRouter.add_api_route   s    
  6)M&9L2M.M 		FC 	FD 	F '8&="#d4T4V4==9D#:D&7&="#d4T4V4rV   )__name__
__module____qualname__rs   r   r   __classcell__)r   s   @rT   r   r      s)    5# 5c 5S 5T 5 5rV   r   c                      e Zd ZdefdZdeeef   fdZde	e
   deeef   fdZdsdZdsd	Zdej                  fd
ZdededefdZdeeef   fdZdededefdZdeeef   fdZdefdZdeddfdZ edej<                        ede de!de"e   de"e   de"e   ddfd              Z#de de!de"e   de"e   de"e   ddfdZ$ edej<                        dede%fd       Z& edej<                        dededdfd       Z' edej<                        ded edede(fd!       Z) ed"ej<                        ded ededdfd#       Z* ed$ej<                        deddfd%       Z+ ed&ej<                        dedede,fd'       Z- ed(ej<                        	 	 dtdeded)e"e   d*e"e   de.e(   f
d+       Z/ ed,ej<                        	 	 dtdeded ed)e"e   d*e"e   de.e0   fd-       Z1 ed.ej<                        deded edefd/       Z2 ed0ej<                        deded ede0fd1       Z3 ed2ej<                        deded ed3ede0f
d4       Z4 ed5ej<                        ded ed6ededdf
d7       Z5 ed8ej<                        ded3eded eddf
d9       Z6 ed:ej<                        ededed ed6ede7f
d;              Z8 ed<ej<                        ededed ed6eddf
d=              Z9 ed>ej<                        ededed ed6eddf
d?              Z: ed@ej<                        ed6eded edede;f
dA              Z< edBej<                        ed6eded ededdf
dC              Z= edDej<                        ededed ed6edef
dE              Z> edFej<                        edede7fdG              Z? edHej<                        eded ed6edede@f
dI              ZAdeeef   fdJZBdsdKZC edLej<                        ede de!de"e   de"e   de"e   deDe"e   e"e   f   fdM              ZEde de!de"e   de"e   de"e   deDe"e   e"e   f   fdNZF edOej<                        eeGfdededdfdP              ZH edQej<                        eeGfdededede(fdR              ZI edSej<                        ededdfdT              ZJ edUej<                        ededede,fdV              ZK edWej<                        eddeGeLfded)e"e   d*e"e   dedede.e0   fdX              ZM edYej<                        eeGeLfdedededefdZ              ZN ed[ej<                        eeGeLfdededede0fd\              ZO ed]ej<                        eeGeLfded3ededede0f
d^              ZP ed_ej<                        ed6ededdfd`              ZQ edaej<                        eeGeLfded3edededdf
db              ZR edcej<                        eded6ede7fdd              ZS edeej<                        ded6eddfdf       ZT edgej<                        eded6eddfdh              ZU ediej<                        ed6edede;fdj              ZV edkej<                        ed6ededdfdl              ZW edmej<                        eded6edefdn              ZX edoej<                        edede7fdp              ZY edqej<                        ed6edede@fdr              ZZy)ur   settingsc                    t         j                  t        _        t	        j
                  dt              | _        t        |      | _	        | j                  j                  t              | _        i | _        | j                  | j                  _        | j                  j!                  t"              | _        t'        |j(                        | _        | j                  j!                  t,              | _        | j                  j1                           | j                  j3                  d      t4                | j                  j3                  d      t6                | j                  j3                  d      t8               | j                  j;                  t<        dg|j>                  dg       | j                  jA                  tB        | jD                         | j                  jA                  tF        | jH                         | j                  j!                  tJ              | _&         | j                  jO                  d      | jP                         d | _)        |jT                  r$| j                  j!                  tV              | _)        d | _,        |jZ                  r$| j                  j!                  t\              | _,        t_               | _0        | jc                          | je                          | j                  jg                  | j`                         ti        | j                         tk        | j                         | j                  j                  t              }|jm                  to                      y )NT)debugdefault_response_classhttp*)allow_headersallow_originsallow_methodsshutdown)8rD   FASTAPIrE   SERVER_CONTEXTfastapir   r   _appr)   _systeminstancer*   _api_extra_openapi_schemasgenerate_openapiopenapirequirerF   _opentelemetry_clientr   chroma_server_thread_pool_size_capacity_limiterr0   _quota_enforcerstart
middlewarer   rz   ri   add_middlewarer    chroma_server_cors_allow_originsadd_exception_handlerr/   quota_exception_handlerr.   rate_limit_exception_handlerr1   rP   on_eventr   authn_providerchroma_server_authn_providerr$   authz_providerchroma_server_authz_providerr%   r   routersetup_v1_routessetup_v2_routesinclude_routerr^   rA   capturer=   )rR   r   telemetry_clients      rT   __init__zFastAPI.__init__   sk   0=0E0E-OO$~V	h'#||44Y?	68# 11		%)YY%6%67J%K"!033"
  $||33MB$		V$%BC$		V$%@A$		V$%HI		  %"CC%	 	! 	
 			''
D4P4PQ		''D==	
 +/,,*>*>?U*V'&		:&t}}5"00"&,,"6"67S"TD"00"&,,"6"67R"SD%'		  -(3499%<<001GH  !1!34rV   rN   c                     t        d| j                  j                  t        j                  j                  d            }| j                  j                         D ]  \  }}||d   d   |<    |S )z_Used instead of the default openapi() generation handler to include manually-populated schemas.Chromachromadb)titlerY   version
componentsschemas)r   r   rY   	importlibmetadatar   r   items)rR   schemakeyvalues       rT   r   zFastAPI.generate_openapi   sj    !,99##&&..z:"
 55;;=JC38F< +C0 > rV   request_modelc                     |j                  d      }d|v r*|d   j                         D ]  \  }}|| j                  |<    ddd|iiddi}|S )	Nz#/components/schemas/{model})ref_templatez$defsrequestBodyzapplication/jsonr   T)ro   required)model_json_schemar   r   )rR   r   r   r   r   openapi_extras         rT   !get_openapi_extras_for_body_modelz)FastAPI.get_openapi_extras_for_body_model   sz     007 1 
 f$Wo335
U38++C0 6 .60BC 
 rV   Nc           
      	   | j                   j                  d| j                  dg       | j                   j                  d| j                  dg       | j                   j                  d| j                  dg       | j                   j                  d| j
                  dg       | j                   j                  d| j                  dg       | j                   j                  d	| j                  dgd 
       | j                   j                  d| j                  dgd | j                  t                     | j                   j                  d| j                  dgd 
       | j                   j                  d| j                  dgd 
       | j                   j                  d| j                  dgd | j                  t                     | j                   j                  d| j                  dgd 
       | j                   j                  d| j                   dgd 
       | j                   j                  d| j"                  dgd 
       | j                   j                  d| j$                  dgd 
       | j                   j                  d| j&                  dgd | j                  t(                     | j                   j                  d| j*                  dgt,        j.                  d | j                  t0                     | j                   j                  d| j2                  dgd | j                  t4                     | j                   j                  d| j6                  dgd | j                  t0                     | j                   j                  d| j8                  dgd | j                  t:                     | j                   j                  d| j<                  dgd | j                  t>                     | j                   j                  d| j@                  dgd 
       | j                   j                  d| jB                  dgd | j                  tD                     | j                   j                  d| jF                  dgd 
       | j                   j                  d| jH                  dgd | j                  tJ                     | j                   j                  d| jL                  dgd 
       y )Nz/api/v2GETmethodsz/api/v2/resetPOSTz/api/v2/versionz/api/v2/heartbeatz/api/v2/pre-flight-checksz/api/v2/auth/identityr   response_modelz"/api/v2/tenants/{tenant}/databasesr   r   r   z2/api/v2/tenants/{tenant}/databases/{database_name}DELETEz/api/v2/tenantsz/api/v2/tenants/{tenant}z>/api/v2/tenants/{tenant}/databases/{database_name}/collectionszD/api/v2/tenants/{tenant}/databases/{database_name}/collections_countzR/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/addr   rp   r   r   zU/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/updatezU/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/upsertzR/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/getzU/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/deletezT/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/countzT/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}/query)r   zP/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_name}zN/api/v2/tenants/{tenant}/databases/{database_name}/collections/{collection_id}PUT)'r   r   rootresetr   	heartbeatpre_flight_checksget_user_identitycreate_databaser   r4   get_databasedelete_databasecreate_tenantr5   
get_tenantlist_databaseslist_collectionscount_collectionscreate_collectionr9   addr   HTTP_201_CREATEDr3   updater;   upsertr   r7   deleter6   countget_nearest_neighborsr8   get_collectionupdate_collectionr:   delete_collectionrR   s    rT   r   zFastAPI.setup_v2_routes  s   !!)TYY!H!!/4::x!P!!"3T\\E7!S!!"5t~~PUw!W!!')?)?% 	" 	
 	!!#""G	 	" 	
 	!!0  H@@P 	" 	
 	!!@G	 	" 	
 	!!@  J	 	" 	
 	!!H@@N 	" 	
 	!!&OOG	 	" 	
 	!!0G	 	" 	
 	!!L!!G	 	" 	
 	!!R""G	 	" 	
 	!!L""H@@AQR 	" 	
 	!!`HHH//@@N 	" 	
 	!!cKKH@@Q 	" 	
 	!!cKKH@@N 	" 	
 	!!`HHH@@N 	" 	
 	!!cKKH@@Q 	" 	
 	!!bJJG	 	" 	
 	!!b&&H@@, A  	" 	
 	!!^G	 	" 	
 	!!\""G@@AQR 	" 	
 	!!^""J	 	" 	
rV   c                 8    | j                   j                          y N)r   stopr  s    rT   r   zFastAPI.shutdown  s    rV   c                     | j                   S r  )r   r  s    rT   rW   zFastAPI.app  s    yyrV   r_   excc                 (   K   t        dddi      S w)Ni  rm   zRate limit exceeded.rp   ro   r   rR   r_   r  s      rT   r   z$FastAPI.rate_limit_exception_handler  s!       67
 	
s   c                 :    d| j                   j                         iS )Nznanosecond heartbeat)r   r   r  s    rT   r   zFastAPI.root  s    &		(;(;(=>>rV   c                 D   K   t        dd|j                         i      S w)Nrn   rm   r	  )r   rm   r
  s      rT   r   zFastAPI.quota_exception_handler  s&      .
 	
s    c                 *   K   | j                         S wr  )r   r  s    rT   r   zFastAPI.heartbeat  s     yy{s   c                 >   K   | j                   j                         S wr  )r   get_versionr  s    rT   r   zFastAPI.version  s     yy$$&&s   c                 @    | j                   j                  d|i       y)zU
        Set context about the request on any components that might need it.
        r_   )contextN)r   set_contextrR   r_   s     rT   _set_request_contextzFastAPI._set_request_context  s      	(()W1E(FrV   auth_requestrg   actiontenantdatabase
collectionc                 h   K   t        j                  | j                  g|||||f  d {   S 7 wr  )r   run_syncsync_auth_requestrR   rg   r  r  r  r  s         rT   r  zFastAPI.auth_request  s8      ''(>(>q'6SY[ceoApqqqqs   )202c                    | j                   st        |||d       y| j                   j                  t        |            }| j                  syt        |||      }| j                  j                  |||       t        |||d       y)z
        Authenticates and authorizes the request based on the given headers
        and other parameters. If the request cannot be authenticated or cannot
        be authorized (with the configured providers), raises an HTTP 401.
        r  r  r  N)r   rH   authenticate_or_raisedictr   r#   authorize_or_raise)rR   rg   r  r  r  r  user_identityauthz_resources           rT   r  zFastAPI.sync_auth_request  s     ""*$ (", ++AA$w-P""&!
 	..}fnU& $(	
 	rV   zFastAPI.get_user_identityc                     K    j                   st        dt        t        g      S t	        t        t        j                   fd       d {         S 7 w)N )user_idr  	databasesc                  |    t        t        j                        j                  t	         j
                              S r  )r   r$   r   r   r!  rg   )r_   rR   s   rT   <lambda>z+FastAPI.get_user_identity.<locals>.<lambda>  s+    94;N;NOeefjkrkzkzf{|rV   )r   r!   r'   r&   r   r   r  r  s   ``rT   r   zFastAPI.get_user_identity  sW     
 "">>N=O  $$| 
 	
s   A
AA
	AzFastAPI.create_databasec                     K   dt         dt        dt        dd f fd}t        j                  ||j
                  j                          d {    j                         d {    y 7 7 w)Nr  rg   raw_bodyrN   c                    t        t        t        j                  |            }j	                  |t
        j                  | |j                  d        j                         j                  j                  |j                  |       S )Nr_   )r   r4   orjsonloadsr  r"   CREATE_DATABASEr[   r  r   r   )r  rg   r,  dbr_   rR   s       rT   process_create_databasez8FastAPI.create_database.<locals>.process_create_database  so      X0FGB""++ %%g%699,,RWWf==rV   limiterrs   r<   bytesr   r  rg   bodyr   rR   r_   r  r3  s   ``  rT   r   zFastAPI.create_database  ss     	>	>")	>5:	>	>"   #OO,,. **
 	
 	
 !		
s$   AA1A-A1'A/(A1/A1zFastAPI.get_databasedatabase_namec           	        K   | j                  |j                  t        j                  ||d        d {    t	        t
        t        j                  | j                  j                  ||| j                         d {         S 7 Q7 
wNr4  )r  rg   r"   GET_DATABASEr   rB   r   r  r   r   r   rR   r_   r:  r  s       rT   r   zFastAPI.get_database7  s      OO$$
 	
 	
 $$		&&..	 
 	
	
s"   1B	BAB	<B
=	B	B	zFastAPI.delete_databasec                    K   | j                  |j                  t        j                  ||d        t	        j
                  | j                  j                  ||| j                         d {    y 7 wr<  )	r  rg   r"   DELETE_DATABASEr   r  r   r   r   r>  s       rT   r   zFastAPI.delete_databaseP  se      	OO''	
   II%%**	
 	
 	
s   A(A2*A0+A2zFastAPI.create_tenantc                     K   dt         dt        dd f fd}t        j                  |||j	                          d {    j
                         d {    y 7 7 w)Nr_   r,  rN   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  |j                  d d        j                  j                  |j                        S r  )r   r5   r/  r0  r  rg   r"   CREATE_TENANTr[   r   r   )r_   r,  r  rR   s      rT   process_create_tenantz4FastAPI.create_tenant.<locals>.process_create_tenantk  s^    #L&,,x2HIF"")) 99**6;;77rV   r4  r   r7  r   r  r8  r   rR   r_   rD  s   `  rT   r   zFastAPI.create_tenantf  sa     
	87 	8e 	8 	8   !,,. **	
 	
 	
 !	
!   9AAAAAAzFastAPI.get_tenantc                   K   | j                  |j                  t        j                  |d d        d {    t	        t
        t        j                  | j                  j                  || j                         d {         S 7 P7 
wr<  )r  rg   r"   
GET_TENANTr   rC   r   r  r   r   r   )rR   r_   r  s      rT   r   zFastAPI.get_tenant  s      OO""
 	
 	
 $$		$$.. 
 	
	
s"   1BBAB;B
<	BBzFastAPI.list_databaseslimitoffsetc           
      &  K   | j                  |j                  t        j                  |d d        d {    t	        t
        t           t        j                  | j                  j                  |||| j                         d {         S 7 Y7 
wr<  )r  rg   r"   LIST_DATABASESr   r   rB   r   r  r   r   r   )rR   r_   r  rJ  rK  s        rT   r   zFastAPI.list_databases  s      OO&&
 	
 	
 X$$		((.. 	
 		
	
"   1BBABB
	BBzFastAPI.list_collectionsc                    K   dt         t           dt         t           dt        dt        dt        t           f
 fd}t        t        t           t        j                  ||||| j                         d {         }|S 7 
w)NrJ  rK  r  r:  rN   c                     j                  j                  t        j                  ||d        j	                         t        d|i       j                  j                  ||| |      S )Nr.  r  )r  r  rJ  rK  )r  rg   r"   LIST_COLLECTIONSr  rH   r   r   )rJ  rK  r  r:  r_   rR   s       rT   process_list_collectionsz:FastAPI.list_collections.<locals>.process_list_collections  sq     "",, %%g%6*Hf+=>99--U6 .  rV   r4  )	r	   intrs   r   CollectionModelr   r   r  r   )rR   r_   r  r:  rJ  rK  rR  api_collection_modelss   ``      rT   r   zFastAPI.list_collections  s     	C=	*23-	AD	UX	o&	$ !%_%$$(.. 
!
 %$s   A4B8B
9BzFastAPI.count_collectionsc           	      0  K   | j                  |j                  t        j                  ||d        d {    t	        d|i       t        t        t        j                  | j                  j                  ||| j                         d {         S 7 ^7 
wNr  r4  )r  rg   r"   COUNT_COLLECTIONSrH   r   rS  r   r  r   r   r   )rR   r_   r  r:  s       rT   r   zFastAPI.count_collections  s      OO))
 	
 	
 	'&'9:$$		++..	 
 	
	
s"   1BBAB	B

	BBzFastAPI.create_collectionc                    K   dt         dt        dt        dt        dt        f
 fd}t	        t        t        j                  |||||j                          d {    j                         d {         }|S 7 "7 w)Nr_   r  r  r,  rN   c                    t        t        t        j                  |            }|j                  s
t               nt        j                  |j                        }j                  | j                  t        j                  |||j                         j                  |        t        d|i       j                  j                  |j                  ||j                   |j"                  ||      S )Nr.  r  r[   configurationr   get_or_creater  r  )r   r9   r/  r0  r\  r   	from_jsonr  rg   r"   CREATE_COLLECTIONr[   r  rH   r   r   r   r]  )r_   r  r  r,  creater\  rR   s         rT   process_create_collectionz<FastAPI.create_collection.<locals>.process_create_collection  s     $$4fll86LMF ++ 014>>v?S?ST  ""-- %%g%6*Hf+=>99..[[+$22! /  rV   r4  	r   rs   r7  rT  r   r   r  r8  r   )rR   r_   r  r:  ra  api_collection_models   `     rT   r   zFastAPI.create_collection  s     		&)	58	DI		>  $$$)lln$.. 
 
 $#	 %$   AA?A;A?0A=
1A?=A?zFastAPI.get_collectioncollection_namec           
      6  K   | j                  |j                  t        j                  |||       d {    t	        d|i       t        t        t        j                  | j                  j                  |||| j                         d {         }|S 7 a7 wrW  )r  rg   r"   GET_COLLECTIONrH   r   rT  r   r  r   r   r   )rR   r_   r  r:  re  rc  s         rT   r   zFastAPI.get_collection)  s      OO&&
 	
 	
 	'&'9:#$$		((.. 	 
 $#)	
s"   1BBAB
B
BBzFastAPI.update_collectioncollection_idc                     K   dt         dt        dt        dd f fd}t        j                  ||||j                          d {    j                         d {    y 7 7 w)Nr_   rh  r,  rN   c                 \   t        t        t        j                  |            }j	                  | j
                  t        j                  |       j                  |        t        di       j                  j                  t        |      |j                  |j                        S )Nr.  r  )idnew_namenew_metadatar  r  )r   r:   r/  r0  r  rg   r"   UPDATE_COLLECTIONr  rH   r   _modify_uuidrl  rm  )r_   rh  r,  r   r:  rR   r  s       rT   process_update_collectionz<FastAPI.update_collection.<locals>.process_update_collectionO  s     $$4fll86LMF""-- %%g%6*Hf+=>99$$'#00& %  rV   r4  r   rs   r7  r   r  r8  r   )rR   r  r:  rh  r_   rq  s   ```   rT   r   zFastAPI.update_collectionG  so     		-0	<A		*   %,,. **
 	
 	
 !		
s$   AA)A%A)A' A)'A)zFastAPI.delete_collectionc                   K   | j                  |j                  t        j                  |||       d {    t	        d|i       t        j                  | j                  j                  |||| j                         d {    y 7 R7 wrW  )
r  rg   r"   DELETE_COLLECTIONrH   r   r  r   r  r   )rR   r_   re  r  r:  s        rT   r  zFastAPI.delete_collectionl  s      OO))
 	
 	
 	'&'9:  II''**
 	
 	
	
	
s"   1B
BAB
 BB
B
zFastAPI.addc           
      >   K   	 dt         dt        dt        f fd}t        t        t	        j
                  |||j                          d {    j                         d {         S 7  7 
# t        $ r}t        dt        |            d }~ww xY ww)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  t        t        |j                   rt#        |j                         nd       |j$                  |j&                  |j(                        S Nr.  r  )rh  ids
embeddings	metadatas	documentsurisr  r  )r   r3   r/  r0  r  rg   r"   ADDr  rH   r   _addrp  rx  r   r   ry  r    rz  r{  r|  )r_   r,  r   rh  r:  rR   r  s      rT   process_addz FastAPI.add.<locals>.process_add  s    $\6<<3IJ&&OOOO!! ))'):.&/AByy~~"'"6#">> 6cnnE!	  "mm!mm!* &  rV   r4  rq   rp   detailr   r7  r   r   r   r  r8  r   r,   r   rs   )rR   r_   r  r:  rh  r  ry   s   ` ```  rT   r   zFastAPI.add  s     '	@W  $  6 ((!,,.( 22	  
 ) ) 	@CA??	@sM   BA	A6 A2A6 )A4
*A6 1B2A6 4A6 6	B?BBBzFastAPI.updatec                     K   dt         dt        dt        f fd}t        j                  |||j                          d {    j                         d {    y 7 7 w)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  |j                  rt        |j                        nd |j                   |j"                  |j$                        S rw  )r   r;   r/  r0  r  rg   r"   UPDATEr  rH   r   _updaterp  rx  ry  r    rz  r{  r|  )r_   r,  r   rh  r:  rR   r  s      rT   process_updatez&FastAPI.update.<locals>.process_update  s    #OV\\(5KLF"""" %%g%6*Hf+=>99$$#M2JJ$$ 99J9JK ** **[[& %  rV   r4  r   r7  r   r   r  r8  r   )rR   r_   r  r:  rh  r  s   ` ``` rT   r   zFastAPI.update  sf     	G 	u 	 	 	4   ,,. **	
 	
 	
 !	
$   A A(A$A(A&A(&A(zFastAPI.upsertc                     K   dt         dt        dt        f fd}t        j                  |||j                          d {    j                         d {    y 7 7 w)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  t        t        |j                   rt#        |j                         nd       |j$                  |j&                  |j(                        S rw  )r   r3   r/  r0  r  rg   r"   UPSERTr  rH   r   _upsertrp  rx  r   r   ry  r    rz  r{  r|  )r_   r,  r   rh  r:  rR   r  s      rT   process_upsertz&FastAPI.upsert.<locals>.process_upsert  s    #L&,,x2HIF"""" %%g%6*Hf+=>99$$#M2JJ(( 2&2C2CD	 !** **[[& %  rV   r4  r  )rR   r_   r  r:  rh  r  s   ` ``` rT   r   zFastAPI.upsert  sf     	G 	u 	 	 	:   ,,. **	
 	
 	
 !	
r  zFastAPI.getc           
      j   K   dt         dt        dt        f fd}t        t        t	        j
                  |||j                          d {    j                         d {         }|d   2|d   D cg c]   }t        t        |      j                         " c}|d<   |S 7 Y7 Cc c}w w)Nr_   r,  rN   c                    t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  
      S )Nr.  r  )
rh  rx  wheresortrJ  rK  where_documentincluder  r  )r   r7   r/  r0  r  rg   r"   r   r  rH   r   _getrp  rx  r  r  rJ  rK  r  r  )r_   r,  r   rh  r:  rR   r  s      rT   process_getz FastAPI.get.<locals>.process_get  s     v||H/EFC"" %%g%6*Hf+=>99>>#M2GGiiXXiizz"11& "  rV   r4  ry  
r   r7  r   r   r   r  r8  r   r   tolist)rR   rh  r  r:  r_   r  
get_result	embeddings   ````    rT   r   zFastAPI.get  s     	 	E 	i 	 	0 $$lln$..	 

 l#/ ",L!9(!9I Y	*113!9(J|$
  %(s6   A
B3B*B3(B,
)B3=%B."	B3,B3.B3zFastAPI.deletec                     K   dt         dt        dd f fd}t        j                  |||j	                          d {    j
                         d {    y 7 7 w)Nr_   r,  rN   c                 r   t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  |j                  |j                        S )Nr.  r  )rh  rx  r  r  r  r  )r   r6   r/  r0  r  rg   r"   r   r  rH   r   _deleterp  rx  r  r  )r_   r,  r   rh  r:  rR   r  s      rT   process_deletez&FastAPI.delete.<locals>.process_deleteJ  s    #OV\\(5KLF"""" %%g%6*Hf+=>99$$#M2JJll%44& %  rV   r4  rE  )rR   rh  r  r:  r_   r  s   ````  rT   r   zFastAPI.deleteA  sf     	G 	u 	 	 	(   ,,. **	
 	
 	
 !	
s#   <A$A A$A"A$"A$zFastAPI.countc           
      D  K   | j                  |j                  t        j                  |||       d {    t	        d|i       t        t        t        j                  | j                  j                  t        |      ||| j                         d {         S 7 h7 
wrW  )r  rg   r"   COUNTrH   r   rS  r   r  r   _countrp  r   )rR   r_   r  r:  rh  s        rT   r   zFastAPI.counte  s      OO
 	
 	
 	'&'9:$$		  m$.. 	
 		
	
s"   1B BAB B
	B B zFastAPI.resetc                   K   | j                  |j                  t        j                  d d d        d {    t	        t
        t        j                  | j                  j                  | j                         d {         S 7 O7 
wr<  )r  rg   r"   RESETr   r   r   r  r   r   r   r  s     rT   r   zFastAPI.reset  s}      OO
 	
 	
 $$		.. 
 	
	
"   1BBAB:B
;	BBzFastAPI.get_nearest_neighborsc                    K   dt         dt        dt        f fd}t        t        t	        j
                  |||j                          d {    j                         d {         }|d   B|d   D cg c].  }|D cg c]   }t        t        |      j                         " c}0 c}}|d<   |S 7 i7 Sc c}w c c}}w w)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              t        t        |j                  rt!        |j                        nd       |j"                  |j$                  |j&                  |j(                        S )Nr.  r  )rh  query_embeddings	n_resultsr  r  r  r  r  )r   r8   r/  r0  r  rg   r"   QUERYr  rH   r   _queryrp  r   r   r  r    r  r  r  r  )r_   r,  queryrh  r:  rR   r  s      rT   process_queryz4FastAPI.get_nearest_neighbors.<locals>.process_query  s    ">6<<3IJE""!! %%g%6*Hf+=>99###M2!%-- 2%2H2HI	"  //kk$33& $  rV   r4  ry  
r   r7  r   r   r   r  r8  r   r   r  )	rR   r  r:  rh  r_   r  nnresultresultr  s	   ````     rT   r   zFastAPI.get_nearest_neighbors  s     	7 	e 	 	 	: $$lln$..	 
 L!- '|4&4F GMMfi+224fM4&H\"
  % N&sH   A
C	B:C	(B<
)C	>	C%B>,C1
C	<C	>CC	c                     K   dt         t        t        f   f fd}t        t         t        t        f   t	        j
                  | j                         d {         S 7 w)NrN   c                  <    d j                   j                         iS )Nmax_batch_size)r   get_max_batch_sizer  s   rT   process_pre_flight_checksz<FastAPI.pre_flight_checks.<locals>.process_pre_flight_checks  s     $))">">"@ rV   r4  )r   rs   r   r   r   r  r   )rR   r  s   ` rT   r   zFastAPI.pre_flight_checks  sY     	4S> 	
 cN$$).. 
 	
s   AA#A!
	A#c           
         | j                   j                  d| j                  dg       | j                   j                  d| j                  dg       | j                   j                  d| j                  dg       | j                   j                  d| j
                  dg       | j                   j                  d| j                  dg       | j                   j                  d	| j                  dgd | j                  t              
       | j                   j                  d| j                  dgd        | j                   j                  d| j                  dgd | j                  t              
       | j                   j                  d| j                  dgd        | j                   j                  d| j                  dgd        | j                   j                  d| j                  dgd        | j                   j                  d| j                   dgd | j                  t"              
       | j                   j                  d| j$                  dgt&        j(                  d | j                  t*                     | j                   j                  d| j,                  dgd | j                  t.              
       | j                   j                  d| j0                  dgd | j                  t*              
       | j                   j                  d| j2                  dgd | j                  t4              
       | j                   j                  d| j6                  dgd | j                  t8              
       | j                   j                  d| j:                  dgd        | j                   j                  d| j<                  dgd | j                  t>              
       | j                   j                  d| j@                  dgd        | j                   j                  d| jB                  dgd | j                  tD              
       | j                   j                  d| jF                  dgd        y )Nz/api/v1r   r   z/api/v1/resetr   z/api/v1/versionz/api/v1/heartbeatz/api/v1/pre-flight-checksz/api/v1/databasesr   z/api/v1/databases/{database}r   z/api/v1/tenantsz/api/v1/tenants/{tenant}z/api/v1/collectionsz/api/v1/count_collectionsz'/api/v1/collections/{collection_id}/addr   z*/api/v1/collections/{collection_id}/updatez*/api/v1/collections/{collection_id}/upsertz'/api/v1/collections/{collection_id}/getz*/api/v1/collections/{collection_id}/deletez)/api/v1/collections/{collection_id}/countz)/api/v1/collections/{collection_id}/queryz%/api/v1/collections/{collection_name}z#/api/v1/collections/{collection_id}r   r   )$r   r   r   r   r   r   r   create_database_v1r   r4   get_database_v1create_tenant_v1r5   get_tenant_v1list_collections_v1count_collections_v1create_collection_v1r9   add_v1r   r   r3   	update_v1r;   	upsert_v1get_v1r7   	delete_v1r6   count_v1get_nearest_neighbors_v1r8   get_collection_v1update_collection_v1r:   delete_collection_v1r  s    rT   r   zFastAPI.setup_v1_routes  s/   !!)TYY!H!!/4::x!P!!"3T\\E7!S!!"5t~~PUw!W!!')?)?% 	" 	
 	!!##H@@P 	" 	
 	!!*  G	 	" 	
 	!!!!H@@N 	" 	
 	!!&G	 	" 	
 	!!!$$G	 	" 	
 	!!'%%G	 	" 	
 	!!!%%H@@AQR 	" 	
 	!!5KKH//@@N 	" 	
 	!!8NNH@@Q 	" 	
 	!!8NNH@@N 	" 	
 	!!5KKH@@N 	" 	
 	!!8NNH@@Q 	" 	
 	!!7MMG	 	" 	
 	!!7))H@@P 	" 	
 	!!3""G	 	" 	
 	!!1%%G@@AQR 	" 	
 	!!3%%J	 	" 	
rV   /auth_and_get_tenant_and_database_for_request_v1c                 f   K   t        j                  | j                  |||||       d{   S 7 w)a  
        Authenticates and authorizes the request based on the given headers
        and other parameters. If the request cannot be authenticated or cannot
        be authorized (with the configured providers), raises an HTTP 401.

        If the request is authenticated and authorized, returns the tenant and
        database to be used for the request. These will differ from the passed
        tenant and database if and only if:
        - The request is authenticated
        - chroma_overwrite_singleton_tenant_database_access_from_auth = True
        - The passed tenant or database are None or default_{tenant, database}
            (can be overwritten separately)
        - The user has access to a single tenant and/or single database.
        N)r   r  ,auth_and_get_tenant_and_database_for_requestr  s         rT   r  z4FastAPI.auth_and_get_tenant_and_database_for_requesta  sD     6 ''(Y(Y[bdjlrt|  I  J  J  	J  Js   (1/1c                    | j                   st        |||d       ||fS | j                   j                  t        |            }| j                   j	                  |      \  }}|r	|t
        k(  r|r|}|r	|t        k(  r|r|}| j                  s||fS t        |||      }	| j                  j                  |||	       t        |||d       ||fS )Nr  )
r   rH   r   r!  'singleton_tenant_database_if_applicabler'   r&   r   r#   r"  )
rR   rg   r  r  r  r  r#  
new_tenantnew_databaser$  s
             rT   1sync_auth_and_get_tenant_and_database_for_requestz9FastAPI.sync_auth_and_get_tenant_and_database_for_request~  s     ""*$ (", H%%++AA$w-P
 GGV	
 &N2
FH(88l#H""H%%&!
 	..}fnU& $(	
 !!rV   zFastAPI.create_database_v1c                     K   dt         dt        dt        dd f fd}t        j                  |||j
                  |j                          d {    j                         d {    y 7 7 w)Nr  rg   r,  rN   c                    t        t        t        j                  |            }j	                  |t
        j                  | |j                  d       \  }}|r|} |r||_        j                  j                  |j                  |       S r  )
r   r4   r/  r0  r  r"   r1  r[   r   r   )r  rg   r,  r2  maybe_tenantmaybe_databaserR   s         rT   r3  z;FastAPI.create_database_v1.<locals>.process_create_database  s}      X0FGB
 FF++ %(99,,RWWf==rV   r4  r6  r9  s   `   rT   r  zFastAPI.create_database_v1  ss     	>	>")	>5:	>	>,   #OO,,. **
 	
 	
 !		
s$   A
A/A+A/%A-&A/-A/zFastAPI.get_database_v1c           	      ,  K   | j                  |j                  t        j                  ||d        d {   \  }}|r|}|r|}t	        t
        t        j                  | j                  j                  ||| j                         d {         S 7 \7 
wr<  )r  rg   r"   r=  r   rB   r   r  r   r   r   )rR   r_   r  r  r  r  s         rT   r  zFastAPI.get_database_v1  s      CCOO$$
 
	
 !F%H$$		&&..	 
 	

"   1BBABB
	BBzFastAPI.create_tenant_v1c                     K   dt         dt        dd f fd}t        j                  |||j	                          d {    j
                         d {    y 7 7 w)Nr_   r,  rN   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  |j                  d d       \  }}|r||_        j                  j                  |j                        S r  )r   r5   r/  r0  r  rg   r"   rC  r[   r   r   )r_   r,  r  r  _rR   s        rT   rD  z7FastAPI.create_tenant_v1.<locals>.process_create_tenant  sn    #L&,,x2HIF"TT))OL! *99**6;;77rV   r4  rE  rF  s   `  rT   r  zFastAPI.create_tenant_v1  sa     	87 	8e 	8 	8   !,,. **	
 	
 	
 !	
rG  zFastAPI.get_tenant_v1c                 "  K   | j                  |j                  t        j                  |d d        d {   \  }}|r|}t	        t
        t        j                  | j                  j                  || j                         d {         S 7 W7 
wr<  )r  rg   r"   rI  r   rC   r   r  r   r   r   )rR   r_   r  r  r  s        rT   r  zFastAPI.get_tenant_v1  s      !% Q QOO""!
 
a !F$$		$$.. 
 	

s"   1BBABB
	BBzFastAPI.list_collections_v1c                 B  K   | j                  |j                  t        j                  ||d        d {   \  }}|r|}|r|}t	        t
        t           t        j                  | j                  j                  ||||| j                         d {         }|S 7 g7 wr<  )r  rg   r"   rQ  r   r   rT  r   r  r   r   r   )	rR   r_   rJ  rK  r  r  r  r  rU  s	            rT   r  zFastAPI.list_collections_v1,  s      CCOO((
 
	
 !F%H $_%$$		**.. 
!
 %$1
s"   1BBABB
BBzFastAPI.count_collections_v1c           	      ,  K   | j                  |j                  t        j                  ||d        d {   \  }}|r|}|r|}t	        t
        t        j                  | j                  j                  ||| j                         d {         S 7 \7 
wr<  )r  rg   r"   rX  r   rS  r   r  r   r   r   )rR   r_   r  r  r  r  s         rT   r  zFastAPI.count_collections_v1S  s      CCOO))
 
	
 !F%H$$		++..	 
 	

r  zFastAPI.create_collection_v1c                    K   dt         dt        dt        dt        dt        f
 fd}t	        t        t        j                  |||||j                          d {    j                         d {         }|S 7 "7 w)Nr_   r  r  r,  rN   c                    t        t        t        j                  |            }|j                  s
t               nt        j                  |j                        }j                  | j                  t        j                  |||j                        \  }}|r|}|r|}j                  j                  |j                  ||j                  |j                  ||      S )Nr[  )r   r9   r/  r0  r\  r   r^  r  rg   r"   r_  r[   r   r   r   r]  )	r_   r  r  r,  r`  r\  r  r  rR   s	           rT   ra  z?FastAPI.create_collection_v1.<locals>.process_create_collection|  s     $$4fll86LMF ++ 014>>v?S?ST  FF-- %)99..[[+$22! /  rV   r4  rb  )rR   r_   r  r  ra  rc  s   `     rT   r  zFastAPI.create_collection_v1t  s      	 	&) 	58 	DI 	 	D  $$$)lln$.. 
 
 $#	 %rd  zFastAPI.get_collection_v1c                     K    j                  |j                  t        j                         d {   \  }}|r||r| fd} |        d {   S 7 &7 w)Nc            
         K   t        t        t        j                  j                  j
                  j                         d {         } | S 7 
wr<  )r   rT  r   r  r   r   r   )rc  re  r  rR   r  s    rT   innerz(FastAPI.get_collection_v1.<locals>.inner  sT     #'((II,,# 22 	$  ('s   AA	A

A)r  rg   r"   rg  )rR   r_   re  r  r  r  r  r  s   ` ```   rT   r  zFastAPI.get_collection_v1  sn      CCOO&&
 
	
 !F%H	( W}3
2 s!   1A"A!A"A A" A"zFastAPI.update_collection_v1c                     K   dt         dt        dt        dd f fd}t        j                  ||||j                          d {    j                         d {    y 7 7 w)Nr_   rh  r,  rN   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  d d |       j                  j                  t        |      |j                  |j                        S )N)rk  rl  rm  )r   r:   r/  r0  r  rg   r"   rn  r   ro  rp  rl  rm  )r_   rh  r,  r   rR   s       rT   rq  z?FastAPI.update_collection_v1.<locals>.process_update_collection  sx     $$4fll86LMFBB-- 99$$'#00 %  rV   r4  rr  )rR   rh  r_   rq  s   `   rT   r  zFastAPI.update_collection_v1  so     		-0	<A		"   %,,. **
 	
 	
 !		
s$   A A%A!A%A#A%#A%zFastAPI.delete_collection_v1c                   K   | j                  |j                  t        j                  |||       d {   \  }}|r|}|r|}t	        j
                  | j                  j                  |||| j                         d {    y 7 P7 wr<  )	r  rg   r"   rt  r   r  r   r  r   )rR   r_   re  r  r  r  r  s          rT   r  zFastAPI.delete_collection_v1  s      CCOO))
 
	
 !F%H  II''**
 	
 	

	
s"   1BBA
B>B?BBzFastAPI.add_v1c           
      6   K   	 dt         dt        dt        f fd}t        t        t	        j
                  |||j                          d {    j                         d {         S 7  7 
# t        $ r}t        dt        |            d }~ww xY ww)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  t        t        |j                  rt        |j                        nd       |j                   |j"                  |j$                        S N)rh  rx  ry  rz  r{  r|  )r   r3   r/  r0  r  rg   r"   r}  r   r~  rp  rx  r   r   ry  r    rz  r{  r|  )r_   r,  r   rh  rR   s      rT   r  z#FastAPI.add_v1.<locals>.process_add  s    $\6<<3IJFFOOOO! yy~~"'"6#">> 6cnnE!	  "mm!mm &  rV   r4  rq   r  r  )rR   r_   rh  r  ry   s   ` `  rT   r  zFastAPI.add_v1  s     #	@W  $ . ((!,,.( 22	  
 ) ) 	@CA??	@sM   BAA2 A.A2 %A0
&A2 -B.A2 0A2 2	B;BBBzFastAPI.update_v1c                     K   dt         dt        dt        f fd}t        j                  |||j                          d {    j                         d {    y 7 7 w)Nr_   r,  rN   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  |j                  rt        |j                        nd |j                  |j                  |j                         S r  )r   r;   r/  r0  r  rg   r"   r  r   r  rp  rx  ry  r    rz  r{  r|  )r_   r,  r   rh  rR   s      rT   r  z)FastAPI.update_v1.<locals>.process_updateD  s    #OV\\(5KLFBB"" 99$$#M2JJ$$ 99J9JK ** **[[ % 	 	rV   r4  r  )rR   r_   rh  r  s   ` ` rT   r  zFastAPI.update_v1>  sa     	G 	u 	 	,   ,,. **	
 	
 	
 !	
#   >A$A A$A"A$"A$zFastAPI.upsert_v1c                     K   dt         dt        dt        f fd}t        j                  |||j                          d {    j                         d {    y 7 7 w)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  t        t        |j                  rt        |j                        nd       |j                   |j"                  |j$                        S r  )r   r3   r/  r0  r  rg   r"   r  r   r  rp  rx  r   r   ry  r    rz  r{  r|  )r_   r,  r   rh  rR   s      rT   r  z)FastAPI.upsert_v1.<locals>.process_upserth  s    #L&,,x2HIFBB"" 99$$#M2JJ(( 2&2C2CD	 !** **[[ %  rV   r4  r  )rR   r_   rh  r  s   ` ` rT   r  zFastAPI.upsert_v1a  sa     	G 	u 	 	2   ,,. **	
 	
 	
 !	
r  zFastAPI.get_v1c           
      b   K   dt         dt        dt        f fd}t        t        t	        j
                  |||j                          d {    j                         d {         }|d   2|d   D cg c]   }t        t        |      j                         " c}|d<   |S 7 Y7 Cc c}w w)Nr_   r,  rN   c           
         t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  |j                  |j                  |j                  |j                  |j                   |j"                        S )N)rh  rx  r  r  rJ  rK  r  r  )r   r7   r/  r0  r  rg   r"   r   r   r  rp  rx  r  r  rJ  rK  r  r  )r_   r,  r   rh  rR   s      rT   r  z#FastAPI.get_v1.<locals>.process_get  s     v||H/EFCBB 99>>#M2GGiiXXiizz"11 " 	 	rV   r4  ry  r  )rR   rh  r_   r  r  r  s   ``    rT   r  zFastAPI.get_v1  s     	 	E 	i 	( $$lln$..	 

 l#/ ",L!9(!9I Y	*113!9(J|$
  %(s6   AB/B&B/$B(
%B/9%B*	B/(B/*B/zFastAPI.delete_v1c                     K   dt         dt        dd f fd}t        j                  |||j	                          d {    j
                         d {    y 7 7 w)Nr_   r,  rN   c                 0   t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  |j                  |j                        S )N)rh  rx  r  r  )r   r6   r/  r0  r  rg   r"   r   r   r  rp  rx  r  r  )r_   r,  r   rh  rR   s      rT   r  z)FastAPI.delete_v1.<locals>.process_delete  s|    #OV\\(5KLFBB"" 99$$#M2JJll%44	 %  rV   r4  rE  )rR   rh  r_   r  s   ``  rT   r  zFastAPI.delete_v1  sa     	G 	u 	 	    ,,. **	
 	
 	
 !	
s!   :A AA AA A zFastAPI.count_v1c           	      &  K   | j                  |j                  t        j                  d d |       d {    t	        t
        t        j                  | j                  j                  t        |      | j                         d {         S 7 Y7 
wr<  )r  rg   r"   r  r   rS  r   r  r   r  rp  r   )rR   r_   rh  s      rT   r  zFastAPI.count_v1  s      ??OO
 	
 	
 $$		  m$.. 
 	
	
rN  zFastAPI.reset_v1c                   K   | j                  |j                  t        j                  d d d        d {    t	        t
        t        j                  | j                  j                  | j                         d {         S 7 O7 
wr<  )r  rg   r"   r  r   r   r   r  r   r   r   r  s     rT   reset_v1zFastAPI.reset_v1  s}      ??OO
 	
 	
 $$		.. 
 	
	
r  z FastAPI.get_nearest_neighbors_v1c                    K   dt         dt        dt        f fd}t        t        t	        j
                  |||j                          d {    j                         d {         }|d   B|d   D cg c].  }|D cg c]   }t        t        |      j                         " c}0 c}}|d<   |S 7 i7 Sc c}w c c}}w w)Nr_   r,  rN   c           	         t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              t        t        |j                  rt        |j                        nd       |j                  |j                   |j"                  |j$                        S )N)rh  r  r  r  r  r  )r   r8   r/  r0  r  rg   r"   r  r   r  rp  r   r   r  r    r  r  r  r  )r_   r,  r  rh  rR   s      rT   r  z7FastAPI.get_nearest_neighbors_v1.<locals>.process_query
  s    ">6<<3IJEBB!! 99###M2!%-- 2%2H2HI	"  //kk$33 $  rV   r4  ry  r  )rR   rh  r_   r  r  r  r  s   ``     rT   r  z FastAPI.get_nearest_neighbors_v1  s     	7 	e 	 	2 $$lln$..	 
 L!- '|4&4F GMMfi+224fM4&H\"
  % N&sH   ACB6C$B8
%C:	B?%B:(B?-
C8C:B??C)rN   N)NN)[r   r   r   r(   r   r   rs   r   r   r
   r   r   r   r   r   r   rW   r   r.   r   r   rS  r   r/   r   r   r   r  rI   rG   	OPERATIONrQ   r<   r"   r	   r  r  r!   r   r   rB   r   r   r   rC   r   r   r   rT  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  r  r  r  r  r  r  r   rV   rT   r   r      s   45 45l$sCx. !!W	c3h$U
nW__ 

%3
	
?d38n ?

%/
	
c3h 's 'GG G G  ** rr r 	r
 3-r SMr 
r 	
r** * 	*
 3-* SM* 
*X -/G/Q/QR

 

 S
  +-E-O-OP

 
 
	
 Q
< (*B*L*LM

 
 	

 

 N
0 +-E-O-OP

 
 	

 

 Q
* )+C+M+MN

 

 O
2 &(@(J(JK

 
 
	
 L
, *,D,N,NO
  $ $

 
 }	

 
 
(	
 P
4 ,.F.P.PQ  $ $&%&% &% 	&%
 }&% &% 
/	"&% R&%P -/G/Q/QR

 
 	

 

 S
4 -/G/Q/QR0$0$ 0$ 	0$
 
0$ S0$d *,D,N,NO$$ $ 	$
 $ 
$ P$: -/G/Q/QR"
"
 "
 	"

 "
 
"
 S"
H -/G/Q/QR

 
 	

 
 

 S
0 -!9!C!CD.@.@ .@ 	.@
 .@ 
.@  E.@` "$<$F$FG&
&
 &
 	&

 &
 
&
  H&
P "$<$F$FG)
)
 )
 	)

 )
 
)
  H)
V -!9!C!CD// / 	/
 / 
/  E/b "$<$F$FG 
 
  
 	 

  
 
 
  H 
D /#;#E#EF

 
 	

 
 

  G
6 /#;#E#EF

 

  G
( 13K3U3UV44 4 	4
 4 
4  W4l
c3h 
"~
@ 9 ** JJ J 	J
 3-J SMJ 
x}hsm+	,J 	
J00"0" 0" 	0"
 3-0" SM0" 
x}hsm+	,0"d .0H0R0RS %!
!
 !
 
	!
  T!
F +-E-O-OP
 %	

 
 	

 

  Q
> ,.F.P.PQ

 

  R
4 )+C+M+MN

 
 
	
  O
0 /1I1S1ST  $ $$(#%#% }#% 	#%
 #% #% 
/	"#%  U#%J 02J2T2TU %(	

 
 	

 

  V
> 02J2T2TU %(	3$3$ 3$ 	3$
 
3$  V3$j -/G/Q/QR
 %(## # 	#
 # 
#  S#J 02J2T2TU

 
 
	
  V
< 02J2T2TU
 %(

 
 	

 
 

  V
< "$<$F$FG(@(@ (@ 
	(@  H(@T %'?'I'IJ 
 
  
 
	 
 K 
D %'?'I'IJ#
#
 #
 
	#
  K#
J "$<$F$FG)) ) 
	)  H)V %'?'I'IJ

 
 
	
  K
8 $&>&H&HI

 
 
	
  J
, $&>&H&HI

 

  J
( *,D,N,N .. . 
	. .rV   r   )utypingr   r   r   r   r   r   r	   r
   r   r   r   r/  anyior   r   r   _FastAPIr   r   fastapi.openapi.utilsr   fastapi.middleware.corsr   fastapi.responsesr   fastapi.routingr   r   r   	functoolsr   chromadb.api.configurationr   pydanticr   chromadb.api.typesr   r   r   r   r    chromadb.authr!   r"   r#   r$   r%   chromadb.configr&   r'   r(   r)   chromadb.apir*   chromadb.errorsr+   r,   r-   r.   r/   chromadb.quotar0   chromadb.rate_limitr1   chromadb.serverr2   chromadb.server.fastapi.typesr3   r4   r5   r6   r7   r8   r9   r:   r;   starlette.datastructuresr<   loggingimportlib.metadatar   !chromadb.telemetry.product.eventsr=   chromadb.utils.fastapir>   r?   rp  opentelemetryr@   (chromadb.telemetry.opentelemetry.fastapirA   chromadb.typesrB   rC   chromadb.telemetry.productrD   rE    chromadb.telemetry.opentelemetryrF   rG   rH   rI   rJ   rT  	getLoggerr   rv   rQ   r^   ri   rz   r   r   r   	APIRouterr   r  rV   rT   <module>r     s       ; : - 2 , $ )  F   '  O N "  ) 6 "
 
 
 -   > Q  G + L  9			8	$,( ,t ,!)7)S.!9KK!)7)S.!9KK,$$!)7)S.!9$$ Cy5%$q' % % %5g'' 58yf yrV   