Ë
    ´ŒjÆ*  ã                  ó  — d Z ddlmZ ddlZddl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 dd	lmZ dd
lmZ ddlmZ ddlmZmZmZ ddlmZmZ ddlmZ dd„Zdd„Z  G d„ deee«      Z! G d„ deee«      Z" G d„ de"«      Z#y)z-LLM Chains for evaluating question answering.é    )ÚannotationsN)ÚSequence)ÚAnyÚOptional)Ú	Callbacks)ÚBaseLanguageModel)ÚPromptTemplate)Ú
ConfigDict)Úoverride)ÚLLMChain)ÚCONTEXT_PROMPTÚ
COT_PROMPTÚPROMPT)ÚLLMEvalChainÚStringEvaluator)ÚRUN_KEYc                ó  — t        j                  d| j                  «       t         j                  «      }|rF|j	                  d«      j                  «       dk(  ry|j	                  d«      j                  «       dk(  ry	 | j                  «       j                  «       d   j                  t        j                  ddt        j                  «      «      }|j                  «       dk(  ry|j                  «       dk(  ry| j                  «       j                  «       d	   j                  t        j                  ddt        j                  «      «      }|j                  «       dk(  ry|j                  «       dk(  ry	 y # t        $ r Y y w xY w)
Nzgrade:\s*(correct|incorrect)é   ÚCORRECT)r   r   Ú	INCORRECT)r   r   r   Ú éÿÿÿÿ)ÚreÚsearchÚstripÚ
IGNORECASEÚgroupÚupperÚsplitÚ	translateÚstrÚ	maketransÚstringÚpunctuationÚ
IndexError)ÚtextÚmatchÚ
first_wordÚ	last_words       úl/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain/evaluation/qa/eval_chain.pyÚ
_get_scorer+      sC  € Ü�I‰IÐ5°t·z±z³|ÄRÇ]Á]ÓS€EÙØ�;‰;�q‹>×ÑÓ! YÒ.ØØ�;‰;�q‹>×ÑÓ! [Ò0Ø!ðà�J‰J‹L×ÑÓ  Ñ#×-Ñ-¬c¯m©m¸BÀÄF×DVÑDVÓ.WÓXð 	ð ×ÑÓ Ò*ØØ×ÑÓ Ò,Ø!à�J‰J‹Lß‰U‹W�Rñç‰Y”s—}‘} R¨¬V×-?Ñ-?Ó@ÓAð 	ð
 �?‰?Ó 	Ò)ØØ�?‰?Ó Ò+Ø!ð ,ð øô ò ØØðús&   Á=A&E5 Ã$E5 Ã8A&E5 ÅE5 Å5	FÆ Fc                ó^   — | j                  «       }t        |«      }|€d\  }}n|\  }}|||dœS )z‚Parse the output text.

    Args:
        text (str): The output text to parse.

    Returns:
        Any: The parsed output.
    )NN)Ú	reasoningÚvalueÚscore)r   r+   )r&   r-   Úparsed_scoresr.   r/   s        r*   Ú_parse_string_eval_outputr1   3   sD   € ð —
‘
“€IÜ˜yÓ)€MØÐØ!‰ˆ‰uà$‰ˆˆuàØØñð ó    c                  óF  — e Zd ZU dZdZded<    ed¬«      Zedd„«       Z	e
dd„«       Ze
dd	„«       Ze
dd
„«       Ze	 d	 	 	 	 	 	 	 dd„«       Z	 	 	 dddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zedddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zedddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)ÚQAEvalChainz,LLM Chain for evaluating question answering.Úresultsr!   Ú
output_keyÚignore©Úextrac                 ó   — y©NF© ©Úclss    r*   Úis_lc_serializablezQAEvalChain.is_lc_serializableR   ó   € àr2   c                 ó   — y)NÚcorrectnessr<   ©Úselfs    r*   Úevaluation_namezQAEvalChain.evaluation_nameV   s   € àr2   c                 ó   — y©NTr<   rC   s    r*   Úrequires_referencezQAEvalChain.requires_referenceZ   ó   € àr2   c                 ó   — yrG   r<   rC   s    r*   Úrequires_inputzQAEvalChain.requires_input^   rI   r2   Nc                óž   — |xs t         }h d£}|t        |j                  «      k7  rd|› d|j                  › �}t        |«      ‚ | d||dœ|¤ŽS )aÒ  Load QA Eval Chain from LLM.

        Args:
            llm (BaseLanguageModel): the base language model to use.

            prompt (PromptTemplate): A prompt template containing the input_variables:
            'input', 'answer' and 'result' that will be used as the prompt
            for evaluation.
            Defaults to PROMPT.

            **kwargs: additional keyword arguments.

        Returns:
            QAEvalChain: the loaded QA eval chain.
        >   ÚqueryÚanswerÚresultúInput variables should be ú
