
    3ii                        S SK r S SKrS SKJrJrJrJrJrJr  S SKJ	r	  S SK
Jr  S SKrS SK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  S S
KJ r   S SK!J"r"  S SK#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4  S SK#J5r5J6r6J7r7J8r8  S SK9J:r:  S SK9J;r;  S SK<J=r=J>r>J?r?J@r@  S SKAJBrBJCrCJDrD  S SKEJFrF  \R                  " \H5      rI " S S\\ 5      rJg)    N)AnyDictOptionalcastTupleList)Sequence)UUID)override)CreateCollectionConfigurationUpdateCollectionConfiguration'update_collection_configuration_to_json'create_collection_configuration_to_json)__version__)BaseHTTPClient)DatabaseTenant
Collection)	ServerAPI)Search)	Documents
EmbeddingsIDsIncludeSchema	MetadatasURIsWhereWhereDocument	GetResultQueryResultSearchResultCollectionMetadatavalidate_batchconvert_np_embeddings_to_listIncludeMetadataDocuments!IncludeMetadataDocumentsDistances)"IncludeMetadataDocumentsEmbeddings%optional_embeddings_to_base64_stringsserialize_metadatadeserialize_metadata)UserIdentity)ClientAuthProvider)DEFAULT_DATABASEDEFAULT_TENANTSettingsSystem)OpenTelemetryClientOpenTelemetryGranularitytrace_method)ProductTelemetryClientc                     ^  \ rS rSrS\4U 4S jjrS\S\S\\\4   S\4S jr	\
" S	\R                  5      \S\4S
 j5       5       r\
