Ë
    ´Œj�J  ã                   ó~  — d Z ddlZddlZddl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 ddl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 ddlmZ defd„Z ej<                  e«      Z  ejB                  d¬«      de"fd„«       Z#defd„Z$ G d„ de%e«      Z& G d„ de«      Z' G d„ de'e«      Z( G d„ de'e«      Z)y)z@A chain for comparing the output of two models using embeddings.é    N)ÚEnum)Úutil)ÚAnyÚOptional)Ú	Callbacks)ÚAsyncCallbackManagerForChainRunÚCallbackManagerForChainRun)Ú
Embeddings)Úpre_init)Ú
ConfigDictÚField)ÚChain)ÚPairwiseStringEvaluatorÚStringEvaluator©ÚRUN_KEYÚreturnc                  óN   — 	 dd l } | S # t        $ r}d}t        |«      |‚d }~ww xY w)Nr   z@Could not import numpy, please install with `pip install numpy`.)ÚnumpyÚImportError)ÚnpÚeÚmsgs      úv/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/evaluation/embedding_distance/base.pyÚ_import_numpyr      s5   € ð&Ûð €Iøô ò &ØPˆÜ˜#Ó AÐ%ûð&ús   ‚ ˆ	$‘Ÿ$é   )Úmaxsizec                  ól   — t        t        j                  d«      «      ryt        j	                  d«       y)Nr   Ta  NumPy not found in the current Python environment. langchain will use a pure Python implementation for embedding distance operations, which may significantly impact performance, especially for large datasets. For optimal speed and efficiency, consider installing NumPy: pip install numpyF)Úboolr   Ú	find_specÚloggerÚwarning© ó    r   Ú_check_numpyr%   #   s,   € äŒD�N‰N˜7Ó#Ô$ØÜ
‡N�Nð	ôð r$   c                  ó–   — 	 ddl m}   | «       S # t        $ r0 	 ddlm}  n# t        $ r}d}t        |«      |‚d}~ww xY wY  | «       S w xY w)zaCreate an Embeddings object.
    Returns:
        Embeddings: The created Embeddings object.
    r   ©ÚOpenAIEmbeddingsútCould not import OpenAIEmbeddings. Please install the OpenAIEmbeddings package using `pip install langchain-openai`.N)Úlangchain_openair(   r   Ú%langchain_community.embeddings.openai)r(   r   r   s      r   Ú_embedding_factoryr,   1   sl   € ð*Ý5ñ ÓÐøô ò 
*ð		*öøô ò 	*ðQð ô ˜cÓ"¨Ð)ûð	*úðñ ÓÐð
*ús)   ‚ �	A™ ŸA 	<©7·<¼AÁAc                   ó$   — e Zd ZdZdZdZdZdZdZy)ÚEmbeddingDistancea  Embedding Distance Metric.

    Attributes:
        COSINE: Cosine distance metric.
        EUCLIDEAN: Euclidean distance metric.
        MANHATTAN: Manhattan distance metric.
        CHEBYSHEV: Chebyshev distance metric.
        HAMMING: Hamming distance metric.
    ÚcosineÚ	euclideanÚ	manhattanÚ	chebyshevÚhammingN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚCOSINEÚ	EUCLIDEANÚ	MANHATTANÚ	CHEBYSHEVÚHAMMINGr#   r$   r   r.   r.   I   s"   „ ñð €FØ€IØ€IØ€IØ�Gr$   r.   c                   ó€  — e Zd ZU dZ ee¬«      Zeed<    ee	j                  ¬«      Ze	ed<   edeeef   deeef   fd„«       Z ed	¬
«      Zedee   fd„«       Zdedefd„Zde	defd„Zedededefd„«       Zedededefd„«       Zedededefd„«       Zedededefd„«       Zedededefd„«       Zdedefd„Zy)Ú_EmbeddingDistanceChainMixina0  Shared functionality for embedding distance evaluators.

    Attributes:
        embeddings (Embeddings): The embedding objects to vectorize the outputs.
        distance_metric (EmbeddingDistance): The distance metric to use
                                            for comparing the embeddings.
    )Údefault_factoryÚ
