
    Ig|F                         d dl mZ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 d dlmZmZ d dlmZ d d	lmZ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 c m!Z" d dl#Z# G d de
      Z$y)    )DictListOptionalSequence) to_proto_request_version_context) RetryOnRpcErrorClientInterceptor)MetadataReader)System)InvalidArgumentErrorVersionMismatchError)SegmentRequestVersionContext)override)OpenTelemetryGranularitytrace_method)OtelInterceptor)WhereWhereDocumentMetadataEmbeddingRecord)MetadataReaderStubNc                       e Zd ZU dZeed<   eed<   eed<   dededdf fd	Z	e
dd
       Ze
dedefd       Ze
ddee   ddfd       Ze
defd       Z edej(                        e
	 	 	 	 	 	 ddedee   dee   deee      dee   dee   dedee   fd              Zdee   dej                  fdZdee   dej*                  fdZdej2                  defdZ xZS )GrpcMetadataSegmentz$Embedding Metadata segment interface_request_timeout_seconds_metadata_reader_stub_segmentsystemsegmentreturnNc                     t         |   ||       |d   r|d   d   st        d      || _        |j                  j                  d      | _        y )Nmetadatagrpc_url$Missing grpc_url in segment metadata$chroma_query_request_timeout_seconds)super__init__	Exceptionr   settingsrequirer   )selfr   r   	__class__s      h/var/www/html/answerous/venv/lib/python3.12/site-packages/chromadb/segment/impl/metadata/grpc_segment.pyr%   zGrpcMetadataSegment.__init__   sS    )z"'**=j*IBCC(.(?(?2)
%    c                    | j                   d   r| j                   d   d   st        d      t        j                  | j                   d   d         }t	               t               g}t        j                  |g| }t        |      | _        y )Nr    r!   r"   )	r   r&   grpcinsecure_channelr   r   intercept_channelr   r   )r)   channelinterceptorss      r+   startzGrpcMetadataSegment.start)   s{    }}Z(j0I*0UBCC''j(A*(MN')+K+MN((@<@%7%@"r,   request_version_contextc                 ~   t        j                  | j                  d   j                  | j                  d   j                  t	        |            }	 | j
                  j                  || j                        }|j                  S # t        j                  $ r%}|j                         }d|v r
t               |d }~ww xY w)Nid
collection)
segment_idcollection_idversion_contexttimeoutCollection version mismatch)pbCountRecordsRequestr   hexr   r   CountRecordsr   r.   RpcErrordetailsr   count)r)   r4   requestresponse	rpc_errormessages         r+   rD   zGrpcMetadataSegment.count3   s    *,*@*@}}T*..--599<=TU+
		040J0J0W0W55 1X 1H ~~ }} 	'')G,7*,,O		s   'B B< B77B<wherec                     t               NNotImplementedError)r)   rI   s     r+   deletezGrpcMetadataSegment.deleteH       !##r,   c                     t               rK   rL   )r)   s    r+   	max_seqidzGrpcMetadataSegment.max_seqidL   rO   r,   z GrpcMetadataSegment.get_metadatawhere_documentidslimitoffsetinclude_metadatac                    ||dk  rt        d|       ||dk  rt        d|       t        j                  | j                  d   j                  | j                  d   j                  |t        |      dkD  r| j                  |      nd|t        |      dkD  r| j                  |      nd|t        j                  |      nd|||t        |      	      }	 | j                  j                  || j                  	      }	g }|	j"                  D ]$  }| j%                  |      }|j'                  |       & |S # t        j                  $ r%}
|
j                         }d
|v r
t!               |
d}
~
ww xY w)zQuery for embedding metadata.Nr   zLimit cannot be negative: zOffset cannot be negative: r6   r7   )rS   )	r8   r9   rI   rR   rS   rT   rU   rV   r:   r;   r=   )r   r>   QueryMetadataRequestr   r@   len_where_to_proto_where_document_to_protoUserIdsr   r   QueryMetadatar   r.   rB   rC   r   records_from_protoappend)r)   r4   rI   rR   rS   rT   rU   rV   rE   rF   rG   rH   resultsrecordresults                  r+   get_metadataz GrpcMetadataSegment.get_metadataP   s   " &)CE7'KLL&1*&)DVH'MNN+-+B+B}}T*..--599 SZ!^ &&u- "-#n2E2I --n='*

s#D-<=TU,
$	**88 99 9   24&& 	#F%%f-FNN6"	#  }} 	'')G,7*,,O		s   'D9 9E1 E,,E1c           	         t        j                         }||S t        |      dk7  rt        d|       |j	                         D 	]  \  }}t        |t              st        d|       |dk(  s|dk(  rt        |t              st        d|       t        j                  |D cg c]  }| j                  |       c}      }|dk(  r t         j                  j                  |_        nt         j                  j                  |_        |j                  j                  |       |c S t        j                          }||_        t        |t$              st'        |      t        u rWt        j(                         }||_        t         j,                  j.                  |_        |j2                  j                  |       nzt'        |      t4        u rWt        j6                         }	||	_        t         j,                  j.                  |	_        |j8                  j                  |	       nt'        |      t:        u rWt        j<                         }
||
_        t         j,                  j.                  |
_        |j@                  j                  |
       nt'        |      tB        u rWt        jD                         }||_        t         j,                  j.                  |_        |jF                  j                  |       nBt        d|       |j	                         D ]   \  }|d	v rTt        t              st        d