" S\R                  5      \\4S\S\SS4S jj5       5       r\
" S\R                  5      \\4S\S\S\4S jj5       5       r\
" S\R                  5      \\4S\S\SS4S jj5       5       r\
" S\R                  5      \SS\4S\\   S\\   S\S\\   4S jj5       5       r\
" S\R                  5      \S\SS4S j5       5       r\
" S\R                  5      \S\S\4S j5       5       r\
" S\R                  5      \S\4S j5       5       r\
" S\R                  5      \SS\\4S\\   S\\   S\S\S\\   4
S  jj5       5       r\
" S!\R                  5      \\\4S\S\S\4S" jj5       5       r \
" S#\R                  5      \SSSS$\\4S\S%\\!   S&\\"   S'\\#   S(\$S\S\S\4S) jj5       5       r%\
" S*\R                  5      \\\4S\S\S\S\4S+ jj5       5       r&\
" S,\R                  5      \SSS\\4S\S%\\!   S&\\"   S'\\#   S\S\S\4S- jj5       5       r'\
" S.\R                  5      \SSS\\4S/\(S0\\   S1\\#   S2\\)   S\S\SS4S3 jj5       5       r*\
" S4\R                  5      \\\4S5\(S0\S\S\S\4
S6 jj5       5       r+\
" S7\R                  5      \\\4S5\(S8\,\-   S\S\S\.4
S9 jj5       5       r/\
" S:\R                  5      \\\4S\S\S\SS4S; jj5       5       r0\
" S<\R                  5      \\\4S5\(S\S\S\4S= jj5       5       r1\
" S>\R                  5      \S?\\4S5\(S@\S\S\S\24
SA jj5       5       r3\
" SB\R                  5      \SSSSS\4\\4S5\(SC\\5   SD\\6   S\\   S\\   SE\\7   SF\8S\S\S\24SG jj5       5       r9\
" SH\R                  5      \SSS\\4S5\(SC\\5   SD\\6   SE\\7   S\S\SS4SI jj5       5       r:\
" SJ\Rv                  5      SK\<\5\\=   \\>   \\?   \\@   4   SL\SS4SM j5       rA\
" SN\Rv                  5      \SSS\\4SC\5S5\(SO\=SP\\>   SQ\\?   SR\\@   S\S\S\$4SS jj5       5       rB\
" ST\Rv                  5      \SSSS\\4S5\(SC\5SO\\=   SP\\>   SQ\\?   SR\\@   S\S\S\$4SU jj5       5       rC\
" SV\Rv                  5      \SSS\\4S5\(SC\5SO\=SP\\>   SQ\\?   SR\\@   S\S\S\$4SW jj5       5       rD\
" SX\Rv                  5      \SS?SS\E\\4S5\(SY\=SC\\5   SZ\SD\\6   SE\\7   SF\8S\S\S\F4S[ jj5       5       rG\
" S\\Rv                  5      \S\$4S] j5       5       rH\
" S^\R                  5      \S\4S_ j5       5       rI\S\J4S` j5       rK\
" Sa\R                  5      S\4Sb j5       rL\
" Sc\R                  5      S\$4Sd j5       rM\
" Se\R                  5      \S\4Sf j5       5       rN\
" Sg\Rv                  5      \S\\4Sh\Si\Sj\(Sk\Sl\\\\4      S\S\S\O\$\4   4Sm jj5       5       rP\
" Sn\Rv                  5      \S$\\4Sh\Sj\(So\$S\S\S\$4Sp jj5       5       rQSqrRU =rS$ )rFastAPI?   systemc                 *  > [         TU ]  U5        UR                  R                  S5        UR                  R                  S5        U R                  [        5      U l        U R                  [        5      U l        UR                  U l        [        R                  [        UR                  R                  5      UR                  R                  UR                  R                  UR                  R                  S9U l        ["        R$                  " U R&                  S9n["        R(                  " S US9U l        UR                  R,                  =(       d    0 U l        SU R.                  S'   S[0        -   S	-   U R.                  S
'   U R                  R2                  b-  ["        R(                  " U R                  R2                  S9U l        U R.                  b/  U R*                  R4                  R7                  U R.                  5        UR                  R8                  (       au  U R                  [:        5      U l        U R<                  R?                  5       nURA                  5        H,  u  pEURC                  5       U R*                  R4                  U'   M.     g g )Nchroma_server_hostchroma_server_http_port)r;   r<   chroma_server_ssl_enableddefault_api_path)keepalive_expiry)timeoutlimitszapplication/jsonzContent-TypezChroma Python Client vz( (https://github.com/chroma-core/chroma)z
User-Agent)verify)"super__init__settingsrequirer2   _opentelemetry_clientr5   _product_telemetry_client	_settingsr7   resolve_urlstrr;   r<   r=   chroma_server_api_default_path_api_urlhttpxLimitskeepalive_secsClient_sessionchroma_server_headers_headerr   chroma_server_ssl_verifyheadersupdatechroma_client_auth_providerr-   _auth_providerauthenticateitemsget_secret_value)selfr9   rA   _headersheadervalue	__class__s         N/home/james-whalen/.local/lib/python3.13/site-packages/chromadb/api/fastapi.pyrD   FastAPI.__init__@   s     45 9:%)\\2E%F")-6L)M&++"6??#E#EF$*OO$K$K&,oo&O&O#__KK	 , 
 t/B/BCT&A<<B'9^$$89 	\" >>22>!LL0W0WXDM<<#MM!!((6??66"&,,/A"BD**779H!)!1050F0F0H%%f- "2 7    methodpathkwargsreturnc                    SU;   a6  [         R                  " UR                  S5      [         R                  S9nXCS'   [        R
                  R                  USS S S9nU R                  U-   nU R                  R                  " X40 [        [        U5      D6n[        R                  " U5        [         R                  " UR                  5      $ )Njson)optioncontent/)safeencodingerrors)orjsondumpspopOPT_SERIALIZE_NUMPYurllibparsequoterM   rR   requestr   r   r   _raise_chroma_errorloadstext)r]   re   rf   rg   dataescaped_pathurlresponses           rb   _make_requestFastAPI._make_requestf   s     V<<

6 26;U;UVD $9 ||))$S4PT)Umml*==((JS&8IJ**84||HMM**rd   zFastAPI.heartbeatc                 B    U R                  SS5      n[        US   5      $ )zNReturns the current server time in nanoseconds to check if the server is alivegetz
/heartbeatznanosecond heartbeat)r   intr]   	resp_jsons     rb   	heartbeatFastAPI.heartbeatv   s'     &&ul;	93455rd   zFastAPI.create_databasenametenantNc                 2    U R                  SSU S3SU0S9  g)zCreates a databasepost	/tenants/
/databasesr   rj   Nr   r]   r   r   s      rb   create_databaseFastAPI.create_database~   s-     	xz*$ 	 	
rd   zFastAPI.get_databasec                 Z    U R                  SSU SU 35      n[        US   US   US   S9$ )zReturns a databaser   r   /databases/idr   r   r   r   r   )r   r   )r]   r   r   r   s       rb   get_databaseFastAPI.get_database   sK     &&x{4&1
	 Yv%6y?R
 	
rd   zFastAPI.delete_databasec                 4    U R                  SSU SU 35        g)zDeletes a databasedeleter   r   Nr   r   s      rb   delete_databaseFastAPI.delete_database   s%     	x{4&1	
rd   zFastAPI.list_databaseslimitoffsetc           	          U R                  SSU S3[        R                  " UUS.5      S9nU Vs/ s H  n[        US   US   US   S	9PM     nnU$ s  snf )
zReturns a list of all databasesr   r   r   r   r   paramsr   r   r   r   )r   r   _clean_paramsr   )r]   r   r   r   json_databasesdb	databasess          rb   list_databasesFastAPI.list_databases   s     ++xz*!//"$ , 	
 %
