
    Bvh                    F   d dl 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 m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z( d dl)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 d dl/m1Z1m2Z2m3Z3m4Z4 d dl5m6Z6m7Z7m8Z8m9Z9 d dl:m;Z; d dl<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZC d dlDmEZE d dlFmGZG d dlHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQ d dlRmSZS d dlTZTd dlUmVZV d dlWmXZXmYZZ d dl[m\Z\ d dl]m^Z^ d dl_m`Z`maZa d dlbmcZcmdZd d dlemfZfmgZgmhZhmiZi d d l_mjZk  eTj                  em      Znd! Zod"ed#dfd$Zpd%ed&eegef   d#efd'Zqd%ed&eegef   d#efd(Zrd%ed&eegef   d#efd)Zs ed*e%d+,      Ztd-eet   d.ed#etfd/Zu G d0 d1e
j                        Zw G d2 d3eG      Zy)4    )	AnyCallablecastDictSequenceOptionalTypeTypeVarTupleN)	to_threadCapacityLimiter)FastAPIResponseRequest)get_openapi)CORSMiddlewareORJSONResponse)APIRoute)HTTPExceptionstatus)wraps).load_update_collection_configuration_from_json.load_create_collection_configuration_from_json?create_collection_configuration_from_legacy_collection_metadataCreateCollectionConfiguration)	BaseModel)__version__)	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)rO   rP   selffuncs      J/RAG/venv/lib/python3.12/site-packages/chromadb/server/fastapi/__init__.pywrapperzrate_limit.<locals>.wrapper]   s9     AwET44??EtVvVVVVs   *424)r   r   )rV   rX   s   ` rW   rT   rT   \   s:    
4[WS WC WC W W N    apprQ   c                     | j                   D ]7  }t        |t              s|j                  d|j                  v rdndz   |_        9 y)z
    Simplify operation IDs so that generated API clients have simpler function
    names.
    Should be called only after all routes have been added.
    v2z-v2z-v1N)routes
isinstancer   namepathoperation_id)rZ   routes     rW    use_route_names_as_operation_idsrc   e   s;     eX&!&

8JuPU!VE rY   request	call_nextc                    K   t        j                         j                         j                  } ||        d {   }t	        |d      |j
                  d<   |S 7 w)NxzChroma-Trace-Id)rC   get_current_spanget_span_contexttrace_idformatheaders)rd   re   rj   responses       rW   #add_trace_id_to_response_middlewarern   p   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_coderq     )
r.   rA   
ValueErrorr   str	TypeError	Exceptionlogger	exceptionrepr)rd   re   es      rW   catch_exceptions_middlewarer   y   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getr0   )rd   re   r   s      rW   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     rW   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 )ChromaAPIRouterr`   rO   rP   rQ   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`   rQ   c                 2     xr | j                  d       S )N/)endswith)r`   exclude_from_schemas    rW   r   z8ChromaAPIRouter.add_api_route.<locals>.include_in_schema   s    **E4==3E/EErY   r   )rx   boolsuperadd_api_router   )rU   r`   rO   rP   r   r   	__class__s        @rW   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4rY   )__name__
__module____qualname__rx   r   r   __classcell__)r   s   @rW   r   r      s)    5# 5c 5S 5T 5 5rY   r   c                   F   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dtdZdtd	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# edej<                        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<                        	 	 dudeded*e"e   d+e"e   de.e(   f
d,       Z/ ed-ej<                        	 	 dud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d0       Z2 ed1ej<                        deded!ede0fd2       Z3 ed3ej<                        deded!ed4ede0f
d5       Z4 ed6ej<                        ded!ed7ededdf
d8       Z5 ed9ej<                        ded4eded!eddf
d:       Z6 ed;ej<                        ededed!ed7ede7f
d<              Z8 ed=ej<                        ededed!ed7eddf
d>              Z9 ed?ej<                        ededed!ed7eddf
d@              Z: edAej<                        ed7eded!edede;f
dB              Z< edCej<                        ed7eded!ededdf
dD              Z= edEej<                        ededed!ed7edef
dF              Z> edGej<                        edede7fdH              Z? edIej<                        eded!ed7edede@f
dJ              ZAdeeef   fdKZBdtdLZC edMej<                        ede de!de"e   de"e   de"e   deDe"e   e"e   f   fdN              ZEde de!de"e   de"e   de"e   deDe"e   e"e   f   fdOZF edPej<                        eeGfdededdfdQ              ZH edRej<                        eeGfdededede(fdS              ZI edTej<                        ededdfdU              ZJ edVej<                        ededede,fdW              ZK edXej<                        eddeGeLfded*e"e   d+e"e   dedede.e0   fdY              ZM edZej<                        eeGeLfdedededefd[              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d4ededede0f
d_              ZP ed`ej<                        ed7ededdfda              ZQ edbej<                        eeGeLfded4edededdf
dc              ZR eddej<                        eded7ede7fde              ZS edfej<                        ded7eddfdg       ZT edhej<                        eded7eddfdi              ZU edjej<                        ed7edede;fdk              ZV edlej<                        ed7ededdfdm              ZW ednej<                        eded7edefdo              ZX edpej<                        edede7fdq              ZY edrej<                        ed7edede@fds              ZZy)vr   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)8rG   FASTAPIrH   SERVER_CONTEXTfastapir   r   _appr,   _systeminstancer-   _api_extra_openapi_schemasgenerate_openapiopenapirequirerI   _opentelemetry_clientr   chroma_server_thread_pool_size_capacity_limiterr3   _quota_enforcerstart
middlewarer   r   rn   add_middlewarer    chroma_server_cors_allow_originsadd_exception_handlerr2   quota_exception_handlerr1   rate_limit_exception_handlerr4   rS   on_eventr   authn_providerchroma_server_authn_providerr'   authz_providerchroma_server_authz_providerr(   r   routersetup_v1_routessetup_v2_routesinclude_routerrc   rD   capturer@   )rU   r   telemetry_clients      rW   __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4rY   rQ   c                     t        d| j                  j                  t              }| j                  j                         D ]  \  }}||d   d   |<    |S )z_Used instead of the default openapi() generation handler to include manually-populated schemas.Chroma)titler]   version
componentsschemas)r   r   r]   chromadb_versionr   items)rU   schemakeyvalues       rW   r   zFastAPI.generate_openapi   sY    !,99##$"
 55;;=JC38F< +C0 > rY   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)rt   required)model_json_schemar   r   )rU   r   r   r   r   openapi_extras         rW   !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 
 rY   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   ru   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   r7   get_databasedelete_databasecreate_tenantr8   