|       t              dk(  stI        fdD              st        d       d }|dk(  rt         jJ                  jL                  }nt         jJ                  jN                  }t'        d         t        u r[t        jP                         }D ]  }|jR                  jU                  |g         ||_+        |jX                  j                  |       t'        d         t4        u r[t        jZ                         }D ]  }|jR                  jU                  |g         ||_+        |j\                  j                  |       tt'        d         t:        u r[t        j^                         }D ]  }|jR                  jU                  |g         ||_+        |j`                  j                  |       t'        d         tB        u r[t        jb                         }D ]  }|jR                  jU                  |g         ||_+        |jd                  j                  |       Rt        d       |dv rt'              t        u rt        j(                         }|_        |dk(  r t         j,                  j.                  |_        n3|dk(  r t         j,                  jf                  |_        nt        d|       |j2                  j                  |       t'              t4        u rt        j6                         }	|	_        |dk(  r t         j,                  j.                  |	_        n3|dk(  r t         j,                  jf                  |	_        nt        d|       |j8                  j                  |	       t'              t:        u r$t        j<                         }
|
_        |dk(  r t         j,                  j.                  |
_        n|dk(  r t         j,                  jf                  |
_        n|dk(  r t         jh                  jj                  |
_6        n}|dk(  r t         jh                  jn                  |
_6        nX|dk(  r t         jh                  jp                  |
_6        n3|dk(  r t         jh                  jr                  |
_6        nt        d|       |j@                  j                  |
       t'              tB        u r$t        jD                         }|_        |dk(  r t         j,                  j.                  |_        n|dk(  r t         j,                  jf                  |_        n|dk(  r t         jh                  jj                  |_6        n}|dk(  r t         jh                  jn                  |_6        nX|dk(  r t         jh                  jp                  |_6        n3|dk(  r t         jh                  jr                  |_6        nt        d|       |jF                  j                  |       t        d       # |jt                  j                  |       	 |S c c}w )N   z1Expected where to have exactly one operator, got z$Expected where key to be a str, got $and$orzLExpected where value for $and or $or to be a list of where expressions, got childrenz8Expected where value to be a string, int, or float, got )$inz$ninzAExpected where value for $in or $nin to be a list of values, got r   c              3   N   K   | ]  }t        |t        d                  yw)r   N)
isinstancetype).0xoperands     r+   	<genexpr>z6GrpcMetadataSegment._where_to_proto.<locals>.<genexpr>   s&      8@AJq$wqz*:;8s   "%z_Expected where operand value to be a non-empty list, and all values to be of the same type got rk   zKExpected where operand value to be a list of strings, ints, or floats, got )$eq$ne$gt$lt$gte$lters   rt   z.Expected where operator to be $eq or $ne, got ru   rv   rw   rx   zIExpected where operator to be one of $eq, $ne, $gt, $lt, $gte, $lte, got z@Expected where operand value to be a string, int, or float, got );r>   r   rY   
ValueErroritemsrm   strlistWhereChildrenrZ   BooleanOperatorANDoperatorORrj   CopyFromDirectComparisonkeydictrn   SingleStringComparisonvalueGenericComparatorEQ
comparatorsingle_string_operandboolSingleBoolComparisonsingle_bool_operandintSingleIntComparisongeneric_comparatorsingle_int_operandfloatSingleDoubleComparisonsingle_double_operandallListOperatorINNINStringListComparisonvaluesextendlist_operatorstring_list_operandBoolListComparisonbool_list_operandIntListComparisonint_list_operandDoubleListComparisondouble_list_operandNENumberComparatorGTnumber_comparatorLTGTELTEdirect_comparison)r)   rI   rF   r   r   wrj   dcsscsbcsicsdcr   r   slorp   bloilodlosfcrq   s                       @r+   rZ   z#GrpcMetadataSegment._where_to_proto   s	   88:=Ou:?CE7K   ++- n	4JCc3' #Gu!MNNf}u!%.$fglfmn  .0-=-=?DE!d2215E. &=(*(:(:(>(>H%(*(:(:(=(=H%!!**84
 $$&BBFeT*;#%335C %CI%'%9%9%<%<CN,,55c:%[D(113C %CI%'%9%9%<%<CN**33C8%[C'002C %CI-/-A-A-D-DC*))2237%[E)335C %CI-/-A-A-D-DC*,,55c:$RSXRYZ  */ w%Hg?2)'48","cdicj k#  w<1,C 8EL8 5 #-#''.i!1#  )-#u,,.OO,>,>M,.OO,?,?M
+s2"$"9"9";C%, 7 #

 1 11# 670=C-22;;C@!'!*-5"$"7"7"9C%, 7 #

 1 11# 670=C-0099#>!'!*-4"$"6"6"8C%, 7 #

 1 11# 670=C-//88=!'!*-6"$"9"9";C%, 7 #

 1 11# 670=C-22;;C@","mnumv w#  "%QQ=C/"$";";"=C(/CI'50131E1E1H1H!)U!2131E1E1H1H&0&TU]T^$_'" !" 44==cB!']d2"$"9"9";C(/CI'50131E1E1H1H!)U!2131E1E1H1H&0&TU]T^$_'" !" 22;;C@!']c1"$"8"8":C(/CI'509;9M9M9P9P 6!)U!29;9M9M9P9P 6!)U!28:8K8K8N8N 5!)U!28:8K8K8N8N 5!)V!38:8K8K8O8O 5!)V!38:8K8K8O8O 5&0&opxoy$z'" !" 11::3?!']e3"$";";"=C(/CI'509;9M9M9P9P 6!)U!29;9M9M9P9P 6!)U!28:8K8K8N8N 5!)U!28:8K8K8N8N 5!)V!38:8K8K8O8O 5!)V!38:8K8K8O8O 5&0&opxoy$z'" !" 44==cB","bcjbk l#  owr &&//3]n	4^ K Fs   &e
c           	      z   t        j                         }||S t        |      dk7  rt        d|       |j	                         D ]m  \  }}|dk(  s|dk(  rt        |t              st        d|       t        j                  |D cg c]  }| j                  |       c}      }|dk(  r t         j                  j                  |_        nt         j                  j                  |_        |j                  j                  |       t        |t              st        d|       t        j                          }||_        |dk(  r t         j$                  j&                  |_        n3|d	k(  r t         j$                  j(                  |_        nt        d
|       |j*                  j                  |       p |S c c}w )Nrf   z:Expected where_document to have exactly one operator, got rg   rh   z^Expected where_document value for $and or $or to be a list of where_document expressions, got ri   z4Expected where_document operand to be a string, got z	$containsz$not_containszLExpected where_document operator to be one of $contains, $not_contains, got )r>   r   rY   ry   rz   rm   r|   WhereDocumentChildrenr[   r~   r   r   r   rj   r   r{   DirectWhereDocumentdocumentWhereDocumentOperatorCONTAINSNOT_CONTAINSdirect)r)   rR   rF   r   rq   r   rj   dwds           r+   r[   z,GrpcMetadataSegment._where_document_to_protoG  s    ##%!O~!#L^L\]  "0!5!5!7 !	.Hg6!X%6!'40$x  zA  yB  C  685M5MHOP1d;;A>P6 v%(*(:(:(>(>H%(*(:(:(=(=H%!!**84 "'3/$NwiX  ,,.&{*#%#;#;#D#DCL0#%#;#;#H#HCL$fgofpq  ((-C!	.F 7 Qs   F8
rb   c                    i }|j                   j                   }|j                         D ]  \  }}|j                  d      r|j                  ||<   '|j                  d      r|j                  ||<   H|j                  d      r|j
                  ||<   i|j                  d      r|j                  ||<   t        d|        t        |j                  |      }|S )N
