
    -j.                    @   d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
 ddlmZ ddlmZ ddlmZ ej        rdd	lmZ dd
lmZ ddlmZ  edd          Z	 dddZe
 G d de                      Ze
 G d de                      Ze
 G d de                      ZdS )z
Q - question
A - answer: generated_text from RAG pipeline
C - contexts: context used for generation
G - ground_truth: ground truth answer
    )annotationsN)ABCabstractmethod)	dataclass)Enum)	new_group)	RunConfig)	Callbacks)BaseRagasEmbeddings)BaseRagasLLMEvaluationModezqac qa qc gc ga qga qcgeval_modignore_columnst.Optional[t.List[str]]returnt.List[str]c                L   | t           j        k    rg d}n}| t           j        k    rddg}nh| t           j        k    rddg}nS| t           j        k    rddg}n>| t           j        k    rddg}n)| t           j        k    rg d}n| t           j        k    rg d}pg fd|D             S )	N)questionanswercontextsr   r   r   ground_truth)r   r   r   r   )r   r   r   c                    g | ]}|v|	S  r   ).0kr   s     \/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/ragas/metrics/base.py
<listcomp>z(get_required_columns.<locals>.<listcomp>0   s#    777!q66A666    )r   qacqaqcgcgaqgaqcg)r   r   keyss    ` r   get_required_columnsr'      s     >%%%111	^&	&	&H%	^&	&	&J'	^&	&	&N+	^&	&	&.)	^'	'	'AAA	^'	'	'777#)rN7777t7777r   c                      e Zd Zeedd                        Zeedd                        Zedd            Zd d!dZd d"dZ	d d#dZ
	 d$d%dZed&d            Zd	S )'Metricr   strc                    d S Nr   selfs    r   namezMetric.name5   	     	r   r   c                    d S r,   r   r-   s    r   evaluation_modezMetric.evaluation_mode:   r0   r   
run_configr	   c                    dS )z=
        This method will lazy initialize the model.
        Nr   r.   r3   s     r   initzMetric.init?   s	    
 	r   Nlanguage	cache_dirt.Optional[str]Nonec                P    t          d                    | j                            )z;
        Adapt the metric to a different language.
        (adapt() is not implemented for {} metricNotImplementedErrorformatr/   )r.   r7   r8   s      r   adaptzMetric.adaptF   )     "6==diHH
 
 	
r   c                P    t          d                    | j                            )z,
        Save the metric to a path.
        r<   r=   )r.   r8   s     r   savezMetric.saveN   rA   r   r.   t.Selfrowt.Dict	callbacksr
   floatc                8   |pg }t          | j        ||d          \  }}	 t          j        |                     ||d                    }|j        s|                    d|i           n0# t          $ r#}|j        s|                    |           |d }~ww xY w|S )NFinputsrG   is_asyncrE   rG   rL   output)	r   r/   asynciorun_ascoreendedon_chain_end	Exceptionon_chain_error)r.   rE   rG   rmgroup_cmscorees          r   rX   zMetric.scoreV   s    O	 IcY
 
 
H
	3K5II E > 35 1222  	 	 	> %!!!$$$G	 s   *A* *
B4BBTrL   boolc                $  K   |pg }t          | j        ||d          \  }}	 |                     |||           d {V }|j        s|                    d|i           n0# t
          $ r#}|j        s|                    |           |d }~ww xY w|S )NTrJ   rM   rN   )r   r/   rQ   rR   rS   rT   rU   )r.   rE   rG   rL   rV   rW   rX   rY   s           r   ascorezMetric.ascoreh   s       O	 IcY
 
 
H	3,,3(X,VVVVVVVVE > 35 1222  	 	 	> %!!!$$$G	 s   A   
B*BBc                
   K   d S r,   r   )r.   rE   rG   rL   s       r   rQ   zMetric._ascorez   s      r   )r   r*   )r   r   r3   r	   r,   )r7   r*   r8   r9   r   r:   )r8   r9   r   r:   )r.   rD   rE   rF   rG   r
   r   rH   )NT)
r.   rD   rE   rF   rG   r
   rL   rZ   r   rH   )rE   rF   rG   r
   rL   rZ   r   rH   )__name__
__module____qualname__propertyr   r/   r2   r6   r@   rC   rX   r\   rQ   r   r   r   r)   r)   3   s          ^ X    ^ X    ^
 
 
 
 

 
 
 
 
    & RV    $    ^  r   r)   c                  &    e Zd ZU dZded<   ddZdS )MetricWithLLMNzt.Optional[BaseRagasLLM]llmr3   r	   c                x    | j         t          d| j         d          | j                             |           dS )
        Init any models in the metric, this is invoked before evaluate()
        to load all the models
        Also check if the api key is valid for OpenAI and AzureOpenAI
        NMetric 'zc' has no valid LLM provided (self.llm is None). Please initantiate a the metric with an LLM to run.)re   
ValueErrorr/   set_run_configr5   s     r   r6   zMetricWithLLM.init   sX     8 J49  J  J  J   	
+++++r   r^   )r_   r`   ra   re   __annotations__r6   r   r   r   rd   rd      s;         $(C((((
, 
, 
, 
, 
, 
,r   rd   c                  &    e Zd ZU dZded<   ddZdS )MetricWithEmbeddingsNzt.Optional[BaseRagasEmbeddings]
embeddingsr3   r	   c                x    | j         t          d| j         d          | j                             |           dS )rg   Nrh   zx' has no valid embeddings provided (self.embeddings is None). Please initantiate a the metric with an embeddings to run.)rn   ri   r/   rj   r5   s     r   r6   zMetricWithEmbeddings.init   sX     ?" _49  _  _  _   	&&z22222r   r^   )r_   r`   ra   rn   rk   r6   r   r   r   rm   rm      s;         26J6666
3 
3 
3 
3 
3 
3r   rm   r,   )r   r   r   r   r   r   )__doc__
__future__r   rO   typingtabcr   r   dataclassesr   enumr   ragas.callbacksr   ragas.run_configr	   TYPE_CHECKINGlangchain_core.callbacksr
   ragas.embeddingsr   
ragas.llmsr   r   r'   r)   rd   rm   r   r   r   <module>r}      s    # " " " " "      # # # # # # # # ! ! ! ! ! !       % % % % % % & & & & & &? (222222444444'''''' &(ABB IM8 8 8 8 8, H H H H HS H H HV , , , , ,F , , ,  3 3 3 3 36 3 3 3 3 3r   