o
    Zh;                     @  s   d dl mZ d dlZd dlZd dlmZ d dlZd dl	m
Z
 d dlmZmZmZ ejr1d dlmZ eeZeG dd deeZe ZdS )	    )annotationsN)	dataclass)HuggingfaceEmbeddings)EvaluationModeMetricWithEmbeddingsMetricWithLLM)	Callbacksc                   @  sX   e Zd ZU dZdZded< ejZded< dZ	ded	< d
Z
ded< dddZdddZd
S )AnswerSimilaritya1  
    Scores the semantic similarity of ground truth with generated answer.
    cross encoder score is used to quantify semantic similarity.
    SAS paper: https://arxiv.org/pdf/2108.06130.pdf

    Attributes
    ----------
    name : str
    model_name:
        The model to be used for calculating semantic similarity
        Defaults open-ai-embeddings
        select cross-encoder model for best results
        https://huggingface.co/spaces/mteb/leaderboard
    threshold:
        The threshold if given used to map output to binary
        Default 0.5
    answer_similaritystrnamer   evaluation_modeFboolis_cross_encoderNzt.Optional[float]	thresholdselft.Selfc                 C  s6   t | jtr| jjrdnd| _i | jj| j_d S d S )NTF)
isinstance
embeddingsr   r   Zencode_kwargs)r    r   W/var/www/html/lang_env/lib/python3.10/site-packages/ragas/metrics/_answer_similarity.py__post_init__,   s   zAnswerSimilarity.__post_init__rowt.Dict	callbacksr   is_asyncreturnfloatc                   s   | j d us
J dtt|d }tt|d }| jr't| j tr'tdt	| j 
|I d H }t	| j 
|I d H }tjj|dd}tjj|dd}	|| }
||	 }|
|j }| }t|tjsjJ d| jrr|| jk}| d S )	Nzembeddings must be setground_truthanswerzAasync score [ascore()] not implemented for HuggingFace embeddingsT)ZkeepdimszExpects ndarrayr   )r   tcastr   r   r   r   NotImplementedErrornparrayZ
embed_textZlinalgZnormTflattenZndarrayr   tolist)r   r   r   r   r   r   Zembedding_1Zembedding_2Znorms_1Znorms_2Zembedding_1_normalizedZembedding_2_normalizedZ
similarityZscorer   r   r   _ascore4   s(   

zAnswerSimilarity._ascore)r   r   )
r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____doc__r   __annotations__r   gar   r   r   r   r(   r   r   r   r   r	      s   
 
r	   )
__future__r   loggingtypingr    dataclassesr   numpyr#   Zragas.embeddings.baser   Zragas.metrics.baser   r   r   TYPE_CHECKINGZlangchain_core.callbacks.baser   	getLoggerr)   loggerr	   r
   r   r   r   r   <module>   s    

>