Ë
    ³Œj‰  ã                  óà   — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlmZ erd dlZ ej                   e«      Zeeee      ee   ef   Zdd„Zdd„Z G d„ d	ed
¬«      Z G d„ d«      Zy)é    )ÚannotationsN)ÚSequence)ÚTYPE_CHECKINGÚAnyÚCallableÚLiteralÚOptionalÚUnion)Ú	TypedDictc                ó  — ddl }t        | «      dk(  st        |«      dk(  r |j                  g «      S  |j                  | «      }  |j                  |«      }| j                  d   |j                  d   k7  r&t	        d| j                  › d|j                  › d�«      ‚	 ddl} |j                  | |j                  ¬«      }  |j                  ||j                  ¬«      }d|j                  | |d¬	«      z
  }t        |t        «      r |j                  |g«      S  |j                  |«      S # t        $ r× t        j                  d
«       |j                  j                  | d¬«      }|j                  j                  |d¬«      } |j                  dd¬«      5   |j                   | |j"                  «       |j$                  ||«      z  }ddd«       n# 1 sw Y   nxY wd |j&                  |«       |j(                  |«      z  <   |cY S w xY w)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           úq/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/_internal/_embedding_distance.pyÚcosine_similarityr4      sÄ  € ãä
ˆ1ƒv�‚{”c˜!“f ’kØˆr�x‰x˜‹|Ðàˆ�‰�‹€AØˆ�‰�‹€AØ‡w�wˆq�z�Q—W‘W˜Q‘ZÒÜØIÈ!Ï'É'Èð SØ Ÿw™w˜i qð*ó
ð 	
ðÛàˆB�H‰H�Q˜bŸj™jÔ)ˆØˆB�H‰H�Q˜bŸj™jÔ)ˆØ�—
‘
˜1˜a¨�
Ó1Ñ1ˆÜ�aœÔØ�2—8‘8˜Q˜C“=Ð Øˆr�x‰x˜‹{ÐøÜò Ü�‰ðHô	
ð —‘—‘ ¨�Ó*ˆØ—‘—‘ ¨�Ó*ˆàˆR�[‰[ °(Ö;Ø˜Ÿ™  1§3¡3›¨(¨"¯(©(°6¸6Ó*BÑBˆJ÷ <×;Ñ;úàBEˆ
�8�2—8‘8˜JÓ'¨(¨"¯(©(°:Ó*>Ñ>Ñ?ØÒðús2   ÂA9D) ÄD) Ä)A,H	Æ2GÇ	H	ÇG	Ç1H	ÈH	c                 óR   ‡— 	 ddl mŠ dˆfd„} | S # t        $ r t        d«      ‚w xY w)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                ó°   •—  ‰«       }|j                   j                  t        | «      d¬«      }|j                  D �cg c]  }|j                  ‘Œ c}S c c}w )Nztext-embedding-3-small)ÚinputÚmodel)Ú
embeddingsÚcreateÚlistÚdataÚ	embedding)ÚtextsÚclientÚresponseÚdÚOpenAIClients       €r3   Úencode_textz(_get_openai_encoder.<locals>.encode_textI   sQ   ø€ Ù“ˆØ×$Ñ$×+Ñ+Ü�u“+Ð%=ð ,ó 
ˆð &.§]¢]Ó3¡] �—“ ]Ñ3Ð3ùÒ3s   ½A)r?   zSequence[str]ÚreturnzSequence[Sequence[float]])Úopenair6   r    )rD   rC   s    @r3   Ú_get_openai_encoderrG   >   s<   ø€ ð
Ý1õ4ð Ðøô ò 
ÜðTó
ð 	
ð
ús   ƒ ‘&c                  ó"   — e Zd ZU ded<   ded<   y)ÚEmbeddingConfigz0Callable[[list[str]], Sequence[Sequence[float]]]ÚencoderzCLiteral['cosine', 'euclidean', 'manhattan', 'chebyshev', 'hamming']r   N)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    r3   rI   rI   S   s   … Ø=Ó=ØOÔOrP   rI   F)Útotalc                  ó�   — e Zd Z	 d
	 dd„Z	 	 	 	 	 	 dd„Zdd„Zedd„«       Zedd„«       Zedd„«       Z	edd„«       Z
edd	„«       Zy)ÚEmbeddingDistanceNc                óˆ   — |xs i }|j                  d«      xs d| _        |j                  d«      xs
 t        «       | _        y )Nr   r   rJ   )ÚgetÚdistancerG   rJ   )ÚselfÚconfigs     r3   Ú__init__zEmbeddingDistance.__init__Y   s;   € ð ’˜2ˆØŸ
