§
    è˜ºh"¿  ã                  ó’  — d Z ddlmZ ddlZddlZddl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mZmZmZmZmZmZ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mZ ddl m!Z!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/m0Z0 ddl1m2Z2m3Z3 ddl4m5Z5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z; ddl<m=Z= ddl>m?Z? ddl@mAZA ddlBmCZC ddlDmEZE ddlFmGZG ddlHmIZImJZJmKZK ddlLmMZN ddlOm$ZP ddlOmQZQmRZR erddlSZT ejU        eV¦  «        ZWeeg eeEe!f         f         eeeXgef         e!eEf         ZYeeg eeEe!f         f         ef         ZZ G d„ de[¦  «        Z\ G d „ d!eX¦  «        Z] G d"„ d#eX¦  «        Z^	 d�d‘d+„Z_d’d.„Z`d“d0„Zad”d6„Zbd•d9„Zcd–d;„Zdd—dC„Zed˜dI„Zfd™dK„ZgdšdM„Zhd›dW„ZidœdY„Zjd�d[„Zkdddd\œdždc„ZlddddœdŸdg„Zmddhœd dk„Znddddœd¡dl„Zoddddœd¢dn„Zpddhœd do„Zq	 	 d£d¤dv„Zr G dw„ dxeAdy¬z¦  «        Zsejt         G d{„ d|¦  «        ¦   «         Zud¥d~„Zvd¦d�„Zwd‚Zxddƒdddydd„œd§d‹„Zyddƒdddydd„œd§dŒ„Zzd�Z{e{ez_         e{ |                    dŽd�¦  «        ey_         dS )¨z>Utilities for running language models or Chains over datasets.é    )ÚannotationsN)ÚdatetimeÚtimezone)ÚEnum)	ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚListÚOptionalÚTupleÚUnionÚcast)Úwarn_deprecated)ÚBaseLanguageModel)ÚBaseMessageÚmessages_from_dict)Ú
ChatResultÚ	LLMResult)ÚRunnableÚRunnableConfigÚRunnableLambda©Úconfig)Úutils)ÚEvaluatorCallbackHandlerÚwait_for_all_evaluators)ÚLangChainTracer)ÚClient)Úget_git_info)ÚEvaluationResultÚRunEvaluator)Úas_runnableÚis_traceable_function)ÚDatasetÚDataTypeÚExampleÚTracerSession)ÚLangSmithError)Ú	HTTPError)Ú	TypedDict)Ú	Callbacks)ÚChain)Úload_evaluator)ÚEvaluatorTypeÚPairwiseStringEvaluatorÚStringEvaluator)Ú
evaluation)Úname_generationÚprogressc                  ó   — e Zd ZdZdS )ÚInputFormatErrorz(Raised when the input format is invalid.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úo/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain/smith/evaluation/runner_utils.pyr6   r6   H   s   € € € € € Ø2Ð2Ð2Ð2r<   r6   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )Ú
TestResultz1A dictionary of the results of a single test run.Úreturnúpd.DataFramec                ó¢   — |                       ¦   «         }d„ |j        D ¦   «         }|                     d¬¦  «                             |d¬¦  «        S )zÿReturn quantiles for the feedback scores.

        This method calculates and prints the quantiles for the feedback scores
        across all feedback keys.

        Returns:
            A DataFrame containing the quantiles for each feedback key.
        c                ó�   — g | ]C}|                      d ¦  «        s*|                      d¦  «        s|                      d¦  «        ¯A|‘ŒDS )úinputs.úoutputs.Ú	reference)Ú
startswith)Ú.0Úcols     r=   ú
<listcomp>z5TestResult.get_aggregate_feedback.<locals>.<listcomp>_   sf   € ð 
ð 
ð 
àØ�~Š~˜iÑ(Ô(ð
ð �~Š~˜jÑ)Ô)ð	
ð
 �~Š~˜kÑ*Ô*ð
Øð
ð 
ð 
r<   Úall)Úincludeé   )Úaxis)Úto_dataframeÚcolumnsÚdescribeÚdrop)ÚselfÚdfÚto_drops      r=   Úget_aggregate_feedbackz!TestResult.get_aggregate_feedbackR   s^   € ð ×ÒÑ Ô ˆð
ð 
à”zð
ñ 
ô 
ˆð �{Š{ 5ˆ{Ñ)Ô)×.Ò.¨w¸QÐ.Ñ?Ô?Ð?r<   c           	     ó„  — 	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY wg }g }| d                              ¦   «         D �]g\  }}|d         }|                     d¦  «        }t	          |t
          ¦  «        rd„ |                     ¦   «         D ¦   «         }	n	|€i }	nd|i}	i d„ |d	                              ¦   «         D ¦   «         ¥|	¥}
d
|v r^t	          |d
         t
          ¦  «        r8|
                     d„ |d
                              ¦   «         D ¦   «         ¦  «         n|d
         |
d
<   |
                     i d„ |D ¦   «         ¥|                     d¦  «        |d         |                     d¦  «        dœ¥¦  «         |                     |
¦  «         |                     |¦  «         �Œi |j        ||¬¦  «        S )z#Convert the results to a dataframe.r   NzfPandas is required to convert the results to a dataframe. to install pandas, run `pip install pandas`.ÚresultsÚfeedbackÚoutputc                ó    — i | ]\  }}d |› �|“ŒS )rE   r;   ©rH   ÚkÚvs      r=   ú
<dictcomp>z+TestResult.to_dataframe.<locals>.<dictcomp>x   s$   € ÐHÐHÐH±°°1˜. Q˜.˜.¨!ÐHÐHÐHr<   c                ó    — i | ]\  }}d |› �|“ŒS )rD   r;   r\   s      r=   r_   z+TestResult.to_dataframe.<locals>.<dictcomp>   s$   € ÐHÐHÐH©¨¨1�=˜Q�=�= !ÐHÐHÐHr<   ÚinputrF   c                ó    — i | ]\  }}d |› �|“ŒS )z
reference.r;   r\   s      r=   r_   z+TestResult.to_dataframe.<locals>.<dictcomp>…   s'   € ÐUÐUÐU±°°AÐ) aÐ)Ð)¨1ÐUÐUÐUr<   c                ó.   — i | ]}d |j         › �|j        “ŒS )z	feedback.)ÚkeyÚscore)rH   Úfs     r=   r_   z+TestResult.to_dataframe.<locals>.<dictcomp>‹   s'   € ÐFÐFÐF¸Ð* 1¤5Ð*Ð*¨A¬GÐFÐFÐFr<   ÚErrorÚexecution_timeÚrun_id)Úerrorrh   ri   )Úindex)	ÚpandasÚImportErrorÚitemsÚgetÚ
isinstanceÚdictÚupdateÚappendÚ	DataFrame)rS   ÚpdÚeÚindicesÚrecordsÚ
example_idÚresultrY   Úoutput_rZ   Úrs              r=   rO   zTestResult.to_dataframeh   s/  € ð	ØÐÐÐÐøÝð 	ð 	ð 	Ýð@ñô ð ðøøøøð	øøøð ˆØˆØ"& y¤/×"7Ò"7Ñ"9Ô"9ð 	'ñ 	'ÑˆJ˜Ø˜jÔ)ˆHØ—j’j Ñ*Ô*ˆGÝ˜'¥4Ñ(Ô(ð -ØHÐH¸¿º¹¼ÐHÑHÔH��Ø�Ø��à" GÐ,�ðØHÐH°°w´×0EÒ0EÑ0GÔ0GÐHÑHÔHðàðˆAð ˜fÐ$Ð$Ý˜f [Ô1µ4Ñ8Ô8ð 9Ø—H’HØUÐU¸ÀÔ9L×9RÒ9RÑ9TÔ9TÐUÑUÔUñô ð ð ð &,¨KÔ%8�A�k‘NØ�HŠHðØFÐF¸XÐFÑFÔFðà#ŸZšZ¨Ñ0Ô0Ø&,Ð-=Ô&>Ø$Ÿjšj¨Ñ2Ô2ð	ð ð ñô ð ð �NŠN˜1ÑÔÐØ�NŠN˜:Ñ&Ô&Ð&Ñ&àˆrŒ|˜G¨7Ð3Ñ3Ô3Ð3s   ‚ ‡
&‘!¡&N)r@   rA   )r7   r8   r9   r:   rV   rO   r;   r<   r=   r?   r?   O   sF   € € € € € Ø;Ð;ð@ð @ð @ð @ð,,4ð ,4ð ,4ð ,4ð ,4ð ,4r<   r?   c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )Ú	EvalErrorz"Your architecture raised an error.rg   ÚBaseExceptionÚkwargsr   r@   ÚNonec                ó>   •—  t          ¦   «         j        dd|i|¤Ž d S )Nrg   r;   )ÚsuperÚ__init__)rS   rg   r€   Ú	__class__s      €r=   r„   zEvalError.__init__š   s+   ø€ Ø�‰ŒÔÐ/Ð/˜uÐ/¨Ð/Ð/Ð/Ð/Ð/r<   ÚnameÚstrc                óV   — 	 | |         S # t           $ r t          d|› d�¦  «        ‚w xY w)Nz%'EvalError' object has no attribute 'ú')ÚKeyErrorÚAttributeError)rS   r†   s     r=   Ú__getattr__zEvalError.__getattr__�   sK   € ð	RØ˜”:ÐøÝð 	Rð 	Rð 	RÝ Ð!PÈÐ!PÐ!PÐ!PÑQÔQÐQð	Røøøs   ‚
 Š()rg   r   r€   r   r@   r�   )r†   r‡   r@   r   )r7   r8   r9   r:   r„   rŒ   Ú__classcell__)r…   s   @r=   r~   r~   —   s_   ø€ € € € € Ø,Ð,ð0ð 0ð 0ð 0ð 0ð 0ðRð Rð Rð Rð Rð Rð Rð Rr<   r~   ú<my_dataset>Úllm_or_chain_factoryÚMODEL_OR_CHAIN_FACTORYÚdataset_namer‡   r@   ÚMCFc           	     óÄ  ‡‡‡	‡
