ó
    üÞ j‰  ã                  óè   • S SK Jr  S SKrS SKJr  S SKJrJrJrJ	r	J
r
Jr  S SKJr  \(       a  S SKr\R                   " \5      r\\\\      \\   \4   rSS jrSS jr " S S	\S
S9r " S S5      rg)é    )ÚannotationsN)ÚSequence)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚOptionalÚUnion)Ú	TypedDictc                ó  • SSK n[        U 5      S:X  d  [        U5      S:X  a  UR                  " / 5      $ UR                  " U 5      n UR                  " U5      nU R                  S   UR                  S   :w  a&  [	        SU R                   SUR                   S35      e SSKnUR                  " XR                  S9n UR                  " XR                  S9nSUR                  XSS	9-
  n[        U[        5      (       a  UR                  " U/5      $ UR                  " U5      $ ! [         aÑ    [        R                  S
5        UR                  R                  U SS9nUR                  R                  USS9nUR                  " SSS9   UR                   " XR"                  5      UR$                  " XV5      -  nSSS5        O! , (       d  f       O= fSWUR&                  " U5      UR(                  " U5      -  '   Us $ f = f)z<Row-wise cosine similarity between two equal-width matrices.r   Né   z;Number of columns in X and Y must be the same. X has shape z and Y has shape Ú.)ÚdtypeÚcosine)ÚmetriczƒUnable to import simsimd, defaulting to NumPy implementation. If you want to use simsimd please install with `pip install simsimd`.)ÚaxisÚignore)ÚdivideÚinvalidg        )ÚnumpyÚlenÚarrayÚshapeÚ
ValueErrorÚsimsimdÚfloat32ÚcdistÚ
isinstanceÚfloatÚImportErrorÚloggerÚdebugÚlinalgÚnormÚerrstateÚdotÚTÚouterÚisnanÚisinf)ÚXÚYÚnpÚsimdÚZÚX_normÚY_normÚ
similaritys           Úa/var/www/html/gaurav/venv/lib/python3.13/site-packages/langsmith/_internal/_embedding_distance.pyÚcosine_similarityr4      s¥  € ãä
ˆ1ƒv�ƒ{”c˜!“f “kØ�xŠx˜‹|Ðà
�Š�‹€AØ
�Š�‹€AØ‡w�wˆq�z�Q—W‘W˜Q‘ZÓÜØIÈ!Ï'É'Èð SØ Ÿw™w˜i qð*ó
ð 	
ðÛà�HŠH�QŸj™jÑ)ˆØ�HŠH�QŸj™jÑ)ˆØ�—
‘
˜1¨�
Ð1Ñ1ˆÜ�aœ×ÑØ—8’8˜Q˜C“=Ð Ø�xŠx˜‹{ÐøÜó Ü�‰ðHô	
ð —‘—‘ ¨�Ð*ˆØ—‘—‘ ¨�Ð*ˆà�[Š[ °(Ó;ØŸš §3¡3›¨"¯(ª(°6Ó*BÑBˆJ÷ <×;Ö;úàBEˆ
�2—8’8˜JÓ'¨"¯(ª(°:Ó*>Ñ>Ñ?ØÒðús2   Â A2D% ÄD% Ä%A$H Æ	0GÆ9	H Ç
G	Ç1H Ç?H c                 óX   ^•  SSK Jm  SU4S jjn U $ ! [         a    [        S5      ef = f)zGet the OpenAI GPT-3 encoder.r   )ÚClientzÔTHe default encoder for the EmbeddingDistance class uses the OpenAI API. Please either install the openai library with `pip install openai` or provide a custom encoder function (Callable[[str], Sequence[float]]).c                ó¬   >• T" 5       nUR                   R                  [        U 5      SS9nUR                   Vs/ sH  o3R                  PM     sn$ s  snf )Nztext-embedding-3-small)ÚinputÚmodel)Ú
embeddingsÚcreateÚlistÚdataÚ	embedding)ÚtextsÚclientÚresponseÚdÚOpenAIClients       €r3   Úencode_textÚ(_get_openai_encoder.<locals>.encode_textI   sO   ø€ Ù“ˆØ×$Ñ$×+Ñ+Ü�u“+Ð%=ð ,ð 
ˆð &.§]¢]Ó3¡] —”¡]Ñ3Ð3ùÒ3s   ºA)r?   zSequence[str]ÚreturnzSequence[Sequence[float]])Úopenair6   r    )rD   rC   s    @r3   Ú_get_openai_encoderrH   >   s<   ø€ ð
Ý1÷4ð Ðøô ó 
ÜðTó
ð 	
ð
ús   ƒ “)c                  ó*   • \ rS rSr% S\S'   S\S'   Srg)ÚEmbeddingConfigéS   z0Callable[[list[str]], Sequence[Sequence[float]]]ÚencoderzCLiteral['cosine', 'euclidean', 'manhattan', 'chebyshev', 'hamming']r   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__rM   ó    r3   rJ   rJ   S   s   ‡ Ø=Ó=ØOÖOrT   rJ   F)Útotalc                  óª   • \ rS rSr S SS jjr      SS jrSS jr\SS j5       r\SS j5       r	\SS j5       r
\SS	 j5       r\SS
 j5       rSrg)ÚEmbeddingDistanceéX   Nc                ó¦   • U=(       d    0 nUR                  S5      =(       d    SU l        UR                  S5      =(       d
    [        5       U l        g )Nr   r   rL   )ÚgetÚdistancerH   rL   )ÚselfÚconfigs     r3   Ú__init__ÚEmbeddingDistance.__init__Y   s;   € ð —˜2ˆØŸ
™
 8Ó,×8°ˆŒØ—z‘z )Ó,×EÔ0CÓ0Eˆ�rT   c                óÒ   •  SS K nU R                  X/5      nUR                  " U5      nU R	                  US   US   5      R                  5       $ ! [         a    [        S5      ef = f)Nr   zWThe EmbeddingDistance class requires NumPy. Please install it with `pip install numpy`.r   )r   r    rL   r   Ú_compute_distanceÚitem)r\   Ú
