Ë
    lQêjK#  ã                   óV  — d dl Z d dlZd dlmZmZmZmZmZ d dlZd dl	m	Z	 d dl
mZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z% d dl&m'Z' dee   dee   fd„Z(dee   dee)   fd„Z* ed«      Z+ ed«      Z, G d„ de«      Z-y)é    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                 óŒ   — | syi }| j                  «       D ]  \  }}|j                  d«      rŒ|||<   Œ t        |«      dk(  ry|S )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       úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/chromadb/execution/executor/distributed.pyÚ_clean_metadatar&      sR   € áØØ€FØ—‘Ó ò ‰ˆˆ1Ø�|‰|˜IÕ&ØˆF�1ŠIðô ˆ6ƒ{�aÒØØ€Mó    c                 ó,   — | rd| v rt        | d   «      S y)z-Retrieve the uri (if any) from a Metadata mapz
chroma:uriN)Ústr)r   s    r%   Ú_urir*   &   s!   € ñ �L HÑ,Ü�8˜LÑ)Ó*Ð*Ør'   ÚIÚOc                   ó  ‡ — e Zd ZU ej                  ed<   eeef   ed<   e	ed<   e
ed<   e
ed<   defˆ fd„Zdeeegef      d	ed
efd„Zeded
e
fd„«       Zeded
efd„«       Zeded
efd„«       Zded
ee   fd„Zded
efd„Zˆ xZS )ÚDistributedExecutorÚ_mtxÚ_grpc_stub_poolÚ_managerÚ_request_timeout_secondsÚ_query_replication_factorÚsystemc                 ó  •— t         ‰| �  |«       t        j                  «       | _        i | _        | j                  t        «      | _        |j                  j                  d«      | _
        |j                  j                  d«      | _        y )NÚ$chroma_query_request_timeout_secondsÚchroma_query_replication_factor)ÚsuperÚ__init__Ú	threadingÚLockr/   r0   Úrequirer   r1   Úsettingsr2   r3   )Úselfr4   Ú	__class__s     €r%   r9   zDistributedExecutor.__init__:   sm   ø€ Ü‰Ñ˜Ô Ü—N‘NÓ$ˆŒ	Ø!ˆÔØŸ™Ô%>Ó?ˆŒØ(.¯©×(?Ñ(?Ø2ó)
ˆÔ%ð *0¯©×)@Ñ)@Ø-ó*
ˆÕ&r'   ÚfuncsÚargsr   c                 ó8  ‡— d}dŠdt         ddfˆfd„}t        t        d«      t        dd¬«      d	t	        d
„ «      |¬«      D ]:  }‰�‰j                  «        dŠ|5   ||t        |«      z     |«      cddd«       c S  t        d«      ‚# 1 sw Y   nxY w|dz  }ŒZ)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                 ó:   •— ddl m} |�|j                  d«      Šy y )Nr   )ÚtracerzWaiting to retry RPC)Ú chromadb.telemetry.opentelemetryrE   Ú
start_span)rC   rE   Ú
sleep_spans     €r%   Úbefore_sleepz<DistributedExecutor._round_robin_retry.<locals>.before_sleepQ   s'   ø€ õ @ð Ð!Ø#×.Ñ.Ð/EÓF‘
ð "r'   é   gš™™™™™¹?)ÚjitterTc                 óÂ   — t        | t        j                  «      xrD | j                  «       t        j                  j
                  t        j                  j                  fv S ©N)Ú
