§
    ™ŠtjËP  ã                   óž  — 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 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 ddlmZmZ ddlmZ defd„Z ej        e ¦  «        Z! ej"        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*dS )z@A chain for comparing the output of two models using embeddings.é    N)ÚEnum)Úutil)ÚAny)Ú	Callbacks)ÚAsyncCallbackManagerForChainRunÚCallbackManagerForChainRun)Ú
Embeddings)Úpre_init)Ú
ConfigDictÚField)Úoverride)ÚChain)ÚPairwiseStringEvaluatorÚStringEvaluator©ÚRUN_KEYÚreturnc                  óZ   — 	 dd l } n$# t          $ r}d}t          |¦  «        |‚d }~ww xY w| S )Nr   z@Could not import numpy, please install with `pip install numpy`.)ÚnumpyÚImportError)ÚnpÚeÚmsgs      úr/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/evaluation/embedding_distance/base.pyÚ_import_numpyr      sQ   € ð&ØÐÐÐÐøÝð &ð &ð &ØPˆÝ˜#ÑÔ AÐ%øøøøð&øøøð €Is   ‚ ‡
(‘#£(é   )Úmaxsizec                  ó€   — t          t          j        d¦  «        ¦  «        rdS t                               d¦  «         dS )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%   $   sC   € å�DŒN˜7Ñ#Ô#Ñ$Ô$ð ØˆtÝ
‡N‚Nð	ñô ð ð ˆ5r$   c                  óž   — 	 ddl m}  n<# t          $ r/ 	 ddlm}  n$# t          $ r}d}t          |¦  «        |‚d}~ww xY wY nw xY w | ¦   «         S )zZCreate an `Embeddings` object.

    Returns:
        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,   2   s¸   € ð*Ø5Ð5Ð5Ð5Ð5Ð5Ð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dS )Ú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.   K   s3   € € € € € ðð ð €FØ€IØ€IØ€IØ€G€G€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dS )Ú_EmbeddingDistanceChainMixinzãShared functionality for embedding distance evaluators.

    Attributes:
        embeddings: The embedding objects to vectorize the outputs.
        distance_metric: The distance metric to use for comparing the embeddings.
    )Údefault_factoryÚ
embeddings)ÚdefaultÚdistance_metricÚvaluesr   c                 óœ  — |                      d¦  «        }g }	 ddlm} |                     |¦  «         n# t          $ r Y nw xY w	 ddlm} |                     |¦  «         n# t          $ r Y nw xY w|sd}t	          |¦  «        ‚t          |t          |¦  «        ¦  «        r*	 ddl}n$# t          $ r}d}t	          |¦  «        |‚d}~ww xY w|S )z¦Validate that the TikTok library is installed.

        Args:
            values: The values to validate.

        Returns:
            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_installedh   sR  € ð —Z’Z Ñ-Ô-ˆ
Øˆð	Ø9Ð9Ð9Ð9Ð9Ð9à�MŠMÐ*Ñ+Ô+Ð+Ð+øÝð 	ð 	ð 	ØˆDð	øøøð	ðð ð ð ð ð ð �MŠMÐ*Ñ+Ô+Ð+Ð+øÝð 	ð 	ð 	ØˆDð	øøøð ð 	#ðQð õ ˜cÑ"Ô"Ð"å�j¥%¨¡-¤-Ñ0Ô0ð 
	.ð	.Ø����øÝð .ð .ð .ðIð õ " #Ñ&Ô&¨AÐ-øøøøð.øøøð ˆs9   ™5 µ
AÁAÁA" Á"
A/Á.A/Â#B( Â(
C	Â2CÃC	T)Úarbitrary_types_allowedc                 ó   — dgS )z\Return the output keys of the chain.

        Returns:
            The output keys.
        Úscorer#   ©Úselfs    r   Úoutput_keysz(_EmbeddingDistanceChainMixin.output_keysœ   s   € ð ˆyÐr$   Úresultc                 óV   — 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: The metric name.

        Returns:
            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«   sr   € õ Ô$ dÔ&;ÝÔ'¨Ô)AÝÔ'¨Ô)AÝÔ'¨Ô)AÝÔ% tÔ'=ð