‡— t          | t          ¦  «        rD| Š‰j        j        }| j        �*‰j        j        j        }t          d|› d|› d|› d�¦  «        ‚ˆfd„S t          | t          ¦  «        r| S t          | t          ¦  «        r| Š	ˆ	fd„S t          | ¦  «        �r>t          | ¦  «        r't          t          t          | ¦  «        ¦  «        Š
ˆ
fd„S 	  | ¦   «         }nk# t          $ r^ t          t          | ¦  «        }t          j        |¦  «        }t                                d	|› d
�¦  «         t%          |¦  «        Šˆfd„cY S w xY wt          t          | ¦  «        Št          |t          ¦  «        r|S t          t          t          |¦  «        ¦  «        r't          t          t          |¦  «        ¦  «        Š
ˆ
fd„S t          |t          ¦  «        sˆfd„S ‰S | S )zšForgive the user if they pass in a chain without memory instead of a chain
    factory. It's a common mistake. Raise a more helpful error message as well.Na$  Cannot directly evaluate a chain with stateful memory. To evaluate this chain, pass in a chain constructor that initializes fresh memory each time it is called.  This will safegaurd against information leakage between dataset examples.
For example:

def chain_constructor():
    new_memory = z(...)
    return z*(memory=new_memory, ...)

run_on_dataset("z", chain_constructor, ...)c                 ó   •— ‰ S ©Nr;   )Úchains   €r=   ú<lambda>z(_wrap_in_chain_factory.<locals>.<lambda>¼   s   ø€ �u€ r<   c                 ó   •— ‰ S r•   r;   )Úlcfs   €r=   r—   z(_wrap_in_chain_factory.<locals>.<lambda>Â   s   ø€ �s€ r<   c                 ó   •— ‰ S r•   r;   ©Ú	runnable_s   €r=   r—   z(_wrap_in_chain_factory.<locals>.<lambda>Æ   ó   ø€ ˜9€ r<   zWrapping function z as RunnableLambda.c                 ó   •— ‰ S r•   r;   )Úwrappeds   €r=   r—   z(_wrap_in_chain_factory.<locals>.<lambda>Ï   s   ø€ ˜7€ r<   c                 ó   •— ‰ S r•   r;   r›   s   €r=   r—   z(_wrap_in_chain_factory.<locals>.<lambda>×   r�   r<   c                 ó"   •— t          ‰ ¦  «        S r•   )r   )Úconstructors   €r=   r—   z(_wrap_in_chain_factory.<locals>.<lambda>Ú   s   ø€ �>¨+Ñ6Ô6€ r<   )rp   r-   r…   r7   ÚmemoryÚ
ValueErrorr   r   Úcallabler$   r#   r   r	   Ú	TypeErrorÚinspectÚ	signatureÚloggerÚinfor   )r�   r‘   Úchain_classÚmemory_classÚ_modelÚ	user_funcÚsigr–   r¢   r™   rœ   rŸ   s          @@@@@r=   Ú_wrap_in_chain_factoryr°   ¤   sO  øøøøø€ õ Ð&­Ñ.Ô.ð 3Ø$ˆØ”oÔ.ˆØÔ&Ð2Ø œ<Ô1Ô:ˆLÝð
Lð %1ð
Lð 
Lð *ð
Lð 
Lð $0ð
Lð 
Lð 
Lñô ð ð ˆ}ˆ}ˆ}ÐÝ	Ð(Õ*;Ñ	<Ô	<ð  Ø#Ð#Ý	Ð(­(Ñ	3Ô	3ð à"ˆØˆ{ˆ{ˆ{ÐÝ	Ð&Ñ	'Ô	'ñ Ý Ð!5Ñ6Ô6ð 	%Ý#¥D­Ð3GÑ$HÔ$HÑIÔIˆIØ$Ð$Ð$Ð$Ð$ð	#Ø)Ð)Ñ+Ô+ˆFˆFøÝð 	#ð 	#ð 	#å�XÐ';Ñ<Ô<ˆIÝÔ# IÑ.Ô.ˆCÝ�KŠKÐE¨SÐEÐEÐEÑFÔFÐFÝ$ YÑ/Ô/ˆGØ"�?�?�?Ð"Ð"Ð"ð	#øøøõ �8Ð%9Ñ:Ô:ˆÝ�fÕ/Ñ0Ô0ð 	ð ˆMÝ"¥4­°&Ñ#9Ô#9Ñ:Ô:ð 	Ý#¥D­°6Ñ$:Ô$:Ñ;Ô;ˆIØ$Ð$Ð$Ð$Ð$Ý˜F¥HÑ-Ô-ð 	à6Ð6Ð6Ð6Ð6ð ÐØÐs   Ã
C$ Ã$A%EÅEÚinputsúDict[str, Any]c                ó†  — | st          d¦  «        ‚g }d| v rPt          | d         t          ¦  «        s*t          dt          | d         ¦  «        j        › �¦  «        ‚| d         g}�n d| v rmt          | d         t
          ¦  «        rt          d„ | d         D ¦   «         ¦  «        s*t          dt          | d         ¦  «        j        › �¦  «        ‚| d         }n¯t          | ¦  «        dk    rŠt          t          |  
                    ¦   «         ¦  «        ¦  «        }t          |t          ¦  «        r|g}nUt          |t
          ¦  «        rt          d„ |D ¦   «         ¦  «        r|}n$t          d	| › �¦  «        ‚t          d
| › �¦  «        ‚t          |¦  «        dk    r|d         S t          dt          |¦  «        › d�¦  «        ‚)zºGet prompt from inputs.

    Args:
        inputs: The input dictionary.

    Returns:
        A string prompt.
    Raises:
        InputFormatError: If the input format is invalid.
    úInputs should not be empty.Úpromptz"Expected string for 'prompt', got Úpromptsc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   ©rp   r‡   ©rH   Úis     r=   ú	<genexpr>z_get_prompt.<locals>.<genexpr>ø   s=   è è € ð >
ð >
Ø#$�J�q�#ÑÔð>
ð >
ð >
ð >
ð >
ð >
r<   z,Expected list of strings for 'prompts', got rM   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   r¸   r¹   s     r=   r»   z_get_prompt.<locals>.<genexpr>  s,   è è € Ð.SÐ.SÀa­z¸!½SÑ/AÔ/AÐ.SÐ.SÐ.SÐ.SÐ.SÐ.Sr<   z)LLM Run expects string prompt input. Got z5LLM Run expects 'prompt' or 'prompts' in inputs. Got r   z)LLM Run expects single prompt input. Got z	 prompts.)r6   rp   r‡   Útyper7   ÚlistrK   ÚlenÚnextÚiterÚvalues)r±   r¶   Úprompt_s      r=   Ú_get_promptrÄ   á   s  € ð ð >ÝÐ<Ñ=Ô=Ð=à€GØ�6ÐÐÝ˜& Ô*­CÑ0Ô0ð 	Ý"ð6Ý˜ Ô)Ñ*Ô*Ô3ð6ð 6ñô ð ð ˜(Ô#Ð$ˆ‰Ø	�fÐ	Ð	Ý˜& Ô+­TÑ2Ô2ð 	½#ð >
ð >
Ø(.¨yÔ(9ð>
ñ >
ô >
ñ ;
ô ;
ð 	õ #ð;Ý˜V IÔ.Ñ/Ô/Ô8ð;ð ;ñô ð ð ˜Ô#ˆˆÝ	ˆV‰Œ˜Ò	Ð	Ý•t˜FŸMšM™OœOÑ,Ô,Ñ-Ô-ˆÝ�g�sÑ#Ô#ð 	YØ�iˆGˆGÝ˜¥Ñ&Ô&ð 	Y­3Ð.SÐ.SÈ7Ð.SÑ.SÔ.SÑ+SÔ+Sð 	YØˆGˆGå"Ð#WÈvÐ#WÐ#WÑXÔXÐXåØLÀFÐLÐLñ
ô 
ð 	
õ ˆ7�|„|�qÒÐØ�qŒzÐåØO½¸G¹¼ÐOÐOÐOñ
ô 
ð 	
r<   úList[BaseMessage]c                ód  — | st          d¦  «        ‚d| v r	| d         }nTt          | ¦  «        dk    r/t          t          |                      ¦   «         ¦  «        ¦  «        }nt          d| › �¦  «        ‚t          |t          ¦  «        rt          d„ |D ¦   «         ¦  «        r|g}nCt          |t          ¦  «        rt          d„ |D ¦   «         ¦  «        r|}nt          d| › �¦  «        ‚t          |¦  «        dk    rt          |d         ¦  «        S t          d	t          |¦  «        › d
| › �¦  «        ‚)zÉGet Chat Messages from inputs.

    Args:
        inputs: The input dictionary.

    Returns:
        A list of chat messages.
    Raises:
        InputFormatError: If the input format is invalid.
    r´   ÚmessagesrM   zPChat Run expects 'messages' in inputs when example has multiple input keys. Got c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   )rp   rq   r¹   s     r=   r»   z _get_messages.<locals>.<genexpr>+  s=   è è € ð .ð .Ø !�
�1•dÑÔð.ð .ð .ð .ð .ð .r<   c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   )rp   r¾   r¹   s     r=   r»   z _get_messages.<locals>.<genexpr>/  s=   è è € ð 0ð 0Ø !�
�1•dÑÔð0ð 0ð 0ð 0ð 0ð 0r<   zUChat Run expects List[dict] or List[List[dict]] values for 'messages' key input. Got r   zMChat Run expects single List[dict] or List[List[dict]] 'messages' input. Got z messages from inputs )	r6   r¿   rÀ   rÁ   rÂ   rp   r¾   rK   r   )r±   Úsingle_inputÚraw_messagess      r=   Ú_get_messagesrÌ     s£  € ð ð >ÝÐ<Ñ=Ô=Ð=à�VÐÐØ˜jÔ)ˆˆÝ	ˆV‰Œ˜Ò	Ð	Ý�D §¢¡¤Ñ1Ô1Ñ2Ô2ˆˆåð)Ø &ð)ð )ñ
ô 
ð 	
õ �,¥Ñ%Ô%ð 
­#ð .ð .Ø%1ð.ñ .ô .ñ +ô +ð 
ð %�~ˆˆÝ	�L¥$Ñ	'Ô	'ð 
­Cð 0ð 0Ø%1ð0ñ 0ô 0ñ -ô -ð 
ð $ˆˆåð3Ø*0ð3ð 3ñ
ô 
ð 	
õ ˆ<ÑÔ˜AÒÐÝ! ,¨q¤/Ñ2Ô2Ð2åðMÝ˜|Ñ,Ô,ðMð MØDJðMð Mñ
ô 
ð 	
r<   Úfirst_exampler'   Úinput_mapperúOptional[Callable[[Dict], Any]]r�   c                óÀ  — |rz || j         ¦  «        }t          |t          ¦  «        sQt          |t          ¦  «        rt	          d„ |D ¦   «         ¦  «        s%t          d|› dt          |¦  «        › d�¦  «        ‚d S d S 	 t          | j         ¦  «         d S # t
          $ r? 	 t          | j         ¦  «         Y d S # t
          $ r t          d| j         › d�¦  «        ‚w xY ww xY w)Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   ©rp   r   ©rH   Úmsgs     r=   r»   z>_validate_example_inputs_for_language_model.<locals>.<genexpr>J  s,   è è € ÐIÐI°S•J˜s¥KÑ0Ô0ÐIÐIÐIÐIÐIÐIr<   z˜When using an input_mapper to prepare dataset example inputs for an LLM or chat model, the output must a single string or a list of chat messages.