embeddings)ÚdefaultÚdistance_metricÚvaluesr   c                 ó\  — |j                  d«      }g }	 ddlm} |j                  |«       	 ddlm} |j                  |«       |sd}t	        |«      ‚t        |t        |«      «      r	 ddl}|S |S # t        $ r Y ŒPw xY w# t        $ r Y ŒGw xY w# t        $ r}d}t	        |«      |‚d}~ww xY w)zÇValidate that the TikTok library is installed.

        Args:
            values (Dict[str, Any]): The values to validate.

        Returns:
            Dict[str, Any]: The validated values.
        r@   r   r'   r)   Nz×The tiktoken library is required to use the default OpenAI embeddings with embedding distance evaluators. Please either manually select a different Embeddings object or install tiktoken using `pip install tiktoken`.)	Úgetr*   r(   Úappendr   r+   Ú
isinstanceÚtupleÚtiktoken)ÚclsrC   r@   Útypes_r(   r   rI   r   s           r   Ú_validate_tiktoken_installedz9_EmbeddingDistanceChainMixin._validate_tiktoken_installedg   sÕ   € ð —Z‘Z Ó-ˆ
Øˆð	Ý9à�M‰MÐ*Ô+ð	õð �M‰MÐ*Ô+ñ ðQð ô ˜cÓ"Ð"ä�j¤%¨£-Ô0ð	.Ûð ˆˆvˆøô= ò 	Ùð	ûô ò 	Ùð	ûô ò .ðIð ô " #Ó&¨AÐ-ûð.ús:   •A1 ­B  Á)B Á1	A=Á<A=Â 	BÂBÂ	B+ÂB&Â&B+T)Úarbitrary_types_allowedc                 ó   — dgS )zgReturn the output keys of the chain.

        Returns:
            List[str]: The output keys.
        Úscorer#   ©Úselfs    r   Úoutput_keysz(_EmbeddingDistanceChainMixin.output_keys›   s   € ð ˆyÐr$   Úresultc                 óD   — d|d   i}t         |v r|t            |t         <   |S )NrO   r   )rQ   rS   Úparseds      r   Ú_prepare_outputz,_EmbeddingDistanceChainMixin._prepare_output¤   s*   € Ø˜6 '™?Ð+ˆÜ�fÑØ$¤W™oˆF”7‰OØˆr$   Úmetricc           
      ó<  — t         j                  | j                  t         j                  | j                  t         j
                  | j                  t         j                  | j                  t         j                  | j                  i}||v r||   S d|› �}t        |«      ‚)z»Get the metric function for the given metric name.

        Args:
            metric (EmbeddingDistance): The metric name.

        Returns:
            Any: The metric function.
        zInvalid metric: )r.   r8   Ú_cosine_distancer9   Ú_euclidean_distancer:   Ú_manhattan_distancer;   Ú_chebyshev_distancer<   Ú_hamming_distanceÚ