get_tenantlist_databaseslist_collectionscount_collectionscreate_collectionr<   addr   HTTP_201_CREATEDr6   updater>   upsertr   r:   deleter9   countget_nearest_neighborsr;   get_collectionupdate_collectionr=   delete_collectionrU   s    rW   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	 	" 	
rY   c                 8    | j                   j                          y N)r   stopr  s    rW   r   zFastAPI.shutdown  s    rY   c                     | j                   S r  )r   r  s    rW   rZ   zFastAPI.app  s    yyrY   rd   excc                 (   K   t        dddi      S w)Ni  rr   zRate limit exceeded.ru   rt   r   rU   rd   r	  s      rW   r   z$FastAPI.rate_limit_exception_handler  s!       67
 	
s   c                 :    d| j                   j                         iS )Nznanosecond heartbeat)r   r   r  s    rW   r   zFastAPI.root  s    &		(;(;(=>>rY   c                 D   K   t        dd|j                         i      S w)Nrs   rr   r  )r   rr   r  s      rW   r   zFastAPI.quota_exception_handler  s&      .
 	
s    c                 *   K   | j                         S wr  )r   r  s    rW   r   zFastAPI.heartbeat  s     yy{s   c                 >   K   | j                   j                         S wr  )r   get_versionr  s    rW   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.
        rd   )contextN)r   set_contextrU   rd   s     rW   _set_request_contextzFastAPI._set_request_context  s      	(()W1E(FrY   auth_requestrl   actiontenantdatabase
collectionc                 h   K   t        j                  | j                  g|||||f  d {   S 7 wr  )r   run_syncsync_auth_requestrU   rl   r  r  r  r  s         rW   r  zFastAPI.auth_request  sC      ''""
 vvx<
 
 	
 
s   )202zFastAPI.sync_auth_requestc                    | 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   rK   authenticate_or_raisedictr   r&   authorize_or_raise)rU   rl   r  r  r  r  user_identityauthz_resources           rW   r  zFastAPI.sync_auth_request  s    " ""*$ (", ++AA$w-P""&!
 	..}fnU& $(	
 	rY   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#  rl   )rd   rU   s   rW   <lambda>z+FastAPI.get_user_identity.<locals>.<lambda>!  s+    94;N;NOeefjkrkzkzf{|rY   )r   r$   r*   r)   r   r   r  r  s   ``rW   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  rl   raw_bodyrQ   c                    t        t        t        j                  |            }j	                  |t
        j                  | |j                  d        j                         j                  j                  |j                  |       S )Nrd   )r   r7   orjsonloadsr  r%   CREATE_DATABASEr_   r  r   r   )r  rl   r.  dbrd   rU   s       rW   process_create_databasez8FastAPI.create_database.<locals>.process_create_database+  sq      X0FGB ""++ %%g%699,,RWWf==rY   limiterrx   r?   bytesr   r  rl   bodyr   rU   rd   r  r5  s   ``  rW   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Nr6  )r  rl   r%   GET_DATABASEr   rE   r   r  r   r   r   rU   rd   r<  r  s       rW   r   zFastAPI.get_databaseE  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  rl   r%   DELETE_DATABASEr   r  r   r   r   r@  s       rW   r   zFastAPI.delete_database_  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)Nrd   r.  rQ   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  |j                  d d        j                  j                  |j                        S r  )r   r8   r1  r2  r  rl   r%   CREATE_TENANTr_   r   r   )rd   r.  r  rU   s      rW   process_create_tenantz4FastAPI.create_tenant.<locals>.process_create_tenant{  s`    #L&,,x2HIF "")) 99**6;;77rY   r6  r   r9  r   r  r:  r   rU   rd   rF  s   `  rW   r   zFastAPI.create_tenantv  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  rl   r%   
GET_TENANTr   rF   r   r  r   r   r   )rU   rd   r  s      rW   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  rl   r%   LIST_DATABASESr   r   rE   r   r  r   r   r   )rU   rd   r  rL  rM  s        rW   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)NrL  rM  r  r<  rQ   c                     j                  j                  t        j                  ||d        j	                         t        d|i       j                  j                  ||| |      S )Nr0  r  )r  r  rL  rM  )r  rl   r%   LIST_COLLECTIONSr  rK   r   r   )rL  rM  r  r<  rd   rU   s       rW   process_list_collectionsz:FastAPI.list_collections.<locals>.process_list_collections  sq     "",, %%g%6*Hf+=>99--U6 .  rY   r6  )	r   intrx   r   CollectionModelr   r   r  r   )rU   rd   r  r<  rL  rM  rT  api_collection_modelss   ``      rW   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  r6  )r  rl   r%   COUNT_COLLECTIONSrK   r   rU  r   r  r   r   r   )rU   rd   r  r<  s       rW   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)Nrd   r  r  r.  rQ   c                     t        t        t        j                  |            }|j                  s%|j
                  rt        |j
                        }nd }nt        |j                        }j                  | j                  t        j                  |||j                         j                  |        t        d|i       j                  j!                  |j                  ||j
                  |j"                  ||      S )Nr0  r  r_   configurationmetadataget_or_creater  r  )r   r<   r1  r2  r^  r_  r   r   r  rl   r%   CREATE_COLLECTIONr_   r  rK   r   r   r`  )rd   r  r  r.  creater^  rU   s         rW   process_create_collectionz<FastAPI.create_collection.<locals>.process_create_collection  s     $$4fll86LMF''??W"OO " %)M N((!
 ""-- %%g%6*Hf+=>99..[[+$22! /  rY   r6  	r   rx   r9  rV  r   r   r  r:  r   )rU   rd   r  r<  rc  api_collection_models   `     rW   r   zFastAPI.create_collection
  s     &	&	&)&	58&	DI&	&	P  $$$)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rY  )r  rl   r%   GET_COLLECTIONrK   r   rV  r   r  r   r  r   )rU   rd   r  r<  rg  re  s         rW   r  zFastAPI.get_collectionF  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)Nrd   rj  r.  rQ   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  |       |j                  sd nt        |j                        }j                  |        t        di       j                  j                  t        |      |j                  |j                   |      S )Nr0  r  )idnew_namenew_metadatanew_configurationr  r  )r   r=   r1  r2  r  rl   r%   UPDATE_COLLECTIONrp  r   r  rK   r   _modify_uuidrn  ro  )rd   rj  r.  r   r^  r<  rU   r  s        rW   process_update_collectionz<FastAPI.update_collection.<locals>.process_update_collectionm  s     $$4fll86LMF""-- // C,,  %%g%6*Hf+=>99$$'#00"/& %  rY   r6  r   rx   r9  r   r  r:  r   )rU   r  r<  rj  rd   rt  s   ```   rW   r  zFastAPI.update_collectione  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rY  )