predictionÚ	referencer-   r:   Úvectors         r3   ÚevaluateÚEmbeddingDistance.evaluatea   sr   € ð
	Ûð —\‘\ :Ð"9Ó:ˆ
Ø—’˜*Ó%ˆØ×%Ñ% f¨Q¡i°¸±Ó;×@Ñ@ÓBÐBøô ó 	Üð'óð ð	ús   ‚A ÁA&c                ó|  • U R                   S:X  a  U R                  X5      $ U R                   S:X  a  U R                  X5      $ U R                   S:X  a  U R                  X5      $ U R                   S:X  a  U R	                  X5      $ U R                   S:X  a  U R                  X5      $ [        SU R                    35      e)Nr   Ú	euclideanÚ	manhattanÚ	chebyshevÚhammingzInvalid distance metric: )r[   Ú_cosine_distanceÚ_euclidean_distanceÚ_manhattan_distanceÚ_chebyshev_distanceÚ_hamming_distancer   )r\   ÚaÚbs      r3   ra   Ú#EmbeddingDistance._compute_distanceq   sª   € Ø�=‰=˜HÓ$Ø×(Ñ(¨Ó.Ð.Ø�]‰]˜kÓ)Ø×+Ñ+¨AÓ1Ð1Ø�]‰]˜kÓ)Ø×+Ñ+¨AÓ1Ð1Ø�]‰]˜kÓ)Ø×+Ñ+¨AÓ1Ð1Ø�]‰]˜iÓ'Ø×)Ñ)¨!Ó/Ð/äÐ8¸¿¹¸ÐHÓIÐIrT   c                ó$   • S[        U /U/5      -
  $ )z´Compute the cosine distance between two vectors.

Args:
    a (np.ndarray): The first vector.
    b (np.ndarray): The second vector.

Returns:
    np.ndarray: The cosine distance.
g      ð?)r4   ©rr   rs   s     r3   rm   Ú"EmbeddingDistance._cosine_distance   s   € ð Ô&¨ s¨Q¨CÓ0Ñ0Ð0rT   c                óD   • [         R                  R                  X-
  5      $ )z»Compute the Euclidean distance between two vectors.

Args:
    a (np.ndarray): The first vector.
    b (np.ndarray): The second vector.

Returns:
    np.floating: The Euclidean distance.
)r-   r#   r$   rv   s     r3   rn   Ú%EmbeddingDistance._euclidean_distanceŒ   s   € ô �y‰y�~‰~˜a™eÓ$Ð$rT   c                óZ   • [         R                  " [         R                  " X-
  5      5      $ )z»Compute the Manhattan distance between two vectors.

Args:
    a (np.ndarray): The first vector.
    b (np.ndarray): The second vector.

Returns:
    np.floating: The Manhattan distance.
)r-   ÚsumÚabsrv   s     r3   ro   Ú%EmbeddingDistance._manhattan_distance™   ó   € ô �vŠv”b—f’f˜Q™U“mÓ$Ð$rT   c                óZ   • [         R                  " [         R                  " X-
  5      5      $ )z»Compute the Chebyshev distance between two vectors.

Args:
    a (np.ndarray): The first vector.
    b (np.ndarray): The second vector.

Returns:
    np.floating: The Chebyshev distance.
)r-   Úmaxr|   rv   s     r3   rp   Ú%EmbeddingDistance._chebyshev_distance¦   r~   rT   c                ó2   • [         R                  " X:g  5      $ )z·Compute the Hamming distance between two vectors.

Args:
    a (np.ndarray): The first vector.
    b (np.ndarray): The second vector.

Returns:
    np.floating: The Hamming distance.
)r-   Úmeanrv   s     r3   rq   Ú#EmbeddingDistance._hamming_distance³   s   € ô �wŠw�q‘v‹ÐrT   )r[   rL   )N)r]   zOptional[EmbeddingConfig])rc   Ústrrd   r…   rF   r   )rr   ú
np.ndarrayrs   r†   rF   znp.floating)rr   r†   rs   r†   rF   r†   )rN   rO   rP   rQ   r^   rf   ra   Ústaticmethodrm   rn   ro   rp   rq   rS   rM   rT   r3   rW   rW   X   s¥   † ð -1ðFà)õFðCàðCð ðCð 
ô	Cô Jð ó
1ó ð
1ð ó
%ó ð
%ð ó
%ó ð
%ð ó
%ó ð
%ð ó
ó ó
rT   rW   )r+   ÚMatrixr,   rˆ   rF   r†   )rF   z4Callable[[Sequence[str]], Sequence[Sequence[float]]])Ú
__future__r   ÚloggingÚcollections.abcr   Útypingr   r   r   r   r	   r
   Útyping_extensionsr   r   r-   Ú	getLoggerrN   r!   r<   r   rˆ   r4   rH   rJ   rW   rM   rT   r3   Ú<module>r�      sz   ðÝ "ã Ý $÷÷ õ (æÛð 
×	Ò	˜8Ó	$€à	ˆt�D˜‘KÑ  $ s¡)¨SÐ0Ñ	1€ô"ôJô*P�i uò P÷
fò frT   