ValueError)rQ   rW   Úmetricsr   s       r   Ú_get_metricz(_EmbeddingDistanceChainMixin._get_metricª   sŠ   € ô ×$Ñ$ d×&;Ñ&;Ü×'Ñ'¨×)AÑ)AÜ×'Ñ'¨×)AÑ)AÜ×'Ñ'¨×)AÑ)AÜ×%Ñ% t×'=Ñ'=ð
ˆð �WÑØ˜6‘?Ð"Ø   Ð)ˆÜ˜‹oÐr$   ÚaÚbc                 óf   — 	 ddl m} d || |«      z
  S # t        $ r}d}t        |«      |‚d}~ww xY w)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.
        r   )Úcosine_similarityzžThe cosine_similarity function is required to compute cosine distance. Please install the langchain-community package using `pip install langchain-community`.Ng      ð?)Úlangchain_community.utils.mathrd   r   )ra   rb   rd   r   r   s        r   rY   z-_EmbeddingDistanceChainMixin._cosine_distance¿   sJ   € ð	*ÝHð Ñ& q¨!Ó,Ñ,Ð,øô ò 	*ð6ð ô
 ˜cÓ"¨Ð)ûð	*ús   ‚ ”	0�+«0c                 ó˜   — t        «       r"ddl}|j                  j                  | |z
  «      S t	        d„ t        | |«      D «       «      d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   Nc              3   ó8   K  — | ]  \  }}||z
  ||z
  z  –— Œ y ­w©Nr#   ©Ú.0ÚxÚys      r   Ú	<genexpr>zC_EmbeddingDistanceChainMixin._euclidean_distance.<locals>.<genexpr>å   s"   è ø€ Ð;±©¨¨A�A˜‘E˜a !™eÕ$±ùs   ‚g      à?)r%   r   ÚlinalgÚnormÚsumÚzip©ra   rb   r   s      r   rZ   z0_EmbeddingDistanceChainMixin._euclidean_distanceÕ   s?   € ô Œ>Ûà—9‘9—>‘> ! a¡%Ó(Ð(äÑ;´°Q¸´Ó;Ó;¸sÑBÐBr$   c                 ó¨   — t        «       r-t        «       }|j                  |j                  | |z
  «      «      S t        d„ t	        | |«      D «       «      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.
        c              3   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­wrh   ©Úabsri   s      r   rm   zC_EmbeddingDistanceChainMixin._manhattan_distance.<locals>.<genexpr>ö   ó   è ø€ Ð4©)¡$ ! Q”3�q˜1‘u—:©)ùó   ‚)r%   r   rp   rv   rq   rr   s      r   r[   z0_EmbeddingDistanceChainMixin._manhattan_distanceç   óB   € ô Œ>Ü“ˆBØ—6‘6˜"Ÿ&™&  Q¡›-Ó(Ð(äÑ4¬#¨a°¬)Ó4Ó4Ð4r$   c                 ó¨   — t        «       r-t        «       }|j                  |j                  | |z
  «      «      S t        d„ t	        | |«      D «       «      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.
        c              3   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­wrh   ru   ri   s      r   rm   zC_EmbeddingDistanceChainMixin._chebyshev_distance.<locals>.<genexpr>  rw   rx   )r%   r   Úmaxrv   rq   rr   s      r   r\   z0_EmbeddingDistanceChainMixin._chebyshev_distanceø   ry   r$   c                 ó¢   — t        «       rt        «       }|j                  | |k7  «      S t        d„ t	        | |«      D «       «      t        | «      z  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.
        c              3   ó2   K  — | ]  \  }}||k7  sŒd –— Œ y­w)r   Nr#   ri   s      r   rm   zA_EmbeddingDistanceChainMixin._hamming_distance.<locals>.<genexpr>  s   è ø€ Ð5¡™˜˜A¨a°1«f”1¡ùs   ‚�)r%   r   Úmeanrp   rq   Úlenrr   s      r   r]   z._EmbeddingDistanceChainMixin._hamming_distance	  sB   € ô Œ>Ü“ˆBØ—7‘7˜1 ™6“?Ð"äÑ5¤ Q¨¤Ó5Ó5¼¸A»Ñ>Ð>r$   Úvectorsc                 óL  — | j                  | j                  «      }t        «       rft        |t	        «       j
                  «      rH ||d   j                  dd«      |d   j                  dd«      «      j                  «       }t        |«      S  ||d   |d   «      }t        |«      S )zµCompute the score based on the distance metric.

        Args:
            vectors (np.ndarray): The input vectors.

        Returns:
            float: The computed score.
        r   r   éÿÿÿÿ)	r`   rB   r%   rG   r   ÚndarrayÚreshapeÚitemÚfloat)rQ   r�   rW   rO   s       r   Ú_compute_scorez+_EmbeddingDistanceChainMixin._compute_score  s“   € ð ×!Ñ! $×"6Ñ"6Ó7ˆÜŒ>œj¨´-³/×2IÑ2IÔJÙ˜7 1™:×-Ñ-¨a°Ó4°g¸a±j×6HÑ6HÈÈBÓ6OÓP×UÑUÓWˆEô �U‹|Ðñ ˜7 1™: w¨q¡zÓ2ˆEÜ�U‹|Ðr$   N) r4   r5   r6   r7   r   r,   r@   r
   Ú__annotations__r.   r8   rB   r   ÚdictÚstrr   rL   r   Úmodel_configÚpropertyÚlistrR   rV   r`   ÚstaticmethodrY   rZ   r[   r\   r]   r‡   rˆ   r#   r$   r   r>   r>   [   s›  … ññ #Ð3EÔF€J�
ÓFÙ).Ð7H×7OÑ7OÔ)P€OÐ&ÓPàð-°$°s¸C°x±.ð -ÀTÈ#ÈsÈ(Á^ò -ó ð-ñ^ Ø $ô€Lð ð˜T #™Yò ó ðð dð ¨tó ðÐ"3ð ¸ó ð* ð-˜Cð - Cð -¨Cò -ó ð-ð* ðC˜sð C sð C¨sò Có ðCð" ð5˜sð 5 sð 5¨sò 5ó ð5ð  ð5˜sð 5 sð 5¨sò 5ó ð5ð  ð?˜Sð ? Sð ?¨Sò ?ó ð?ð  cð ¨eô r$   r>   c                   ól  — e Zd ZdZedefd„«       Zedefd„«       Zede	e   fd„«       Z
	 ddeeef   dee   deeef   fd	„Z	 ddeeef   dee   deeef   fd