r  rl   r%   DELETE_COLLECTIONrK   r   r  r   r  r   )rU   rd   rg  r  r<  s        rW   r  zFastAPI.delete_collection  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)Nrd   r.  rQ   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 Nr0  r  )rj  ids
embeddings	metadatas	documentsurisr  r  )r   r6   r1  r2  r  rl   r%   ADDr  rK   r   _addrs  r{  r   r"   r|  r#   r}  r~  r  )rd   r.  r   rj  r<  rU   r  s      rW   process_addz FastAPI.add.<locals>.process_add  s    $\6<<3IJ&&OOOO!! ))'):.&/AByy~~"'"6#">> 6cnnE!	  "mm!mm!* &  rY   r6  rv   ru   detailr   r9  r   r   r   r  r:  r   r/   r   rx   )rU   rd   r  r<  rj  r  r~   s   ` ```  rW   r   zFastAPI.add  s     (	@W  $  8 ((!,,.( 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)Nrd   r.  rQ   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 rz  )r   r>   r1  r2  r  rl   r%   UPDATEr  rK   r   _updaters  r{  r|  r#   r}  r~  r  )rd   r.  r   rj  r<  rU   r  s      rW   process_updatez&FastAPI.update.<locals>.process_update  s    #OV\\(5KLF """" %%g%6*Hf+=>99$$#M2JJ$$ 99J9JK ** **[[& %  rY   r6  r   r9  r   r   r  r:  r   )rU   rd   r  r<  rj  r  s   ` ``` rW   r   zFastAPI.update  sf     	G 	u 	 	 	6   ,,. **	
 	
 	
 !	
$   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)Nrd   r.  rQ   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 rz  )r   r6   r1  r2  r  rl   r%   UPSERTr  rK   r   _upsertrs  r{  r   r"   r|  r#   r}  r~  r  )rd   r.  r   rj  r<  rU   r  s      rW   process_upsertz&FastAPI.upsert.<locals>.process_upsert  s    #L&,,x2HIF """" %%g%6*Hf+=>99$$#M2JJ(( 2&2C2CD	 !** **[[& %  rY   r6  r  )rU   rd   r  r<  rj  r  s   ` ``` rW   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)Nrd   r.  rQ   c                    t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  |j                  |j                  |j                   |j"                  |j$                  	      S )Nr0  r  )	rj  r{  whererL  rM  where_documentincluder  r  )r   r:   r1  r2  r  rl   r%   r   r  rK   r   _getrs  r{  r  rL  rM  r  r  )rd   r.  r   rj  r<  rU   r  s      rW   process_getz FastAPI.get.<locals>.process_getB  s     v||H/EFC"" %%g%6*Hf+=>99>>#M2GGiiiizz"11& " 
 
rY   r6  r|  
r   r9  r    r   r   r  r:  r   r   tolist)rU   rj  r  r<  rd   r  
get_result	embeddings   ````    rW   r   zFastAPI.get9  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)Nrd   r.  rQ   c                 r   t        t        t        j                  |            }j	                  | j
                  t        j                         j                  |        t        di       j                  j                  t              |j                  |j                  |j                        S )Nr0  r  )rj  r{  r  r  r  r  )r   r9   r1  r2  r  rl   r%   r   r  rK   r   _deleters  r{  r  r  )rd   r.  r   rj  r<  rU   r  s      rW   process_deletez&FastAPI.delete.<locals>.process_deleteu  s    #OV\\(5KLF"""" %%g%6*Hf+=>99$$#M2JJll%44& %  rY   r6  rG  )rU   rj  r  r<  rd   r  s   ````  rW   r   zFastAPI.deletel  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rY  )r  rl   r%   COUNTrK   r   rU  r   r  r   _countrs  r   )rU   rd   r  r<  rj  s        rW   r   zFastAPI.count  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  rl   r%   RESETr   r   r   r  r   r   r   r  s     rW   r   zFastAPI.reset  s}      OO
 	
 	
 $$		.. 
 	
	
"   1BBAB:B
;	BBzFastAPI.get_nearest_neighborsc                    K   t        dt        j                        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)Nzinternal.get_nearest_neighborsrd   r.  rQ   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 )Nr0  r  )rj  query_embeddings	n_resultsr  r  r  r  r  )r   r;   r1  r2  r  rl   r%   QUERYr  rK   r   _queryrs  r   r"   r  r#   r  r  r  r  )rd   r.  queryrj  r<  rU   r  s      rW   process_queryz4FastAPI.get_nearest_neighbors.<locals>.process_query  s     #>6<<3IJE ""!! %%g%6*Hf+=>99###M2!%-- 2%2H2HI	"  //kk$33& $  rY   r6  r|  )rL   rJ   	OPERATIONr   r9  r!   r   r   r  r:  r   r   r  )	rU   r  r<  rj  rd   r  nnresultresultr  s	   ````     rW   r   zFastAPI.get_nearest_neighbors  s      
,.F.P.P

	7 	e 	 	

	< $$lln$..	 
 L!- '|4&4F GMMfi+224fM4&H\"
  % N&sH   A'C&-C.C&C
