§
    ™ŠtjS*  ã                  ó"  — 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 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"dS )z-LLM Chains for evaluating question answering.é    )ÚannotationsN)ÚSequence)ÚAny)Ú	Callbacks)ÚBaseLanguageModel)ÚPromptTemplate)Ú
ConfigDict)Úoverride)ÚLLMChain)ÚCONTEXT_PROMPTÚ
COT_PROMPTÚPROMPT)ÚLLMEvalChainÚStringEvaluator)ÚRUN_KEYÚtextÚstrÚreturnútuple[str, int] | Nonec                ó¢  — t          j        d|                      ¦   «         t           j        ¦  «        }|rZ|                     d¦  «                             ¦   «         dk    rdS |                     d¦  «                             ¦   «         dk    rdS 	 |                      ¦   «                              ¦   «         d                              t           	                    ddt          j        ¦  «        ¦  «        }|                     ¦   «         dk    rdS |                     ¦   «         dk    rdS |                      ¦   «                              ¦   «         d	                              t           	                    ddt          j        ¦  «        ¦  «        }|                     ¦   «         dk    rdS |                     ¦   «         dk    rdS n# t          $ r Y nw xY wd S )
Nzgrade:\s*(correct|incorrect)é   ÚCORRECT)r   r   Ú	INCORRECT)r   r   r   Ú éÿÿÿÿ)ÚreÚsearchÚstripÚ
IGNORECASEÚgroupÚupperÚsplitÚ	translater   Ú	maketransÚstringÚpunctuationÚ
IndexError)r   ÚmatchÚ
first_wordÚ	last_words       úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_classic/evaluation/qa/eval_chain.pyÚ
_get_scorer,      s•  € ÝŒIÐ5°t·z²z±|´|ÅRÄ]ÑSÔS€EØð "Ø�;Š;�q‰>Œ>×ÒÑ!Ô! YÒ.Ð.Ø�<Ø�;Š;�q‰>Œ>×ÒÑ!Ô! [Ò0Ð0Ø!�>ðà�JŠJ‰LŒL×ÒÑ Ô  Ô#×-Ò-­c¯mªm¸BÀÅFÔDVÑ.WÔ.WÑXÔXð 	ð ×ÒÑÔ Ò*Ð*Ø�<Ø×ÒÑÔ Ò,Ð,Ø!�>à�JŠJ‰LŒLßŠU‰WŒW�RôçŠY•s—}’} R¨­VÔ-?Ñ@Ô@ÑAÔAð 	ð
 �?Š?ÑÔ 	Ò)Ð)Ø�<Ø�?Š?ÑÔ Ò+Ð+Ø!�>ð ,øåð ð ð Øˆðøøøàˆ4s&   ÂA;F? ÄF? Ä'A;F? Æ$F? Æ?
GÇGÚdictc                ón   — |                       ¦   «         }t          |¦  «        }|€d\  }}n|\  }}|||dœS )zwParse the output text.

    Args:
        text: The output text to parse.

    Returns:
        The parsed output.
    N)NN)Ú	reasoningÚvalueÚscore)r   r,   )r   r/   Úparsed_scoresr0   r1   s        r+   Ú_parse_string_eval_outputr3   7   sP   € ð —