ˆð �WÐÐØ˜6”?Ð"Ø) Ð)Ð)ˆÝ˜‰oŒoÐr$   ÚaÚbc           
      ó  — 	 ddl m} d || |¦  «        z
  S # t          $ �rè 	 ddlm}  ||                      ¦   «         |                     ¦   «         ¦  «        cY S # t          $ �r  t          ¦   «         rŸt          ¦   «         }|                      ¦   «         }|                     ¦   «         }|                     ||¦  «        }|j	         
                    |¦  «        }|j	         
                    |¦  «        }	|dk    s|	dk    rY Y dS d|||	z  z  z
  cY cY S t          | d¦  «        r| n| g}t          |d¦  «        r|n|g}t          | d¦  «        r|                      ¦   «         }t          |d¦  «        r|                     ¦   «         }t          d„ t          ||d	¬
¦  «        D ¦   «         ¦  «        }t          d„ |D ¦   «         ¦  «        dz  }t          d„ |D ¦   «         ¦  «        dz  }	|dk    s|	dk    rY Y dS d|||	z  z  z
  cY cY S w xY 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_similarityg      ð?)r/   g        Ú__len__Úflattenc              3   ó&   K  — | ]\  }}||z  V — Œd S ©Nr#   ©Ú.0ÚxÚys      r   ú	<genexpr>z@_EmbeddingDistanceChainMixin._cosine_distance.<locals>.<genexpr>é   s*   è è € Ð!VÐ!V©D¨A¨q ! a¡%Ð!VÐ!VÐ!VÐ!VÐ!VÐ!Vr$   F©Ústrictc              3   ó    K  — | ]	}||z  V — Œ
d S rh   r#   ©rj   rk   s     r   rm   z@_EmbeddingDistanceChainMixin._cosine_distance.<locals>.<genexpr>ê   ó&   è è € Ð3Ð3 q˜Q ™UÐ3Ð3Ð3Ð3Ð3Ð3r$   ç      à?c              3   ó    K  — | ]	}||z  V — Œ
d S rh   r#   rq   s     r   rm   z@_EmbeddingDistanceChainMixin._cosine_distance.<locals>.<genexpr>ë   rr   r$   )Ú!langchain_core.vectorstores.utilsrd   r   Úscipy.spatial.distancer/   rf   r%   r   ÚdotÚlinalgÚnormÚhasattrÚsumÚzip)
ra   rb   rd   r/   r   Úa_flatÚb_flatÚdot_productÚnorm_aÚnorm_bs
             r   rY   z-_EmbeddingDistanceChainMixin._cosine_distanceÀ   sc  € ð#	?ØLÐLÐLÐLÐLÐLàÐ+Ð+¨A¨qÑ1Ô1Ñ1Ð1øÝð 	?ñ 	?ð 	?ð?Ø9Ð9Ð9Ð9Ð9Ð9à�v˜aŸiši™kœk¨1¯9ª9©;¬;Ñ7Ô7Ð7Ð7Ð7øÝð ?ñ ?ð ?å‘>”>ð 	CÝ&™œ�BØŸYšY™[œ[�FØŸYšY™[œ[�FØ"$§&¢&¨°Ñ"8Ô"8�KØœYŸ^š^¨FÑ3Ô3�FØœYŸ^š^¨FÑ3Ô3�FØ ’{�{ f°¢k kØ"˜s˜s˜sØ +°¸&±Ñ"AÑBÐBÐBÐBÐBÐBå% a¨Ñ3Ô3Ð<˜˜¸!¸�Ý% a¨Ñ3Ô3Ð<˜˜¸!¸�Ý˜1˜iÑ(Ô(ð )ØŸYšY™[œ[�FÝ˜1˜iÑ(Ô(ð )ØŸYšY™[œ[�Få!Ð!VÐ!VµC¸ÀÈuÐ4UÑ4UÔ4UÐ!VÑ!VÔ!VÑVÔV�ÝÐ3Ð3¨FÐ3Ñ3Ô3Ñ3Ô3°sÑ:�ÝÐ3Ð3¨FÐ3Ñ3Ô3Ñ3Ô3°sÑ:�Ø˜Q’;�; &¨A¢+ +Ø˜3˜3˜3Ø˜k¨V°f©_Ñ=Ñ>Ð>Ð>Ð>Ð>Ð>ð3?øøøð	?øøøsR   ‚ —H