C&	C $%C	C 
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)NrQ   c                  <    d j                   j                         iS )Nmax_batch_size)r   get_max_batch_sizer  s   rW   process_pre_flight_checksz<FastAPI.pre_flight_checks.<locals>.process_pre_flight_checks  s     $))">">"@ rY   r6  )r   rx   r   r   r   r  r   )rU   r  s   ` rW   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   r7   get_database_v1create_tenant_v1r8   get_tenant_v1list_collections_v1count_collections_v1create_collection_v1r<   add_v1r   r   r6   	update_v1r>   	upsert_v1get_v1r:   	delete_v1r9   count_v1get_nearest_neighbors_v1r;   get_collection_v1update_collection_v1r=   delete_collection_v1r  s    rW   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	 	" 	
rY   /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  1sync_auth_and_get_tenant_and_database_for_requestr  s         rW   ,auth_and_get_tenant_and_database_for_requestz4FastAPI.auth_and_get_tenant_and_database_for_request  s=     6 ''BB
 
 	
 
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   rK   r"  r#  'singleton_tenant_database_if_applicabler*   r)   r   r&   r$  )
rU   rl   r  r  r  r  r%  
new_tenantnew_databaser&  s
             rW   r  z9FastAPI.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& $(	
 !!rY   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  rl   r.  rQ   c                    t        t        t        j                  |            }j	                  |t
        j                  | |j                  d       \  }}|r|} |r||_        j                  j                  |j                  |       S r  )
