
    LKiK#                     Z   S SK r S SKrS SKJrJrJrJrJr  S SK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  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"J#r#J$r$J%r%  S SK&J'r'  S\\   S\\   4S jr(S\\   S\\)   4S jr*\" S5      r+\" S5      r, " S S\5      r-g)    N)CallableDictListOptionalTypeVar)	overrides)	GetResultMetadataQueryResult)System)Executor)Scan)	CountPlanGetPlanKNNPlan)convert)QueryExecutorStub)DistributedSegmentManager)OtelInterceptor)RetryCallStateRetryingstop_after_attemptwait_exponential_jitterretry_if_exception)Spanmetadatareturnc                     U (       d  g0 nU R                  5        H!  u  p#UR                  S5      (       a  M  X1U'   M#     [        U5      S:X  a  gU$ )z[Remove any chroma-specific metadata keys that the client shouldn't see from a metadata map.Nzchroma:r   )items
startswithlen)r   resultkvs       i/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/chromadb/execution/executor/distributed.py_clean_metadatar&      sL    F ||I&&1I ! 6{aM    c                 :    U (       a  SU ;   a  [        U S   5      $ g)z-Retrieve the uri (if any) from a Metadata mapz
chroma:uriN)str)r   s    r%   _urir*   &   s!     LH,8L)**r'   IOc                   (  ^  \ rS rSr% \R
                  \S'   \\\	4   \S'   \
\S'   \\S'   \\S'   S\4U 4S jjrS	\\\/\4      S
\S\4S jr\S\S\4S j5       r\S\S\4S j5       r\S\S\4S j5       rS\S\\   4S jrS\S\	4S jrSrU =r $ )DistributedExecutor3   _mtx_grpc_stub_pool_manager_request_timeout_seconds_query_replication_factorsystemc                   > [         TU ]  U5        [        R                  " 5       U l        0 U l        U R                  [        5      U l        UR                  R                  S5      U l
        UR                  R                  S5      U l        g )N$chroma_query_request_timeout_secondschroma_query_replication_factor)super__init__	threadingLockr0   r1   requirer   r2   settingsr3   r4   )selfr5   	__class__s     r%   r:   DistributedExecutor.__init__:   sm     NN$	!%>?(.(?(?2)
% *0)@)@-*
&r'   funcsargsr   c                 >  ^ SnSmS[         SS4U4S jjn[        [        S5      [        SSS9S	[	        S
 5      US9 H:  nTb  TR                  5         SmU   X[        U5      -     " U5      sSSS5        s  $    [        S5      e! , (       d  f       O= fUS-  nMa  )z
Retry a list of functions in a round-robin fashion until one of them succeeds.

funcs: List of functions to retry
args: Arguments to pass to each function

r   N_r   c                 <   > SSK Jn  Ub  UR                  S5      mg g )Nr   )tracerzWaiting to retry RPC) chromadb.telemetry.opentelemetryrG   
start_span)rE   rG   
sleep_spans     r%   before_sleep<DistributedExecutor._round_robin_retry.<locals>.before_sleepQ   s'     @ !#../EF
 "r'      g?)jitterTc                     [        U [        R                  5      =(       aE    U R                  5       [        R                  R
                  [        R                  R                  4;   $ N)