Got: ú	 of type ú.zvExample inputs do not match language model input format. Expected a dictionary with messages or a single prompt. Got: z› Please update your dataset OR provide an input_mapper to convert the example.inputs to a compatible format for the llm or chat model you wish to evaluate.)	r±   rp   r‡   r¾   rK   r6   r½   rÄ   rÌ   )rÍ   rÎ   Úprompt_inputs      r=   Ú+_validate_example_inputs_for_language_modelrØ   B  s`  € ð ð Ø#�| MÔ$8Ñ9Ô9ˆÝ˜,­Ñ,Ô,ð 		Ý�|¥TÑ*Ô*ð		åÐIÐI¸LÐIÑIÔIÑIÔIð		õ #ðGð 'ðGð Gõ 26°lÑ1CÔ1CðGð Gð Gñô ð ð			ð 		ð 		ð 		ð	Ý˜Ô,Ñ-Ô-Ð-Ð-Ð-øÝð 	ð 	ð 	ð
Ý˜mÔ2Ñ3Ô3Ð3Ð3Ð3Ð3øÝ#ð ð ð Ý&ðGà*Ô1ðGð Gð Gñô ð ðøøøð	øøøs   Á>B Â
CÂB6Â6#CÃCr–   r-   c                óZ  — |rŸ || j         ¦  «        }t          |j        ¦  «                             |¦  «        }t	          |t
          ¦  «        s#t          d|› dt          |¦  «        › d�¦  «        ‚|r,t          d|j        › d|                     ¦   «         › �¦  «        ‚dS | j         }t          |j        ¦  «                             |¦  «        }t          |¦  «        dk    rt          |j        ¦  «        dk    rdS |r,t          d|j        › d|                     ¦   «         › �¦  «        ‚dS )	z<Validate that the example inputs match the chain input keys.zvWhen using an input_mapper to prepare dataset example inputs for a chain, the mapped value must be a dictionary.
Got: rÕ   rÖ   zAMissing keys after loading example using input_mapper.
Expected: z. Got: rM   z³Example inputs missing expected chain input keys. Please provide an input_mapper to convert the example.inputs to a compatible format for the chain you wish to evaluate.Expected: N)
r±   ÚsetÚ
input_keysÚ
differencerp   rq   r6   r½   Úkeysr¿   )rÍ   r–   rÎ   Úfirst_inputsÚmissing_keyss        r=   Ú"_validate_example_inputs_for_chainrà   c  s˜  € ð ð Ø#�| MÔ$8Ñ9Ô9ˆÝ˜5Ô+Ñ,Ô,×7Ò7¸ÑEÔEˆÝ˜,­Ñ-Ô-ð 	Ý"ðGà&ðGð Gå15°lÑ1CÔ1CðGð Gð Gñô ð ð
 ð 	Ý"ðNØ$Ô/ðNð NØ8D×8IÒ8IÑ8KÔ8KðNð Nñô ð ð	ð 	ð %Ô+ˆÝ˜5Ô+Ñ,Ô,×7Ò7¸ÑEÔEˆÝˆ|ÑÔ Ò!Ð!¥c¨%Ô*:Ñ&;Ô&;¸qÒ&@Ð&@ð ˆDØð 	Ý"ð.ð #Ô-ð.ð .ð %×)Ò)Ñ+Ô+ð	.ð .ñô ð ð	ð 	r<   Úexamplec                ó   — t          |t          ¦  «        rt          | |¦  «         dS  |¦   «         }t          |t          ¦  «        rt	          | ||¦  «         dS t          |t
          ¦  «        rt                               d|› �¦  «         dS dS )z9Validate that the example inputs are valid for the model.zSkipping input validation for N)rp   r   rØ   r-   rà   r   r©   Údebug)rá   r�   rÎ   r–   s       r=   Ú_validate_example_inputsrä   ˆ  s¨   € õ Ð&Õ(9Ñ:Ô:ð CÝ3°G¸\ÑJÔJÐJÐJÐJà$Ð$Ñ&Ô&ˆÝ�e�UÑ#Ô#ð 	Cå.¨w¸¸|ÑLÔLÐLÐLÐLÝ˜�xÑ(Ô(ð 	CÝ�LŠLÐA¸%ÐAÐAÑBÔBÐBÐBÐBð	Cð 	Cr<   ÚexamplesúList[Example]r2   ú"Optional[smith_eval.RunEvalConfig]Ú	data_typer&   úOptional[List[RunEvaluator]]c           	     óæ  — |rìt          | t          ¦  «        rd\  }}d}n“d}|t          j        t          j        fv r1t          |t
          ¦  «        r|j        n|}t          d|› d�¦  «        ‚ | ¦   «         }t          |t          ¦  «        r|j	        nd}t          |t          ¦  «        r|j
        nd}t          ||||d         j        rt          |d         j        ¦  «        nd||¦  «        }	nd}	|	S )z<Configure the evaluators to run on the results of the chain.©NNÚllmr–   z2Cannot evaluate a chain on dataset with data_type=z;. Please specify a dataset with the default 'kv' data type.Nr   )rp   r   r&   Úchatrì   r   Úvaluer¤   r-   rÛ   Úoutput_keysÚ_load_run_evaluatorsÚoutputsr¾   )
r�   rå   r2   rè   Ú
run_inputsÚrun_outputsÚrun_typeÚvalr–   Úrun_evaluatorss
             r=   Ú_setup_evaluationr÷   œ  s*  € ð ð ÝÐ*Õ,=Ñ>Ô>ð 	RØ&0Ñ#ˆJ˜ØˆHˆHàˆHØ�Xœ]­H¬LÐ9Ð9Ð9Ý)3°I½tÑ)DÔ)DÐS�i”o�oÈ)�Ý ðPØ!$ðPð Pð Pñô ð ð
 )Ð(Ñ*Ô*ˆEÝ-7¸½uÑ-EÔ-EÐO˜Ô)Ð)È4ˆJÝ/9¸%ÅÑ/GÔ/GÐQ˜%Ô+Ð+ÈTˆKÝ-ØØØØ)1°!¬Ô)<ÐF�D�˜!”Ô$Ñ%Ô%Ð%À$ØØñ
ô 
ˆˆð ˆØÐr<   r   úsmith_eval.RunEvalConfigrò   úOptional[List[str]]úOptional[str]c                ó  — d }| j         r/| j         }|r%||vr!t                               d|› d|› d�¦  «         nQ|rt          |¦  «        dk    r	|d         }n3|�1t          |¦  «        dk    rt                               d|› d�¦  «         |S )Nz
Input key z% not in chain's specified input keys ú'. Evaluation behavior may be undefined.rM   r   z#Chain expects multiple input keys: z…, Evaluator is likely to fail. Evaluation behavior may be undefined. Specify an input_key in the RunEvalConfig to avoid this warning.)Ú	input_keyr©   Úwarningr¿   )r   rò   rý   s      r=   Ú_determine_input_keyrÿ   Á  sá   € ð €IØÔð 
ØÔ$ˆ	Øð 	˜)¨:Ð5Ð5Ý�NŠNðS˜Yð Sð SØ)ðSð Sð Sñô ð øð 
ð 
�˜J™œ¨1Ò,Ð,Ø˜q”Mˆ	ˆ	Ø	Ð	¥C¨
¡O¤O°aÒ$7Ð$7Ý�ŠðP°*ð Pð Pð Pñ	
ô 	
ð 	
ð Ðr<   ró   c                ó  — d }| j         r/| j         }|r%||vr!t                               d|› d|› d�¦  «         nQ|rt          |¦  «        dk    r	|d         }n3|�1t          |¦  «        dk    rt                               d|› d�¦  «         |S )NzPrediction key z& not in chain's specified output keys rü   rM   r   z$Chain expects multiple output keys: zl, Evaluation behavior may be undefined. Specify a prediction_key in the RunEvalConfig to avoid this warning.)Úprediction_keyr©   rþ   r¿   )r   ró   r  s      r=   Ú_determine_prediction_keyr  Ù  sá   € ð €NØÔð 
ØÔ.ˆØð 	˜>°Ð<Ð<Ý�NŠNðU .ð Uð UØ +ðUð Uð Uñô ð øð 
ð 
�˜[Ñ)Ô)¨QÒ.Ð.Ø$ QœˆˆØ	Ð	 ¥S¨Ñ%5Ô%5¸Ò%9Ð%9Ý�Šð;°;ð ;ð ;ð ;ñ	
ô 	
ð 	
ð
 Ðr<   Úexample_outputsc                ó´   — | j         r#| j         }|r||vrt          d|› d|› �¦  «        ‚n-|r)t          |¦  «        dk    rt          |¦  «        d         }nd }|S )NzReference key z! not in Dataset example outputs: rM   r   )Úreference_keyr¤   r¿   r¾   )r   r  r  s      r=   Ú_determine_reference_keyr  ð  s•   € ð Ôð 
ØÔ,ˆØð 	˜}°OÐCÐCÝð7 ð 7ð 7Ø%4ð7ð 7ñô ð øð 
ð �S Ñ1Ô1°QÒ6Ð6Ý˜_Ñ-Ô-¨aÔ0ˆˆàˆØÐr<   Úeval_configú7Union[EvaluatorType, str, smith_eval_config.EvalConfig]Úeval_llmúOptional[BaseLanguageModel]rô   r  rý   r  r"   c           	     ó¼  — t          | t          t          f¦  «        r=t          | t          ¦  «        st          | ¦  «        } t          | |¬¦  «        }| j        }	nkd|i|                      ¦   «         ¥}
t          | j        fi |
¤Ž}| j        j        }	t          | t          j        ¦  «        r| j	        p|}| j
        p|}| j        p|}t          |t          ¦  «        rG|j        r|€t          d|	› d|› d�¦  «        ‚t          j                             |||||||	g¬¦  «        }n;t          |t$          ¦  «        rt'          d|	› d�¦  «        ‚t'          d|	› d	�¦  «        ‚|S )
N)rì   rì   zPMust specify reference_key in smith_eval.RunEvalConfig to use evaluator of type z) with dataset with multiple output keys: rÖ   )rý   r  r  ÚtagszRun evaluator for zó is not implemented. PairwiseStringEvaluators compare the outputs of two different models rather than the output of a single model. Did you mean to use a StringEvaluator instead?
See: https://python.langchain.com/docs/guides/evaluation/string/z is not implemented)rp   r/   r‡   r.   rî   Ú
get_kwargsÚevaluator_typeÚsmith_eval_configÚSingleKeyEvalConfigrý   r  r  r1   Úrequires_referencer¤   Ú
smith_evalÚStringRunEvaluatorChainÚfrom_run_and_data_typer0   ÚNotImplementedError)r  r	  rô   rè   r  r  rý   r  Ú
evaluator_Úeval_type_tagr€   Úrun_evaluators               r=   Ú_construct_run_evaluatorr    sÕ  € õ �+¥­sÐ3Ñ4Ô4ð GÝ˜+¥}Ñ5Ô5ð 	5Ý'¨Ñ4Ô4ˆKÝ# K°XÐ>Ñ>Ô>ˆ
Ø#Ô)ˆˆà˜Ð> [×%;Ò%;Ñ%=Ô%=Ð>ˆÝ# KÔ$>ÐIÐIÀ&ÐIÐIˆ
Ø#Ô2Ô8ˆå�kÕ#4Ô#HÑIÔIð 	GØ#Ô-Ð:°ˆIØ(Ô7ÐI¸>ˆNØ'Ô5ÐF¸ˆMå�*�oÑ.Ô.ð 
ØÔ(ð 	¨]Ð-BÝðJØ&3ðJð Jà7FðJð Jð Jñô ð õ
 #Ô:×QÒQØØØØØ)Ø'Ø�ð Rñ 
ô 
ˆˆõ 
�JÕ 7Ñ	8Ô	8ð 
Ý!ðQ ð Qð Qð Qñ
ô 
ð 	
õ "ØC ÐCÐCÐCñ
ô 
ð 	
ð Ðr<   ú2Tuple[Optional[str], Optional[str], Optional[str]]c                ól   — t          | |¦  «        }t          | |¦  «        }t          | |¦  «        }|||fS r•   )rÿ   r  r  )r   rò   ró   r  rý   r  r  s          r=   Ú	_get_keysr  ;  s>   € õ % V¨ZÑ8Ô8€IÝ.¨v°{ÑCÔC€NÝ,¨V°_ÑEÔE€MØ�n mÐ3Ð3r<   úList[RunEvaluator]c                ó|  — g }d\  }}}	| j         sCt          d„ | j         D ¦   «         ¦  «        s%| j        r4t          d„ | j        D ¦   «         ¦  «        rt          | |||¦  «        \  }}}	| j         D ]2}
t	          |
| j        ||||	||¦  «        }|                     |¦  «         Œ3| j        pg }|D ]�}t          |t          ¦  «        r|                     |¦  «         Œ-t          |t          ¦  «        r9|                     t          j                             ||||||	¬¦  «        ¦  «         Œ{t          d|› d�¦  «        ‚|S )z¤
    Load run evaluators from a configuration.

    Args:
        config: Configuration for the run evaluators.

    Returns:
        A list of run evaluators.
    )NNNc                ó8   — g | ]}t          |t          ¦  «        ‘ŒS r;   )rp   r/   ©rH   rv   s     r=   rJ   z(_load_run_evaluators.<locals>.<listcomp>\  s"   € ÐHÐHÐH°•
˜1�mÑ,Ô,ÐHÐHÐHr<   c                ó8   — g | ]}t          |t          ¦  «        ‘ŒS r;   )rp   r1   r   s     r=   rJ   z(_load_run_evaluators.<locals>.<listcomp>_  s"   € ÐVÐVÐV¸•Z ¥?Ñ3Ô3ÐVÐVÐVr<   )rý   r  r  zUnsupported custom evaluator: z+. Expected RunEvaluator or StringEvaluator.)Ú
evaluatorsÚanyÚcustom_evaluatorsr  r  r	  rs   rp   r"   r1   r  r  r  r¤   )r   rô   rè   r  rò   ró   rö   rý   r  r  r  r  r$  Úcustom_evaluators                 r=   rð   rð   G  sÄ  € ð" €NØ/?Ñ,€Iˆ~˜}àÔð

åÐHÐH°fÔ6GÐHÑHÔHÑIÔIð

ð Ô$ð	

õ
 ÐVÐV¸VÔ=UÐVÑVÔVÑWÔWð

õ 4=Ø�J ¨_ñ4
ô 4
Ñ0ˆ	�> =ð Ô(ð -ð -ˆÝ0ØØŒOØØØØØØñ	
ô 	
ˆð 	×Ò˜mÑ,Ô,Ð,Ð,ØÔ0Ð6°BÐØ-ð ð ÐÝÐ&­Ñ5Ô5ð 	Ø×!Ò!Ð"2Ñ3Ô3Ð3Ð3ÝÐ(­/Ñ:Ô:ð 	Ø×!Ò!ÝÔ2×IÒIØ$ØØØ'Ø#1Ø"/ð Jñ ô ñ	ô 	ð 	ð 	õ ð>Ð1Að >ð >ð >ñô ð ð
 Ðr<   ©r  Ú	callbacksrÎ   rì   r   r  r'  r,   úUnion[str, BaseMessage]c             ƒ  ó   K  — |�� ||¦  «        }t          |t          ¦  «        r|                      |||¬¦  «        ƒ d{V —†S t          |t          ¦  «        r7t	          d„ |D ¦   «         ¦  «        r|                      |||¬¦  «        ƒ d{V —†S t          d|› d�¦  «        ‚	 t          |¦  «        }|                      |||¬¦  «        ƒ d{V —†}n=# t          $ r0 t          |¦  «        }|                      |||¬¦  «        ƒ d{V —†}Y nw xY w|S )aë  Asynchronously run the language model.

    Args:
        llm: The language model to run.
        inputs: The input dictionary.
        tags: Optional tags to add to the run.
        callbacks: Optional callbacks to use during the run.
        input_mapper: Optional function to map inputs to the expected format.

    Returns:
        The LLMResult or ChatResult.
    Raises:
        ValueError: If the LLM type is unsupported.
        InputFormatError: If the input format is invalid.
    N©r'  r  c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   rÒ   rÓ   s     r=   r»   z_arun_llm.<locals>.<genexpr>©  ó=   è è € ð :
ð :
Ø-0�J�s�KÑ(Ô(ð:
ð :
ð :
ð :
ð :
ð :
r<   z%Input mapper returned invalid format ú3
Expected a single string or list of chat messages.)	rp   r‡   Úapredictr¾   rK   Úapredict_messagesr6   rÄ   rÌ   )	rì   r±   r  r'  rÎ   Úprompt_or_messagesrµ   Ú
llm_outputrÇ   s	            r=   Ú	_arun_llmr2  Œ  sí  è è € ð. ÐØ)˜\¨&Ñ1Ô1ÐÝÐ(­#Ñ.Ô.ð 	ØŸšØ"¨i¸dð &ñ ô ð ð ð ð ð ð ð õ Ð*­DÑ1Ô1ð 	µcð :
ð :
Ø4Fð:
ñ :
ô :
ñ 7
ô 7
ð 	ð ×.Ò.Ø"¨i¸dð /ñ ô ð ð ð ð ð ð ð õ #ðGØ&ðGð Gð Gñô ð ð		Ý  Ñ(Ô(ˆFØ8;¿ºØ )°$ð 9Eñ 9ô 9ð 3ð 3ð 3ð 3ð 3ð 3ˆJˆJøõ  ð 	ð 	ð 	Ý$ VÑ,Ô,ˆHØ"×4Ò4Ø I°Dð  5ñ  ô  ð ð ð ð ð ð ˆJˆJˆJð	øøøð
 Ðs   Â#-C Ã7DÄ
D©r  rÎ   úUnion[Chain, Runnable]úUnion[dict, str]c             ƒ  óª  K  — |€|n
 ||¦  «        }t          | t          ¦  «        r|t          |t          ¦  «        rgt          |¦  «        dk    rT| j        rMt          t          |                     ¦   «         ¦  «        ¦  «        }|                      |||¬¦  «        ƒ d{V —†}n0t          |pg |¬¦  «        }|  
                    ||¬¦  «        ƒ d{V —†}|S )z%Run a chain asynchronously on inputs.NrM   r*  ©r  r'  r   )rp   r-   rq   r¿   rÛ   rÀ   rÁ   rÂ   Úacallr   Úainvoke©	r–   r±   r'  r  rÎ   Úinputs_rõ   rZ   Úrunnable_configs	            r=   Ú_arun_chainr=  Ä  sò   è è € ð %Ð,ˆfˆf°,°,¸vÑ2FÔ2F€Gå�5�%Ñ Ô ð
Få�w¥Ñ%Ô%ð
Fõ �‰LŒL˜AÒÐØÔð õ •4˜ŸšÑ(Ô(Ñ)Ô)Ñ*Ô*ˆØ—{’{ 3°)À$�{ÑGÔGÐGÐGÐGÐGÐGÐGˆˆå(¨d¨j°bÀIÐNÑNÔNˆØ—}’} W°_�}ÑEÔEÐEÐEÐEÐEÐEÐEˆØ€Mr<   )rÎ   r   ú'Union[dict, str, LLMResult, ChatResult]c             ƒ  óú  K  — t          |t          ¦  «        rdnd}d}	 t          |t          ¦  «        r,t          || j        |d         |d         |¬¦  «        ƒ d{V —†}n5 |¦   «         }t	          || j        |d         |d         |¬¦  «        ƒ d{V —†}|}nc# t
          $ rV}t                               |› d| j        › d| j        › d	t          |¦  «        › �¦  «         t          |¬
¦  «        }Y d}~nd}~ww xY w|S )a˜  Asynchronously run the Chain or language model.

    Args:
        example: The example to run.
        llm_or_chain_factory: The Chain or language model constructor to run.
        tags: Optional tags to add to the run.
        callbacks: Optional callbacks to use during the run.
        input_mapper: Optional function to map the input to the expected format.

    Returns:
        A list of outputs.
    ÚLLMr-   Nr  r'  r&  ú failed for example ú with inputs ú
©rg   )rp   r   r2  r±   r=  Ú	Exceptionr©   rþ   ÚidÚreprr~   )	rá   r   r�   rÎ   Úchain_or_llmrz   rZ   r–   rv   s	            r=   Ú_arun_llm_or_chainrI  Ü  s�  è è € õ( Ð0Õ2CÑDÔDÐQˆˆÈ'ð ð €Fð$ÝÐ*Õ,=Ñ>Ô>ð 	Ý )Ø$Ø”Ø˜F”^Ø  Ô-Ø)ð!ñ !ô !ð ð ð ð ð ð ˆFˆFð )Ð(Ñ*Ô*ˆEÝ&ØØ”Ø˜F”^Ø  Ô-Ø)ðñ ô ð ð ð ð ð ð ˆFð ˆˆøÝð $ð $ð $Ý�ŠØð ð °´ð ð Ø"œ>ðð å�a‘”ðð ñ	
ô 	
ð 	
õ
  Ð#Ñ#Ô#ˆˆˆˆˆˆøøøøð$øøøð €Ms   ŸA8B Â
C8Â"AC3Ã3C8c               óî  — |�“ ||¦  «        }t          |t          ¦  «        r|                      |||¬¦  «        }n¹t          |t          ¦  «        r2t	          d„ |D ¦   «         ¦  «        r|                      |||¬¦  «        }nrt          d|› d�¦  «        ‚	 t          |¦  «        }|                      |||¬¦  «        }n6# t          $ r) t          |¦  «        }|                      ||¬¦  «        }Y nw xY w|S )aë  
    Run the language model on the example.

    Args:
        llm: The language model to run.
        inputs: The input dictionary.
        callbacks: The callbacks to use during the run.
        tags: Optional tags to add to the run.
        input_mapper: function to map to the inputs dictionary from an Example
    Returns:
        The LLMResult or ChatResult.
    Raises:
        ValueError: If the LLM type is unsupported.
        InputFormatError: If the input format is invalid.
    Nr*  c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r•   rÒ   rÓ   s     r=   r»   z_run_llm.<locals>.<genexpr>0  r,  r<   z'Input mapper returned invalid format:  r-  )r'  )	rp   r‡   Úpredictr¾   rK   Úpredict_messagesr6   rÄ   rÌ   )	rì   r±   r'  r  rÎ   r0  r1  Úllm_promptsÚllm_messagess	            r=   Ú_run_llmrP    s`  € ð. ÐØ)˜\¨&Ñ1Ô1ÐÝÐ(­#Ñ.Ô.ð 	Ø25·+²+Ø"¨i¸dð 3>ñ 3ô 3ˆJˆJõ Ð*­DÑ1Ô1ð 	µcð :
ð :
Ø4Fð:
ñ :
ô :
ñ 7
ô 7
ð 	ð ×-Ò-Ø"¨i¸dð .ñ ô ˆJˆJõ #ðGØ&ðGð Gð Gñô ð ð	QÝ% fÑ-Ô-ˆKØŸš [¸IÈD˜ÑQÔQˆJˆJøÝð 	Qð 	Qð 	QÝ(¨Ñ0Ô0ˆLØ×-Ò-¨lÀiÐ-ÑPÔPˆJˆJˆJð	Qøøøð Ðs   Â'B? Â?0C2Ã1C2úUnion[Dict, str]c               óz  — |€|n
 ||¦  «        }t          | t          ¦  «        rlt          |t          ¦  «        rWt          |¦  «        dk    rD| j        r=t          t          |                     ¦   «         ¦  «        ¦  «        } | |||¬¦  «        }n*t          |pg |¬¦  «        }|  	                    ||¬¦  «        }|S )zRun a chain on inputs.NrM   r*  r7  r   )