’
‘”€IÝ˜yÑ)Ô)€MØÐØ!‰ˆˆuˆuà$‰ˆˆuàØØðð ð ó    c                  ó\  — e Zd ZU dZdZded<    ed¬¦  «        Zee	d.d	„¦   «         ¦   «         Z
ee	d/d
„¦   «         ¦   «         Zee	d.d„¦   «         ¦   «         Zee	d.d„¦   «         ¦   «         Ze	 d0d1d„¦   «         Z	 	 	 d2ddœd3d"„Zd4d$„Ze	dddd%d&œd5d,„¦   «         Ze	dddd%d&œd5d-„¦   «         ZdS )6ÚQAEvalChainz,LLM Chain for evaluating question answering.Úresultsr   Ú
output_keyÚignore©Úextrar   Úboolc                ó   — dS ©NF© ©Úclss    r+   Úis_lc_serializablezQAEvalChain.is_lc_serializableV   ó	   € ð ˆur4   c                ó   — dS )NÚcorrectnessr?   ©Úselfs    r+   Úevaluation_namezQAEvalChain.evaluation_name[   s	   € ð ˆ}r4   c                ó   — dS ©NTr?   rF   s    r+   Úrequires_referencezQAEvalChain.requires_reference`   ó	   € ð ˆtr4   c                ó   — dS rJ   r?   rF   s    r+   Úrequires_inputzQAEvalChain.requires_inpute   rL   r4   NÚllmr   ÚpromptúPromptTemplate | NoneÚkwargsr   c                óš   — |pt           }h d£}|t          |j        ¦  «        k    rd|› d|j        › �}t          |¦  «        ‚ | d||dœ|¤ŽS )a³  Load QA Eval Chain from LLM.

        Args:
            llm: The base language model to use.
            prompt: 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:
            The loaded QA eval chain.
        >   ÚqueryÚanswerÚresultúInput variables should be ú
, but got ©rO   rP   r?   )r   ÚsetÚinput_variablesÚ
ValueError)rA   rO   rP   rR   Úexpected_input_varsÚmsgs         r+   Úfrom_llmzQAEvalChain.from_llmj   s‚   € ð* Ð!�6ˆØ;Ð;Ð;ÐØ¥# fÔ&<Ñ"=Ô"=Ò=Ð=ð4Ð-@ð 4ð 4Ø!Ô1ð4ð 4ð õ ˜S‘/”/Ð!ØˆsÐ4�s 6Ð4Ð4¨VÐ4Ð4Ð4r4   rT   rU   rV   ©Ú	callbacksÚexamplesúSequence[dict]ÚpredictionsÚquestion_keyÚ
answer_keyÚprediction_keyra   r   ú
list[dict]c               ót   ‡‡‡‡— ˆˆˆˆfd„t          |¦  «        D ¦   «         }|                      ||¬¦  «        S )ú5Evaluate question answering examples and predictions.c                óR   •— g | ]#\  }}|‰         |‰         ‰|         ‰         d œ‘Œ$S )©rT   rU   rV   r?   )Ú.0ÚiÚexamplerf   rg   rd   re   s      €€€€r+   ú
<listcomp>z(QAEvalChain.evaluate.<locals>.<listcomp>”   sR   ø€ ð 
ð 
ð 
ñ ��7ð	 ! Ô.Ø! *Ô-Ø% aœ.¨Ô8ðð ð
ð 
ð 
r4   r`   ©Ú	enumerateÚapply)rG   rb   rd   re   rf   rg   ra   Úinputss     ````  r+   ÚevaluatezQAEvalChain.evaluate‰   ó_   øøøø€ ð
ð 
ð 
ð 
ð 
ð 
ð 
õ (¨Ñ1Ô1ð
ñ 
ô 
ˆð �zŠz˜&¨IˆzÑ6Ô6Ð6r4   r-   c                óv   — t          || j                 ¦  «        }t          |v r|t                   |t          <   |S ©N©r3   r8   r   ©rG   rV   Úparsed_results      r+   Ú_prepare_outputzQAEvalChain._prepare_outputŸ   ó5   € Ý1°&¸¼Ô2IÑJÔJˆÝ�fÐÐØ%+­G¤_ˆM�'Ñ"ØÐr4   F©Ú	referenceÚinputra   Úinclude_run_infoÚ
predictionr   ú
str | Noner€   r�   c               óP   —  | |||dœ||¬¦  «        }|                       |¦  «        S )aH  Evaluate Chain or LLM output, based on optional input and label.

        Args:
            prediction: The LLM or chain prediction to evaluate.
            reference: The reference label to evaluate against.
            input: The input to consider during evaluation
            callbacks: The callbacks to use for tracing.
            include_run_info: Whether to include run info in the returned results.
            **kwargs: Additional keyword arguments, including callbacks, tags, etc.

        Returns:
            The evaluation results containing the score or value.
        rl   ©ra   r�   ©r|   ©rG   r‚   r   r€   ra   r�   rR   rV   s           r+   Ú_evaluate_stringszQAEvalChain._evaluate_strings¥   sK   € ð0 �àØ#Ø$ðð ð
  Ø-ð