r   r7   r1  r2  r  r%   r3  r_   r   r   )r  rl   r.  r4  maybe_tenantmaybe_databaserU   s         rW   r5  z;FastAPI.create_database_v1.<locals>.process_create_database  s}      X0FGB FF++	 %(99,,RWWf==rY   r6  r8  r;  s   `   rW   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  rl   r%   r?  r   rE   r   r  r   r   r   )rU   rd   r  r  r  r  s         rW   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)Nrd   r.  rQ   c                    t        t        t        j                  |            }j	                  | j
                  t        j                  |j                  d d       \  }}|r||_        j                  j                  |j                        S r  )r   r8   r1  r2  r  rl   r%   rE  r_   r   r   )rd   r.  r  r  _rU   s        rW   rF  z7FastAPI.create_tenant_v1.<locals>.process_create_tenant7  sp    #L&,,x2HIF #TT))OL! *99**6;;77rY   r6  rG  rH  s   `  rW   r  zFastAPI.create_tenant_v11  sa     	87 	8e 	8 	8    !,,. **	
 	
 	
 !	
rI  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  rl   r%   rK  r   rF   r   r  r   r   r   )rU   rd   r  r  r  s        rW   r  zFastAPI.get_tenant_v1N  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  rl   r%   rS  r   r   rV  r   r  r   r   r   )	rU   rd   rL  rM  r  r  r  r  rW  s	            rW   r  zFastAPI.list_collections_v1h  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  rl   r%   rZ  r   rU  r   r  r   r   r   )rU   rd   r  r  r  r  s         rW   r  zFastAPI.count_collections_v1  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)Nrd   r  r  r.  rQ   c                    t        t        t        j                  |            }|j                  s
t               nt        |j                        }j                  | j                  t        j                  |||j                        \  }}|r|}|r|}j                  j                  |j                  ||j                  |j                  ||      S )Nr]  )r   r<   r1  r2  r^  r   r   r  rl   r%   ra  r_   r   r   r_  r`  )	rd   r  r  r.  rb  r^  r  r  rU   s	           rW   rc  z?FastAPI.create_collection_v1.<locals>.process_create_collection  s     $$4fll86LMF ++ ./C((  FF--	 %)99..[[+$22! /  rY   r6  rd  )rU   rd   r  r  rc  re  s   `     rW   r  zFastAPI.create_collection_v1  s     #	#	&)#	58#	DI#	#	J  $$$)lln$.. 
 
 $#	 %rf  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   rV  r   r  r   r  r   )re  rg  r  rU   r  s    rW   innerz(FastAPI.get_collection_v1.<locals>.inner  sT     #'((II,,# 22 	$  ('s   AA	A