$ 4r&z"X,G$ 	 
 	
s   AzFastAPI.create_tenantc                 *    U R                  SSSU0S9  g )Nr   z/tenantsr   r   r   )r]   r   s     rb   create_tenantFastAPI.create_tenant   s     	6:VTNCrd   zFastAPI.get_tenantc                 D    U R                  SSU-   5      n[        US   S9$ )Nr   r   r   )r   )r   r   )r]   r   r   s      rb   
get_tenantFastAPI.get_tenant   s+     &&ukD.@A	9V,--rd   zFastAPI.get_user_identityc                 8    [        S0 U R                  SS5      D6$ )Nr   z/auth/identity )r,   r   r]   s    rb   get_user_identityFastAPI.get_user_identity   s      Jd008HIJJrd   zFastAPI.list_collectionsdatabasec           	          U R                  SSU SU S3[        R                  " UUS.5      S9nU Vs/ s H  n[        R                  " U5      PM     nnU$ s  snf )z!Returns a list of all collectionsr   r   r   /collectionsr   r   )r   r   r   CollectionModel	from_json)r]   r   r   r   r   json_collectionsjson_collectioncollection_modelss           rb   list_collectionsFastAPI.list_collections   s      --x{8*LA!//"$ . 	
 $4
#3 %%o6#3 	 

 ! 
s    AzFastAPI.count_collectionsc                 T    U R                  SSU SU S35      n[        [        U5      $ )zReturns a count of collectionsr   r   r   z/collections_countr   r   r   )r]   r   r   r   s       rb   count_collectionsFastAPI.count_collections   s9     &&x{8*4FG
	 C##rd   zFastAPI.create_collectionFschemaconfigurationmetadataget_or_createc           
          U(       a  [        X45      OSnU(       a  UR                  5       OSn	U R                  SSU SU S3UUUU	US.S9n
[        R                  " U
5      nU$ )zCreates a collectionNr   r   r   r   )r   r   r   r   r   r   )r   serialize_to_jsonr   r   r   )r]   r   r   r   r   r   r   r   config_jsonserialized_schemar   models               rb   create_collectionFastAPI.create_collection   s      4ML 	
 ;AF446d&&x{8*LA$!,+!. ' 

	  )))4rd   zFastAPI.get_collectionc           	      h    U R                  SSU SU SU 35      n[        R                  " U5      nU$ )zReturns a collectionr   r   r   /collections/r   r   r   )r]   r   r   r   r   r   s         rb   get_collectionFastAPI.get_collection  sD     &&x{8*M$H
	
  )))4rd   z FastAPI.get_or_create_collectionc           
      ,    U R                  UUUUSUUS9$ )NT)r   r   r   r   r   r   r   )r   )r]   r   r   r   r   r   r   s          rb   get_or_create_collection FastAPI.get_or_create_collection-  s1     %%' & 
 	