„Zddddddœdedee   dedee	e      deeeef      dededefd„Zddddddœdedee   dedee	e      deeeef      dededefd„Zy)ÚEmbeddingDistanceEvalChaina"  Use embedding distances to score semantic difference between
    a prediction and reference.

    Examples:
        >>> chain = EmbeddingDistanceEvalChain()
        >>> result = chain.evaluate_strings(prediction="Hello", reference="Hi")
        >>> print(result)
        {'score': 0.5}
    r   c                  ó   — y)z�Return whether the chain requires a reference.

        Returns:
            bool: True if a reference is required, False otherwise.
        Tr#   rP   s    r   Úrequires_referencez-EmbeddingDistanceEvalChain.requires_reference6  s   € ð r$   c                 ó6   — d| j                   j                  › d�S )NÚ
embedding_Ú	_distance©rB   ÚvaluerP   s    r   Úevaluation_namez*EmbeddingDistanceEvalChain.evaluation_name?  s   € à˜D×0Ñ0×6Ñ6Ð7°yÐAÐAr$   c                 ó
   — ddgS )úeReturn the input keys of the chain.

        Returns:
            List[str]: The input keys.
        Ú
predictionÚ	referencer#   rP   s    r   Ú
input_keysz%EmbeddingDistanceEvalChain.input_keysC  s   € ð ˜kÐ*Ð*r$   NÚinputsÚrun_managerc                 ó¼   — | j                   j                  |d   |d   g«      }t        «       rt        «       }|j	                  |«      }| j                  |«      }d|iS )a0  Compute the score for a prediction and reference.

        Args:
            inputs (Dict[str, Any]): The input data.
            run_manager (Optional[CallbackManagerForChainRun], optional):
                The callback manager.

        Returns:
            Dict[str, Any]: The computed score.
        rœ   r�   rO   ©r@   Úembed_documentsr%   r   Úarrayrˆ   ©rQ   rŸ   r    r�   r   rO   s         r   Ú_callz EmbeddingDistanceEvalChain._callL  sa   € ð —/‘/×1Ñ1Ø�LÑ! 6¨+Ñ#6Ð7ó