A)r  rl   r%   ri  )rU   rd   rg  r  r  r  r  r  s   ` ```   rW   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)Nrd   rj  r.  rQ   c                 b   t        t        t        j                  |            }j	                  | j
                  t        j                  d d |       |j                  sd nt        |j                        }j                  j                  t        |      |j                  |j                  |      S )N)rm  rn  ro  rp  )r   r=   r1  r2  r  rl   r%   rq  rp  r   r   rr  rs  rn  ro  )rd   rj  r.  r   r^  rU   s        rW   rt  z?FastAPI.update_collection_v1.<locals>.process_update_collection  s     $$4fll86LMFBB-- // C,,  99$$'#00"/	 %  rY   r6  ru  )rU   rj  rd   rt  s   `   rW   r  zFastAPI.update_collection_v1  so     		-0	<A		4   %,,. **
 	
 	
 !		
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  rl   r%   rw  r   r  r   r  r   )rU   rd   rg  r  r  r  r  s          rW   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)Nrd   r.  rQ   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)rj  r{  r|  r}  r~  r  )r   r6   r1  r2  r  rl   r%   r  r   r  rs  r{  r   r"   r|  r#   r}  r~  r  )rd   r.  r   rj  rU   s      rW   r  z#FastAPI.add_v1.<locals>.process_addc  s    $\6<<3IJFFOOOO! yy~~"'"6#">> 6cnnE!	  "mm!mm &  rY   r6  rv   r  r  )rU   rd   rj  r  r~   s   ` `  rW   r  zFastAPI.add_v1Z  s     $	@W  $ 0 ((!,,.( 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)Nrd   r.  rQ   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>   r1  r2  r  rl   r%   r  r   r  rs  r{  r|  r#   r}  r~  r  )rd   r.  r   rj  rU   s      rW   r  z)FastAPI.update_v1.<locals>.process_update  s    #OV\\(5KLF BB"" 99$$#M2JJ$$ 99J9JK ** **[[ % 	 	rY   r6  r  )rU   rd   rj  r  s   ` ` rW   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)Nrd   r.  rQ   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   r6   r1  r2  r  rl   r%   r  r   r  rs  r{  r   r"   r|  r#   r}  r~  r  )rd   r.  r   rj  rU   s      rW   r  z)FastAPI.upsert_v1.<locals>.process_upsert  s    #L&,,x2HIF BB"" 99$$#M2JJ(( 2&2C2CD	 !** **[[ %  rY   r6  r  )rU   rd   rj  r  s   ` ` rW   r  zFastAPI.upsert_v1  sa     	G 	u 	 	4   ,,. **	
 	
 	
 !	
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)Nrd   r.  rQ   c           	      r   t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  |j                  |j                  |j                  |j                  |j                         S )N)rj  r{  r  rL  rM  r  r  )r   r:   r1  r2  r  rl   r%   r   r   r  rs  r{  r  rL  rM  r  r  )rd   r.  r   rj  rU   s      rW   r  z#FastAPI.get_v1.<locals>.process_get  s     v||H/EFCBB 99>>#M2GGiiiizz"11 "  rY   r6  r|  r  )rU   rj  rd   r  r  r  s   ``    rW   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)Nrd   r.  rQ   c                 0   t        t        t        j                  |            }j	                  | j
                  t        j                  d d        j                  j                  t              |j                  |j                  |j                        S )N)rj  r{  r  r  )r   r9   r1  r2  r  rl   r%   r   r   r  rs  r{  r  r  )rd   r.  r   rj  rU   s      rW   r  z)FastAPI.delete_v1.<locals>.process_delete  s|    #OV\\(5KLFBB"" 99$$#M2JJll%44	 %  rY   r6  rG  )rU   rj  rd   r  s   ``  rW   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  rl   r%   r  r   rU  r   r  r   r  rs  r   )rU   rd   rj  s      rW   r  zFastAPI.count_v1  s      ??OO
 	
 	
 $$		  m$.. 
 	
	
