§
    ˜ŠtjK#  ã                   ó‚  — 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-dS )é    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dS i }|                       ¦   «         D ]\  }}|                     d¦  «        s|||<   Œ t          |¦  «        dk    rdS |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       úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/chromadb/execution/executor/distributed.pyÚ_clean_metadatar&      sj   € àð ØˆtØ€FØ—’Ñ Ô ð ð ‰ˆˆ1Ø�|Š|˜IÑ&Ô&ð 	ØˆF�1‰IøÝ
ˆ6�{„{�aÒÐØˆtØ€Mó    c                 ó<   — | rd| v rt          | d         ¦  «        S dS )z-Retrieve the uri (if any) from a Metadata mapz
chroma:uriN)Ústr©r   s    r%   Ú_urir+   &   s.   € ð ð +�L HÐ,Ð,Ý�8˜LÔ)Ñ*Ô*Ð*Øˆ4r'   ÚIÚOc                   ó0  ‡ — 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                 óB  •— t          ¦   «                              |¦  «         t          j        ¦   «         | _        i | _        |                      t          ¦  «        | _        |j	                             d¦  «        | _
        |j	                             d¦  «        | _        d S )NÚ$chroma_query_request_timeout_secondsÚchroma_query_replication_factor)ÚsuperÚ__init__Ú	threadingÚLockr0   r1   Úrequirer   r2   Úsettingsr3   r4   )Úselfr5   Ú	__class__s     €r%   r:   zDistributedExecutor.__init__:   sˆ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý”NÑ$Ô$ˆŒ	Ø!ˆÔØŸšÕ%>Ñ?Ô?ˆŒØ(.¬×(?Ò(?Ø2ñ)
ô )
ˆÔ%ð *0¬×)@Ò)@Ø-ñ*
ô *
ˆÔ&Ð&Ð&r'   ÚfuncsÚargsr   c                 ó~  ‡— d}dŠdt           ddfˆfd„}t          t          d¦  «        t          dd¬¦  «        d	t	          d
„ ¦  «        |¬¦  «        D ]\}‰�‰                     ¦   «          dŠ|5   ||t          |¦  «        z           |¦  «        cddd¦  «         c S # 1 swxY w Y   |dz  }Œ]t          d¦  «        ‚)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                 óF   •— ddl m} |�|                     d¦  «        Šd S d S )Nr   )ÚtracerzWaiting to retry RPC)Ú chromadb.telemetry.opentelemetryrF   Ú
start_span)rD   rF   Ú
sleep_spans     €r%   Úbefore_sleepz<DistributedExecutor._round_robin_retry.<locals>.before_sleepQ   s@   ø€ ð @Ð?Ð?Ð?Ð?Ð?ð Ð!Ø#×.Ò.Ð/EÑFÔF�
�
�
ð "Ð!r'   é   gš™™™™™¹?)ÚjitterTc                 ó¢   — t          | t          j        ¦  «        o5|                      ¦   «         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>`   s:   € �* Q­¬Ñ6Ô6ð WØ—F’F‘H”H¥¤Ô!<½d¼oÔ>UÐ VÐVð r'   )ÚstopÚwaitÚreraiseÚretryrJ   é   z0Unreachable code error - should never reach here)r   r   r   r   r   Úendr!   Ú	Exception)r?   rA   rB   Úattempt_countrJ   ÚattemptrI   s         @r%   Ú_round_robin_retryz&DistributedExecutor._round_robin_retryF   s`  ø€ ð ˆØ%)ˆ
ð	G�Nð 	G¨tð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gõ  Ý# AÑ&Ô&Ý(¨°SÐ9Ñ9Ô9ØÝ$ðWð Wñô ð &ð	
ñ 	
ô 	
ð 	ð 	ˆGð Ð%Ø—’Ñ Ô Ð Ø!�
àð ?ð ?Ø8�u˜]­S°©Z¬ZÑ7Ô8¸Ñ>Ô>ð?ð ?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?à˜QÑˆMˆMõ ÐJÑKÔKÐKs   Á/!BÂB#	Â&B#	Úplanc                 óÌ   ‡ — ‰                       |j        ¦  «        }ˆ fd„|D ¦   «         }‰                      |t          j        |¦  «        ¦  «        }t          j        |¦  «        S )Nc                 óD   •— g | ]}‰                      |¦  «        j        ‘ŒS © )Ú	_get_stubÚCount©Ú.0Úendpointr?   s     €r%   ú
<listcomp>z-DistributedExecutor.count.<locals>.<listcomp>s   s(   ø€ ÐPÐPÐP¸(�t—~’~ hÑ/Ô/Ô5ÐPÐPÐPr'   )Ú_get_grpc_endpointsÚscanra   r   Úto_proto_count_planÚfrom_proto_count_result)r?   rb   Ú	endpointsÚcount_funcsÚcount_results   `    r%   ÚcountzDistributedExecutor.countp   si   ø€ à×,Ò,¨T¬YÑ7Ô7ˆ	ØPÐPÐPÐPÀiÐPÑPÔPˆØ×.Ò.Ø�Ô4°TÑ:Ô:ñ
ô 
ˆõ Ô.¨|Ñ<Ô<Ð<r'   c           	      óô  ‡ — ‰                       |j        ¦  «        }ˆ fd„|D ¦   «         }‰                      |t          j        |¦  «        ¦  «        }t          j        |¦  «        }d„ |D ¦   «         }|j        j        rd„ |D ¦   «         nd }|j        j        rd„ |D ¦   «         nd }|j        j	        rd„ |D ¦   «         nd }	|j        j
        rd„ |D ¦   «         nd }
t          ||||	d |
|j        j        ¬¦  «        S )Nc                 óD   •— g | ]}‰                      |¦  «        j        ‘ŒS re   )rf   ÚGetrh   s     €r%   rk   z+DistributedExecutor.get.<locals>.<listcomp>|   ó(   ø€ ÐLÐLÐL°h�T—^’^ HÑ-Ô-Ô1ÐLÐLÐLr'   c                 ó   — g | ]
}|d          ‘ŒS )Úidre   ©ri   Úrecords     r%   rk   z+DistributedExecutor.get.<locals>.<listcomp>€   s   € Ð2Ð2Ð2 ˆv�dŒ|Ð2Ð2Ð2r'   c                 ó   — g | ]
}|d          ‘ŒS )Ú	embeddingre   rz   s     r%   rk   z+DistributedExecutor.get.<locals>.<listcomp>‚   s   € Ð7Ð7Ð7 VˆV�KÔ Ð7Ð7Ð7r'   c                 ó   — g | ]
}|d          ‘ŒS )Údocumentre   rz   s     r%   rk   z+DistributedExecutor.get.<locals>.<listcomp>‡   s   € Ð6Ð6Ð6 FˆV�JÔÐ6Ð6Ð6r'   c                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS r*   ©r+   rz   s     r%   rk   z+DistributedExecutor.get.<locals>.<listcomp>Œ   s%   € Ð<Ð<Ð<¨&�T�&˜Ô$Ñ%Ô%Ð<Ð<Ð<r'   c                 ó8   — g | ]}t          |d          ¦  «        ‘ŒS r*   ©r&   rz   s     r%   rk   z+DistributedExecutor.get.<locals>.<listcomp>‘   s%   € ÐGÐGÐG°V�_˜V JÔ/Ñ0Ô0ÐGÐGÐGr'   )ÚidsÚ
embeddingsÚ	documentsÚurisÚdataÚ	metadatasÚincluded)rl   rm   ra   r   Úto_proto_get_planÚfrom_proto_get_resultÚ
projectionr}   r   Úurir   r	   rŠ   )r?   rb   rp   Ú	get_funcsÚ
get_resultÚrecordsr„   r…   r†   r‡   r‰   s   `          r%   ÚgetzDistributedExecutor.gety   sT  ø€ à×,Ò,¨T¬YÑ7Ô7ˆ	ØLÐLÐLÐLÀ)ÐLÑLÔLˆ	Ø×,Ò,¨Y½Ô8QÐRVÑ8WÔ8WÑXÔXˆ
ÝÔ/°
Ñ;Ô;ˆà2Ð2¨'Ð2Ñ2Ô2ˆð ŒÔ(ðÐ7Ð7¨wÐ7Ñ7Ô7Ð7àð 	ð ŒÔ'ðÐ6Ð6¨gÐ6Ñ6Ô6Ð6àð 	ð ŒÔ"ðÐ<Ð<°GÐ<Ñ<Ô<Ð<àð 	ð ŒÔ'ðÐGÐG¸wÐGÑGÔGÐGàð 	õ ØØ!ØØØØØ”_Ô-ð
ñ 
ô 
ð 	
r'   c           
      ó*  ‡ — ‰                       |j        ¦  «        }ˆ fd„|D ¦   «         }‰                      |t          j        |¦  «        ¦  «        }t          j        |¦  «        }d„ |D ¦   «         }|j        j        rd„ |D ¦   «         nd }|j        j        rd„ |D ¦   «         nd }|j        j	        rd„ |D ¦   «         nd }	|j        j
        rd„ |D ¦   «         nd }
|j        j        rd„ |D ¦   «         nd }t          ||||	d |
||j        j        ¬¦  «        S )	Nc                 óD   •— g | ]}‰                      |¦  «        j        ‘ŒS re   )rf   ÚKNNrh   s     €r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>¤   rw   r'   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó*   — g | ]}|d          d         ‘ŒS )r{   ry   re   rz   s     r%   rk   z6DistributedExecutor.knn.<locals>.<listcomp>.<listcomp>¨   s"   € Ð=Ð=Ð=¨6��xÔ  Ô&Ð=Ð=Ð=r'   re   ©ri   r‘   s     r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>¨   s'   € ÐUÐUÐUÀ'Ð=Ð=°WÐ=Ñ=Ô=ÐUÐUÐUr'   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó*   — g | ]}|d          d         ‘ŒS )r{   r}   re   rz   s     r%   rk   z6DistributedExecutor.knn.<locals>.<listcomp>.<listcomp>«   s"   € ÐEÐEÐE°6�˜Ô! +Ô.ÐEÐEÐEr'   re   r˜   s     r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>ª   s7   € ð ð ð àð FÐE¸WÐEÑEÔEðð ð r'   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó*   — g | ]}|d          d         ‘ŒS )r{   r   re   rz   s     r%   rk   z6DistributedExecutor.knn.<locals>.<listcomp>.<listcomp>³   s"   € ÐDÐDÐD°&�˜Ô! *Ô-ÐDÐDÐDr'   re   r˜   s     r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>²   s7   € ð ð ð àð EÐD¸GÐDÑDÔDðð ð r'   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 óD   — g | ]}t          |d          d         ¦  «        ‘ŒS ©r{   r   r�   rz   s     r%   rk   z6DistributedExecutor.knn.<locals>.<listcomp>.<listcomp>»   s*   € ÐJÐJÐJ¸•�f˜XÔ& zÔ2Ñ3Ô3ÐJÐJÐJr'   re   r˜   s     r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>º   s7   € ð ð ð àð KÐJÀ'ÐJÑJÔJðð ð r'   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 óD   — g | ]}t          |d          d         ¦  «        ‘ŒS rŸ   rƒ   rz   s     r%   rk   z6DistributedExecutor.knn.<locals>.<listcomp>.<listcomp>Ã   s*   € ÐUÐUÐUÀ6• ¨Ô!1°*Ô!=Ñ>Ô>ÐUÐUÐUr'   re   r˜   s     r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>Â   s7   € ð ð ð àð VÐUÈWÐUÑUÔUðð ð r'   c                 ó&   — g | ]}d „ |D ¦   «         ‘ŒS )c                 ó   — g | ]
}|d          ‘ŒS )Údistancere   rz   s     r%   rk   z6DistributedExecutor.knn.<locals>.<listcomp>.<listcomp>Ê   s   € Ð7Ð7Ð7 Vˆf�ZÔ Ð7Ð7Ð7r'   re   r˜   s     r%   rk   z+DistributedExecutor.knn.<locals>.<listcomp>Ê   s'   € ÐOÐOÐO¸GÐ7Ð7¨wÐ7Ñ7Ô7ÐOÐOÐOr'   )r„   r…   r†   r‡   rˆ   r‰   Ú	distancesrŠ   )rl   rm   ra   r   Úto_proto_knn_planÚfrom_proto_knn_batch_resultr�   r}   r   rŽ   r   Úrankr   rŠ   )r?   rb   rp   Ú	knn_funcsÚ
knn_resultÚresultsr„   r…   r†   r‡   r‰   r¥   s   `           r%   ÚknnzDistributedExecutor.knn¡   s¾  ø€ à×,Ò,¨T¬YÑ7Ô7ˆ	ØLÐLÐLÐLÀ)ÐLÑLÔLˆ	Ø×,Ò,¨Y½Ô8QÐRVÑ8WÔ8WÑXÔXˆ
ÝÔ5°jÑAÔAˆàUÐUÈWÐUÑUÔUˆð ŒÔ(ð	ð ð à&ðñ ô ð ð
 ð 	ð ŒÔ'ð	ð ð à&ðñ ô ð ð
 ð 	ð ŒÔ"ð	ð ð à&ðñ ô ð ð
 ð 	ð ŒÔ'ð	ð ð à&ðñ ô ð ð
 ð 	ð ŒÔ#ðÐOÐOÀwÐOÑOÔOÐOàð 	õ ØØ!ØØØØØØ”_Ô-ð	
ñ 	
ô 	
ð 		
r'   rm   c                 óx   — | j                              |j        | j        ¦  «        }t	          j        |¦  «         |S rN   )r2   Úget_endpointsr{   r4   ÚrandomÚshuffle)r?   rm   Ú	grpc_urlss      r%   rl   z'DistributedExecutor._get_grpc_endpointsÛ   s=   € ð ”M×/Ò/ØŒK˜Ô7ñ
ô 
ˆ	õ 	Œ�yÑ!Ô!Ð!ØÐr'   Úgrpc_urlc                 ó  — | j         5  || j        vrPt          j        |ddg¬¦  «        }t	          ¦   «         g}t          j        |g|¢R Ž }t          |¦  «        | j        |<   | j        |         cd d d ¦  «         S # 1 swxY w Y   d S )N)zgrpc.max_concurrent_streamsiè  )zgrpc.max_receive_message_lengthi Hè)Úoptions)r0   r1   rP   Úinsecure_channelr   Úintercept_channelr   )r?   r²   ÚchannelÚinterceptorss       r%   rf   zDistributedExecutor._get_stubå   sé   € ØŒYð 	2ð 	2Ø˜tÔ3Ð3Ð3ÝÔ/Øà=ØEððñ ô �õ !0Ñ 1Ô 1Ð2�ÝÔ0°ÐH¸<ÐHÐHÐH�Ý1BÀ7Ñ1KÔ1K�Ô$ XÑ.ØÔ'¨Ô1ð	2ð 	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð 	2ð 	2s   ˆA&A;Á;A?ÂA?)Ú__name__Ú
__module__Ú__qualname__r;   r<   Ú__annotations__r   r)   r   r   Úintr   r:   r   r   r,   r-   ra   r   r   rs   r   r	   r’   r   r   r¬   r   rl   rf   Ú__classcell__)r@   s   @r%   r/   r/   3   s¥  ø€ € € € € € Ø
Œ.ÐÐÑØ˜#Ð0Ð0Ô1Ð1Ð1Ñ1Ø'Ð'Ð'Ñ'Ø!Ð!Ð!Ñ!Ø"Ð"Ð"Ñ"ð