ˆô Œ>Ü“ˆBØ—h‘h˜wÓ'ˆGØ×#Ñ# GÓ,ˆØ˜ÐÐr$   c              ƒ   óØ   K  — | j                   j                  |d   |d   g«      ƒ d{  –—† }t        «       rt        «       }|j	                  |«      }| j                  |«      }d|iS 7 Œ>­w)a:  Asynchronously compute the score for a prediction and reference.

        Args:
            inputs (Dict[str, Any]): The input data.
            run_manager (AsyncCallbackManagerForChainRun, optional):
                The callback manager.

        Returns:
            Dict[str, Any]: The computed score.
        rœ   r�   NrO   ©r@   Úaembed_documentsr%   r   r¤   rˆ   r¥   s         r   Ú_acallz!EmbeddingDistanceEvalChain._acalld  sr   è ø€ ð Ÿ™×8Ñ8à�|Ñ$Ø�{Ñ#ðó
÷ 
ˆô Œ>Ü“ˆBØ—h‘h˜wÓ'ˆGØ×#Ñ# GÓ,ˆØ˜ÐÐð
úó   ‚'A*©A(ª?A*F)r�   Ú	callbacksÚtagsÚmetadataÚinclude_run_inforœ   r�   r¬   r­   r®   r¯   Úkwargsc                óD   —  | ||dœ||||¬«      }| j                  |«      S )a  Evaluate the embedding distance between a prediction and
        reference.

        Args:
            prediction (str): The output string from the first model.
            reference (str): The reference string (required)
            callbacks (Callbacks, optional): The callbacks to use.
            **kwargs (Any): Additional keyword arguments.

        Returns:
            dict: A dictionary containing:
                - score: The embedding distance between the two
                    predictions.
        ©rœ   r�   ©rŸ   r¬   r­   r®   r¯   ©rV   ©	rQ   rœ   r�   r¬   r­   r®   r¯   r°   rS   s	            r   Ú_evaluate_stringsz,EmbeddingDistanceEvalChain._evaluate_strings  s5   € ñ2 Ø",¸9ÑEØØØØ-ô
ˆð ×#Ñ# FÓ+Ð+r$   c             ‹   ór   K  — | j                  ||dœ||||¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)a  Asynchronously evaluate the embedding distance between
        a prediction and reference.

        Args:
            prediction (str): The output string from the first model.
            reference (str): The output string from the second model.
            callbacks (Callbacks, optional): The callbacks to use.
            **kwargs (Any): Additional keyword arguments.

        Returns:
            dict: A dictionary containing:
                - score: The embedding distance between the two
                    predictions.
        r²   r³   N©ÚacallrV   rµ   s	            r   Ú_aevaluate_stringsz-EmbeddingDistanceEvalChain._aevaluate_strings¡  sL   è ø€ ð2 —z‘zØ",¸9ÑEØØØØ-ð "ó 
÷ 
ˆð ×#Ñ# FÓ+Ð+ð
úó   ‚7Ÿ5 7rh   )r4   r5   r6   r7   r�   r   r“   r‹   r™   rŽ   rž   rŠ   r   r   r	   r¦   r   rª   r   r¶   rº   r#   r$   r   r‘   r‘   +  sÛ  „ ñð ð Dò ó ðð ðB ò Bó ðBð ð+˜D ™Iò +ó ð+ð =Añ à�S˜#�X‘ð ð Ð8Ñ9ð ð 
ˆc�3ˆh‰ó	 ð6 BFñ à�S˜#�X‘ð ð Ð=Ñ>ð ð 
ˆc�3ˆh‰ó	 ð> $(Ø#Ø$(Ø-1Ø!&ò ,ð ð ,ð ˜C‘=ð	 ,ð
 ð ,ð �t˜C‘yÑ!ð ,ð ˜4  S ™>Ñ*ð ,ð ð ,ð ð ,ð 
ó ,ðL $(Ø#Ø$(Ø-1Ø!&ò ,ð ð ,ð ˜C‘=ð	 ,ð
 ð ,ð �t˜C‘yÑ!ð ,ð ˜4  S ™>Ñ*ð ,ð ð ,ð ð ,ð 
ô ,r$   r‘   c                   óF  — e Zd ZdZedee   fd„«       Zedefd„«       Z	 dde	ee
f   dee   de	ee
f   fd„Z	 dde	ee
f   dee   de	ee
f   fd	„Zdddd
dœdedededeee      dee	ee
f      dede
de	fd„Zdddd
dœdedededeee      dee	ee
f      dede
de	fd„Zy)Ú"PairwiseEmbeddingDistanceEvalChaina  Use embedding distances to score semantic difference between two predictions.

    Examples:
    >>> chain = PairwiseEmbeddingDistanceEvalChain()
    >>> result = chain.evaluate_string_pairs(prediction="Hello", prediction_b="Hi")
    >>> print(result)
    {'score': 0.5}
    r   c                 ó
   — ddgS )r›   rœ   Úprediction_br#   rP   s    r   rž   z-PairwiseEmbeddingDistanceEvalChain.input_keysÑ  s   € ð ˜nÐ-Ð-r$   c                 ó6   — d| j                   j                  › d�S )NÚpairwise_embedding_r–   r—   rP   s    r   r™   z2PairwiseEmbeddingDistanceEvalChain.evaluation_nameÚ  s   € à$ T×%9Ñ%9×%?Ñ%?Ð$@À	ÐJÐJr$   NrŸ   r    c                 ó¼   — | j                   j                  |d   |d   g«      }t        «       rt        «       }|j	                  |«      }| j                  |«      }d|iS )a  Compute the score for two predictions.

        Args:
            inputs (Dict[str, Any]): The input data.
            run_manager (CallbackManagerForChainRun, optional):
                The callback manager.

        Returns:
            Dict[str, Any]: The computed score.
        rœ   r¿   rO   r¢   r¥   s         r   r¦   z(PairwiseEmbeddingDistanceEvalChain._callÞ  sd   € ð —/‘/×1Ñ1à�|Ñ$Ø�~Ñ&ðó
ˆô Œ>Ü“ˆBØ—h‘h˜wÓ'ˆGØ×#Ñ# GÓ,ˆØ˜ÐÐr$   c              ƒ   óØ   K  — | j                   j                  |d   |d   g«      ƒ d{  –—† }t        «       rt        «       }|j	                  |«      }| j                  |«      }d|iS 7 Œ>­w)a/  Asynchronously compute the score for two predictions.

        Args:
            inputs (Dict[str, Any]): The input data.
            run_manager (AsyncCallbackManagerForChainRun, optional):
                The callback manager.

        Returns:
            Dict[str, Any]: The computed score.
        rœ   r¿   NrO   r¨   r¥   s         r   rª   z)PairwiseEmbeddingDistanceEvalChain._acallù  sr   è ø€ ð Ÿ™×8Ñ8à�|Ñ$Ø�~Ñ&ðó