isinstanceÚgrpcÚRpcErrorÚcodeÚ
StatusCodeÚUNAVAILABLEÚUNKNOWN)Úxs    r%   ú<lambda>z8DistributedExecutor._round_robin_retry.<locals>.<lambda>`   sA   € œ* Q¬¯©Ó6ò WØ—F‘F“H¤§¡×!<Ñ!<¼d¿o¹o×>UÑ>UÐ VÐVð r'   )ÚstopÚwaitÚreraiseÚretryrI   é   z0Unreachable code error - should never reach here)r   r   r   r   r   Úendr!   Ú	Exception)r>   r@   rA   Úattempt_countrI   ÚattemptrH   s         @r%   Ú_round_robin_retryz&DistributedExecutor._round_robin_retryF   sÇ   ø€ ð ˆØ%)ˆ
ð	GœNð 	G¨tõ 	Gô  Ü# AÓ&Ü(¨°SÔ9ØÜ$ñWóð &ô	
ò 	ˆGð Ð%Ø—‘Ô Ø!�
àñ ?Ø8�u˜]¬S°«ZÑ7Ñ8¸Ó>÷?ó ?ð	ô& ÐJÓKÐK÷?ð ?úà˜QÑ‰Ms   ÁB
Â
B	Úplanc                 ó  — | j                  |j                  «      }|D �cg c]  }| j                  |«      j                  ‘Œ }}| j	                  |t        j                  |«      «      }t        j                  |«      S c c}w rM   )Ú_get_grpc_endpointsÚscanÚ	_get_stubÚCountr`   r   Úto_proto_count_planÚfrom_proto_count_result)r>   ra   Ú	endpointsÚendpointÚcount_funcsÚcount_results         r%   ÚcountzDistributedExecutor.countp   sq   € à×,Ñ,¨T¯Y©YÓ7ˆ	ØFOÖP¸(�t—~‘~ hÓ/×5Ó5ÐPˆÐPØ×.Ñ.Øœ×4Ñ4°TÓ:ó
ˆô ×.Ñ.¨|Ó<Ð<ùò	 Qs    "A>c           	      ó$  — | j                  |j                  «      }|D �cg c]  }| j                  |«      j                  ‘Œ }}| j	                  |t        j                  |«      «      }t        j                  |«      }|D �cg c]  }|d   ‘Œ	 }}|j                  j                  r|D �cg c]  }|d   ‘Œ	 c}nd }	|j                  j                  r|D �cg c]  }|d   ‘Œ	 c}nd }
|j                  j                  r|D �cg c]  }t        |d   «      ‘Œ c}nd }|j                  j                  r|D �cg c]  }t        |d   «      ‘Œ c}nd }t        ||	|
|d ||j                  j                   ¬«      S c c}w c c}w c c}w c c}w c c}w c c}w )NÚidÚ	embeddingÚdocumentr   )ÚidsÚ
embeddingsÚ	documentsÚurisÚdataÚ	metadatasÚincluded)rc   rd   re   ÚGetr`   r   Úto_proto_get_planÚfrom_proto_get_resultÚ
projectionrp   rq   Úurir*   r   r&   r	   rx   )r>   ra   ri   rj   Ú	get_funcsÚ
get_resultÚrecordsÚrecordrr   rs   rt   ru   rw   s                r%   ÚgetzDistributedExecutor.gety   s…  € à×,Ñ,¨T¯Y©YÓ7ˆ	ØBKÖL°h�T—^‘^ HÓ-×1Ó1ÐLˆ	ÐLØ×,Ñ,¨Y¼×8QÑ8QÐRVÓ8WÓXˆ
Ü×/Ñ/°
Ó;ˆà*1Ö2 ˆv�d‹|Ð2ˆÐ2ð �‰×(Ò(ð 07Ö7 VˆV�KÓ Ó7àð 	ð �‰×'Ò'ð /6Ö6 FˆV�JÓÓ6àð 	ð �‰×"Ò"ð 5<Ö<¨&ŒT�&˜Ñ$Õ%Ó<àð 	ð �‰×'Ò'ð @GÖG°VŒ_˜V JÑ/Õ0ÓGàð 	ô ØØ!ØØØØØ—_‘_×-Ñ-ô
ð 	
ùò7 Mùò 3ùâ7ùò
 7ùò
 =ùò
 Hs#    "E4ÂE9Â*E>ÃFÄ FÄ4Fc                 ó¬  — | j                  |j                  «      }|D �cg c]  }| j                  |«      j                  ‘Œ }}| j	                  |t        j                  |«      «      }t        j                  |«      }|D ��cg c]  }|D �cg c]
  }|d   d   ‘Œ c}‘Œ }	}}|j                  j                  r&|D ��cg c]  }|D �cg c]
  }|d   d   ‘Œ c}‘Œ c}}nd }
|j                  j                  r&|D ��cg c]  }|D �cg c]
  }|d   d   ‘Œ c}‘Œ c}}nd }|j                  j                  r/|D ��cg c]!  }|D �cg c]  }t        |d   d   «      ‘Œ c}‘Œ# c}}nd }|j                  j                  r/|D ��cg c]!  }|D �cg c]  }t        |d   d   «      ‘Œ c}‘Œ# c}}nd }|j                  j                  r#|D ��cg c]  }|D �cg c]  }|d   ‘Œ	 c}‘Œ c}}nd }t!        |	|
||d |||j                  j"                  ¬«      S c c}w c c}w c c}}w c c}w c c}}w c c}w c c}}w c c}w c c}}w c c}w c c}}w c c}w c c}}w )Nr�   ro   rp   rq   r   Údistance)rr   rs   rt   ru   rv   rw   Ú	distancesrx   )rc   rd   re   ÚKNNr`   r   Úto_proto_knn_planÚfrom_proto_knn_batch_resultr|   rp   rq   r}   r*   r   r&   Úrankr   rx   )r>   ra   ri   rj   Ú	knn_funcsÚ
knn_resultÚresultsr€   r�   rr   rs   rt   ru   rw   r…   s                  r%   ÚknnzDistributedExecutor.knn¡   sc  € à×,Ñ,¨T¯Y©YÓ7ˆ	ØBKÖL°h�T—^‘^ HÓ-×1Ó1ÐLˆ	ÐLØ×,Ñ,¨Y¼×8QÑ8QÐRVÓ8WÓXˆ
Ü×5Ñ5°jÓAˆàMT×UÀ'°WÖ=¨6��xÑ  Ó&Ô=ÐUˆÑUð �‰×(Ò(ð  '÷àð >EÖE°6�˜Ñ! +Ó.ÔEôð
 ð 	ð �‰×'Ò'ð  '÷àð =DÖD°&�˜Ñ! *Ó-ÔDôð
 ð 	ð �‰×"Ò"ð  '÷àð CJÖJ¸”�f˜XÑ& zÑ2Õ3ÔJôð
 ð 	ð �‰×'Ò'ð  '÷àð NUÖUÀ6” ¨Ñ!1°*Ñ!=Õ>ÔUôð
 ð 	ð �‰×#Ò#ð HO×O¸G¨wÖ7 Vˆf�ZÓ Ô7ÔOàð 	ô ØØ!ØØØØØØ—_‘_×-Ñ-ô	