ñ 
ô 
ˆð ×#Ò# FÑ+Ô+Ð+r4   c             ‹  ót   K  — |                       |||dœ||¬¦  «        ƒ d {V —†}|                      |¦  «        S )Nrl   ©rt   ra   r�   ©Úacallr|   r‡   s           r+   Ú_aevaluate_stringszQAEvalChain._aevaluate_stringsÈ   sg   è è € ð —z’zØ"¨iÀ:ÐNÐNØØ-ð "ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 ×#Ò# FÑ+Ô+Ð+r4   ©r   r<   ©r   r   rx   )rO   r   rP   rQ   rR   r   r   r6   rl   )rb   rc   rd   rc   re   r   rf   r   rg   r   ra   r   r   rh   ©rV   r-   r   r-   ©r‚   r   r   rƒ   r€   rƒ   ra   r   r�   r<   rR   r   r   r-   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r8   Ú__annotations__r	   Úmodel_configÚclassmethodr
   rB   ÚpropertyrH   rK   rN   r_   ru   r|   rˆ   r�   r?   r4   r+   r6   r6   M   sÑ  € € € € € € Ø6Ð6à€JÐÐÐÑà�:Øðñ ô €Lð Øðð ð ñ „Xñ „[ðð Øðð ð ñ „Xñ „Xðð Øðð ð ñ „Xñ „Xðð Øðð ð ñ „Xñ „Xðð ð )-ð5ð 5ð 5ð 5ñ „[ð5ðD $Ø"Ø&ð7ð  $ð7ð 7ð 7ð 7ð 7ð 7ð,ð ð ð ð ð
 !%Ø Ø#Ø!&ð ,ð  ,ð  ,ð  ,ð  ,ñ „Xð ,ðD ð
 !%Ø Ø#Ø!&ð,ð ,ð ,ð ,ð ,ñ „Xð,ð ,ð ,r4   r6   c                  óD  — e Zd ZdZeed.d„¦   «         ¦   «         Zed.d„¦   «         Zed.d„¦   «         Z	 e
d¬¦  «        Zed/d„¦   «         Zeed0d„¦   «         ¦   «         Ze	 d1d2d„¦   «         Z	 	 	 d3ddœd4d"„Zd5d$„Zedddd%d&œd6d,„¦   «         Zedddd%d&œd6d-„¦   «         ZdS )7ÚContextQAEvalChainz4LLM Chain for evaluating QA w/o GT based on context.r   r<   c                ó   — dS r>   r?   r@   s    r+   rB   z%ContextQAEvalChain.is_lc_serializableÞ   rC   r4   c                ó   — dS )z.Whether the chain requires a reference string.Tr?   rF   s    r+   rK   z%ContextQAEvalChain.requires_referenceã   rL   r4   c                ó   — dS )z+Whether the chain requires an input string.Tr?   rF   s    r+   rN   z!ContextQAEvalChain.requires_inputè   rL   r4   r9   r:   rP   r   ÚNonec                óv   — h d£}|t          |j        ¦  «        k    rd|› d|j        › �}t          |¦  «        ‚d S )N>   rT   rV   ÚcontextrW   rX   )rZ   r[   r\   )rA   rP   r]   r^   s       r+   Ú_validate_input_varsz'ContextQAEvalChain._validate_input_varsñ   sa   € à<Ð<Ð<ÐØ¥# fÔ&<Ñ"=Ô"=Ò=Ð=ð4Ð-@ð 4ð 4Ø!Ô1ð4ð 4ð õ ˜S‘/”/Ð!ð >Ð=r4   r   c                ó   — dS )NzContextual Accuracyr?   rF   s    r+   rH   z"ContextQAEvalChain.evaluation_nameû   s
   € ð %Ð$r4   NrO   r   rQ   rR   r   c                óT   — |pt           }|                      |¦  «          | d||dœ|¤ŽS )a¶  Load QA Eval Chain from LLM.

        Args:
            llm: The base language model to use.
            prompt: 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:
            The loaded QA eval chain.
        rY   r?   )r   r¢   ©rA   rO   rP   rR   s       r+   r_   zContextQAEvalChain.from_llm   s?   € ð* Ð)�>ˆØ× Ò  Ñ(Ô(Ð(ØˆsÐ4�s 6Ð4Ð4¨VÐ4Ð4Ð4r4   rT   r¡   rV   r`   rb   rh   rd   re   Úcontext_keyrg   ra   r   c               ót   ‡‡‡‡— ˆˆˆˆfd„t          |¦  «        D ¦   «         }|                      ||¬¦  «        S )rj   c                óR   •— g | ]#\  }}|‰         |‰         ‰|         ‰         d œ‘Œ$S )©rT   r¡   rV   r?   )rm   rn   ro   r¦   rg   rd   re   s      €€€€r+   rp   z/ContextQAEvalChain.evaluate.<locals>.<listcomp>$  sR   ø€ ð 
ð 
ð 
ñ ��7ð	 ! Ô.Ø" ;Ô/Ø% aœ.¨Ô8ðð ð
ð 
ð 
r4   r`   rq   )rG   rb   rd   re   r¦   rg   ra   rt   s     ````  r+   ru   zContextQAEvalChain.evaluate  rv   r4   r-   c                óv   — t          || j                 ¦  «        }t          |v r|t                   |t          <   |S rx   ry   rz   s      r+   r|   z"ContextQAEvalChain._prepare_output/  r}   r4   Fr~   r‚   r   rƒ   r€   r�   c               óP   —  | |||dœ||¬¦  «        }|                       |¦  «        S )Nr©   r…   r†   r‡   s           r+   rˆ   z$ContextQAEvalChain._evaluate_strings5  sK   € ð �àØ$Ø$ðð ð
  Ø-ð
ñ 
ô 
ˆð ×#Ò# FÑ+Ô+Ð+r4   c             ‹  ót   K  — |                       |||dœ||¬¦  «        ƒ d {V —†}|                      |¦  «        S )Nr©   rŠ   r‹   r‡   s           r+   r�   z%ContextQAEvalChain._aevaluate_stringsK  sg   è è € ð —z’zØ"¨yÀJÐOÐOØØ-ð "ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 ×#Ò# FÑ+Ô+Ð+r4   rŽ   )rP   r   r   rŸ   r�   rx   )rO   r   rP   rQ   rR   r   r   r›   r©   )rb   rh   rd   rh   re   r   r¦   r   rg   r   ra   r   r   rh   r�   r‘   )r’   r“   r”   r•   r˜   r
   rB   r™   rK   rN   r	   r—   r¢   rH   r_   ru   r|   rˆ   r�   r?   r4   r+   r›   r›   Û   sÈ  € € € € € Ø>Ð>àØðð ð ñ „Xñ „[ðð ðð ð ñ „Xðð ðð ð ñ „Xðð �:Øðñ ô €Lð ð"ð "ð "ñ „[ð"ð Øð%ð %ð %ñ „Xñ „Xð%ð ð )-ð5ð 5ð 5ð 5ñ „[ð5ð8 $Ø$Ø&ð7ð  $ð7ð 7ð 7ð 7ð 7ð 7ð,ð ð ð ð ð
 !%Ø Ø#Ø!&ð,ð ,ð ,ð ,ð ,ñ „Xð,ð* ð
 !%Ø Ø#Ø!&ð,ð ,ð ,ð ,ð ,ñ „Xð,ð ,ð ,r4   r›   c                  ó~   — e Zd ZdZeedd„¦   «         ¦   «         Zeedd„¦   «         ¦   «         Ze	 ddd„¦   «         Z	dS )ÚCotQAEvalChainz=LLM Chain for evaluating QA using chain of thought reasoning.r   r<   c                ó   — dS r>   r?   r@   s    r+   rB   z!CotQAEvalChain.is_lc_serializablea  rC   r4   r   c                ó   — dS )NzCOT Contextual Accuracyr?   rF   s    r+   rH   zCotQAEvalChain.evaluation_namef  s
   € ð )Ð(r4   NrO   r   rP   rQ   rR   r   c                óT   — |pt           }|                      |¦  «          | d||dœ|¤ŽS )zLoad QA Eval Chain from LLM.rY   r?   )r   r¢   r¥   s       r+   r_   zCotQAEvalChain.from_llmk  s?   € ð Ð%�:ˆØ× Ò  Ñ(Ô(Ð(ØˆsÐ4�s 6Ð4Ð4¨VÐ4Ð4Ð4r4   rŽ   r�   rx   )rO   r   rP   rQ   rR   r   r   r®   )
r’   r“   r”   r•   r˜   r
   rB   r™   rH   r_   r?   r4   r+   r®   r®   ^  s–   € € € € € ØGÐGàØðð ð ñ „Xñ „[ðð Øð)ð )ð )ñ „Xñ „Xð)ð ð )-ð	5ð 	5ð 	5ð 	5ñ „[ð	5ð 	5ð 	5r4   r®   )r   r   r   r   )r   r   r   r-   )#r•   Ú
__future__r   r   r%   Úcollections.abcr   Útypingr   Úlangchain_core.callbacksr   Úlangchain_core.language_modelsr   Úlangchain_core.promptsr   Úpydanticr	   Útyping_extensionsr
   Úlangchain_classic.chains.llmr   Ú+langchain_classic.evaluation.qa.eval_promptr   r   r   Ú#langchain_classic.evaluation.schemar   r   Úlangchain_classic.schemar   r,   r3   r6   r›   r®   r?   r4   r+   ú<module>r¾      sé  ðØ 3Ð 3à "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à .Ð .Ð .Ð .Ð .Ð .Ø <Ð <Ð <Ð <Ð <Ð <Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &à 1Ð 1Ð 1Ð 1Ð 1Ð 1ðð ð ð ð ð ð ð ð ð ð
 NÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð:ð ð ð ð,K,ð K,ð K,ð K,ð K,�(˜O¨\ñ K,ô K,ð K,ð\@,ð @,ð @,ð @,ð @,˜ ?°Lñ @,ô @,ð @,ðF5ð 5ð 5ð 5ð 5Ð'ñ 5ô 5ð 5ð 5ð 5r4   