rP  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  rl   r%   r  r   r   r   r  r   r   r   r  s     rW   reset_v1zFastAPI.reset_v17  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)Nrd   r.  rQ   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)rj  r  r  r  r  r  )r   r;   r1  r2  r  rl   r%   r  r   r  rs  r   r"   r  r#   r  r  r  r  )rd   r.  r  rj  rU   s      rW   r  z7FastAPI.get_nearest_neighbors_v1.<locals>.process_queryV  s    ">6<<3IJE BB!! 99###M2!%-- 2%2H2HI	"  //kk$33 $  rY   r6  r|  )
r   r9  r!   r   r   r  r:  r   r   r  )rU   rj  rd   r  r  r  r  s   ``     rW   r  z FastAPI.get_nearest_neighbors_v1M  s     	7 	e 	 	4 $$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)rQ   N)NN)[r   r   r   r+   r   r   rx   r   r   r	   r   r   r   r   r   r   rZ   r   r1   r   r   rU  r   r2   r   r   r   r  rL   rJ   r  rT   r?   r%   r   r  r  r$   r   r   rE   r   r   r   rF   r   r   r   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  r  r  r)   r  r  r  r  r  r  r  r  r  r  r  r  r  r   rY   rW   r   r      s.   45 45l$sCx. !!W	c3h$U
nW__ 