˜vð 

ð 

ð 

ð 

ð 

ð 

ð(L¨¨X°q°c¸1°fÔ-=Ô(>ð (LÀað (LÈAð (Lð (Lð (Lð (LðT ð=˜)ð =¨ð =ð =ð =ñ „Yð=ð ð%
˜ð %
 Ið %
ð %
ð %
ñ „Yð%
ðN ð7
˜ð 7
 Kð 7
ð 7
ð 7
ñ „Yð7
ðr¨ð °°c´ð ð ð ð ð2 #ð 2Ð*;ð 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2r'   r/   ).r;   r¯   Útypingr   r   r   r   r   rP   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/   re   r'   r%   ú<module>rË      s$  ðØ Ð Ð Ð Ø €€€Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø €€€Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø "Ð "Ð "Ð "Ð "Ð "Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ "Ð "Ð "Ð "Ð "Ð "Ø DÐ DÐ DÐ DÐ DÐ DØ OÐ OÐ OÐ OÐ OÐ OØ AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð ð ð ð ð ð ð %Ð $Ð $Ð $Ð $Ð $ð
˜h xÔ0ð 
°X¸hÔ5Gð 
ð 
ð 
ð 
ð�8˜HÔ%ð ¨(°3¬-ð ð ð ð ð €GˆC�L„L€Ø€GˆC�L„L€ð2ð 2ð 2ð 2ð 2˜(ñ 2ô 2ð 2ð 2ð 2r'   