rp   r-   rq   r¿   rÛ   rÀ   rÁ   rÂ   r   Úinvoker:  s	            r=   Ú
_run_chainrT  F  sÇ   € ð %Ð,ˆfˆf°,°,¸vÑ2FÔ2F€Gå�5�%Ñ Ô ð
?å�w¥Ñ%Ô%ð
?õ �‰LŒL˜AÒÐØÔð õ •4˜ŸšÑ(Ô(Ñ)Ô)Ñ*Ô*ˆØ��s i°dÐ;Ñ;Ô;ˆˆå(¨d¨j°bÀIÐNÑNÔNˆØ—’˜g¨o�Ñ>Ô>ˆØ€Mr<   c               óò  — t          |t          ¦  «        rdnd}d}	 t          |t          ¦  «        r&t          || j        |d         |d         |¬¦  «        }n/ |¦   «         }t	          || j        |d         |d         |¬¦  «        }|}nm# t
          $ r`}t          |¦  «        j        }	t           	                    |› d| j
        › d| j        › d	|	› d
|› �	¦  «         t          |¬¦  «        }Y d}~nd}~ww xY w|S )a¦  
    Run the Chain or language model synchronously.

    Args:
        example: The example to run.
        llm_or_chain_factory: The Chain or language model constructor to run.
        tags: Optional tags to add to the run.
        callbacks: Optional callbacks to use during the run.

    Returns:
        Union[List[dict], List[str], List[LLMResult], List[ChatResult]]:
          The outputs of the model or chain.
    r@  r-   Nr'  r  r3  rA  rB  z
Error Type: z, Message: rD  )rp   r   rP  r±   rT  rE  r½   r7   r©   rþ   rF  r~   )
rá   r   r�   rÎ   rH  rz   rZ   r–   rv   Ú
error_types
             r=   Ú_run_llm_or_chainrW  ^  sb  € õ* Ð0Õ2CÑDÔDÐQˆˆÈ'ð ð €Fð$ÝÐ*Õ,=Ñ>Ô>ð 	Ý"Ø$Ø”Ø�{Ô#Ø˜F”^Ø)ðñ ô ˆFˆFð )Ð(Ñ*Ô*ˆEÝØØ”Ø�{Ô#Ø˜F”^Ø)ðñ ô ˆFð ˆˆøÝð $ð $ð $Ý˜!‘W”WÔ%ˆ
Ý�ŠØð 8ð 8°´ð 8ð 8Ø"œ>ð8ð 8à'ð8ð 8à45ð8ð 8ñ	
ô 	
ð 	
õ
  Ð#Ñ#Ô#ˆˆˆˆˆˆøøøøð$øøøð €Ms   �A,B
 Â

C4ÂAC/Ã/C4Úclientr   Úproject_nameÚproject_metadataúOptional[Dict[str, Any]]ú1Tuple[MCF, TracerSession, Dataset, List[Example]]c           
     óŒ  — t          ||¦  «        }|                      |¬¦  «        }t          |                      |j        ¬¦  «        ¦  «        }|st          d|› d�¦  «        ‚	 t          ¦   «         }	|	r|pi }i |¥d|	i¥}|                      ||j        |rd|ini |¬¦  «        }
nf# t          t
          t          f$ rL}dt          |¦  «        vr|‚t          j        ¦   «         }d	|› d
|› d|› d�}t          d|› d|› �¦  «        ‚d }~ww xY w|j        d|
j        › �z   }t          d|› d|› d|› d|j        › �d¬¦  «         ||
||fS )N)r‘   )Ú
dataset_idzDataset z has no example rows.Úgitr  )Úreference_dataset_idÚproject_extraÚmetadatazalready exists z+
run_on_dataset(
    ...
    project_name="z - z", # Update since z already exists
)
zTest project z/ already exists. Please use a different name:

z/compare?selectedSessions=z)View the evaluation results for project 'z' at:
z

View all tests for Dataset z at:
T)Úflush)r°   Úread_datasetr¾   Úlist_examplesrF  r¤   r    Úcreate_projectr*   r)   r‡   ÚuuidÚuuid4ÚurlÚprint)rX  r‘   r�   rY  rZ  r  Úwrapped_modelÚdatasetrå   Úgit_infoÚprojectrv   ÚuidÚexample_msgÚcomparison_urls                  r=   Ú_prepare_eval_runrr  —  s$  € õ +Ð+?ÀÑNÔN€MØ×!Ò!¨|Ð!Ñ<Ô<€GÝ�F×(Ò(°G´JÐ(Ñ?Ô?Ñ@Ô@€HØð IÝÐG LÐGÐGÐGÑHÔHÐHð
Ý‘>”>ˆØð 	Ø/Ð5°2Ðð Ø"ð à�xð ð  Ðð ×'Ò'ØØ!(¤Ø,0Ð8˜6 4˜.˜.°bØ%ð	 (ñ 
ô 
ˆˆøõ •z¥>Ð2ð 
ð 
ð 
Ø¥C¨¡F¤FÐ*Ð*ØˆGÝŒj‰lŒlˆðð  ðð ð %(ðð ð <Hðð ð ˆõ ð!˜Lð !ð !Øð!ð !ñ
ô 
ð 	
øøøøð
øøøð ”[Ð#LÀÄ
Ð#LÐ#LÑL€NÝ	ð	H°Lð 	Hð 	HØð	Hð 	Hà&2ð	Hð 	Hà:A¼+ð	Hð 	Hð ð	ñ ô ð ð ˜' 7¨HÐ4Ð4s   Á%A B& Â&D	Â=ADÄD	c                  ó2   — e Zd ZU dZded<   ded<   ded<   dS )	Ú
_RowResultz5A dictionary of the results for a single example row.z Optional[List[EvaluationResult]]rY   zOptional[float]rh   rú   ri   N)r7   r8   r9   r:   Ú__annotations__r;   r<   r=   rt  rt  Ë  s<   € € € € € € Ø?Ð?à.Ð.Ð.Ñ.Ø#Ð#Ð#Ñ#ØÐÐÑÐÐr<   rt  F)Útotalc                  óŒ   — e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   d.d„Zd/d„Zd0d„Zd1d2d„Ze		 	 	 	 	 d3d4d-„¦   «         Z
dS )5Ú_DatasetRunContainerz3A container to help manage the state of a eval run.r   rX  r(   rn  r’   rk  ræ   rå   zList[RunnableConfig]ÚconfigsÚbatch_resultsr¾   Úall_eval_resultsúDict[str, _RowResult]r@   rq   c           	     ól  — i }t          | j        |¦  «        D �]\  }}t          t          |                     t          |j        ¦  «        i ¦  «        ¦  «        }|j        |                     dg ¦  «        |                     d¦  «        |                     d¦  «        dœ|t          |j        ¦  «        <   t          |t          ¦  «        r#|j
        |t          |j        ¦  «                 d<   n||t          |j        ¦  «                 d<   |j        r"|j        |t          |j        ¦  «                 d<   �Œ|S )NrY   rh   ri   )ra   rY   rh   ri   rg   rZ   rF   )Úziprå   r   rt  ro   r‡   rF  r±   rp   r~   rg   rñ   )rS   rz  r{  rX   rá   rZ   Ú
row_results          r=   Ú_merge_test_outputsz(_DatasetRunContainer._merge_test_outputsÝ  s  € ð
 ˆÝ" 4¤=°-Ñ@Ô@ð 	Hñ 	H‰OˆG�VÝ�jÐ*:×*>Ò*>½sÀ7Ä:¹¼ÐPRÑ*SÔ*SÑTÔTˆJà œØ&ŸNšN¨:°rÑ:Ô:Ø",§.¢.Ð1AÑ"BÔ"BØ$Ÿ.š.¨Ñ2Ô2ð	(ð (ˆG•C˜œ
‘O”OÑ$õ ˜&¥)Ñ,Ô,ð <Ø4:´L��˜GœJ™œÔ(¨Ñ1Ð1à5;��˜GœJ™œÔ(¨Ñ2ØŒð HØ8?¼��˜GœJ™œÔ(¨Ñ5ùØˆr<   c                óÌ  — i }| j         D �]3}t          t          |d         ¦  «        D �]}t          |t          ¦  «        r]|j        }|                     ¦   «         D ]@\  \  }}}|                     t          |¦  «        i ¦  «         	                    d|i¦  «         ŒAŒut          |t          ¦  «        r‰|j        }|r(|j        r!|j        |j        z
                       ¦   «         nd }	|rt          |j        ¦  «        nd }
|                     t          |j        ¦  «        i ¦  «         	                    |	|
dœ¦  «         �Œ�Œ5t          t"          t          t$          f         |¦  «        S )Nr'  rY   )rh   ri   )ry  r   r¾   rp   r   Úlogged_eval_resultsrn   Ú
setdefaultr‡   rr   r   Ú
latest_runÚend_timeÚ
start_timeÚtotal_secondsrF  ry   r
   rt  )rS   r{  ÚcÚcallbackÚeval_resultsÚ_ry   r^   Úrunrh   ri   s              r=   Ú_collect_metricsz%_DatasetRunContainer._collect_metricsó  sƒ  € Ø!#ÐØ”ð 	ñ 	ˆAÝ ¥ q¨¤~Ñ6Ô6ð ñ �Ý˜hÕ(@ÑAÔAð Ø#+Ô#?�LØ.:×.@Ò.@Ñ.BÔ.Bð ð Ñ*™˜˜J¨Ø(×3Ò3µC¸
±O´OÀRÑHÔH×OÒOØ'¨˜Oñô ð ð ðõ   ­/Ñ:Ô:ð Ø"Ô-�Cð ð"Ø#&¤<ð"˜œ¨¬Ñ6×EÒEÑGÔGÐGà!ð #ð
 -0Ð9�S ¤™[œ[˜[°T�FØ$×/Ò/µ°HÔ4GÑ0HÔ0HÈ"ÑMÔM×TÒTà.<Ø&,ðð ñô ð ùñõ* •D��j˜Ô)Ð+;Ñ<Ô<Ð<r<   ú-List[Union[dict, str, LLMResult, ChatResult]]r?   c                ó¨   — t          ¦   «          |                      ¦   «         }|                      ||¦  «        }t          | j        j        |¬¦  «        S )N)rY  rX   )r   r�  r€  r?   rn  r†   )rS   rz  r{  rX   s       r=   Ú_collect_test_resultsz*_DatasetRunContainer._collect_test_results  sZ   € õ 	 Ñ!Ô!Ð!Ø×0Ò0Ñ2Ô2ÐØ×*Ò*¨=Ð:JÑKÔKˆÝØœÔ*Øð
ñ 
ô 
ð 	
r<   FÚverboseÚboolc                ó
  — |                       |¦  «        }|rf	 |                     ¦   «         }t          |¦  «         nA# t          $ r4}t                               dt          |¦  «        › �¦  «         Y d }~nd }~ww xY w	 | j                             | j	        j
        t          j        t          j        ¦  «        ¬¦  «         nA# t          $ r4}t                               dt          |¦  «        › �¦  «         Y d }~nd }~ww xY w|S )Nz$Failed to print aggregate feedback: )r…  zFailed to close project: )r�  rV   Ú_display_aggregate_resultsrE  r©   rã   rG  rX  Úupdate_projectrn  rF  r   Únowr   Úutc)rS   rz  r‘  rX   Úagg_feedbackrv   s         r=   Úfinishz_DatasetRunContainer.finish  s2  € Ø×,Ò,¨]Ñ;Ô;ˆØð 	OðOØ&×=Ò=Ñ?Ô?�Ý*¨<Ñ8Ô8Ð8Ð8øÝð Oð Oð OÝ—’ÐMÅDÈÁGÄGÐMÐMÑNÔNÐNÐNÐNÐNÐNÐNøøøøðOøøøð	@àŒK×&Ò&Ø””­(¬,µx´|Ñ*DÔ*Dð 'ñ ô ð ð øõ ð 	@ð 	@ð 	@Ý�LŠLÐ>µT¸!±W´WÐ>Ð>Ñ?Ô?Ð?Ð?Ð?Ð?Ð?Ð?øøøøð	@øøøàˆs.   ™#= ½
A;Á*A6Á6A;Á?AC Ã
D Ã*C;Ã;D Né   r‘   r‡   r�   r�   rY  rú   r2   rç   r  rù   rÎ   rÏ   Úconcurrency_levelÚintrZ  r[  c
                ó,  ‡‡‡‡‡‡— |pt          j        ¦   «         }t          ‰||||	‰¬¦  «        \  }
Š}}‰pg Š‰j                             d¦  «        pi                      ¦   «         D ] \  }}‰                     d|› d|› �¦  «         Œ!t          |¦  «        }
t          |
|||j	        pt          j        ¦  «        Št          |d         |
|¦  «         t          j        t          |¦  «        ¦  «        Šˆˆˆˆˆˆfd„|D ¦   «         } | ‰‰|
||¬¦  «        S )N)rZ  r  r_  zgit:ú=r   c                ó    •— g | ]J}t          t          ‰j        ‰d |j        ¬¦  «        t	          ‰pg ‰|j        d¬¦  «        ‰g‰‰¬¦  «        ‘ŒKS )F)rY  rX  Úuse_threadingry   r   )r"  rX  ry   Úmax_concurrency)r'  r  r¡  )r   r   r†   rF  r   )rH   rá   rX  r›  Úprogress_barrn  rö   r  s     €€€€€€r=   rJ   z0_DatasetRunContainer.prepare.<locals>.<listcomp>I  s•   ø€ ð 
ð 
ð 
ð( õ' å#Ø%,¤\Ø%Ø&+Ø#*¤:ð	ñ ô õ -Ø#1Ð#7°RØ%Ø#*¤:Ø()ð	ñ ô ð !ðð Ø 1ð#ñ ô ð
ð 
ð 
r<   )rX  rn  rk  rå   ry  )r3   Úrandom_namerr  rb  ro   rn   rs   r°   r÷   rè   r&   Úkvrä   r4   ÚProgressBarCallbackr¿   )ÚclsrX  r‘   r�   rY  r2   r  rÎ   r›  rZ  rk  rl  rå   r]   r^   ry  r¢  rn  rö   s    `    ` `       @@@r=   Úpreparez_DatasetRunContainer.prepare*  sx  øøøøøø€ ð $ÐD¥Ô'BÑ'DÔ'DˆÝ4EØØØ ØØ-Øð5
ñ 5
ô 5
Ñ1ˆ�w ¨ð ˆz�rˆØÔ%×)Ò)¨%Ñ0Ô0Ð6°B×=Ò=Ñ?Ô?ð 	(ð 	(‰DˆAˆqØ�KŠK˜˜q˜˜ 1˜˜Ñ'Ô'Ð'Ð'Ý.Ð/CÑDÔDˆÝ*Ø˜8 Z°Ô1BÐ1QÅhÄkñ
ô 
ˆõ 	! ¨!¤¨m¸\ÑJÔJÐJÝÔ3µC¸±M´MÑBÔBˆð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð( $ð)
ñ 
ô 
ˆð, ˆsØØØ'ØØð
ñ 
ô 
ð 	
r<   )rz  r¾   r{  r|  r@   rq   )r@   r|  )rz  rŽ  r@   r?   )F)rz  r¾   r‘  r’  r@   r?   )NNNrš  N)rX  r   r‘   r‡   r�   r�   rY  rú   r2   rç   r  rù   rÎ   rÏ   r›  rœ  rZ  r[  r@   rx  )r7   r8   r9   r:   ru  r€  r�  r�  r™  Úclassmethodr§  r;   r<   r=   rx  rx  Ó  sà   € € € € € € à=Ð=à€N€N�NØÐÐÑØÐÐÑØÐÐÑØ!Ð!Ð!Ñ!ðð ð ð ð,=ð =ð =ð =ð4