£5AÁH
ÁB%HÄ H
ÄHÄH
ÄCHÇ2H
Ç6HÈH
ÈHÈH
c           	      óJ  — 	 ddl m}  ||                      ¦   «         |                     ¦   «         ¦  «        S # t          $ r` t	          ¦   «         r#ddl}|j                             | |z
  ¦  «        cY S t          d„ t          | |d¬¦  «        D ¦   «         ¦  «        dz  cY S w xY w)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   )r0   Nc              3   ó2   K  — | ]\  }}||z
  ||z
  z  V — Œd S rh   r#   ri   s      r   rm   zC_EmbeddingDistanceChainMixin._euclidean_distance.<locals>.<genexpr>  s3   è è € ÐMÐM©T¨Q°˜˜A™ ! a¡%Ñ(ÐMÐMÐMÐMÐMÐMr$   Frn   rs   )
rv   r0   rf   r   r%   r   rx   ry   r{   r|   )ra   rb   r0   r   s       r   rZ   z0_EmbeddingDistanceChainMixin._euclidean_distanceð   sÉ   € ð
	UØ8Ð8Ð8Ð8Ð8Ð8à�9˜QŸYšY™[œ[¨!¯)ª)©+¬+Ñ6Ô6Ð6øÝð 	Uð 	Uð 	UÝ‰~Œ~ð -Ø"Ð"Ð"Ð"à”y—~’~ a¨!¡eÑ,Ô,Ð,Ð,Ð,åÐMÐMµS¸¸AÀeÐ5LÑ5LÔ5LÐMÑMÔMÑMÔMÐQTÑTÐTÐTÐTð	Uøøøs   ‚58 ¸9B"Á3,B"Â!B"c           	      ót  — 	 ddl m}  ||                      ¦   «         |                     ¦   «         ¦  «        S # t          $ ru t	          ¦   «         r;t          ¦   «         }|                     |                     | |z
  ¦  «        ¦  «        cY S t          d„ t          | |d¬¦  «        D ¦   «         ¦  «        cY S w xY w)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   )Ú	cityblockc              3   ó@   K  — | ]\  }}t          ||z
  ¦  «        V — Œd S rh   ©Úabsri   s      r   rm   zC_EmbeddingDistanceChainMixin._manhattan_distance.<locals>.<genexpr>  ó0   è è € ÐFÐF¡d a¨•s˜1˜q™5‘z”zÐFÐFÐFÐFÐFÐFr$   Frn   )	rv   r…   rf   r   r%   r   r{   rˆ   r|   )ra   rb   r…   r   s       r   r[   z0_EmbeddingDistanceChainMixin._manhattan_distance  óÈ   € ð		GØ8Ð8Ð8Ð8Ð8Ð8à�9˜QŸYšY™[œ[¨!¯)ª)©+¬+Ñ6Ô6Ð6øÝð 	Gð 	Gð 	GÝ‰~Œ~ð -Ý"‘_”_�Ø—v’v˜bŸfšf Q¨¡U™mœmÑ,Ô,Ð,Ð,Ð,åÐFÐF­c°!°Q¸uÐ.EÑ.EÔ.EÐFÑFÔFÑFÔFÐFÐFÐFð	Gøøøó   ‚58 ¸AB7Â)B7Â6B7c           	      ót  — 	 ddl m}  ||                      ¦   «         |                     ¦   «         ¦  «        S # t          $ ru t	          ¦   «         r;t          ¦   «         }|                     |                     | |z
  ¦  «        ¦  «        cY S t          d„ t          | |d¬¦  «        D ¦   «         ¦  «        cY S w xY w)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   )r2   c              3   ó@   K  — | ]\  }}t          ||z
  ¦  «        V — Œd S rh   r‡   ri   s      r   rm   zC_EmbeddingDistanceChainMixin._chebyshev_distance.<locals>.<genexpr>1  r‰   r$   Frn   )	rv   r2   rf   r   r%   r   Úmaxrˆ   r|   )ra   rb   r2   r   s       r   r\   z0_EmbeddingDistanceChainMixin._chebyshev_distance  rŠ   r‹   c           	      óp  — 	 ddl m}  ||                      ¦   «         |                     ¦   «         ¦  «        S # t          $ rs t	          ¦   «         r)t          ¦   «         }|                     | |k    ¦  «        cY S t          d„ t          | |d¬¦  «        D ¦   «         ¦  «        t          | ¦  «        z  cY S w xY w)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   )r3   c              3   ó,   K  — | ]\  }}||k    ¯d V — ŒdS )r   Nr#   ri   s      r   rm   zA_EmbeddingDistanceChainMixin._hamming_distance.<locals>.<genexpr>G  s*   è è € ÐGÐG™T˜Q ÀÀQÂÀ�qÀÀÀÀÐGÐGr$   Frn   )