rd   zFastAPI._modifyr   new_namenew_metadatanew_configurationc           	      d    U R                  SSU SU SU 3UUU(       a  [        U5      OSS.S9  g)zUpdates a collectionputr   r   r   N)r   r   r   r   )r   r   )r]   r   r   r   r   r   r   s          rb   _modifyFastAPI._modifyD  sS     	x{8*M"F ,$ % &M%&  	 	
rd   zFastAPI._forkcollection_idc           
      l    U R                  SSU SU SU S3SU0S9n[        R                  " U5      nU$ )zForks a collectionr   r   r   r   z/forkr   r   r   )r]   r   r   r   r   r   r   s          rb   _forkFastAPI._fork^  sT     &&x{8*M-PUVh' ' 
	
  )))4rd   zFastAPI._searchsearchesc           
      T   SU Vs/ s H  oUR                  5       PM     sn0nU R                  SSU SU SU S3US9nUR                  SS	5      nUb<  U V	V
s/ s H)  n	U	b!  U	 V
s/ s H  n
U
b  [        U
5      OS	PM     sn
OS	PM+     sn
n	US'   [	        U5      $ s  snf s  sn
f s  sn
n	f )
z&Performs hybrid search on a collectionr   r   r   r   r   z/searchr   	metadatasN)to_dictr   r   r+   r"   )r]   r   r   r   r   spayloadr   metadata_batchesr   r   s              rb   _searchFastAPI._searchp  s     X>X		X>?&&x{8*M-PWX ' 
	 %==d;' "2& "2I ( %.$- 7?6J(2PTT$-
  "2&Ik" I&&-  ?&s   BB$%B?	B$B$zFastAPI.delete_collectionc           	      :    U R                  SSU SU SU 35        g)zDeletes a collectionr   r   r   r   Nr   )r]   r   r   r   s       rb   delete_collectionFastAPI.delete_collection  s+     	x{8*M$H	
rd   zFastAPI._countc           
      Z    U R                  SSU SU SU S35      n[        [        U5      $ )z0Returns the number of embeddings in the databaser   r   r   r   z/countr   )r]   r   r   r   r   s        rb   _countFastAPI._count  s?     &&x{8*M-PVW
	 C##rd   zFastAPI._peek
   nc                 L    [        [        U R                  UUUU[        S95      $ )N)r   r   r   include)r   r    _getr(   )r]   r   r   r   r   s        rb   _peekFastAPI._peek  s4     II!:  	
 		
rd   zFastAPI._getidswherewhere_documentr   c
                 z   U V
s/ s H  oS:w  d  M
  U
PM     nn
U R                  SSU SU	 SU S3UUUUUUS.S9nUR                  S	S 5      nUb   U Vs/ s H  nUb  [        U5      OS PM     nn[        US
   UR                  SS 5      UUR                  SS 5      S UR                  SS 5      US9$ s  sn
f s  snf )Nr|   r   r   r   r   z/get)r   r   r   r   r   r   r   r   r   
embeddings	documentsuris)r   r   r   r   r|   r   included)r   r   r+   r    )r]   r   r   r   r   r   r   r   r   r   ifiltered_includer   r   r   s                  rb   r   FastAPI._get  s    (/>w!v+Aw>&&x{8*M-PTU "0+ ' 
	 MM+t4	  !* )H 3;2F$X.DP )  
 %  }}\48mmK6vt,
 	