÷ 
ˆô Œ>Ü“ˆBØ—h‘h˜wÓ'ˆGØ×#Ñ# GÓ,ˆØ˜ÐÐð
úr«   F)r¬   r­   r®   r¯   rœ   r¿   r¬   r­   r®   r¯   r°   c                óD   —  | ||dœ||||¬«      }| j                  |«      S )a€  Evaluate the embedding distance between two predictions.

        Args:
            prediction (str): The output string from the first model.
            prediction_b (str): The output string from the second model.
            callbacks (Callbacks, optional): The callbacks to use.
            tags (List[str], optional): Tags to apply to traces
            metadata (Dict[str, Any], optional): metadata to apply to
            **kwargs (Any): Additional keyword arguments.

        Returns:
            dict: A dictionary containing:
                - score: The embedding distance between the two
                    predictions.
        ©rœ   r¿   r³   r´   ©	rQ   rœ   r¿   r¬   r­   r®   r¯   r°   rS   s	            r   Ú_evaluate_string_pairsz9PairwiseEmbeddingDistanceEvalChain._evaluate_string_pairs  s5   € ñ4 Ø",¸lÑKØØØØ-ô
ˆð ×#Ñ# FÓ+Ð+r$   c             ‹   ór   K  — | j                  ||dœ||||¬«      ƒ d{  –—† }| j                  |«      S 7 Œ­w)aŸ  Asynchronously evaluate the embedding distance

        between two predictions.

        Args:
            prediction (str): The output string from the first model.
            prediction_b (str): The output string from the second model.
            callbacks (Callbacks, optional): The callbacks to use.
            tags (List[str], optional): Tags to apply to traces
            metadata (Dict[str, Any], optional): metadata to apply to traces
            **kwargs (Any): Additional keyword arguments.

        Returns:
            dict: A dictionary containing:
                - score: The embedding distance between the two
                    predictions.
        rÅ   r³   Nr¸   rÆ   s	            r   Ú_aevaluate_string_pairsz:PairwiseEmbeddingDistanceEvalChain._aevaluate_string_pairs7  sL   è ø€ ð8 —z‘zØ",¸lÑKØØØØ-ð "ó 
÷ 
ˆð ×#Ñ# FÓ+Ð+ð
úr»   rh   )r4   r5   r6   r7   r�   rŽ   r‹   rž   r™   rŠ   r   r   r	   r¦   r   rª   r   r   rÇ   rÉ   r#   r$   r   r½   r½   Ä  s³  „ ñð ð.˜D ™Iò .ó ð.ð ðK ò Kó ðKð =Añ à�S˜#�X‘ð ð Ð8Ñ9ð ð 
ˆc�3ˆh‰ó	 ð< BFñ à�S˜#�X‘ð ð Ð=Ñ>ð ð 
ˆc�3ˆh‰ó	 ð@  $Ø$(Ø-1Ø!&ò!,ð ð!,ð ð	!,ð
 ð!,ð �t˜C‘yÑ!ð!,ð ˜4  S ™>Ñ*ð!,ð ð!,ð ð!,ð 
ó!,ðP  $Ø$(Ø-1Ø!&ò#,ð ð#,ð ð	#,ð
 ð#,ð �t˜C‘yÑ!ð#,ð ˜4  S ™>Ñ*ð#,ð ð#,ð ð#,ð 
ô#,r$   r½   )*r7   Ú	functoolsÚloggingÚenumr   Ú	importlibr   Útypingr   r   Úlangchain_core.callbacksr   Ú langchain_core.callbacks.managerr   r	   Úlangchain_core.embeddingsr
   Úlangchain_core.utilsr   Úpydanticr   r   Úlangchain.chains.baser   Úlangchain.evaluation.schemar   r   Úlangchain.schemar   r   Ú	getLoggerr4   r!   Ú	lru_cacher   r%   r,   r‹   r.   r>   r‘   r½   r#   r$   r   Ú<module>rÙ      sÈ   ðÙ Fã Û Ý Ý ß  å .÷õ 1Ý )ß &å 'ß PÝ $ð�só ð 
ˆ×	Ñ	˜8Ó	$€ð €×Ñ˜QÔð
�dò 
ó  ð
ð˜Jó ô0˜˜Tô ô$M 5ô Mô`V,Ð!=¸ô V,ôrV,Ø ØõV,r$   