
    3i                    J   S SK JrJrJrJrJrJrJrJrJ	r	  S SK
r
S SKrS SKJrJr  S SK
JrJrJr  S SKJr  S SKJr  S SKJr  S SKJr  S S	K
JrJr  S S
KJr  S SKJ r J!r!J"r"J#r#  S SK$J%r%  S SK&J'r(  S SK)J*r*J+r+J,r,J-r-J.r.  S SK/J0r0  S SK/J1r1J2r2J3r3J4r4  S SK5J6r6J7r7J8r8J9r9  S SK:J;r;  S SK<J=r=J>r>J?r?J@r@JArA  S SKBJCrC  S SKDJErE  S SKFJGrG  S SKHJIrIJJrJJKrKJLrLJMrMJNrNJOrOJPrPJQrQ  S SKRJSrS  S SKTrTS SKUJVrV  S SKWJXrXJYrZ  S SK[J\r\  S SK]J^r^  S SK_J`r`Jara  S SKbJcrcJdrd  S SKeJfrfJgrgJhrhJiri  S S K_Jjrk  \TR                  " \m5      rnS! roS"\S#S4S$ jrpS%\S&\\/\4   S#\4S' jrqS%\S&\\/\4   S#\4S( jrrS%\S&\\/\4   S#\4S) jrs\" S*\%S+S,9rtS-\\t   S.\S#\t4S/ jru " S0 S1\
R                  5      rw " S2 S3\G5      rg)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                 X   ^  [        T 5      S[        S[        S[        4U 4S jj5       nU$ )Nargskwargsreturnc                  l   >#    U S   nUR                   R                  T5      " U 0 UD6I S h  vN $  N7f)Nr   )_async_rate_limit_enforcer
rate_limit)rO   rP   selffuncs      Z/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/server/fastapi/__init__.pywrapperrate_limit.<locals>.wrapper]   s6     Aw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                     U R                    H@  n[        U[        5      (       d  M  UR                  SUR                  ;   a  SOS-   Ul        MB     g)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)r[   routes     rW    use_route_names_as_operation_idsrd   e   s>     eX&&!&

8JuPU!VE rZ   request	call_nextc                    #    [         R                  " 5       R                  5       R                  nU" U 5      I S h  vN n[	        US5      UR
                  S'   U$  N7f)NxzChroma-Trace-Id)rC   get_current_spanget_span_contexttrace_idformatheaders)re   rf   rk   responses       rW   #add_trace_id_to_response_middlewarero   p   sS      %%'88:CCHw''H*03*?H&'O (s   9AA Ac                   #     U" U 5      I S h  vN $  N! [          a  n[        U5      s S nA$ S nAf[         a   n[        S[	        U5      S.SS9s S nA$ S nAf[
         a   n[        S[	        U5      S.SS9s S nA$ S nAf[         a4  n[        R                  U5        [        S[        U5      0SS9s S nA$ S nAff = f7f)NInvalidArgumentError)errormessage  )contentstatus_coderr     )
r.   rA   
ValueErrorr   str	TypeError	Exceptionlogger	exceptionrepr)re   rf   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
0CCCACCC%B :C;C C)B<6C7C<CCc                    #    U R                   R                  S5      nUS;  a  [        SU S35      eU" U 5      I S h  vN $  N7f)Nhttp_version)z1.12zHTTP version z is not supported)scopegetr0   )re   rf   r   s      rW   check_http_version_middlewarer      sI      ==$$^4L<' =>O!PQQ7####s   <AAADT)boundcontravariantmodeldatac                 h     U R                  U5      $ ! [         a    U R                  U5      s $ f = f)z1Used for backward compatibility with Pydantic 1.x)model_validateAttributeError	parse_obj)r   r   s     rW   validate_modelr      s6    %##D)) %t$$%s    11c                   <   ^  \ rS rSrS\S\S\SS4U 4S jjrSrU =r$ )	ChromaAPIRouter   ra   rO   rP   rQ   Nc                   >^ SU;   =(       a
    US   (       + mS[         S[        4U4S jjnU" U5      US'   [        TU ]  " U/UQ70 UD6  UR	                  S5      (       a  US S nOUS-   nU" U5      US'   [        TU ]  " U/UQ70 UD6  g )Ninclude_in_schemara   rQ   c                 L   > T(       + =(       a    U R                  S5      (       + $ )N/)endswith)ra   exclude_from_schemas    rW   r   8ChromaAPIRouter.add_api_route.<locals>.include_in_schema   s    **E4==3E/EErZ   r   )ry   boolsuperadd_api_router   )rU   ra   rO   rP   r   r   	__class__s        @rW   r   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4rZ    )	__name__
__module____qualname____firstlineno__ry   r   r   __static_attributes____classcell__)r   s   @rW   r   r      s)    5# 5c 5S 5T 5 5rZ   r   c                      \ rS rSrS\4S jrS\\\4   4S jr	S\
\   S\\\4   4S jrSvS	 jrSvS
 jrS\R                   4S jrS\S\S\4S jrS\\\4   4S jrS\S\S\4S jrS\\\4   4S jrS\4S jrS\SS4S jr\" S\R>                  5      \ S\!S\"S\#\   S\#\   S\#\   SS4S j5       5       r$\" S\R>                  5      S\!S\"S\#\   S\#\   S\#\   SS4S j5       r%\" S\R>                  5      S\S\&4S j5       r'\" S\R>                  5      S\S\SS4S  j5       r(\" S!\R>                  5      S\S"\S\S\)4S# j5       r*\" S$\R>                  5      S\S"\S\SS4S% j5       r+\" S&\R>                  5      S\SS4S' j5       r,\" S(\R>                  5      S\S\S\-4S) j5       r.\" S*\R>                  5        SwS\S\S+\#\   S,\#\   S\/\)   4