/ ?$s   	B3B3B8zFastAPI._deletec           
      B    U R                  SSU SU SU S3UUUS.S9  g)	z$Deletes embeddings from the databaser   r   r   r   z/delete)r   r   r   r   Nr   )r]   r   r   r   r   r   r   s          rb   _deleteFastAPI._delete  sF     	x{8*M-PWX"0 	 	
 rd   zFastAPI._submit_batchbatchr~   c                     SnUS   b#  US    Vs/ s H  nUb  [        U5      OSPM     nnUS   U R                  5       (       a  [        US   5      OUS   UUS   US   S.nU R                  SX%S	9  gs  snf )
z/
Submits a batch of embeddings to the database
N   r            )r   r   r   r   r   r   r   )r*   supports_base64_encodingr)   r   )r]   r  r~   serialized_metadatasr   r|   s         rb   _submit_batchFastAPI._submit_batch  s       $8 !&a$ (H 190D"8,$N ( ! $ 8,,.. @aIq-q!H
 	632$s   A4zFastAPI._addr   r   r   r   c	                     UUUUU4n	[        U	SU R                  5       05        U R                  U	SU SU S[        U5       S35        g)zQ
Adds a batch of embeddings to the database
- pass in column oriented data lists
max_batch_sizer   r   r   z/addTr$   get_max_batch_sizer  rK   )
r]   r   r   r   r   r   r   r   r   r  s
             rb   _addFastAPI._add.  sj    $ 
 	u/1H1H1JKLx{8*M#mBTAUUYZ	
 rd   zFastAPI._updatec	                     UUb  UOSUUU4n	[        U	SU R                  5       05        U R                  U	SU SU S[        U5       S35        g)zT
Updates a batch of embeddings in the database
- pass in column oriented data lists
Nr  r   r   r   z/updateTr  
r]   r   r   r   r   r   r   r   r   r  s
             rb   _updateFastAPI._updateM  sq    $ $0Jd
 	u/1H1H1JKLx{8*M#mBTAUU\]	
 rd   zFastAPI._upsertc	                     UUUUU4n	[        U	SU R                  5       05        U R                  U	SU SU S[        U5       S35        g)zT
Upserts a batch of embeddings in the database
- pass in column oriented data lists
r  r   r   r   z/upsertTr  r  s
             rb   _upsertFastAPI._upsertl  sj    $ 
 	u/1H1H1JKLx{8*M#mBTAUU\]	
 rd   zFastAPI._queryquery_embeddings	n_resultsc
                    U V
s/ s H  oS:w  d  M
  U
PM     nn
 U R                  SSU SU	 SU S3UUb  [        U5      OS UUUUS.S9nUR                  S	S 5      nUb8  U VVs/ s H)  nUb!  U Vs/ s H  nUb  [        U5      OS PM     snOS PM+     nnn[	        US
   UR                  SS 5      UR                  SS 5      UUR                  SS 5      UR                  SS 5      S US9$ s  sn
f s  snf s  snnf )Nr|   r   r   r   r   z/query)r   r  r  r   r   r   r   r   r   	distancesr   r   r   )r   r  r   r   r   r   r|   r   )r   r%   r   r+   r!   )r]   r   r  r   r  r   r   r   r   r   r   r   r   r   r   r   s                   rb   _queryFastAPI._query  s[    (/>w!v+Aw>>&&x{8*M-PVW#/ %BBR$S&"0+	 ' 
	  %==d;' "2  "2I ( %.$- 7?6J(2PTT$-
  "2    % mmK6 }}\48&mmK6vt,	
 		
? ?, s"   	C+C+%C52C0	C50C5zFastAPI.resetc                 F    U R                  SS5      n[        [        U5      $ )zResets the databaser   z/resetr   r   boolr   s     rb   resetFastAPI.reset  s#     &&vx8	D)$$rd   zFastAPI.get_versionc                 F    U R                  SS5      n[        [        U5      $ )z!Returns the version of the serverr   z/version)r   r   rK   r   s     rb   get_versionFastAPI.get_version  s#     &&uj9	C##rd   c                     U R                   $ )z"Returns the settings of the client)rI   r   s    rb   get_settingsFastAPI.get_settings  s     ~~rd   zFastAPI.get_pre_flight_checksc                 d    U R                   c  U R                  SS5      nXl         U R                   $ )Nr   z/pre-flight-checks)pre_flight_checksr   r   s     rb   get_pre_flight_checksFastAPI.get_pre_flight_checks  s3    !!)**52FGI%."%%%rd   z FastAPI.supports_base64_encodingc                 f    U R                  5       n[        [        UR                  SS5      5      nU$ )Nr  F)r/  r   r$  r   )r]   r.  b64_encoding_enableds      rb   r   FastAPI.supports_base64_encoding  s:     !668##''(BEJ 
 $#rd   zFastAPI.get_max_batch_sizec                 f    U R                  5       n[        [        UR                  SS5      5      nU$ )Nr  )r/  r   r   r   )r]   r.  r  s      rb   r  FastAPI.get_max_batch_size  s4     !668c#4#8#89I2#NOrd   zFastAPI.create_task	task_nameoperator_nameinput_collection_idoutput_collection_namer   c           
          U R                  SSU SU SU S3UUUUS.S9n[        [        US   5      [        [        US	   5      4$ )
z*Register a recurring task on a collection.r   r   r   r   z/tasks/create)r7  r8  r:  r   r   successtask_id)r   r   r$  rK   )	r]   r7  r8  r9  r:  r   r   r   r   s	            rb   create_taskFastAPI.create_task  sm     &&x{8*MBUAVVcd&!.*@ 	 ' 	
	 D)I./c9Y;O1PPPrd   zFastAPI.remove_taskdelete_outputc           
      d    U R                  SSU SU SU S3UUS.S9n[        [        US   5      $ )	z+Delete a task and prevent any further runs.r   r   r   r   z/tasks/delete)r7  r@  r   r<  r#  )r]   r7  r9  r@  r   r   r   s          rb   remove_taskFastAPI.remove_task  sV     &&x{8*MBUAVVcd&!. ' 
	 D)I.//rd   )rM   rY   rT   rG   rH   rR   rI   r.  )T__name__