bool_valuestring_value	int_valuefloat_valuezUnknown metadata value type: )r6   r    )
r    rz   HasFieldr   r   r   r   ry   r   r6   )r)   rb   translated_metadatarecord_metadata_mapr   r   mers          r+   r_   zGrpcMetadataSegment._from_protow  s     DF$oo66-335 
	JJC~~l++0+;+;#C(/+0+=+=#C(,+0??#C(.+0+<+<#C( #@!HII
	J &=PQ
r,   )r   NrK   )NNNNNT) __name__
__module____qualname____doc__r   __annotations__r   r   r
   r%   r   r3   r   rD   r   r   rN   rQ   r   r   ALLr   r   r{   r   r   rd   r>   rZ   r[   r_   __classcell__)r*   s   @r+   r   r      s   .!!--
v 
 
D 
 A A -B s  ( $HUO $t $ $ $3 $ $ * $$  "&26'+# $!%6!66 6 !/	6
 hsm$6 }6 6 6 
)	*6 	
6pxXe_ x xt.&}5.			.`00	 r,   r   )%typingr   r   r   r   chromadb.proto.convertr   chromadb.proto.utilsr   chromadb.segmentr	   chromadb.configr
   chromadb.errorsr   r   chromadb.typesr   r   	overridesr    chromadb.telemetry.opentelemetryr   r   %chromadb.telemetry.opentelemetry.grpcr   r   r   r   chromadb.proto.chroma_pb2_grpcr   chromadb.proto.chroma_pb2proto
chroma_pb2r>   r.   r    r,   r+   <module>r      sQ    1 1 C A + " F 9  B 
 > & & r. rr,   