%3
	
?d38n ?

%/
	
c3h 's 'GG G G  ** 

 
 	

 3-
 SM
 

 	

 # **** * 	*
 3-* SM* 
*	*X -/G/Q/QR

 

 S
  +-E-O-OP

 
 
	
 Q
> (*B*L*LM

 
 	

 

 N
2 +-E-O-OP

 
 	

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

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

 

 S
6 -/G/Q/QR9$9$ 9$ 	9$
 
9$ S9$v *,D,N,NO$$ $ 	$
 $ 
$ P$< -/G/Q/QR+
+
 +
 	+

 +
 
+
 S+
Z -/G/Q/QR

 
 	

 
 

 S
2 -!9!C!CD/@/@ /@ 	/@
 /@ 
/@  E/@b "$<$F$FG'
'
 '
 	'

 '
 
'
  H'
R "$<$F$FG*
*
 *
 	*

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

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

 
 

  G
8 /#;#E#EF

 

  G
* 13K3U3UV88 8 	8
 8 
8  W8t
c3h 
"~
@ 9 ** 

 
 	

 3-
 SM
 
x}hsm+	,
 	

B/"/" /" 	/"
 3-/" SM/" 
x}hsm+	,/"b .0H0R0RS %"
"
 "
 
	"
  T"
H +-E-O-OP
 %	

 
 	

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

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

 
 

  V
< "$<$F$FG)@)@ )@ 
	)@  H)@V %'?'I'IJ!
!
 !
 
	!
 K!
F %'?'I'IJ$
$
 $
 
	$
  K$
L "$<$F$FG)) ) 
	)  H)V %'?'I'IJ

 
 
	
  K
: $&>&H&HI

 
 
	
  J
, $&>&H&HI

 

  J
( *,D,N,N // / 
	/ /rY   r   )xtypingr   r   r   r   r   r   r	   r
   r   r   r1  anyior   r   r   _FastAPIr   r   fastapi.openapi.utilsr   fastapi.middleware.corsr   fastapi.responsesr   fastapi.routingr   r   r   	functoolsr   %chromadb.api.collection_configurationr   r   r   r   pydanticr   chromadbr   r   chromadb.api.typesr   r    r!   r"   r#   chromadb.authr$   r%   r&   r'   r(   chromadb.configr)   r*   r+   r,   chromadb.apir-   chromadb.errorsr.   r/   r0   r1   r2   chromadb.quotar3   chromadb.rate_limitr4   chromadb.serverr5   chromadb.server.fastapi.typesr6   r7   r8   r9   r:   r;   r<   r=   r>   starlette.datastructuresr?   logging!chromadb.telemetry.product.eventsr@   chromadb.utils.fastapirA   rB   rs  opentelemetryrC   (chromadb.telemetry.opentelemetry.fastapirD   chromadb.typesrE   rF   chromadb.telemetry.productrG   rH    chromadb.telemetry.opentelemetryrI   rJ   rK   rL   rM   rV  	getLoggerr   r{   rT   rc   rn   r   r   r   r   	APIRouterr   r  rY   rW   <module>r     s  
 
 
   ; : - 2 , $ )    4  '  O N "  ) 6 "
 
 
 -  > Q  G + L  9			8	$W( Wt W!)7)S.!9KK!)7)S.!9KK,$$!)7)S.!9$$ Cy5%$q' % % %5g'' 58Af ArY   