, but got ©ÚllmÚpromptr<   )r   ÚsetÚinput_variablesÚ
ValueError)r>   rS   rT   ÚkwargsÚexpected_input_varsÚmsgs         r*   Úfrom_llmzQAEvalChain.from_llmb   sm   € ð, Ò!œ6ˆÚ;ÐØ¤# f×&<Ñ&<Ó"=Ò=à,Ð-@Ð,Að BØ!×1Ñ1Ð2ð4ð ô ˜S“/Ð!ÙÐ4�s 6Ñ4¨VÑ4Ð4r2   ©Ú	callbacksc               óŽ   — t        |«      D ��cg c]  \  }}||   ||   ||   |   dœ‘Œ }	}}| j                  |	|¬«      S c c}}w )ú5Evaluate question answering examples and predictions.©rM   rN   rO   r\   ©Ú	enumerateÚapply)
rD   ÚexamplesÚpredictionsÚquestion_keyÚ
answer_keyÚprediction_keyr]   ÚiÚexampleÚinputss
             r*   ÚevaluatezQAEvalChain.evaluate‚   si   € ô" (¨Ô1ô
ñ 2‘
��7ð	 ! Ñ.Ø! *Ñ-Ø% a™.¨Ñ8óð
 2ð 	ñ 
ð �z‰z˜&¨IˆzÓ6Ð6ùó
ó   �Ac                óf   — t        || j                     «      }t        |v r|t           |t        <   |S ©N©r1   r6   r   ©rD   rO   Úparsed_results      r*   Ú_prepare_outputzQAEvalChain._prepare_output˜   ó1   € Ü1°&¸¿¹Ñ2IÓJˆÜ�fÑØ%+¬G¡_ˆMœ'Ñ"ØÐr2   F©Ú	referenceÚinputr]   Úinclude_run_infoc               óB   —  | |||dœ||¬«      }| j                  |«      S )aÎ  Evaluate Chain or LLM output, based on optional input and label.

        Args:
            prediction (str): the LLM or chain prediction to evaluate.
            reference (Optional[str], optional): the reference label
                to evaluate against.
            input (Optional[str], optional): the input to consider during evaluation
            callbacks (Callbacks, optional): the callbacks to use for tracing.
            include_run_info (bool, optional): whether to include run info in the
                returned results.
            **kwargs: additional keyword arguments, including callbacks, tags, etc.
        Returns:
            dict: The evaluation results containing the score or value.
        r`   ©r]   rx   ©rs   ©rD   Ú
predictionrv   rw   r]   rx   rX   rO   s           r*   Ú_evaluate_stringszQAEvalChain._evaluate_stringsž   s7   € ñ2 àØ#Ø$ñð
  Ø-ô
ˆð ×#Ñ# FÓ+Ð+r2   c             ‹  óp   K  — | j                  |||dœ||¬«      ƒ d {  –—† }| j                  |«      S 7 Œ­w)Nr`   ©rk   r]   rx   ©Úacallrs   r|   s           r*   Ú_aevaluate_stringszQAEvalChain._aevaluate_stringsÂ   sH   è ø€ ð —z‘zØ"¨iÀ:ÑNØØ-ð "ó 
÷ 
ˆð
 ×#Ñ# FÓ+Ð+ð