ð 

ð 

ð 

ðð ð ð ð ð" ð :>Ø$(Ø8<Ø!"Ø59ð:
ð :
ð :
ð :
ñ „[ð:
ð :
ð :
r<   rx  r’  c                 óš   — 	 ddl m}   | ¦   «         } | ¦   «         d uodt          t          |¦  «        ¦  «        v S # t          $ r Y dS w xY w)Nr   )Úget_ipythonÚzmqshellF)ÚIPythonrª  r‡   r½   rm   )rª  Úress     r=   Ú_is_jupyter_environmentr®  h  sm   € ðØ'Ð'Ð'Ð'Ð'Ð'àˆk‰mŒmˆØˆ{‰}Œ} DÐ(ÐI¨Z½3½tÀC¹y¼y¹>¼>Ð-IÐIøÝð ð ð Øˆuˆuðøøøs   ‚9< ¼
A
Á	A
Úaggregate_resultsrA   c                óà   — t          ¦   «         r)ddlm}m}  | |d¦  «        ¦  «          || ¦  «         d S |                      d„ d¬¦  «        }t          d¦  «         t          |¦  «         d S )Nr   )ÚHTMLÚdisplayz<h3>Experiment Results:</h3>c                ó
   — | d›S )Nz.2fr;   )Úxs    r=   r—   z,_display_aggregate_results.<locals>.<lambda>z  s
   €  a : :€ r<   Úright)Úfloat_formatÚjustifyz
 Experiment Results:)r®  ÚIPython.displayr±  r²  Ú	to_stringrj  )r¯  r±  r²  Úformatted_strings       r=   r”  r”  r  s£   € ÝÑ Ô ð 
 Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1àˆ��Ð3Ñ4Ô4Ñ5Ô5Ð5ØˆÐ!Ñ"Ô"Ð"Ð"Ð"à,×6Ò6Ø-Ð-°wð 7ñ 