ð 		
ùòY Mùò >ùÓUùò Fùóùò Eùóùò Kùóùò Vùóùò 8ùÓOs•    "HÂ	HÂHÂHÂ>	H$ÃHÃH$Ã<	H/ÄH*ÄH/Ä:	H:ÅH5ÅH:Æ	IÆ
I Æ"IÇ	IÇIÇIÈHÈH$È*H/È5H:É IÉIrd   c                 ó�   — | j                   j                  |j                  | j                  «      }t	        j
                  |«       |S rM   )r1   Úget_endpointsr�   r3   ÚrandomÚshuffle)r>   rd   Ú	grpc_urlss      r%   rc   z'DistributedExecutor._get_grpc_endpointsÛ   s;   € ð —M‘M×/Ñ/Ø�K‰K˜×7Ñ7ó
ˆ	ô 	�‰�yÔ!ØÐr'   Úgrpc_urlc                 ó$  — | j                   5  || j                  vrRt        j                  |ddg¬«      }t	        «       g}t        j
                  |g|¢­Ž }t        |«      | j                  |<   | j                  |   cd d d «       S # 1 sw Y   y xY w)N)zgrpc.max_concurrent_streamsiè  )zgrpc.max_receive_message_lengthi Hè)Úoptions)r/   r0   rO   Úinsecure_channelr   Úintercept_channelr   )r>   r“   ÚchannelÚinterceptorss       r%   re   zDistributedExecutor._get_stubå   s�   € Ø�Y‰Yñ 	2Ø˜t×3Ñ3Ñ3Ü×/Ñ/Øà=ØEðô�ô !0Ó 1Ð2�Ü×0Ñ0°ÐH¸<ÒH�Ü1BÀ7Ó1K�×$Ñ$ XÑ.Ø×'Ñ'¨Ñ1÷	2÷ 	2ò 	2ús   �A/BÂB)Ú__name__Ú
__module__Ú__qualname__r:   r;   Ú__annotations__r   r)   r   r   Úintr   r9   r   r   r+   r,   r`   r   r   rm   r   r	   r‚   r   r   r�   r   rc   re   Ú__classcell__)r?   s   @r%   r.   r.   3   sþ   ø… Ø
�.‰.ÓØ˜#Ð0Ð0Ñ1Ó1Ø'Ó'Ø!Ó!Ø"Ó"ð

˜võ 

ð(L¨¨X°q°c¸1°fÑ-=Ñ(>ð (LÀað (LÈAó (LðT ð=˜)ð =¨ò =ó ð=ð ð%
˜ð %
 Iò %
ó ð%
ðN ð7
˜ð 7
 Kò 7
ó ð7
ðr¨ð °°c±ó ð2 #ð 2Ð*;÷ 2r'   r.   ).r:   r�   Útypingr   r   r   r   r   rO   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÷õ õ %ð
˜h xÑ0ð 
°X¸hÑ5Gó 
ð�8˜HÑ%ð ¨(°3©-ó ñ ˆCƒL€ÙˆCƒL€ô2˜(õ 2r'   