úó   ‚6ž4Ÿ6©ÚreturnÚbool©r†   r!   ro   )rS   r   rT   úOptional[PromptTemplate]rX   r   r†   r4   r`   )rd   úSequence[dict]re   rŠ   rf   r!   rg   r!   rh   r!   r]   r   r†   ú
list[dict]©rO   Údictr†   r�   ©r}   r!   rv   úOptional[str]rw   r�   r]   r   rx   r‡   rX   r   r†   r�   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   Ú__annotations__r
   Úmodel_configÚclassmethodr?   ÚpropertyrE   rH   rK   r[   rl   rs   r   r~   rƒ   r<   r2   r*   r4   r4   I   sà  … Ù6à€J�ÓáØô€Lð òó ðð òó ðð òó ðð òó ðð ð ,0ð5àð5ð )ð5ð ð	5ð
 
ò5ó ð5ðF $Ø"Ø&ð7ð  $ñ7à ð7ð $ð7ð ð	7ð
 ð7ð ð7ð ð7ð 
ó7ó,ð ð
 $(Ø#Ø#Ø!&ñ!,ð ð!,ð !ð	!,ð
 ð!,ð ð!,ð ð!,ð ð!,ð 
ò!,ó ð!,ðF ð
 $(Ø#Ø#Ø!&ñ,ð ð,ð !ð	,ð
 ð,ð ð,ð ð,ð ð,ð 
ò,ó ñ,r2   r4   c                  óH  — e Zd ZdZedd„«       Zedd„«       Zedd„«       Z e	d¬«      Z
edd„«       Zedd„«       Ze	 d	 	 	 	 	 	 	 dd
„«       Z	 	 	 dd	dœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zed	d	d	ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zed	d	d	ddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy	)ÚContextQAEvalChainz3LLM Chain for evaluating QA w/o GT based on contextc                 ó   — yr;   r<   r=   s    r*   r?   z%ContextQAEvalChain.is_lc_serializableØ   r@   r2   c                 ó   — y)z.Whether the chain requires a reference string.Tr<   rC   s    r*   rH   z%ContextQAEvalChain.requires_referenceÜ   ó   € ð r2   c                 ó   — y)z+Whether the chain requires an input string.Tr<   rC   s    r*   rK   z!ContextQAEvalChain.requires_inputá   rœ   r2   r7   r8   c                óv   — h d£}|t        |j                  «      k7  rd|› d|j                  › �}t        |«      ‚y )N>   rM   rO   ÚcontextrP   rQ   )rU   rV   rW   )r>   rT   rY   rZ   s       r*   Ú_validate_input_varsz'ContextQAEvalChain._validate_input_varsê   sQ   € â<ÐØ¤# f×&<Ñ&<Ó"=Ò=à,Ð-@Ð,Að BØ!×1Ñ1Ð2ð4ð ô ˜S“/Ð!ð >r2   c                 ó   — y)NzContextual Accuracyr<   rC   s    r*   rE   z"ContextQAEvalChain.evaluation_nameô   s   € à$r2   Nc                óN   — |xs t         }| j                  |«        | d||dœ|¤ŽS )aÚ  Load QA Eval Chain from LLM.

        Args:
            llm (BaseLanguageModel): the base language model to use.

            prompt (PromptTemplate): A prompt template containing the input_variables:
            'query', 'context' and 'result' that will be used as the prompt
            for evaluation.
            Defaults to PROMPT.

            **kwargs: additional keyword arguments.

        Returns:
            ContextQAEvalChain: the loaded QA eval chain.
        rR   r<   )r   r    ©r>   rS   rT   rX   s       r*   r[   zContextQAEvalChain.from_llmø   s1   € ð, Ò)œ>ˆØ× Ñ  Ô(ÙÐ4�s 6Ñ4¨VÑ4Ð4r2   r\   c               óŽ   — t        |«      D ��cg c]  \  }}||   ||   ||   |   dœ‘Œ }	}}| j                  |	|¬«      S c c}}w )r_   ©rM   rŸ   rO   r\   ra   )
rD   rd   re   rf   Úcontext_keyrh   r]   ri   rj   rk   s
             r*   rl   zContextQAEvalChain.evaluate  si   € ô" (¨Ô1ô
ñ 2‘
��7ð	 ! Ñ.Ø" ;Ñ/Ø% a™.¨Ñ8óð
 2ð 	ñ 
ð �z‰z˜&¨IˆzÓ6Ð6ùó
rm   c                óf   — t        || j                     «      }t        |v r|t           |t        <   |S ro   rp   rq   s      r*   rs   z"ContextQAEvalChain._prepare_output(  rt   r2   Fru   c               óB   —  | |||dœ||¬«      }| j                  |«      S )Nr¥   rz   r{   r|   s           r*   r~   z$ContextQAEvalChain._evaluate_strings.  s7   € ñ àØ$Ø$ñð
  Ø-ô
ˆð ×#Ñ# FÓ+Ð+r2   c             ‹  óp   K  — | j                  |||dœ||¬«      ƒ d {  –—† }| j                  |«      S 7 Œ­w)Nr¥   r€   r�   r|   s           r*   rƒ   z%ContextQAEvalChain._aevaluate_stringsD  sH   è ø€ ð —z‘zØ"¨yÀJÑOØØ-ð "ó 
÷ 
ˆð
 ×#Ñ# FÓ+Ð+ð
úr„   r…   )rT   r	   r†   ÚNonerˆ   ro   )rS   r   rT   r‰   rX   r   r†   r™   r¥   )rd   r‹   re   r‹   rf   r!   r¦   r!   rh   r!   r]   r   r†   r‹   rŒ   rŽ   )r�   r‘   r’   r“   r–   r?   r—   rH   rK   r
   r•   r    rE   r[   rl   rs   r   r~   rƒ   r<   r2   r*   r™   r™   Õ   sè  „ Ù=àòó ðð òó ðð òó ðñ Øô€Lð ò"ó ð"ð ò%ó ð%ð ð ,0ð5àð5ð )ð5ð ð	5ð
 
ò5ó ð5ð: $Ø$Ø&ð7ð  $ñ7àð7ð  ð7ð ð	7ð
 ð7ð ð7ð ð7ð 
ó7ó,ð ð
 $(Ø#Ø#Ø!&ñ,ð ð,ð !ð	,ð
 ð,ð ð,ð ð,ð ð,ð 
ò,ó ð,ð* ð
 $(Ø#Ø#Ø!&ñ,ð ð,ð !ð	,ð
 ð,ð ð,ð ð,ð ð,ð 
ò,ó ñ,r2   r™   c                  óX   — e Zd ZdZedd„«       Zedd„«       Ze	 d	 	 	 	 	 	 	 d	d„«       Zy)
ÚCotQAEvalChainz=LLM Chain for evaluating QA using chain of thought reasoning.c                 ó   — yr;   r<   r=   s    r*   r?   z!CotQAEvalChain.is_lc_serializableZ  r@   r2   c                 ó   — y)NzCOT Contextual Accuracyr<   rC   s    r*   rE   zCotQAEvalChain.evaluation_name^  s   € à(r2   Nc                óN   — |xs t         }| j                  |«        | d||dœ|¤ŽS )zLoad QA Eval Chain from LLM.rR   r<   )r   r    r£   s       r*   r[   zCotQAEvalChain.from_llmb  s1   € ð Ò%œ:ˆØ× Ñ  Ô(ÙÐ4�s 6Ñ4¨VÑ4Ð4r2   r…   rˆ   ro   )rS   r   rT   r‰   rX   r   r†   r¬   )	r�   r‘   r’   r“   r–   r?   r—   rE   r[   r<   r2   r*   r¬   r¬   W  sj   „ ÙGàòó ðð ò)ó ð)ð ð ,0ð	5àð	5ð )ð	5ð ð		5ð
 
ò	5ó ñ	5r2   r¬   )r&   r!   r†   zOptional[tuple[str, int]])r&   r!   r†   r�   )$r“   Ú
__future__r   r   r#   Úcollections.abcr   Útypingr   r   Úlangchain_core.callbacksr   Úlangchain_core.language_modelsr   Úlangchain_core.promptsr	   Úpydanticr
   Útyping_extensionsr   Úlangchain.chains.llmr   Ú#langchain.evaluation.qa.eval_promptr   r   r   Úlangchain.evaluation.schemar   r   Úlangchain.schemar   r+   r1   r4   r™   r¬   r<   r2   r*   Ú<module>r¼      sr   ðÙ 3å "ã 	Û Ý $ß  å .Ý <Ý 1Ý Ý &å )ß RÑ Rß EÝ $óó:ô,I,�(˜O¨\ô I,ôX,˜ ?°Lô ,ôD5Ð'õ 5r2   