ô 
Ðõ 	Ð&Ñ'Ô'Ð'ÝÐÑÔÐÐÐr<   aè  The input_mapper argument is deprecated and will be removed in a future release. Please add a  RunnableLambda to your chain to map inputs to the expected format instead. Example:
def construct_chain():
    my_chain = ...
    input_mapper = {'other_key': 'MyOtherInput', 'my_input_key': x}
    return input_mapper | my_chain
run_on_dataset(..., llm_or_chain_factory=construct_chain)
(See https://api.python.langchain.com/en/latest/schema/langchain.schema.runnable.base.RunnableLambda.html)rš  )r2   r›  rY  rZ  r‘  r  úOptional[Client]r›  rœ  r‘  r€   r   c             ‹  ó(  K  — |	                      dd ¦  «        }
|
rt          dt          d¬¦  «         |	r(t          dd|	                     ¦   «         › d�d¬¦  «         | pt	          ¦   «         } t
                               | ||||||
||¬¦	  «	        }t          j        |j	        d	          
                    d
¦  «        gt          t          j        t          |j        |
¬¦  «        |j        |j	        ¦  «        ¢R Ž ƒ d {V —†}|                     ||¬¦  «        S )NrÎ   ú0.0.305T©ÚmessageÚpendingúPThe following arguments are deprecated and will be removed in a future release: rÖ   ©r¿  Úremoval©rZ  r   r¡  ©r�   rÎ   ©r‘  )Úpopr   Ú_INPUT_MAPPER_DEP_WARNINGrÝ   r   rx  r§  Úrunnable_utilsÚgather_with_concurrencyry  ro   ÚmapÚ	functoolsÚpartialrI  rk  rå   r™  )rX  r‘   r�   r2   r›  rY  rZ  r‘  r  r€   rÎ   Ú	containerrz  s                r=   Úarun_on_datasetrÏ  �  sr  è è € ð —:’:˜n¨dÑ3Ô3€LØð TÝ˜	Õ+DÈdÐSÑSÔSÐSàð 
ÝØð à�{Š{‰}Œ}ð ð  ð  ð ð	
ñ 	
ô 	
ð 	
ð Ð•v‘x”x€FÝ$×,Ò,ØØØØØØØØØ)ð -ñ 
ô 
€Iõ )Ô@ØÔ˜!Ô× Ò Ð!2Ñ3Ô3ðå	ÝÔÝ"Ø%.Ô%<Ø)ðñ ô ð
 ÔØÔñ

ô 

ðð ð ð ð ð ð ð ð €Mð ×Ò˜M°7ÐÑ;Ô;Ð;r<   c               ó°  ‡‡— |	                      dd ¦  «        Š‰rt          dt          d¬¦  «         |	r(t          dd|	                     ¦   «         › d�d¬¦  «         | pt	          ¦   «         } t
                               | |||||‰||¬¦	  «	        Š|d	k    r(ˆˆfd
„t          ‰j        ‰j	        ¦  «        D ¦   «         }
n„t          j        ‰j	        d	         ¦  «        5 }t          |                     t          j        t           ‰j        ‰¬¦  «        ‰j        ‰j	        ¦  «        ¦  «        }
d d d ¦  «         n# 1 swxY w Y   ‰                     |
|¬¦  «        S )NrÎ   r½  Tr¾  rÁ  rÖ   rÂ  rÄ  r   c                óF   •— g | ]\  }}t          ||‰j        ‰¬ ¦  «        ‘ŒS )rÅ  )rW  rk  )rH   rá   r   rÎ  rÎ   s      €€r=   rJ   z"run_on_dataset.<locals>.<listcomp>é  sM   ø€ ð 
ð 
ð 
ñ  �˜õ ØØØ%.Ô%<Ø)ð	ñ ô ð
ð 
ð 
r<   rÅ  rÆ  )rÇ  r   rÈ  rÝ   r   rx  r§  r~  rå   ry  r<  Úget_executor_for_configr¾   rË  rÌ  rÍ  rW  rk  r™  )rX  r‘   r�   r2   r›  rY  rZ  r‘  r  r€   rz  ÚexecutorrÎ  rÎ   s               @@r=   Úrun_on_datasetrÔ  Ã  sè  øø€ ð —:’:˜n¨dÑ3Ô3€LØð TÝ˜	Õ+DÈdÐSÑSÔSÐSàð 
ÝØð à�{Š{‰}Œ}ð ð  ð  ð ð	
ñ 	
ô 	
ð 	
ð Ð•v‘x”x€FÝ$×,Ò,ØØØØØØØØØ)ð -ñ 
ô 
€Ið ˜AÒÐð
ð 
ð 
ð 
ð 
õ $' yÔ'9¸9Ô;LÑ#MÔ#Mð
ñ 
ô 
ˆˆõ Ô4°YÔ5FÀqÔ5IÑJÔJð 	ÈhÝ Ø—’ÝÔ%Ý)Ø-6Ô-DØ%1ðñ ô ð
 Ô&ØÔ%ñô ñ