S- jj5       r0\" S.\R>                  5        SwS\S\S"\S+\#\   S,\#\   S\/\1   4S/ jj5       r2\" S0\R>                  5      S\S\S"\S\4S1 j5       r3\" S2\R>                  5      S\S\S"\S\14S3 j5       r4\" S4\R>                  5      S\S\S"\S5\S\14
S6 j5       r5\" S7\R>                  5      S\S"\S8\S\SS4
S9 j5       r6\" S:\R>                  5      S\S5\S\S"\SS4
S; j5       r7\" S<\R>                  5      \ S\S\S"\S8\S\84
S= j5       5       r9\" S>\R>                  5      \ S\S\S"\S8\SS4
S? j5       5       r:\" S@\R>                  5      \ S\S\S"\S8\SS4
SA j5       5       r;\" SB\R>                  5      \ S8\S\S"\S\S\<4
SC j5       5       r=\" SD\R>                  5      \ S8\S\S"\S\SS4
SE j5       5       r>\" SF\R>                  5      \ S\S\S"\S8\S\4
SG j5       5       r?\" SH\R>                  5      \ S\S\84SI j5       5       r@\" SJ\R>                  5      \ S\S"\S8\S\S\A4
SK j5       5       rBS\\\4   4SL jrCSvSM jrD\" SN\R>                  5      \ S\!S\"S\#\   S\#\   S\#\   S\E\#\   \#\   4   4SO j5       5       rFS\!S\"S\#\   S\#\   S\#\   S\E\#\   \#\   4   4SP jrG\" SQ\R>                  5      \ \H4S\S\SS4SR jj5       5       rI\" SS\R>                  5      \ \H4S\S\S\S\)4ST jj5       5       rJ\" SU\R>                  5      \ S\SS4SV j5       5       rK\" SW\R>                  5      \ S\S\S\-4SX j5       5       rL\" SY\R>                  5      \ SS\H\M4S\S+\#\   S,\#\   S\S\S\/\1   4SZ jj5       5       rN\" S[\R>                  5      \ \H\M4S\S\S\S\4S\ jj5       5       rO\" S]\R>                  5      \ \H\M4S\S\S\S\14S^ jj5       5       rP\" S_\R>                  5      \ \H\M4S\S5\S\S\S\14
S` jj5       5       rQ\" Sa\R>                  5      \ S8\S\SS4Sb j5       5       rR\" Sc\R>                  5      \ \H\M4S\S5\S\S\SS4
Sd jj5       5       rS\" Se\R>                  5      \ S\S8\S\84Sf j5       5       rT\" Sg\R>                  5      S\S8\SS4Sh j5       rU\" Si\R>                  5      \ S\S8\SS4Sj j5       5       rV\" Sk\R>                  5      \ S8\S\S\<4Sl j5       5       rW\" Sm\R>                  5      \ S8\S\SS4Sn j5       5       rX\" So\R>                  5      \ S\S8\S\4Sp j5       5       rY\" Sq\R>                  5      \ S\S\84Sr j5       5       rZ\" Ss\R>                  5      \ S8\S\S\A4St j5       5       r[Sur\g)xr      settingsc                    [         R                  [        l        [        R
                  " S[        S9U l        [        U5      U l	        U R                  R                  [        5      U l        0 U l        U R                  U R                  l        U R                  R!                  ["        5      U l        ['        UR(                  5      U l        U R                  R!                  [,        5      U l        U R                  R1                  5         U R                  R3                  S5      " [4        5        U R                  R3                  S5      " [6        5        U R                  R3                  S5      " [8        5        U R                  R;                  [<        S/UR>                  S/S9  U R                  RA                  [B        U RD                  5        U R                  RA                  [F        U RH                  5        U R                  R!                  [J        5      U l&        U R                  RO                  S5      " U RP                  5        S U l)        URT                  (       a$  U R                  R!                  [V        5      U l)        S U l,        URZ                  (       a$  U R                  R!                  [\        5      U l,        [_        5       U l0        U Rc                  5         U Re                  5         U R                  Rg                  U R`                  5        [i        U R                  5        [k        U R                  5        U R                  R                  [        5      nURm                  [o        5       5        g )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   ro   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_routerrd   rD   capturer@   )rU   r   telemetry_clients      rW   __init__FastAPI.__init__   sc   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4rZ   rQ   c                     [        SU R                  R                  [        S9nU R                  R                  5        H  u  p#X1S   S   U'   M     U$ )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   FastAPI.generate_openapi   sU    !,99##$"
 55;;=JC38< +C0 > rZ   request_modelc                     UR                  SS9nSU;   a*  US   R                  5        H  u  p4X@R                  U'   M     SSSU00SS.0nU$ )	Nz#/components/schemas/{model})ref_templatez$defsrequestBodyzapplication/jsonr   T)ru   required)model_json_schemar   r   )rU   r   r   r   r   openapi_extras         rW   !get_openapi_extras_for_body_model)FastAPI.get_openapi_extras_for_body_model  sv     007 1 
 f$Wo335
38++C0 6 .60BC 
 rZ   Nc           
      B	   U R                   R                  SU R                  S/S9  U R                   R                  SU R                  S/S9  U R                   R                  SU R                  S/S9  U R                   R                  SU R
                  S/S9  U R                   R                  SU R                  S/S9  U R                   R                  S	U R                  S/S S
9  U R                   R                  SU R                  S/S U R                  [        5      S9  U R                   R                  SU R                  S/S S
9  U R                   R                  SU R                  S/S S
9  U R                   R                  SU R                  S/S U R                  [        5      S9  U R                   R                  SU R                  S/S S
9  U R                   R                  SU R                   S/S S
9  U R                   R                  SU R"                  S/S S
9  U R                   R                  SU R$                  S/S S
9  U R                   R                  SU R&                  S/S U R                  [(        5      S9  U R                   R                  SU R*                  S/[,        R.                  S U R                  [0        5      S9  U R                   R                  SU R2                  S/S U R                  [4        5      S9  U R                   R                  SU R6                  S/S U R                  [0        5      S9  U R                   R                  SU R8                  S/S U R                  [:        5      S9  U R                   R                  SU R<                  S/S U R                  [>        5      S9  U R                   R                  SU R@                  S/S S
9  U R                   R                  SU RB                  S/S U R                  [D        S9S9  U R                   R                  SU RF                  S/S S
9  U R                   R                  SU RH                  S/S U R                  [J        5      S9  U R                   R                  SU RL                  S/S S
9  g )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   rv   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   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	 	" 	
rZ   c                 8    U R                   R                  5         g N)r   stopr  s    rW   r   FastAPI.shutdown  s    rZ   c                     U R                   $ r  )r   r  s    rW   r[   FastAPI.app  s    yyrZ   re   excc                 "   #    [        SSS0S9$ 7f)Ni  rs   zRate limit exceeded.rv   ru   r   rU   re   r  s      rW   r   $FastAPI.rate_limit_exception_handler  s        67
 	
s   c                 :    SU R                   R                  5       0$ )Nznanosecond heartbeat)r   r   r  s    rW   r   FastAPI.root  s    &		(;(;(=>>rZ   c                 >   #    [        SSUR                  5       0S9$ 7f)Nrt   rs   r  )r   rs   r  s      rW   r   FastAPI.quota_exception_handler  s%      .
 	
   c                 *   #    U R                  5       $ 7fr  )r   r  s    rW   r   FastAPI.heartbeat  s     yy{s   c                 >   #    U R                   R                  5       $ 7fr  )r   get_versionr  s    rW   r   FastAPI.version  s     yy$$&&r   c                 :    U R                   R                  SU0S9  g)zE
Set context about the request on any components that might need it.
re   )contextN)r   set_contextrU   re   s     rW   _set_request_contextFastAPI._set_request_context  s      	(()W1E(FrZ   auth_requestrm   actiontenantdatabase
collectionc                 f   #    [         R                  " U R                  /XX4U4Q76 I S h  vN $  N7fr  )r   run_syncsync_auth_requestrU   rm   r-  r.  r/  r0  s         rW   r,  FastAPI.auth_request  s>      ''""
 v<
 
 	
 
s   (1/1zFastAPI.sync_auth_requestc                    U R                   (       d  [        UUUS.5        gU R                   R                  [        U5      5      nU R                  (       d  g[        UUUS9nU R                  R                  XbU5        [        UUUS.5        g)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/  r0  N)r   rK   authenticate_or_raisedictr   r&   authorize_or_raise)rU   rm   r-  r.  r/  r0  user_identityauthz_resources           rW   r3  FastAPI.sync_auth_request  s    " ""*$ (", ++AA$w-P""&!
 	..}nU& $(	
 	rZ   zFastAPI.get_user_identityc                    ^ ^#    T R                   (       d  [        S[        [        /S9$ [	        [        [
        R                  " UU 4S j5      I S h  vN 5      $  N7f)N )user_idr.  	databasesc                  |   > [        [        TR                  5      R                  [	        T R
                  5      5      $ r  )r   r'   r   r8  r9  rm   )re   rU   s   rW   <lambda>+FastAPI.get_user_identity.<locals>.<lambda>!  s+    94;N;NOeefjkrkzkzf{|rZ   )r   r$   r*   r)   r   r   r2  r)  s   ``rW   r   FastAPI.get_user_identity  sV     
 "">>N=O  $$| 
 	
s   AAA
	AzFastAPI.create_databasec                    ^ ^#    S[         S[        S[        SS 4UU 4S jjn[        R                  " UUTR
                  TR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nr.  rm   raw_bodyrQ   c                   > [        [        [        R                  " U5      5      nTR	                  U[
        R                  U UR                  S 5        TR                  TS9  TR                  R                  UR                  U 5      $ )Nre   )r   r7   orjsonloadsr3  r%   CREATE_DATABASEr`   r*  r   r   )r.  rm   rG  dbre   rU   s       rW   process_create_database8FastAPI.create_database.<locals>.process_create_database+  sq      X0FGB ""++ %%g%699,,RWWf==rZ   limiterry   r?   bytesr   r2  rm   bodyr   rU   re   r.  rN  s   ``  rW   r   FastAPI.create_database%  sv     	>	>")	>5:	>	> 	>$   #OO,,. **
 	
 	
 !		
s$   AA1A-A1'A/(A1/A1zFastAPI.get_databasedatabase_namec           
        #    U R                  UR                  [        R                  UUS 5      I S h  vN   [	        [
        [        R                  " U R                  R                  UUU R                  S9I S h  vN 5      $  NO N
7fNrP  )r,  rm   r%   GET_DATABASEr   rE   r   r2  r   r   r   rU   re   rW  r.  s       rW   r   FastAPI.get_databaseE  s      OO$$
 	
 	
 $$		&&..	 
 	
	
s"   1BBAB:B
;	BBzFastAPI.delete_databasec                    #    U R                  UR                  [        R                  UUS 5        [        R
                  " U R                  R                  UUU R                  S9I S h  vN   g  N7frY  )	r,  rm   r%   DELETE_DATABASEr   r2  r   r   r   r[  s       rW   r   FastAPI.delete_database_  sd      	OO''	
   II%%**	
 	
 	
s   A&A0(A.)A0zFastAPI.create_tenantc                    ^ #    S[         S[        SS 4U 4S jjn[        R                  " UUUR	                  5       I S h  vN T R
                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c                   > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  UR                  S S 5        TR                  R                  UR                  5      $ r  )r   r8   rJ  rK  r3  rm   r%   CREATE_TENANTr`   r   r   )re   rG  r.  rU   s      rW   process_create_tenant4FastAPI.create_tenant.<locals>.process_create_tenant{  s`    #L&,,x2HIF "")) 99**6;;77rZ   rP  r   rS  r   r2  rT  r   rU   re   rc  s   `  rW   r   FastAPI.create_tenantv  s_     
	87 	8e 	8 	8   !,,. **	
 	
 	
 !	
"   <AA AAAAzFastAPI.get_tenantc           	        #    U R                  UR                  [        R                  US S 5      I S h  vN   [	        [
        [        R                  " U R                  R                  UU R                  S9I S h  vN 5      $  NN N
7frY  )r,  rm   r%   
GET_TENANTr   rF   r   r2  r   r   r   )rU   re   r.  s      rW   r   FastAPI.get_tenant  s      OO""
 	
 	
 $$		$$.. 
 	
	
s"   1BBAB9B
:	BBzFastAPI.list_databaseslimitoffsetc                 "  #    U R                  UR                  [        R                  US S 5      I S h  vN   [	        [
        [           [        R                  " U R                  R                  UUUU R                  S9I S h  vN 5      $  NW N
7frY  )r,  rm   r%   LIST_DATABASESr   r   rE   r   r2  r   r  r   )rU   re   r.  rl  rm  s        rW   r  FastAPI.list_databases  s      OO&&
 	
 	
 X$$		((.. 	
 		
	
"   1BBABB
	BBzFastAPI.list_collectionsc                   ^ ^#    S[         [           S[         [           S[        S[        S[        [           4
UU 4S jjn[        [        [           [        R                  " UUUUUT R                  S9I S h  vN 5      nU$  N
7f)Nrl  rm  r.  rW  rQ   c                    > TR                  TR                  [        R                  UUS 5        TR	                  TS9  [        SU05        TR                  R                  X#XS9$ )NrI  r.  )r.  r/  rl  rm  )r3  rm   r%   LIST_COLLECTIONSr*  rK   r   r  )rl  rm  r.  rW  re   rU   s       rW   process_list_collections:FastAPI.list_collections.<locals>.process_list_collections  sm     "",, %%g%6*Hf+=>99--U .  rZ   rP  )	r   intry   r   CollectionModelr   r   r2  r   )rU   re   r.  rW  rl  rm  ru  api_collection_modelss   ``      rW   r  FastAPI.list_collections  s     	C=	*23-	AD	UX	o&	 	& !%_%$$(.. 
!
 %$s   A4B8B
9BzFastAPI.count_collectionsc           
      ,  #    U R                  UR                  [        R                  UUS 5      I S h  vN   [	        SU05        [        [        [        R                  " U R                  R                  UUU R                  S9I S h  vN 5      $  N\ N
7fNr.  rP  )r,  rm   r%   COUNT_COLLECTIONSrK   r   rw  r   r2  r   r  r   )rU   re   r.  rW  s       rW   r  FastAPI.count_collections  s      OO))
 	
 	
 	'&'9:$$		++..	 
 	
	
s"   1BBABB
	BBzFastAPI.create_collectionc                   ^ #    S[         S[        S[        S[        S[        4
U 4S jjn[	        [        [
        R                  " UUUUUR                  5       I S h  vN T R                  S9I S h  vN 5      nU$  N N7f)Nre   r.  r/  rG  rQ   c           	      
  > [        [        [        R                  " U5      5      nUR                  (       d*  UR
                  (       a  [        UR
                  5      nOS nO[        UR                  5      nTR                  U R                  [        R                  UUUR                  5        TR                  U S9  [        SU05        TR                  R!                  UR                  UUR
                  UR"                  UUS9$ )NrI  r.  r`   configurationmetadataget_or_creater.  r/  )r   r<   rJ  rK  r  r  r   r   r3  rm   r%   CREATE_COLLECTIONr`   r*  rK   r   r  r  )re   r.  r/  rG  creater  rU   s         rW   process_create_collection<FastAPI.create_collection.<locals>.process_create_collection  s     $$4fll86LMF''??W"OO " %)M N((!
 ""-- %%g%6*Hf+=>99..[[+$22! /  rZ   rP  	r   ry   rS  rx  r   r   r2  rT  r   )rU   re   r.  rW  r  api_collection_models   `     rW   r  FastAPI.create_collection
  s     &	&	&)&	58&	DI&	&	P  $$$)lln$.. 
 
 $#	 %$   AA?A;A?0A=
1A?=A?zFastAPI.get_collectioncollection_namec                 2  #    U R                  UR                  [        R                  UUU5      I S h  vN   [	        SU05        [        [        [        R                  " U R                  R                  UUUU R                  S9I S h  vN 5      nU$  N_ N7fr|  )r,  rm   r%   GET_COLLECTIONrK   r   rx  r   r2  r   r  r   )rU   re   r.  rW  r  r  s         rW   r  FastAPI.get_collectionF  s      OO&&
 	
 	
 	'&'9:#$$		((.. 	 
 $#)	
s"   1BBABB
	BBzFastAPI.update_collectioncollection_idc                    ^ ^^#    S[         S[        S[        SS 4UU U4S jjn[        R                  " UUUUR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nre   r  rG  rQ   c           	        > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTU5        UR                  (       d  S O[        UR                  5      nTR                  U S9  [        ST05        TR                  R                  [        U5      UR                  UR                   UTTS9$ )NrI  r.  )idnew_namenew_metadatanew_configurationr.  r/  )r   r=   rJ  rK  r3  rm   r%   UPDATE_COLLECTIONr  r   r*  rK   r   _modify_uuidr  r  )re   r  rG  r  r  rW  rU   r.  s        rW   process_update_collection<FastAPI.update_collection.<locals>.process_update_collectionm  s     $$4fll86LMF""-- // C,,  %%g%6*Hf+=>99$$'#00"/& %  rZ   rP  r   ry   rS  r   r2  rT  r   )rU   r.  rW  r  re   r  s   ```   rW   r  FastAPI.update_collectione  sr     		-0	<A		 	<   %,,. **
 	
 	
 !		
s$   AA)
A%A)A' A)'A)zFastAPI.delete_collectionc                   #    U R                  UR                  [        R                  UUU5      I S h  vN   [	        SU05        [
        R                  " U R                  R                  UUUU R                  S9I S h  vN   g  NP N7fr|  )
r,  rm   r%   DELETE_COLLECTIONrK   r   r2  r   r  r   )rU   re   r  r.  rW  s        rW   r  FastAPI.delete_collection  s      OO))
 	
 	
 	'&'9:  II''**
 	
 	
	
	
s"   1BBA
B>B?BBzFastAPI.addc           
      :  ^ ^^^#     S[         S[        S[        4UUU U4S jjn[        [        [        R
                  " UUUR                  5       I S h  vN T R                  S9I S h  vN 5      $  N N
! [         a  n[        S[        U5      S9eS nAff = f7f)Nre   rG  rQ   c                   > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTT5        TR                  U S9  [        ST05        TR                  R                  [        T5      UR                  [        [        UR                   (       a  [#        UR                   5      OS 5      UR$                  UR&                  UR(                  TTS9$ NrI  r.  )r  ids
embeddings	metadatas	documentsurisr.  r/  )r   r6   rJ  rK  r3  rm   r%   ADDr*  rK   r   _addr  r  r   r"   r  r#   r  r  r  )re   rG  r  r  rW  rU   r.  s      rW   process_add FastAPI.add.<locals>.process_add  s    $\6<<3IJ&&OOOO!! ))'):.&/AByy~~"'"6#">> 6cnnE!	  "mm!mm!* &  rZ   rP  rw   rv   detailr   rS  r   r   r   r2  rT  r   r/   r   ry   )rU   re   r.  rW  r  r  r   s   ` ```  rW   r  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                    ^ ^^^#    S[         S[        S[        4UUU U4S jjn[        R                  " UUUR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c                   > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTT5        TR                  U S9  [        ST05        TR                  R                  [        T5      UR                  UR                  (       a  [        UR                  5      OS UR                   UR"                  UR$                  TTS9$ r  )r   r>   rJ  rK  r3  rm   r%   UPDATEr*  rK   r   _updater  r  r  r#   r  r  r  )re   rG  r  r  rW  rU   r.  s      rW   process_update&FastAPI.update.<locals>.process_update  s    #OV\\(5KLF """" %%g%6*Hf+=>99$$#M2JJ$$ 99J9JK ** **[[& %  rZ   rP  r   rS  r   r   r2  rT  r   )rU   re   r.  rW  r  r  s   ` ``` rW   r  FastAPI.update  sd     	G 	u 	 	 	6   ,,. **	
 	
 	
 !	
$   AA(	A$
A(A&A(&A(zFastAPI.upsertc                    ^ ^^^#    S[         S[        S[        4UUU U4S jjn[        R                  " UUUR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c                   > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTT5        TR                  U S9  [        ST05        TR                  R                  [        T5      UR                  [        [        UR                   (       a  [#        UR                   5      OS 5      UR$                  UR&                  UR(                  TTS9$ r  )r   r6   rJ  rK  r3  rm   r%   UPSERTr*  rK   r   _upsertr  r  r   r"   r  r#   r  r  r  )re   rG  r  r  rW  rU   r.  s      rW   process_upsert&FastAPI.upsert.<locals>.process_upsert  s    #L&,,x2HIF """" %%g%6*Hf+=>99$$#M2JJ(( 2&2C2CD	 !** **[[& %  rZ   rP  r  )rU   re   r.  rW  r  r  s   ` ``` rW   r  FastAPI.upsert  sd     	G 	u 	 	 	<   ,,. **	
 	
 	
 !	
r  zFastAPI.getc           
      r  ^ ^^^#    S[         S[        S[        4UUU U4S jjn[        [        [        R
                  " UUUR                  5       I S h  vN T R                  S9I S h  vN 5      nUS   b5  US    Vs/ s H!  n[        [        U5      R                  5       PM#     snUS'   U$  NZ NGs  snf 7f)Nre   rG  rQ   c                   > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTT5        TR                  U S9  [        ST05        TR                  R                  [        T5      UR                  UR                  UR                  UR                   UR"                  UR$                  TTS9	$ )NrI  r.  )	r  r  whererl  rm  where_documentincluder.  r/  )r   r:   rJ  rK  r3  rm   r%   r   r*  rK   r   _getr  r  r  rl  rm  r  r  )re   rG  r   r  rW  rU   r.  s      rW   process_get FastAPI.get.<locals>.process_getB  s     v||H/EFC"" %%g%6*Hf+=>99>>#M2GGiiiizz"11& " 
 
rZ   rP  r  
r   rS  r    r   r   r2  rT  r   r   tolist)rU   r  r.  rW  re   r  
get_result	embeddings   ````    rW   r   FastAPI.get9  s     	 	E 	i 	 	0 $$lln$..	 

 l#/ ",L!9(!9I Y	*113!9(J|$
  %(s6   AB7B.B7(B0
)B7>(B2&	B70B72B7zFastAPI.deletec                    ^ ^^^#    S[         S[        SS 4UUU U4S jjn[        R                  " UUUR	                  5       I S h  vN T R
                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c           	      h  > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTT5        TR                  U S9  [        ST05        TR                  R                  [        T5      UR                  UR                  UR                  TTS9$ )NrI  r.  )r  r  r  r  r.  r/  )r   r9   rJ  rK  r3  rm   r%   r   r*  rK   r   _deleter  r  r  r  )re   rG  r	  r  rW  rU   r.  s      rW   process_delete&FastAPI.delete.<locals>.process_deleteu  s    #OV\\(5KLF"""" %%g%6*Hf+=>99$$#M2JJll%44& %  rZ   rP  re  )rU   r  r.  rW  re   r  s   ````  rW   r	  FastAPI.deletel  sd     	G 	u 	 	 	*   ,,. **	
 	
 	
 !	
s#   ?A$A A$A"A$"A$zFastAPI.countc                 @  #    U R                  UR                  [        R                  UUU5      I S h  vN   [	        SU05        [        [        [        R                  " U R                  R                  [        U5      UUU R                  S9I S h  vN 5      $  Nf N
7fr|  )r,  rm   r%   COUNTrK   r   rw  r   r2  r   _countr  r   )rU   re   r.  rW  r  s        rW   r
  FastAPI.count  s      OO
 	
 	
 	'&'9:$$		  m$.. 	
 		
	
s"   1BBABB
	BBzFastAPI.resetc                   #    U R                  UR                  [        R                  S S S 5      I S h  vN   [	        [
        [        R                  " U R                  R                  U R                  S9I S h  vN 5      $  NM N
7frY  )r,  rm   r%   RESETr   r   r   r2  r   r   r   r)  s     rW   r   FastAPI.reset  s{      OO
 	
 	
 $$		.. 
 	
	
"   1BBAB8B
9	BBzFastAPI.get_nearest_neighborsc                   ^ ^^^#    [        S[        R                  5      S[        S[        S[
        4UUU U4S jj5       n[        [
        [        R                  " UUUR                  5       I S h  vN T R                  S9I S h  vN 5      nUS   bH  US    VVs/ s H2  nU Vs/ s H!  n[        [        U5      R                  5       PM#     snPM4     snnUS'   U$  Nm NZs  snf s  snnf 7f)Nzinternal.get_nearest_neighborsre   rG  rQ   c                   > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  TTT5        TR                  U S9  [        ST05        TR                  R                  [        T5      [        [        UR                  (       a  [!        UR                  5      OS 5      UR"                  UR$                  UR&                  UR(                  TTS9$ )NrI  r.  )r  query_embeddings	n_resultsr  r  r  r.  r/  )r   r;   rJ  rK  r3  rm   r%   QUERYr*  rK   r   _queryr  r   r"   r  r#   r  r  r  r  )re   rG  queryr  rW  rU   r.  s      rW   process_query4FastAPI.get_nearest_neighbors.<locals>.process_query  s     #>6<<3IJE ""!! %%g%6*Hf+=>99###M2!%-- 2%2H2HI	"  //kk$33& $  rZ   rP  r  )rL   rJ   	OPERATIONr   rS  r!   r   r   r2  rT  r   r   r  )	rU   r.  rW  r  re   r  nnresultresultr  s	   ````     rW   r  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-0C1C-C 
C-
C'&(C"C'
C- C-"C''C-c                    ^ #    S[         [        [        4   4U 4S jjn[        [         [        [        4   [        R
                  " UT R                  S9I S h  vN 5      $  N7f)NrQ   c                  <   > ST R                   R                  5       0$ )Nmax_batch_size)r   get_max_batch_sizer  s   rW   process_pre_flight_checks<FastAPI.pre_flight_checks.<locals>.process_pre_flight_checks  s     $))">">"@ rZ   rP  )r   ry   r   r   r   r2  r   )rU   r  s   ` rW   r   FastAPI.pre_flight_checks  sX     	4S> 	
 cN$$).. 
 	
s   AA#A!
	A#c           
      \   U R                   R                  SU R                  S/S9  U R                   R                  SU R                  S/S9  U R                   R                  SU R                  S/S9  U R                   R                  SU R
                  S/S9  U R                   R                  SU R                  S/S9  U R                   R                  S	U R                  S/S U R                  [        5      S
9  U R                   R                  SU R                  S/S S9  U R                   R                  SU R                  S/S U R                  [        5      S
9  U R                   R                  SU R                  S/S S9  U R                   R                  SU R                  S/S S9  U R                   R                  SU R                  S/S S9  U R                   R                  SU R                   S/S U R                  ["        5      S
9  U R                   R                  SU R$                  S/[&        R(                  S U R                  [*        5      S9  U R                   R                  SU R,                  S/S U R                  [.        5      S
9  U R                   R                  SU R0                  S/S U R                  [*        5      S
9  U R                   R                  SU R2                  S/S U R                  [4        5      S
9  U R                   R                  SU R6                  S/S U R                  [8        5      S
9  U R                   R                  SU R:                  S/S S9  U R                   R                  SU R<                  S/S U R                  [>        5      S
9  U R                   R                  SU R@                  S/S S9  U R                   R                  SU RB                  S/S U R                  [D        5      S
9  U R                   R                  SU RF                  S/S S9  g )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   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	 	" 	
rZ   /auth_and_get_tenant_and_database_for_request_v1c                 h   #    [         R                  " U R                  UUUUU5      I Sh  vN $  N7f)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   r2  1sync_auth_and_get_tenant_and_database_for_requestr4  s         rW   ,auth_and_get_tenant_and_database_for_request4FastAPI.auth_and_get_tenant_and_database_for_request  s<     6 ''BB
 
 	
 
s   )202c                    U R                   (       d  [        UUUS.5        X44$ U R                   R                  [        U5      5      nU R                   R	                  U5      u  nnU(       a
  U[
        :X  a	  U(       a  UnU(       a
  U[        :X  a	  U(       a  UnU R                  (       d  X44$ [        UUUS9n	U R                  R                  XbU	5        [        UUUS.5        X44$ )Nr7  )
r   rK   r8  r9  'singleton_tenant_database_if_applicabler*   r)   r   r&   r:  )
rU   rm   r-  r.  r/  r0  r;  
new_tenantnew_databaser<  s
             rW   r  9FastAPI.sync_auth_and_get_tenant_and_database_for_request  s     ""*$ (", %%++AA$w-P
 GGV	
 &N2
FH(88l#H""%%&!
 	..}nU& $(	
 !!rZ   zFastAPI.create_database_v1c                    ^ #    S[         S[        S[        SS 4U 4S jjn[        R                  " UUUR
                  UR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nr.  rm   rG  rQ   c                 $  > [        [        [        R                  " U5      5      nTR	                  U[
        R                  U UR                  S 5      u  nnU(       a  Un U(       a  XSl        TR                  R                  UR                  U 5      $ r  )
r   r7   rJ  rK  r  r%   rL  r`   r   r   )r.  rm   rG  rM  maybe_tenantmaybe_databaserU   s         rW   rN  ;FastAPI.create_database_v1.<locals>.process_create_database  s{      X0FGB FF++	 %(99,,RWWf==rZ   rP  rR  rU  s   `   rW   r  FastAPI.create_database_v1  sq     	>	>")	>5:	>	>.   #OO,,. **
 	
 	
 !		
s$   AA/A+A/%A-&A/-A/zFastAPI.get_database_v1c           
      <  #    U R                  UR                  [        R                  UUS 5      I S h  vN u  nnU(       a  UnU(       a  Un[	        [
        [        R                  " U R                  R                  UUU R                  S9I S h  vN 5      $  Nd N
7frY  )r  rm   r%   rZ  r   rE   r   r2  r   r   r   )rU   re   r/  r.  r  r  s         rW   r  FastAPI.get_database_v1  s      CCOO$$
 
	
 !F%H$$		&&..	 
 	

"   1BBABB
	BBzFastAPI.create_tenant_v1c                    ^ #    S[         S[        SS 4U 4S jjn[        R                  " UUUR	                  5       I S h  vN T R
                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c                 "  > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  UR                  S S 5      u  p4U(       a  X2l        TR                  R                  UR                  5      $ r  )r   r8   rJ  rK  r  rm   r%   rb  r`   r   r   )re   rG  r.  r  _rU   s        rW   rc  7FastAPI.create_tenant_v1.<locals>.process_create_tenant7  sl    #L&,,x2HIF #TT))OL *99**6;;77rZ   rP  re  rf  s   `  rW   r  FastAPI.create_tenant_v11  s_     	87 	8e 	8 	8    !,,. **	
 	
 	
 !	
rh  zFastAPI.get_tenant_v1c           	      &  #    U R                  UR                  [        R                  US S 5      I S h  vN u  p4U(       a  Un[	        [
        [        R                  " U R                  R                  UU R                  S9I S h  vN 5      $  NY N
7frY  )r  rm   r%   rj  r   rF   r   r2  r   r   r   )rU   re   r.  r  r  s        rW   r  FastAPI.get_tenant_v1N  s      !% Q QOO""!
 
 !F$$		$$.. 
 	

s"   1BBABB
	BBzFastAPI.list_collections_v1c                 R  #    U R                  UR                  [        R                  UUS 5      I S h  vN u  nnU(       a  UnU(       a  Un[	        [
        [           [        R                  " U R                  R                  UUUUU R                  S9I S h  vN 5      nU$  No N7frY  )r  rm   r%   rt  r   r   rx  r   r2  r   r  r   )	rU   re   rl  rm  r.  r/  r  r  ry  s	            rW   r  FastAPI.list_collections_v1h  s      CCOO((
 
	
 !F%H $_%$$		**.. 
!
 %$1
s"   1B'B#A$B'B%
B'%B'zFastAPI.count_collections_v1c           
      <  #    U R                  UR                  [        R                  UUS 5      I S h  vN u  nnU(       a  UnU(       a  Un[	        [
        [        R                  " U R                  R                  UUU R                  S9I S h  vN 5      $  Nd N
7frY  )r  rm   r%   r}  r   rw  r   r2  r   r  r   )rU   re   r.  r/  r  r  s         rW   r  FastAPI.count_collections_v1  s      CCOO))
 
	
 !F%H$$		++..	 
 	

r  zFastAPI.create_collection_v1c                   ^ #    S[         S[        S[        S[        S[        4
U 4S jjn[	        [        [
        R                  " UUUUUR                  5       I S h  vN T R                  S9I S h  vN 5      nU$  N N7f)Nre   r.  r/  rG  rQ   c           	        > [        [        [        R                  " U5      5      nUR                  (       d
  [        5       O[        UR                  5      nTR                  U R                  [        R                  UUUR                  5      u  nnU(       a  UnU(       a  UnTR                  R                  UR                  UUR                  UR                  UUS9$ )Nr  )r   r<   rJ  rK  r  r   r   r  rm   r%   r  r`   r   r  r  r  )	re   r.  r/  rG  r  r  r  r  rU   s	           rW   r  ?FastAPI.create_collection_v1.<locals>.process_create_collection  s     $$4fll86LMF ++ ./C((  FF--	 %)99..[[+$22! /  rZ   rP  r  )rU   re   r.  r/  r  r  s   `     rW   r  FastAPI.create_collection_v1  s     #	#	&)#	58#	DI#	#	J  $$$)lln$.. 
 
 $#	 %r  zFastAPI.get_collection_v1c                    ^ ^^^#    T R                  UR                  [        R                  TTT5      I S h  vN u  nnU(       a  UmU(       a  UmUUU U4S jnU" 5       I S h  vN $  N1 N7f)Nc                     >#    [        [        [        R                  " TR                  R
                  TTTTR                  S9I S h  vN 5      n U $  N
7frY  )r   rx  r   r2  r   r  r   )r  r  r/  rU   r.  s    rW   inner(FastAPI.get_collection_v1.<locals>.inner  sS     #'((II,,# 22 	$  ('s   AAA
A)r  rm   r%   r  )rU   re   r  r.  r/  r  r  r(  s   ` ```   rW   r   FastAPI.get_collection_v1  sq      CCOO&&
 
	
 !F%H	( 	( W}3
2 s!   1A-A),A-$A+%A-+A-zFastAPI.update_collection_v1c                    ^ #    S[         S[        S[        SS 4U 4S jjn[        R                  " UUUUR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nre   r  rG  rQ   c                 h  > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S U5        UR                  (       d  S O[        UR                  5      nTR                  R                  [        U5      UR                  UR                  US9$ )N)r  r  r  r  )r   r=   rJ  rK  r  rm   r%   r  r  r   r   r  r  r  r  )re   r  rG  r  r  rU   s        rW   r  ?FastAPI.update_collection_v1.<locals>.process_update_collection  s     $$4fll86LMFBB-- // C,,  99$$'#00"/	 %  rZ   rP  r  )rU   r  re   r  s   `   rW   r  FastAPI.update_collection_v1  sm     		-0	<A		4   %,,. **
 	
 	
 !		
s$   AA%A!A%A#A%#A%zFastAPI.delete_collection_v1c                 $  #    U R                  UR                  [        R                  UUU5      I S h  vN u  nnU(       a  UnU(       a  Un[        R
                  " U R                  R                  UUUU R                  S9I S h  vN   g  NX N7frY  )	r  rm   r%   r  r   r2  r   r  r   )rU   re   r  r.  r/  r  r  s          rW   r  FastAPI.delete_collection_v1:  s      CCOO))
 
	
 !F%H  II''**
 	
 	

	
s"   1BBABBBBzFastAPI.add_v1c           
      2  ^ ^#     S[         S[        S[        4UU 4S jjn[        [        [        R
                  " UUUR                  5       I S h  vN T R                  S9I S h  vN 5      $  N N
! [         a  n[        S[        U5      S9eS nAff = f7f)Nre   rG  rQ   c           
        > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S T5        TR                  R                  [        T5      UR                  [        [        UR                  (       a  [        UR                  5      OS 5      UR                   UR"                  UR$                  S9$ N)r  r  r  r  r  r  )r   r6   rJ  rK  r  rm   r%   r  r   r  r  r  r   r"   r  r#   r  r  r  )re   rG  r  r  rU   s      rW   r  #FastAPI.add_v1.<locals>.process_addc  s    $\6<<3IJFFOOOO! yy~~"'"6#">> 6cnnE!	  "mm!mm &  rZ   rP  rw   r  r  )rU   re   r  r  r   s   ` `  rW   r  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                    ^ ^#    S[         S[        S[        4UU 4S jjn[        R                  " UUUR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c           	        > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S T5        TR                  R                  [        T5      UR                  UR                  (       a  [        UR                  5      OS UR                  UR                  UR                   S9$ r3  )r   r>   rJ  rK  r  rm   r%   r  r   r  r  r  r  r#   r  r  r  )re   rG  r  r  rU   s      rW   r  )FastAPI.update_v1.<locals>.process_update  s    #OV\\(5KLF BB"" 99$$#M2JJ$$ 99J9JK ** **[[ % 	 	rZ   rP  r  )rU   re   r  r  s   ` ` rW   r  FastAPI.update_v1  sd     	G 	u 	 	 	.   ,,. **	
 	
 	
 !	
$   AA$A A$A"A$"A$zFastAPI.upsert_v1c                    ^ ^#    S[         S[        S[        4UU 4S jjn[        R                  " UUUR                  5       I S h  vN T R                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c           
        > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S T5        TR                  R                  [        T5      UR                  [        [        UR                  (       a  [        UR                  5      OS 5      UR                   UR"                  UR$                  S9$ r3  )r   r6   rJ  rK  r  rm   r%   r  r   r  r  r  r   r"   r  r#   r  r  r  )re   rG  r  r  rU   s      rW   r  )FastAPI.upsert_v1.<locals>.process_upsert  s    #L&,,x2HIF BB"" 99$$#M2JJ(( 2&2C2CD	 !** **[[ %  rZ   rP  r  )rU   re   r  r  s   ` ` rW   r  FastAPI.upsert_v1  sd     	G 	u 	 	 	4   ,,. **	
 	
 	
 !	
r:  zFastAPI.get_v1c           
      j  ^ ^#    S[         S[        S[        4UU 4S jjn[        [        [        R
                  " UUUR                  5       I S h  vN T R                  S9I S h  vN 5      nUS   b5  US    Vs/ s H!  n[        [        U5      R                  5       PM#     snUS'   U$  NZ NGs  snf 7f)Nre   rG  rQ   c           
      n  > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S T5        TR                  R                  [        T5      UR                  UR                  UR                  UR                  UR                  UR                   S9$ )N)r  r  r  rl  rm  r  r  )r   r:   rJ  rK  r  rm   r%   r   r   r  r  r  r  rl  rm  r  r  )re   rG  r   r  rU   s      rW   r  #FastAPI.get_v1.<locals>.process_get  s     v||H/EFCBB 99>>#M2GGiiiizz"11 "  rZ   rP  r  r  )rU   r  re   r  r  r  s   ``    rW   r  FastAPI.get_v1  s     	 	E 	i 	 	( $$lln$..	 

 l#/ ",L!9(!9I Y	*113!9(J|$
  %(s6   AB3B*B3$B,
%B3:(B."	B3,B3.B3zFastAPI.delete_v1c                    ^ ^#    S[         S[        SS 4UU 4S jjn[        R                  " UUUR	                  5       I S h  vN T R
                  S9I S h  vN   g  N N7f)Nre   rG  rQ   c                 ,  > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S T5        TR                  R                  [        T5      UR                  UR                  UR                  S9$ )N)r  r  r  r  )r   r9   rJ  rK  r  rm   r%   r   r   r  r  r  r  r  )re   rG  r	  r  rU   s      rW   r  )FastAPI.delete_v1.<locals>.process_delete  s|    #OV\\(5KLFBB"" 99$$#M2JJll%44	 %  rZ   rP  re  )rU   r  re   r  s   ``  rW   r  FastAPI.delete_v1   sd     	G 	u 	 	 	"   ,,. **	
 	
 	
 !	
s#   =A AA AA A zFastAPI.count_v1c           	      "  #    U R                  UR                  [        R                  S S U5      I S h  vN   [	        [
        [        R                  " U R                  R                  [        U5      U R                  S9I S h  vN 5      $  NW N
7frY  )r  rm   r%   r  r   rw  r   r2  r   r  r  r   )rU   re   r  s      rW   r  FastAPI.count_v1  s      ??OO
 	
 	
 $$		  m$.. 
 	
	
rq  zFastAPI.reset_v1c                   #    U R                  UR                  [        R                  S S S 5      I S h  vN   [	        [
        [        R                  " U R                  R                  U R                  S9I S h  vN 5      $  NM N
7frY  )r  rm   r%   r  r   r   r   r2  r   r   r   r)  s     rW   reset_v1FastAPI.reset_v17  s{      ??OO
 	
 	
 $$		.. 
 	
	
r  z FastAPI.get_nearest_neighbors_v1c                   ^ ^#    S[         S[        S[        4UU 4S jjn[        [        [        R
                  " UUUR                  5       I S h  vN T R                  S9I S h  vN 5      nUS   bH  US    VVs/ s H2  nU Vs/ s H!  n[        [        U5      R                  5       PM#     snPM4     snnUS'   U$  Nm NZs  snf s  snnf 7f)Nre   rG  rQ   c           	        > [        [        [        R                  " U5      5      nTR	                  U R
                  [        R                  S S T5        TR                  R                  [        T5      [        [        UR                  (       a  [        UR                  5      OS 5      UR                  UR                   UR"                  UR$                  S9$ )N)r  r  r  r  r  r  )r   r;   rJ  rK  r  rm   r%   r  r   r  r  r   r"   r  r#   r  r  r  r  )re   rG  r  r  rU   s      rW   r  7FastAPI.get_nearest_neighbors_v1.<locals>.process_queryV  s    ">6<<3IJE BB!! 99###M2!%-- 2%2H2HI	"  //kk$33 $  rZ   rP  r  )
r   rS  r!   r   r   r2  rT  r   r   r  )rU   r  re   r  r  r  r  s   ``     rW   r   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B=C$B?
%C;
C(C-C4
C?CCC)r   r   rS   r   r   r   r   r   r   r   r   )rQ   N)NN)]r   r   r   r   r+   r   r   ry   r   r   r	   r   r   r   r   r   r   r[   r   r1   r   r   rw  r   r2   r   r   r   r*  rL   rJ   r  rT   r?   r%   r   r,  r3  r$   r   r   rE   r   r   r   rF   r   r   r  rx  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  rJ  r  r   r   rZ   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 // / 
	/ /rZ   r   )xtypingr   r   r   r   r   r   r	   r
   r   r   rJ  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   r  opentelemetryrC   (chromadb.telemetry.opentelemetry.fastapirD   chromadb.typesrE   rF   chromadb.telemetry.productrG   rH    chromadb.telemetry.opentelemetryrI   rJ   rK   rL   rM   rx  	getLoggerr   r|   rT   rd   ro   r   r   r   r   	APIRouterr   r   rZ   rW   <module>ro     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rZ   