rv   r3   rf   r   r%   r   Úmeanr{   r|   Úlen)ra   rb   r3   r   s       r   r]   z._EmbeddingDistanceChainMixin._hamming_distance3  sÇ   € ð		QØ6Ð6Ð6Ð6Ð6Ð6à�7˜1Ÿ9š9™;œ;¨¯	ª	©¬Ñ4Ô4Ð4øÝð 	Qð 	Qð 	QÝ‰~Œ~ð 'Ý"‘_”_�Ø—w’w˜q Ašv‘”Ð&Ð&Ð&åÐGÐG¥S¨¨A°eÐ%<Ñ%<Ô%<ÐGÑGÔGÑGÔGÍ#ÈaÉ&Ì&ÑPÐPÐPÐPð	Qøøøs   ‚58 ¸?B5Á99B5Â4B5Úvectorsc                 óˆ  — |                       | j        ¦  «        }t          ¦   «         rtt          |t	          ¦   «         j        ¦  «        rS ||d                              dd¦  «        |d                              dd¦  «        ¦  «                             ¦   «         }n ||d         |d         ¦  «        }t          |¦  «        S )z®Compute the score based on the distance metric.

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

        Returns:
            The computed score.
        r   r   éÿÿÿÿ)	r`   rB   r%   rG   r   ÚndarrayÚreshapeÚitemÚfloat)rQ   r“   rW   rO   s       r   Ú_compute_scorez+_EmbeddingDistanceChainMixin._compute_scoreI  sª   € ð ×!Ò! $Ô"6Ñ7Ô7ˆÝ‰>Œ>ð 	3�j¨µ-±/´/Ô2IÑJÔJð 	3Ø�F˜7 1œ:×-Ò-¨a°Ñ4Ô4°g¸a´j×6HÒ6HÈÈBÑ6OÔ6OÑPÔP×UÒUÑWÔWˆEˆEà�F˜7 1œ: w¨q¤zÑ2Ô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>   ]   sr  € € € € € € ðð ð #˜UÐ3EÐFÑFÔF€J�
ÐFÐFÑFØ).¨Ð7HÔ7OÐ)PÑ)PÔ)P€OÐ&ÐPÐPÑPàð-°$°s¸C°x´.ð -ÀTÈ#ÈsÈ(Ä^ð -ð -ð -ñ „Xð-ð^ �:Ø $ðñ ô €Lð ð˜T #œYð ð ð ñ „Xðð dð ¨tð ð ð ð ðÐ"3ð ¸ð ð ð ð ð* ð-?˜Cð -? Cð -?¨Cð -?ð -?ð -?ñ „\ð-?ð^ ðU˜sð U sð U¨sð Uð Uð Uñ „\ðUð, ðG˜sð G sð G¨sð Gð Gð Gñ „\ðGð* ðG˜sð G sð G¨sð Gð Gð Gñ „\ðGð* ðQ˜Sð Q Sð Q¨Sð Qð Qð Qñ „\ðQð* cð ¨eð ð ð ð ð ð r$   r>   c                   ó  — e Zd ZdZedefd„¦   «         Zeedefd„¦   «         ¦   «         Z	ede
e         fd„¦   «         Ze	 ddeeef         dedz  deeef         fd	„¦   «         Ze	 ddeeef         dedz  deeef         fd
„¦   «         Zeddddddœdededz  dede
e         dz  deeef         dz  dededefd„¦   «         Zeddddddœdededz  dede
e         dz  deeef         dz  dededefd„¦   «         ZdS )ÚEmbeddingDistanceEvalChainaL  Embedding distance evaluation chain.

    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                 ó   — dS )z‰Return whether the chain requires a reference.

        Returns:
            True if a reference is required, `False` otherwise.
        Tr#   rP   s    r   Úrequires_referencez-EmbeddingDistanceEvalChain.requires_referenceg  s	   € ð ˆtr$   c                 ó"   — d| j         j        › d�S )NÚ
embedding_Ú	_distance©rB   ÚvaluerP   s    r   Úevaluation_namez*EmbeddingDistanceEvalChain.evaluation_namep  s   € ð B˜DÔ0Ô6ÐAÐAÐAÐAr$   c                 ó
   — ddgS )úZReturn the input keys of the chain.

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

        Args:
            inputs: The input data.
            run_manager: The callback manager.

        Returns:
            The computed score.
        r®   r¯   rO   ©r@   Úembed_documentsr%   r   Úarrayrš   ©rQ   r±   r²   r“   r   rO   s         r   Ú_callz EmbeddingDistanceEvalChain._call~  ss   € ð ”/×1Ò1Ø�LÔ! 6¨+Ô#6Ð7ñ
ô 
ˆõ ‰>Œ>ð 	(Ý‘”ˆBØ—h’h˜wÑ'Ô'ˆGØ×#Ò# GÑ,Ô,ˆØ˜ÐÐr$   c              ƒ   óö   K  — | j                              |d         |d         g¦  «        ƒ d{V —†}t          ¦   «         r#t          ¦   «         }|                     |¦  «        }|                      |¦  «        }d|iS )zÝAsynchronously compute the score for a prediction and reference.

        Args:
            inputs: The input data.
            run_manager: The callback manager.

        Returns:
            The computed score.
        r®   r¯   NrO   ©r@   Úaembed_documentsr%   r   r¶   rš   r·   s         r   Ú_acallz!EmbeddingDistanceEvalChain._acall–  s˜   è è € ð œ×8Ò8à�|Ô$Ø�{Ô#ðñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ ‰>Œ>ð 	(Ý‘”ˆBØ—h’h˜wÑ'Ô'ˆGØ×#Ò# GÑ,Ô,ˆØ˜ÐÐr$   F)r¯   Ú	callbacksÚtagsÚmetadataÚinclude_run_infor®   r¯   r½   r¾   r¿   rÀ   Úkwargsc                óR   —  | ||dœ||||¬¦  «        }|                       |¦  «        S )áZ  Evaluate the embedding distance between a prediction and reference.

        Args:
            prediction: The output string from the first model.
            reference: The output string from the second model.
            callbacks: The callbacks to use.
            tags: The tags to apply.
            metadata: The metadata to use.
            include_run_info: Whether to include run information in the output.
            **kwargs: Additional keyword arguments.

        Returns:
            `dict` 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±  sG   € ð6 �Ø",¸9ÐEÐEØØØØ-ð
ñ 
ô 
ˆð ×#Ò# FÑ+Ô+Ð+r$   c             ‹   óv   K  — |                       ||dœ||||¬¦  «        ƒ d{V —†}|                      |¦  «        S )rÃ   rÄ   rÅ   N©ÚacallrV   rÇ   s	            r   Ú_aevaluate_stringsz-EmbeddingDistanceEvalChain._aevaluate_stringsÕ  sk   è è € ð6 —z’zØ",¸9ÐEÐEØØØØ-ð "ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð ×#Ò# 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£   r£   Z  s¨  € € € € € ð
ð 
ð ð Dð ð ð ñ „Xðð ØðB ð Bð Bð Bñ „Xñ „XðBð ð+˜D œIð +ð +ð +ñ „Xð+ð ð :>ð ð  à�S˜#�X”ð ð 0°$Ñ6ð ð 
ˆc�3ˆhŒð	 ð  ð  ñ „Xð ð. ð ?Cð ð  à�S˜#�X”ð ð 5°tÑ;ð ð 
ˆc�3ˆhŒð	 ð  ð  ñ „Xð ð4 ð
 !%Ø#Ø!%Ø*.Ø!&ð!,ð !,ð !,ð ð!,ð ˜‘:ð	!,ð
 ð!,ð �3Œi˜$Ñð!,ð �s˜C�x”. 4Ñ'ð!,ð ð!,ð ð!,ð 
ð!,ð !,ð !,ñ „Xð!,ðF ð
 !%Ø#Ø!%Ø*.Ø!&ð!,ð !,ð !,ð ð!,ð ˜‘:ð	!,ð
 ð!,ð �3Œi˜$Ñð!,ð �s˜C�x”. 4Ñ'ð!,ð ð!,ð ð!,ð 
ð!,ð !,ð !,ñ „Xð!,ð !,ð !,r$   r£   c                   óÊ  — e Zd ZdZedee         fd„¦   «         Zedefd„¦   «         Ze		 dde
eef         dedz  de
eef         fd„¦   «         Ze		 dde
eef         dedz  de
eef         fd	„¦   «         Ze	dddd
dœdedededee         dz  de
eef         dz  dedede
fd„¦   «         Ze	dddd
dœdedededee         dz  de
eef         dz  dedede
fd„¦   «         ZdS )Ú"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                 ó"   — d| j         j        › d�S )zReturn the evaluation name.Úpairwise_embedding_r¨   r©   rP   s    r   r«   z2PairwiseEmbeddingDistanceEvalChain.evaluation_name  s   € ð K TÔ%9Ô%?ÐJÐJÐJÐJr$   Nr±   r²   c                 óæ   — | j                              |d         |d         g¦  «        }t          ¦   «         r#t          ¦   «         }|                     |¦  «        }|                      |¦  «        }d|iS )zÃCompute the score for two predictions.

        Args:
            inputs: The input data.
            run_manager: The callback manager.

        Returns:
            The computed score.
        r®   rÐ   rO   r´   r·   s         r   r¸   z(PairwiseEmbeddingDistanceEvalChain._call  sv   € ð ”/×1Ò1à�|Ô$Ø�~Ô&ðñ
ô 
ˆõ ‰>Œ>ð 	(Ý‘”ˆBØ—h’h˜wÑ'Ô'ˆGØ×#Ò# GÑ,Ô,ˆØ˜ÐÐr$   c              ƒ   óö   K  — | j                              |d         |d         g¦  «        ƒ d{V —†}t          ¦   «         r#t          ¦   «         }|                     |¦  «        }|                      |¦  «        }d|iS )zÒAsynchronously compute the score for two predictions.

        Args:
            inputs: The input data.
            run_manager: The callback manager.

        Returns:
            The computed score.
        r®   rÐ   NrO   rº   r·   s         r   r¼   z)PairwiseEmbeddingDistanceEvalChain._acall0  s˜   è è € ð œ×8Ò8à�|Ô$Ø�~Ô&ðñ
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆõ ‰>Œ>ð 	(Ý‘”ˆBØ—h’h˜wÑ'Ô'ˆGØ×#Ò# GÑ,Ô,ˆØ˜ÐÐr$   F)r½   r¾   r¿   rÀ   r®   rÐ   r½   r¾   r¿   rÀ   rÁ   c                óR   —  | ||dœ||||¬¦  «        }|                       |¦  «        S )aR  Evaluate the embedding distance between two predictions.

        Args:
            prediction: The output string from the first model.
            prediction_b: The output string from the second model.
            callbacks: The callbacks to use.
            tags: The tags to apply.
            metadata: The metadata to use.
            include_run_info: Whether to include run information in the output.
            **kwargs: Additional keyword arguments.

        Returns:
            `dict` 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_pairsK  sG   € ð6 �Ø",¸lÐKÐKØØØØ-ð
ñ 
ô 
ˆð ×#Ò# FÑ+Ô+Ð+r$   c             ‹   óv   K  — |                       ||dœ||||¬¦  «        ƒ d{V —†}|                      |¦  «        S )aa  Asynchronously evaluate the embedding distance between two predictions.

        Args:
            prediction: The output string from the first model.
            prediction_b: The output string from the second model.
            callbacks: The callbacks to use.
            tags: The tags to apply.
            metadata: The metadata to use.
            include_run_info: Whether to include run information in the output.
            **kwargs: Additional keyword arguments.

        Returns:
            `dict` containing:
                - score: The embedding distance between the two predictions.
        rÖ   rÅ   NrÊ   r×   s	            r   Ú_aevaluate_string_pairsz:PairwiseEmbeddingDistanceEvalChain._aevaluate_string_pairso  sk   è è € ð6 —z’zØ",¸lÐKÐ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Î   ú  si  € € € € € ðð ð ð.˜D œIð .ð .ð .ñ „Xð.ð ðK ð Kð Kð Kñ „XðKð ð :>ð ð  à�S˜#�X”ð ð 0°$Ñ6ð ð 
ˆc�3ˆhŒð	 ð  ð  ñ „Xð ð4 ð ?Cð ð  à�S˜#�X”ð ð 5°tÑ;ð ð 
ˆc�3ˆhŒð	 ð  ð  ñ „Xð ð4 ð  $Ø!%Ø*.Ø!&ð!,ð !,ð !,ð ð!,ð ð	!,ð
 ð!,ð �3Œi˜$Ñð!,ð �s˜C�x”. 4Ñ'ð!,ð ð!,ð ð!,ð 
ð!,ð !,ð !,ñ „Xð!,ðF ð  $Ø!%Ø*.Ø!&ð!,ð !,ð !,ð ð!,ð ð	!,ð
 ð!,ð �3Œi˜$Ñð!,ð �s˜C�x”. 4Ñ'ð!,ð ð!,ð ð!,ð 
ð!,ð !,ð !,ñ „Xð!,ð !,ð !,r$   rÎ   )+r7   Ú	functoolsÚloggingÚenumr   Ú	importlibr   Útypingr   Úlangchain_core.callbacksr   Ú langchain_core.callbacks.managerr   r   Úlangchain_core.embeddingsr	   Úlangchain_core.utilsr
   Úpydanticr   r   Útyping_extensionsr   Úlangchain_classic.chains.baser   Ú#langchain_classic.evaluation.schemar   r   Úlangchain_classic.schemar   r   Ú	getLoggerr4   r!   Ú	lru_cacher   r%   r,   r�   r.   r>   r£   rÎ   r#   r$   r   ú<module>rë      su  ðØ FÐ Fà Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .ðð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ø )Ð )Ð )Ð )Ð )Ð )Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ø &Ð &Ð &Ð &Ð &Ð &à /Ð /Ð /Ð /Ð /Ð /Ø XÐ XÐ XÐ XÐ XÐ XÐ XÐ XØ ,Ð ,Ð ,Ð ,Ð ,Ð ,ð�sð ð ð ð ð 
ˆÔ	˜8Ñ	$Ô	$€ð €Ô˜QÐÑÔð
�dð 
ð 
ð 
ñ  Ôð
ð˜Jð ð ð ð ð2ð ð ð ð ˜˜Tñ ô ð ð$zð zð zð zð z 5ñ zô zð zðz],ð ],ð ],ð ],ð ],Ð!=¸ñ ],ô ],ð ],ð@W,ð W,ð W,ð W,ð W,Ø ØñW,ô W,ð W,ð W,ð W,r$   