ô 
ˆMð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ×Ò˜M°7ÐÑ;Ô;Ð;s   ÃAD6Ä6D:Ä=D:ao  
Run the Chain or language model on a dataset and store traces
to the specified project name.

Args:
    dataset_name: Name of the dataset to run the chain on.
    llm_or_chain_factory: Language model or Chain constructor to run
        over the dataset. The Chain constructor is used to permit
        independent calls on each example without carrying over state.
    evaluation: Configuration for evaluators to run on the
        results of the chain
    concurrency_level: The number of async tasks to run concurrently.
    project_name: Name of the project to store the traces in.
        Defaults to {dataset_name}-{chain class name}-{datetime}.
    project_metadata: Optional metadata to add to the project.
        Useful for storing information the test variant.
        (prompt version, model version, etc.)
    client: LangSmith client to use to access the dataset and to
        log feedback and run traces.
    verbose: Whether to print progress.
    tags: Tags to add to each run in the project.
Returns:
    A dictionary containing the run's project name and the resulting model outputs.


For the (usually faster) async version of this function, see :func:`arun_on_dataset`.

Examples
--------

.. code-block:: python

    from langsmith import Client
    from langchain_community.chat_models import ChatOpenAI
    from langchain.chains import LLMChain
    from langchain.smith import smith_eval.RunEvalConfig, run_on_dataset

    # Chains may have memory. Passing in a constructor function lets the
    # evaluation framework avoid cross-contamination between runs.
    def construct_chain():
        llm = ChatOpenAI(temperature=0)
        chain = LLMChain.from_string(
            llm,
            "What's the answer to {your_input_key}"
        )
        return chain

    # Load off-the-shelf evaluators via config or the EvaluatorType (string or enum)
    evaluation_config = smith_eval.RunEvalConfig(
        evaluators=[
            "qa",  # "Correctness" against a reference answer
            "embedding_distance",
            smith_eval.RunEvalConfig.Criteria("helpfulness"),
            smith_eval.RunEvalConfig.Criteria({
                "fifth-grader-score": "Do you have to be smarter than a fifth grader to answer this question?"
            }),
        ]
    )

    client = Client()
    run_on_dataset(
        client,
        "<my_dataset_name>",
        construct_chain,
        evaluation=evaluation_config,
    )

You can also create custom evaluators by subclassing the
:class:`StringEvaluator <langchain.evaluation.schema.StringEvaluator>`
or LangSmith's `RunEvaluator` classes.

.. code-block:: python

    from typing import Optional
    from langchain.evaluation import StringEvaluator

    class MyStringEvaluator(StringEvaluator):

        @property
        def requires_input(self) -> bool:
            return False

        @property
        def requires_reference(self) -> bool:
            return True

        @property
        def evaluation_name(self) -> str:
            return "exact_match"

        def _evaluate_strings(self, prediction, reference=None, input=None, **kwargs) -> dict:
            return {"score": prediction == reference}


    evaluation_config = smith_eval.RunEvalConfig(
        custom_evaluators = [MyStringEvaluator()],
    )

    run_on_dataset(
        client,
        "<my_dataset_name>",
        construct_chain,
        evaluation=evaluation_config,
    )
zrun_on_dataset(zawait arun_on_dataset()rŽ   )r�   r�   r‘   r‡   r@   r’   )r±   r²   r@   r‡   )r±   r²   r@   rÅ   )rÍ   r'   rÎ   rÏ   r@   r�   )rÍ   r'   r–   r-   rÎ   rÏ   r@   r�   )rá   r'   r�   r’   rÎ   rÏ   r@   r�   )
r�   r’   rå   ræ   r2   rç   rè   r&   r@   ré   )r   rø   rò   rù   r@   rú   )r   rø   ró   rù   r@   rú   )r   rø   r  rù   r@   rú   )r  r  r	  r
  rô   r‡   rè   r&   r  rù   r  rú   rý   rú   r  rú   r@   r"   )
r   rø   rò   rù   ró   rù   r  rù   r@   r  )r   rø   rô   r‡   rè   r&   r  rù   rò   rù   ró   rù   r@   r  )rì   r   r±   r²   r  rù   r'  r,   rÎ   rÏ   r@   r(  )r–   r4  r±   r²   r'  r,   r  rù   rÎ   rÏ   r@   r5  )
rá   r'   r   r   r�   r’   rÎ   rÏ   r@   r>  )rì   r   r±   r²   r'  r,   r  rù   rÎ   rÏ   r@   r(  )r–   r4  r±   r²   r'  r,   r  rù   rÎ   rÏ   r@   rQ  rë   )rX  r   r‘   r‡   r�   r�   rY  r‡   rZ  r[  r  rù   r@   r\  )r@   r’  )r¯  rA   r@   r�   )rX  r»  r‘   r‡   r�   r�   r2   rç   r›  rœ  rY  rú   rZ  r[  r‘  r’  r  rù   r€   r   r@   r²   )}r:   Ú
__future__r   ÚdataclassesrÌ  r§   Úloggingrg  r   r   Úenumr   Útypingr   r   r	   r
   r   r   r   r   r   Úlangchain_core._apir   Úlangchain_core.language_modelsr   Úlangchain_core.messagesr   r   Úlangchain_core.outputsr   r   Úlangchain_core.runnablesr   r   r   r   r<  r   rÉ  Ú!langchain_core.tracers.evaluationr   r   Ú langchain_core.tracers.langchainr   Úlangsmith.clientr   Úlangsmith.envr    Úlangsmith.evaluationr!   r"   Úlangsmith.run_helpersr#   r$   Úlangsmith.schemasr%   r&   r'   r(   Úlangsmith.utilsr)   Úrequestsr*   Útyping_extensionsr+   Úlangchain.callbacks.managerr,   Úlangchain.chains.baser-   Úlangchain.evaluation.loadingr.   Úlangchain.evaluation.schemar/   r0   r1   Úlangchain.smithr2   r  Úlangchain.smith.evaluationr  r3   r4   rl   ru   Ú	getLoggerr7   r©   rq   r�   r’   rE  r6   r?   r~   r°   rÄ   rÌ   rØ   rà   rä   r÷   rÿ   r  r  r  r  rð   r2  r=  rI  rP  rT  rW  rr  rt  Ú	dataclassrx  r®  r”  rÈ  rÏ  rÔ  Ú_RUN_ON_DATASET_DOCSTRINGÚreplacer;   r<   r=   ú<module>ró     sŠ  ðØ DÐ Dà "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 0Ð /Ð /Ð /Ð /Ð /Ø <Ð <Ð <Ð <Ð <Ð <Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ >Ð >Ð >Ð >Ð >Ð >Ø <Ð <Ð <Ð <Ð <Ð <ðð ð ð ð ð ð ð ð =Ð <Ð <Ð <Ð <Ð <Ø #Ð #Ð #Ð #Ð #Ð #Ø &Ð &Ð &Ð &Ð &Ð &Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7ðð ð ð ð ð ð ð ð ð ð
 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø BÐ BÐ BÐ BÐ BÐ BØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @àð ØÐÐÐà	ˆÔ	˜8Ñ	$Ô	$€àØˆR��u˜h�Ô'Ð'Ô(ØØˆdˆV�Sˆ[ÔØØ	ð	ôÐ ð ˆH�R˜˜u h˜Ô/Ð/Ô0Ð2CÐCÔD€ð3ð 3ð 3ð 3ð 3�yñ 3ô 3ð 3ðE4ð E4ð E4ð E4ð E4�ñ E4ô E4ð E4ðP
Rð 
Rð 
Rð 
Rð 
R�ñ 
Rô 
Rð 
Rð 'ð: ð : ð : ð : ð : ðz0
ð 0
ð 0
ð 0
ðf*
ð *
ð *
ð *
ð\ð ð ð ðB"ð "ð "ð "ðJCð Cð Cð Cð("ð "ð "ð "ðJð ð ð ð0ð ð ð ð.ð ð ð ð$6ð 6ð 6ð 6ðr	4ð 	4ð 	4ð 	4ð?ð ?ð ?ð ?ðR !%ØØ48ð5ð 5ð 5ð 5ð 5ð 5ðz !%Ø48ðð ð ð ð ð ð: 59ð1ð 1ð 1ð 1ð 1ð 1ðx !%Ø48ð0ð 0ð 0ð 0ð 0ð 0ðp !%Ø48ðð ð ð ð ð ð: 59ð3ð 3ð 3ð 3ð 3ð 3ð| 26Ø $ð15ð 15ð 15ð 15ð 15ðhð ð ð ð � %ð ñ ô ð ð ÔðQ
ð Q
ð Q
ð Q
ð Q
ñ Q
ô Q
ñ ÔðQ
ðhð ð ð ð ð  ð  ð  ð
:ð ð( 6:ØØ"&Ø15ØØ $ð1<ð 1<ð 1<ð 1<ð 1<ð 1<ðr 6:ØØ"&Ø15ØØ $ð=<ð =<ð =<ð =<ð =<ð =<ð@hÐ ðR 3€Ô Ø3×;Ò;ØÐ/ñô €Ô Ð Ð r<   