__module____qualname____firstlineno__r1   rD   rK   r   r   r   r4   r3   	OPERATIONr   r   r   r/   r   r   r   r   r   r	   r   r   r   r   r,   r   r.   r   r   r   r   r   r#   r$  r   r   r   r
   r   r   r   r   r   r"   r   r   r   r    r   r&   r   r   r   r   r   r  ALLr   r   r   r   r   r  r  r  r  r'   r!   r   r%  r(  r0   r+  r/  r  r  tupler>  rB  __static_attributes____classcell__)ra   s   @rb   r7   r7   ?   s   $Iv $IL+C +s +d38n +QT +  %'?'I'IJ63 6  K6 +-E-O-OP %



 

 
	

  Q

 (*B*L*LM %

 
 
	
  N
 +-E-O-OP %	
	
 	
 
		
  Q	
 *,D,N,NO  $ $$	}  	
 
(	  P. )+C+M+MND# D$ D  OD &(@(J(JK.s .v .  L. -/G/Q/QRK< K  SK ,.F.P.PQ  $ $$(!}! ! 	!
 ! 
/	"!  R!2 -/G/Q/QR*<L$$69$	$  S$ -/G/Q/QR $(AE15#$(     =>	
 -.    
  S@ *,D,N,NO %(	  	
 
  P *,D,N,N  $(AE15$(

  
   =>	

 -.
 
 
 

 
& #%=%G%GH #'59EI$(

 3-
 12	

 $$AB
 
 
 

  I
0 /#;#E#EF
 %(  	
  
  G  #%=%G%GH
 %('' v,' 	'
 ' 
'  I'B -/G/Q/QR %(	



 

 	


 


  S

 "$<$F$FG %(	$$ $ 	$
 
$  H$ /#;#E#EF $(

 
 	

 
 

  G
$ .":"D"DE "!%# $263$(,
,
 c],
 	,

 },
 ,
 !/,
 ,
 ,
 ,
 
,
  F,
\ #%=%G%GH "!%26$( c] 	
 !/   
  I* )+C+G+GH 3Z YYTN	
 3  3 
 3 I 3D .":">">? *.)-#$(  	
 I& I& tn   
  @: #%=%A%AB
 ,0)-)-#$(  Z(	
 I& I& tn   
  C: #%=%A%AB *.)-#$(  	
 I& I& tn   
  C: "$<$@$@A
 "!%26<$(5
5
 %5
 c]	5

 5
 5
 !/5
 5
 5
 5
 
5
  B5
n /#;#?#?@%t %  A%
 ')A)K)KL$S $  M$
 h   13K3U3UV&s & W& *,D,N,N$$ $$ .0H0R0RSC   T
 ')A)E)EF ,0$(QQ Q "	Q
 !$Q c3h(Q Q Q 
tSy	Q  GQ. ')A)E)EF
 $$(00 "0 	0
 0 0 
0  G0rd   r7   )Krq   loggingtypingr   r   r   r   r   r   r	   uuidr
   rN   urllib.parseru   	overridesr   %chromadb.api.collection_configurationr   r   r   r   chromadbr   chromadb.api.base_http_clientr   chromadb.typesr   r   r   r   chromadb.apir   "chromadb.execution.expression.planr   chromadb.api.typesr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   chromadb.authr,   r-   chromadb.configr.   r/   r0   r1    chromadb.telemetry.opentelemetryr2   r3   r4   chromadb.telemetry.productr5   	getLoggerrD  loggerr7   r   rd   rb   <module>r_     s      9 9       ! 8 J J " 5    (  ' O N 
 >			8	$\0ni \0rd   