
    ug#                         d dl 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 dee   dee   fdZdee   dee   fdZ G d de      Z y)    )DictOptionalN)	overrides)	GetResultMetadataQueryResult)System)Executor)Scan)	CountPlanGetPlanKNNPlan)convert)QueryExecutorStub) RetryOnRpcErrorClientInterceptor)DistributedSegmentManager)OtelInterceptor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       \/var/www/openai/venv/lib/python3.12/site-packages/chromadb/execution/executor/distributed.py_clean_metadatar      sM    F 1||I&F1I ! 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!     LH,8L)**r   c                        e Zd ZU eeef   ed<   eed<   eed<   de	f 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fdZ xZS )DistributedExecutor_grpc_stub_pool_manager_request_timeout_secondssystemc                     t         |   |       t               | _        | j	                  t
              | _        |j                  j	                  d      | _        y )N$chroma_query_request_timeout_seconds)	super__init__dictr%   requirer   r&   settingsr'   )selfr(   	__class__s     r   r,   zDistributedExecutor.__init__*   sE     #v%>?(.(?(?2)
%r   planr   c                     | j                  |j                        }	 |j                  t        j                  |            }t        j                  |      S # t
        j                  $ r}|d }~ww xY wN)_grpc_executuor_stubscanCountr   to_proto_count_plangrpcRpcErrorfrom_proto_count_result)r0   r2   executorcount_result	rpc_errors        r   countzDistributedExecutor.count2   sb    ,,TYY7	#>>'*E*Ed*KLL ..|<< }} 	O	s   $A A0)A++A0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 # t
        j                  $ r}|d }~ww xY 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)r5   r6   Getr   to_proto_get_planr9   r:   from_proto_get_result
projectionrB   rC   urir"   r   r   r   rJ   )r0   r2   r<   
get_resultr>   recordsrecordrD   rE   rF   rG   rI   s               r   getzDistributedExecutor.get;   s   ,,TYY7	!g&?&?&EFJ //
;*12'vd|'2 (( 077wVVK w7 	 '' /66gFVJg6 	 "" 5<<G&T&$%G< 	 '' @GGwV_VJ/0wG 	 !__--
 	
7 }} 	O	 37
 7
 =
 Hs5   $E E)E.-E3E8E=E&E!!E&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 # t
        j                  $ r}|d }~ww xY 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 )NrR   rA   rB   rC   r   distance)rD   rE   rF   rG   rH   rI   	distancesrJ   )r5   r6   KNNr   to_proto_knn_planr9   r:   from_proto_knn_batch_resultrN   rB   rC   rO   r"   r   r   rankr   rJ   )r0   r2   r<   
knn_resultr>   resultsrQ   rR   rD   rE   rF   rG   rI   rV   s                 r   knnzDistributedExecutor.knne   s   ,,TYY7	!g&?&?&EFJ 55jAMTUW'W=W6x &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7wVfZ w7wO 	 !__--	
 		
Y }} 	O	 >U F E K V 8Os   $G' 	H	$H3H		HH.H	HH,H	H*H%3H*	H5"H0:H5 	I )H;5I 'H:G<<HH	HH%H*0H5;I r6   c                 4   | j                   j                  |j                        }|| j                  vrWt	        j
                  |      }t               t               g}t	        j                  |g| }t        |      | j                  |<   | j                  |   S r4   )
r&   get_endpointrR   r%   r9   insecure_channelr   r   intercept_channelr   )r0   r6   grpc_urlchannelinterceptorss        r   r5   z(DistributedExecutor._grpc_executuor_stub   s     ==--dkk:4///++H5G+-/O/QRL,,WD|DG->w-GD  *##H--r   )__name__
__module____qualname__r   r!   r   __annotations__r   intr	   r,   r   r   r?   r   r   rS   r   r   r]   r   r5   __classcell__)r1   s   @r   r$   r$   %   s    #0011''!!
v 
 =) = = = '
 '
I '
 '
R 9
 9
K 9
 9
v
. 
.2C 
.r   r$   )!typingr   r   r9   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.proto.utilsr   )chromadb.segment.impl.manager.distributedr   %chromadb.telemetry.opentelemetry.grpcr   r   r!   r"   r$    r   r   <module>rw      sy    !   ? ? " 9 7 J J " D A O A
hx0 
Xh5G 
8H% (3- F.( F.r   