isinstancegrpcRpcErrorcode
StatusCodeUNAVAILABLEUNKNOWN)xs    r%   <lambda>8DistributedExecutor._round_robin_retry.<locals>.<lambda>`   sB    *Q6 WFFH!<!<doo>U>U VVWr'   )stopwaitreraiseretryrK      z0Unreachable code error - should never reach here)r   r   r   r   r   endr!   	Exception)r?   rB   rC   attempt_countrK   attemptrJ   s         @r%   _round_robin_retry&DistributedExecutor._round_robin_retryF   s     %)
	GN 	Gt 	G  #A&(S9$W &	
G % !
SZ78> 	
& JKK QMs   B
B	planc                    U R                  UR                  5      nU Vs/ s H  o0R                  U5      R                  PM     nnU R	                  U[
        R                  " U5      5      n[
        R                  " U5      $ s  snf rP   )_get_grpc_endpointsscan	_get_stubCountrd   r   to_proto_count_planfrom_proto_count_result)r?   rf   	endpointsendpointcount_funcscount_results         r%   countDistributedExecutor.countp   sp    ,,TYY7	FOPi(~~h/55iP..44T:
 ..|<<	 Qs   $Bc           
      f   U R                  UR                  5      nU Vs/ s H  o0R                  U5      R                  PM     nnU R	                  U[
        R                  " U5      5      n[
        R                  " U5      nU Vs/ s H  owS   PM	     nnUR                  R                  (       a  U Vs/ s H  owS   PM	     snOS n	UR                  R                  (       a  U Vs/ s H  owS   PM	     snOS n
UR                  R                  (       a  U Vs/ s H  n[        US   5      PM     snOS nUR                  R                  (       a  U Vs/ s H  n[        US   5      PM     snOS n[        UU	U
US UUR                  R                   S9$ s  snf s  snf s  snf s  snf s  snf s  snf )Nid	embeddingdocumentr   )ids
embeddings	documentsurisdata	metadatasincluded)rh   ri   rj   Getrd   r   to_proto_get_planfrom_proto_get_result
projectionrv   rw   urir*   r   r&   r	   r~   )r?   rf   rn   ro   	get_funcs
get_resultrecordsrecordrx   ry   rz   r{   r}   s                r%   getDistributedExecutor.gety   s   ,,TYY7	BKL)h^^H-11)	L,,Y8Q8QRV8WX
//
;*12'd|'2 (( 077wVK w7 	 '' /66gFJg6 	 "" 5<<G&T&$%G< 	 '' @GGwV_VJ/0wG 	 !__--
 	
7 M 37
 7
 =
 Hs#   $FF5F'F$F)F.c                    U R                  UR                  5      nU Vs/ s H  o0R                  U5      R                  PM     nnU R	                  U[
        R                  " U5      5      n[
        R                  " U5      nU VVs/ s H  ow Vs/ s H
  oS   S   PM     snPM     n	nnUR                  R                  (       a+  U VVs/ s H  nU Vs/ s H
  oS   S   PM     snPM     snnOS n
UR                  R                  (       a+  U VVs/ s H  nU Vs/ s H
  oS   S   PM     snPM     snnOS nUR                  R                  (       a5  U VVs/ s H%  nU Vs/ s H  n[        US   S   5      PM     snPM'     snnOS nUR                  R                  (       a5  U VVs/ s H%  nU Vs/ s H  n[        US   S   5      PM     snPM'     snnOS nUR                  R                  (       a'  U VVs/ s H  ow Vs/ s H  oS   PM	     snPM     snnOS n[!        U	U
UUS UUUR                  R"                  S9$ s  snf s  snf s  snnf s  snf s  snnf s  snf s  snnf s  snf s  snnf s  snf s  snnf s  snf s  snnf )Nr   ru   rv   rw   r   distance)rx   ry   rz   r{   r|   r}   	distancesr~   )rh   ri   rj   KNNrd   r   to_proto_knn_planfrom_proto_knn_batch_resultr   rv   rw   r   r*   r   r&   rankr   r~   )r?   rf   rn   ro   	knn_funcs
knn_resultresultsr   r   rx   ry   rz   r{   r}   r   s                  r%   knnDistributedExecutor.knn   s   ,,TYY7	BKL)h^^H-11)	L,,Y8Q8QRV8WX
55jAMTUW'W=W6x &W=WU ((  '&G >EEW6!+.WE&
  	 ''  '&G =DDG&!*-GD&
  	 ""  '&G CJJ'fX&z23'J&
  	 ''  '&G NUUW6!1*!=>WU&
  	 ## HOOwGw7wVZ w7wO 	 !__--	
 		
Y M >U F E K V 8Os   $I	II!I
II&I
I'I".I'
I2%I- I2-
I=7I8I=?	JJJII"I'-I28I=Jri   c                     U R                   R                  UR                  U R                  5      n[        R
                  " U5        U$ rP   )r2   get_endpointsr   r4   randomshuffle)r?   ri   	grpc_urlss      r%   rh   'DistributedExecutor._get_grpc_endpoints   s;     MM//KK77
	 	y!r'   grpc_urlc                 .   U R                      XR                  ;  aQ  [        R                  " USS/S9n[	        5       /n[        R
                  " U/UQ76 n[        U5      U R                  U'   U R                  U   sS S S 5        $ ! , (       d  f       g = f)N)zgrpc.max_concurrent_streamsi  )zgrpc.max_receive_message_lengthi H)options)r0   r1   rR   insecure_channelr   intercept_channelr   )r?   r   channelinterceptorss       r%   rj   DistributedExecutor._get_stub   s    YY333//=E !0 1200H<H1B71K$$X.''1 YYs   A/B
B)r1   r2   r0   r4   r3   )!__name__
__module____qualname____firstlineno__r;   r<   __annotations__r   r)   r   r   intr   r:   r   r   r+   r,   rd   r   r   rr   r   r	   r   r   r   r   r   rh   rj   __static_attributes____classcell__)r@   s   @r%   r.   r.   3   s   
..#0011''!!""

v 

(LXqc1f-=(> (La (LA (LT =) = = = %
 %
I %
 %
N 7
 7
K 7
 7
r c 2# 2*; 2 2r'   r.   ).r;   r   typingr   r   r   r   r   rR   r   chromadb.api.typesr	   r
   r   chromadb.configr   $chromadb.execution.executor.abstractr   &chromadb.execution.expression.operatorr   "chromadb.execution.expression.planr   r   r   chromadb.protor   &chromadb.proto.query_executor_pb2_grpcr   )chromadb.segment.impl.manager.distributedr   %chromadb.telemetry.opentelemetry.grpcr   tenacityr   r   r   r   r   opentelemetry.tracer   r&   r)   r*   r+   r,   r.    r'   r%   <module>r      s      : :   ? ? " 9 7 J J " D O A  %
hx0 
Xh5G 
8H% (3-  CLCL2( 2r'   