™
 8Ó,Ò8°ˆŒØ—z‘z )Ó,ÒEÔ0CÓ0Eˆ�rP   c                óÒ   — 	 dd l }| j                  ||g«      } |j                  |«      }| j	                  |d   |d   «      j                  «       S # t        $ r t        d«      ‚w xY w)Nr   zWThe EmbeddingDistance class requires NumPy. Please install it with `pip install numpy`.r   )r   r    rJ   r   Ú_compute_distanceÚitem)rW   Ú
predictionÚ	referencer-   r:   Úvectors         r3   ÚevaluatezEmbeddingDistance.evaluatea   sv   € ð
	Ûð —\‘\ :¨yÐ"9Ó:ˆ
Ø�—‘˜*Ó%ˆØ×%Ñ% f¨Q¡i°¸±Ó;×@Ñ@ÓBÐBøô ò 	Üð'óð ð	ús   ‚A ÁA&c                ó|  — | j                   dk(  r| j                  ||«      S | j                   dk(  r| j                  ||«      S | j                   dk(  r| j                  ||«      S | j                   dk(  r| j	                  ||«      S | j                   dk(  r| j                  ||«      S t        d| j                   › �«      ‚)Nr   Ú	euclideanÚ	manhattanÚ	chebyshevÚhammingzInvalid distance metric: )rV   Ú_cosine_distanceÚ_euclidean_distanceÚ_manhattan_distanceÚ_chebyshev_distanceÚ_hamming_distancer   )rW   ÚaÚbs      r3   r[   z#EmbeddingDistance._compute_distanceq   s´   € Ø�=‰=˜HÒ$Ø×(Ñ(¨¨AÓ.Ð.Ø�]‰]˜kÒ)Ø×+Ñ+¨A¨qÓ1Ð1Ø�]‰]˜kÒ)Ø×+Ñ+¨A¨qÓ1Ð1Ø�]‰]˜kÒ)Ø×+Ñ+¨A¨qÓ1Ð1Ø�]‰]˜iÒ'Ø×)Ñ)¨!¨QÓ/Ð/äÐ8¸¿¹¸ÐHÓIÐIrP   c                ó$   — dt        | g|g«      z
  S )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   ©rk   rl   s     r3   rf   z"EmbeddingDistance._cosine_distance   s   € ð Ô&¨ s¨Q¨CÓ0Ñ0Ð0rP   c                óF   — t         j                  j                  | |z
  «      S )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$   rn   s     r3   rg   z%EmbeddingDistance._euclidean_distanceŒ   s   € ô �y‰y�~‰~˜a !™eÓ$Ð$rP   c                óX   — t        j                  t        j                  | |z
  «      «      S )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Úabsrn   s     r3   rh   z%EmbeddingDistance._manhattan_distance™   ó   € ô �v‰v”b—f‘f˜Q ™U“mÓ$Ð$rP   c                óX   — t        j                  t        j                  | |z
  «      «      S )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-   Úmaxrr   rn   s     r3   ri   z%EmbeddingDistance._chebyshev_distance¦   rs   rP   c                ó2   — t        j                  | |k7  «      S )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-   Úmeanrn   s     r3   rj   z#EmbeddingDistance._hamming_distance³   s   € ô �w‰w�q˜A‘v‹ÐrP   )N)rX   zOptional[EmbeddingConfig])r]   Ústrr^   rx   rE   r   )rk   ú
np.ndarrayrl   ry   rE   znp.floating)rk   ry   rl   ry   rE   ry   )rK   rL   rM   rY   r`   r[   Ústaticmethodrf   rg   rh   ri   rj   rO   rP   r3   rS   rS   X   s¥   „ ð -1ðFà)óFðCàðCð ðCð 
ó	Có Jð ò
1ó ð
1ð ò
%ó ð
%ð ò
%ó ð
%ð ò
%ó ð
%ð ò
ó ñ
rP   rS   )r+   ÚMatrixr,   r{   rE   ry   )rE   z4Callable[[Sequence[str]], Sequence[Sequence[float]]])Ú
__future__r   ÚloggingÚcollections.abcr   Útypingr   r   r   r   r	   r
   Útyping_extensionsr   r   r-   Ú	getLoggerrK   r!   r<   r   r{   r4   rG   rI   rS   rO   rP   r3   Ú<module>r‚      s|   ðÝ "ã Ý $÷÷ õ (áÛð 
ˆ×	Ñ	˜8Ó	$€à	ˆt�D˜‘KÑ  $ s¡)¨SÐ0Ñ	1€ó"óJô*P�i uõ P÷
fò frP   