§
    ~Štj–  ã                  ó  — 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mZ ddl	m
Z
mZmZ ddlmZ ddlmZmZmZmZmZmZ ddl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! ddl"m#Z# ddl$m%Z%m&Z&m'Z'm(Z(  ej)        e*¦  «        Z+d;d„Z, G d„ de¦  «        Z- G d„ ded¬¦  «        Z. G d„ de¦  «        Z/ G d„ ded¬¦  «        Z0 G d „ d!¦  «        Z1ee/e0e2f         Z3 G d"„ d#e¦  «        Z4ee4e2f         Z5 G d$„ d%e1¦  «        Z6d<d(„Z7d)Z8d=d+„Z9 G d,„ d-¦  «        Z:d>d/„Z;d?d2„Z<d@d4„Z=dAd8„Z>eeee!j(                 ee!j'                 gee/e0f         f         ee?e!j(                 e?e!j'                 gee/e0f         f         f         Z@dBd:„ZAdS )Cz?This module contains the evaluator classes for evaluating runs.é    )ÚannotationsN)Úabstractmethod)Ú	AwaitableÚ	CoroutineÚSequence)Úwraps)ÚAnyÚCallableÚLiteralÚOptionalÚUnionÚcast)Ú	BaseModelÚ
ConfigDictÚFieldÚValidationErrorÚmodel_validator)Ú	TypedDict©Úrun_helpers)Úschemas)Ú_safe_extract_feedback_keys)Ú
SCORE_TYPEÚ
VALUE_TYPEÚExampleÚRunÚawaitable_factoryú&Callable[[], Coroutine[Any, Any, Any]]Úmethod_nameÚstrÚasync_method_nameÚreturnr	   c                ó°   — 	 t          j        ¦   «          n,# t          $ r t          j         | ¦   «         ¦  «        cY S w xY wt          d|› d|› d�¦  «        ‚)NzCannot call `zC` on an async run evaluator from within a running event loop. Use `z
` instead.)ÚasyncioÚget_running_loopÚRuntimeErrorÚrun)r   r   r!   s      ú\/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/evaluation/evaluator.pyÚ_run_async_evaluator_syncr)       s�   € ð
0ÝÔ Ñ"Ô"Ð"Ð"øÝð 0ð 0ð 0ÝŒ{Ð,Ð,Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/ð0øøøå
ð	B˜ð 	Bð 	BØ$5ð	Bð 	Bð 	Bñô ð s   ‚ –&?¾?c                  ó*   — e Zd ZU dZded<   	 ded<   dS )ÚCategoryz$A category for categorical feedback.úOptional[Union[float, int]]Úvaluer    ÚlabelN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__© ó    r(   r+   r+   /   s0   € € € € € € Ø.Ð.à&Ð&Ð&Ñ&ØCØ€J€J�JØ&Ð&r6   r+   c                  óB   — e Zd ZU dZded<   	 ded<   	 ded<   	 ded<   d	S )
ÚFeedbackConfigzkConfiguration to define a type of feedback.

    Applied on on the first creation of a `feedback_key`.
    z0Literal['continuous', 'categorical', 'freeform']Útyper,   ÚminÚmaxz%Optional[list[Union[Category, dict]]]Ú
categoriesNr/   r5   r6   r(   r8   r8   8   sW   € € € € € € ðð ð
 ;Ð:Ð:Ñ:ØØ$Ð$Ð$Ñ$Ø;Ø$Ð$Ð$Ñ$ØAØ5Ð5Ð5Ñ5Ð5Ð5r6   r8   F)Útotalc                  ó  — e Zd ZU dZded<   	 dZded<   	 dZded<   	 dZd	ed
<   	 dZded<   	 dZ	d	ed<   	  e
e¬¦  «        Zded<   	 dZded<   	 dZded<   	 dZded<   	 dZd	ed<   	  ed¬¦  «        Z ed¬¦  «        dd„¦   «         ZdS )ÚEvaluationResultzEvaluation result.r    ÚkeyNr   Úscorer   r-   zOptional[dict]ÚmetadatazOptional[str]ÚcommentÚ
correction)Údefault_factoryÚdictÚevaluator_infoz%Optional[Union[FeedbackConfig, dict]]Úfeedback_configúOptional[Union[uuid.UUID, str]]Úsource_run_idÚtarget_run_idÚextraÚforbid)rL   Úafter)Úmoder"   c                óš   — | j         €Ct          | j        t          t          f¦  «        r"t
                               d| j        › �¦  «         | S )z:Warn when numeric values are passed via the `value` field.NzJNumeric values should be provided in the 'score' field, not 'value'. Got: )rA   Ú
isinstancer-   ÚintÚfloatÚloggerÚwarning©Úselfs    r(   Úcheck_value_non_numericz(EvaluationResult.check_value_non_numericf   sR   € ð Œ:Ð¥*¨T¬Z½#½u¸Ñ"FÔ"FÐÝ�NŠNð&Øœð&ð &ñô ð ð ˆr6   )r"   r?   )r0   r1   r2   r3   r4   rA   r-   rB   rC   rD   r   rF   rG   rH   rJ   rK   rL   r   Úmodel_configr   rX   r5   r6   r(   r?   r?   G   s?  € € € € € € ØÐà€H€H�HØ@Ø€EÐÐÐÑØ0Ø€EÐÐÐÑØ8Ø#€HÐ#Ð#Ð#Ñ#Ø8Ø!€GÐ!Ð!Ð!Ñ!Ø2Ø!%€JÐ%Ð%Ð%Ñ%Ø:Ø ˜5°Ð6Ñ6Ô6€NÐ6Ð6Ð6Ñ6Ø5Ø=A€OÐAÐAÐAÑAØ;Ø59€MÐ9Ð9Ð9Ñ9Ø6Ø59€MÐ9Ð9Ð9Ñ9ðð !€EÐ Ð Ð Ñ Ø)à�: HÐ-Ñ-Ô-€Là€_˜'Ð"Ñ"Ô"ðð ð ñ #Ô"ðð ð r6   r?   c                  ó   — e Zd ZU dZded<   dS )ÚEvaluationResultszqBatch evaluation results.

    This makes it easy for your evaluator to return multiple
    metrics at once.
    zlist[EvaluationResult]ÚresultsNr/   r5   r6   r(   r[   r[   q   s*   € € € € € € ðð ð $Ð#Ð#Ñ#Ø!Ð!r6   r[   c                  óV   — e Zd ZdZe	 	 ddd„¦   «         Z	 	 ddd„Zedd„¦   «         ZdS )ÚRunEvaluatorzEvaluator interface class.Nr'   r   ÚexampleúOptional[Example]Úevaluator_run_idúOptional[uuid.UUID]r"   ú*Union[EvaluationResult, EvaluationResults]c                ó   — dS )zEvaluate an example.Nr5   )rW   r'   r_   ra   s       r(   Úevaluate_runzRunEvaluator.evaluate_run   s   € € € r6   c              ƒ  ó¢   ‡ ‡‡‡‡K  — t          j        ¦   «         Šˆˆˆˆˆ fd„}t          j        ¦   «                              d|¦  «        ƒ d{V —†S )z#Evaluate an example asynchronously.c                 óˆ   •— t          j        di ‰ ¤Ž5  ‰                     ‰‰‰¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nr5   )ÚrhÚtracing_contextre   )Úcurrent_contextra   r_   r'   rW   s   €€€€€r(   Ú_run_with_contextz5RunEvaluator.aevaluate_run.<locals>._run_with_context‘   s¨   ø€ ÝÔ#Ð6Ð6 oÐ6Ð6ð Ið IØ×(Ò(¨¨gÐ7GÑHÔHðIð Ið Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Ið Ið Is   “7·;¾;N)rh   Úget_tracing_contextr$   r%   Úrun_in_executor)rW   r'   r_   ra   rk   rj   s   ```` @r(   Úaevaluate_runzRunEvaluator.aevaluate_runˆ   s…   øøøøøè è € õ Ô0Ñ2Ô2ˆð	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Iõ Ô-Ñ/Ô/×?Ò?ÀÐFWÑXÔXÐXÐXÐXÐXÐXÐXÐXr6   ú	list[str]c                óT   — t          | dd¦  «        }t          |dd¦  «        }|r|gng S )a  Feedback keys this evaluator emits, when statically known.

        Used to render per-evaluator experiment progress and to synthesize error
        feedback when the evaluator raises. Best-effort: empty when the keys can't
        be determined without running the evaluator. Subclasses that know their
        keys should override this. The default also resolves evaluators that wrap
        a single named inner evaluator exposed as ``.evaluator`` (e.g. the
        LangChain string-evaluator integration).
        Ú	evaluatorNÚevaluation_name)Úgetattr)rW   ÚinnerÚnames      r(   Úfeedback_keyszRunEvaluator.feedback_keys—   s8   € õ ˜˜k¨4Ñ0Ô0ˆÝ�uÐ/°Ñ6Ô6ˆØÐ%�ˆvˆv 2Ð%r6   ©NN©r'   r   r_   r`   ra   rb   r"   rc   ©r"   ro   )	r0   r1   r2   r3   r   re   rn   Úpropertyrv   r5   r6   r(   r^   r^   |   s‹   € € € € € Ø$Ð$àð &*Ø04ð	#ð #ð #ð #ñ „^ð#ð &*Ø04ð	Yð Yð Yð Yð Yð ð&ð &ð &ñ „Xð&ð &ð &r6   r^   c                  óJ   — e Zd ZU dZded<   	 ded<   	 dZded<   	 dZd	ed
<   dS )ÚComparisonEvaluationResultz°Feedback scores for the results of comparative evaluations.

    These are generated by functions that compare two or more runs,
    returning a ranking or other feedback.
    r    r@   z'dict[Union[uuid.UUID, str], SCORE_TYPE]ÚscoresNrI   rJ   z6Optional[Union[str, dict[Union[uuid.UUID, str], str]]]rC   )r0   r1   r2   r3   r4   rJ   rC   r5   r6   r(   r|   r|   ª   sb   € € € € € € ðð ð €H€H�HØ@Ø3Ð3Ð3Ñ3Ø4Ø59€MÐ9Ð9Ð9Ñ9Ø6ØFJ€GÐJÐJÐJÑJðð r6   r|   c                  ó¤   ‡ — e Zd ZdZ	 d&d'd„Z	 d(d)d„Zd*d„Zd+d„Zed,d„¦   «         Z	ed-d„¦   «         Z
	 	 d.d/d!„Z	 	 d.d0ˆ fd"„Z	 d&d1d#„Zd2d%„Zˆ xZS )3ÚDynamicRunEvaluatora¶  A dynamic evaluator that wraps a function and transforms it into a `RunEvaluator`.

    This class is designed to be used with the `@run_evaluator` decorator, allowing
    functions that take a `Run` and an optional `Example` as arguments, and return
    an `EvaluationResult` or `EvaluationResults`, to be used as instances of `RunEvaluator`.

    Attributes:
        func (Callable): The function that is wrapped by this evaluator.
    NÚfuncúXCallable[[Run, Optional[Example]], Union[_RUNNABLE_OUTPUT, Awaitable[_RUNNABLE_OUTPUT]]]ÚafuncúIOptional[Callable[[Run, Optional[Example]], Awaitable[_RUNNABLE_OUTPUT]]]c                ó°  ‡— t          |¦  «        | _        t          |¦  «        \  }Š|rt          |¦  «        \  }Šdˆfd„} t          |¦  «        | ¦  «         ddlm} |�2|                     ||¬¦  «        | _        t          |d	d
¦  «        | _	        t          j        |¦  «        rE|�t          d¦  «        ‚|                     ||¬¦  «        | _        t          |d	d
¦  «        | _	        dS |                     t          t          t          t           t"                   gt$          f         |¦  «        |¬¦  «        | _        t          |d	d
¦  «        | _	        dS )zöInitialize the `DynamicRunEvaluator` with a given function.

        Args:
            func (Callable): A function that takes a `Run` and an optional `Example` as
            arguments, and returns a dict or `ComparisonEvaluationResult`.
        ÚinputsrF   r"   c                ó|   •— ‰€| S  ‰|                       d¦  «        |                       d¦  «        ¦  «        \  }}}|S )Nr'   r_   ©Úget©r…   Ú_Útraced_inputsÚprepare_inputss      €r(   Úprocess_inputsz4DynamicRunEvaluator.__init__.<locals>.process_inputså   sK   ø€ ØÐ%Ø�Ø$2 NØ—
’
˜5Ñ!Ô! 6§:¢:¨iÑ#8Ô#8ñ%ô %Ñ!ˆQ��=ð !Ð r6   r   r   N©r�   r0   r   ú�Func was provided as a coroutine function, but afunc was also provided. If providing both, func should be a regular function to avoid ambiguity.©r…   rF   r"   rF   )r   Ú_feedback_keysÚ_normalize_evaluator_funcr   Ú	langsmithr   Úensure_traceabler‚   rs   Ú_nameÚinspectÚiscoroutinefunctionÚ	TypeErrorr   r
   r   r   r   Ú_RUNNABLE_OUTPUTr€   ©rW   r€   r‚   r�   r   rŒ   s        @r(   Ú__init__zDynamicRunEvaluator.__init__Ì   s�  ø€ õ( :¸$Ñ?Ô?ˆÔÝ!:¸4Ñ!@Ô!@Ñˆˆ~Øð 	GÝ&?ÀÑ&FÔ&FÑ#ˆU�Nð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	�ˆd‰Œ�DÑÔÐØ)Ð)Ð)Ð)Ð)Ð)àÐØ$×5Ò5Ø nð 6ñ ô ˆDŒJõ ! ¨
Ð4IÑJÔJˆDŒJÝÔ& tÑ,Ô,ð 	JØÐ Ýð3ñô ð ð
 %×5Ò5Ø ^ð 6ñ ô ˆDŒJõ !  zÐ3HÑIÔIˆDŒJˆJˆJà#×4Ò4Ý•X�s¥H­WÔ$5Ð6Õ8HÐHÔIÈ4ÑPÔPØ-ð 5ñ ô ˆDŒIõ !  zÐ3HÑIÔIˆDŒJˆJˆJr6   FÚresultúUnion[EvaluationResult, dict]rJ   ú	uuid.UUIDÚallow_no_keyÚboolr"   r?   c                ó\  ‡— t          ‰t          ¦  «        r‰j        s|‰_        ‰S 	 ‰st          d‰› �¦  «        ‚d‰vr|r
| j        ‰d<   t          ˆfd„dD ¦   «         ¦  «        rt          d‰› �¦  «        ‚t          di d|i‰¥¤ŽS # t          $ r}t          d‰› �¦  «        |‚d }~ww xY w)	NziExpected an EvaluationResult object, or dict with a metric 'key' and optional 'score'; got empty result: r@   c              3  ó    •K  — | ]}|‰vV — Œ	d S ©Nr5   )Ú.0Úkrœ   s     €r(   ú	<genexpr>z@DynamicRunEvaluator._coerce_evaluation_result.<locals>.<genexpr>  s'   øè è € ÐJÐJ q�1˜F�?ÐJÐJÐJÐJÐJÐJr6   )rA   r-   rC   zrExpected an EvaluationResult object, or dict with a metric 'key' and optional 'score' or categorical 'value'; got rJ   z[Expected an EvaluationResult object, or dict with a metric 'key' and optional 'score'; got r5   )rQ   r?   rJ   Ú
ValueErrorr•   Úallr   )rW   rœ   rJ   rŸ   Úes    `   r(   Ú_coerce_evaluation_resultz-DynamicRunEvaluator._coerce_evaluation_result  s6  ø€ õ �fÕ.Ñ/Ô/ð 	ØÔ'ð 5Ø'4�Ô$ØˆMð	Øð Ý ðOØFLðOð Oñô ð ð ˜FÐ"Ð" |Ð"Ø $¤
��u‘ÝÐJÐJÐJÐJÐ,IÐJÑJÔJÑJÔJð Ý ðXØOUðXð Xñô ð õ $ÐQÐQ ¸Ð&PÈÐ&PÐQÐQÐQøÝð 	ð 	ð 	Ýð=Ø4:ð=ð =ñô ð ðøøøøð	øøøs   ¨A B	 Â	
B+ÂB&Â&B+r\   úUnion[dict, EvaluationResults]rc   c                óÔ   ‡ ‡— d|v r8|                      ¦   «         }ˆ ˆfd„|d         D ¦   «         |d<   t          di |¤ŽS ‰                      t          t          |¦  «        ‰d¬¦  «        S )Nr\   c                ó>   •— g | ]}‰                      |‰¬ ¦  «        ‘ŒS ))rJ   )rª   )r¤   ÚrrW   rJ   s     €€r(   ú
<listcomp>zBDynamicRunEvaluator._coerce_evaluation_results.<locals>.<listcomp>,  s<   ø€ ð ð ð àð ×.Ò.¨qÀÐ.ÑNÔNðð ð r6   T)rJ   rŸ   r5   )Úcopyr[   rª   r   rF   )rW   r\   rJ   Úcps   ` ` r(   Ú_coerce_evaluation_resultsz.DynamicRunEvaluator._coerce_evaluation_results%  s˜   øø€ ð
 ˜ÐÐØ—’‘”ˆBðð ð ð ð à  Ô+ðñ ô ˆBˆy‰Mõ %Ð*Ð* rÐ*Ð*Ð*à×-Ò-Ý•�wÑÔ¨}È4ð .ñ 
ô 
ð 	
r6   úMUnion[EvaluationResult, EvaluationResults, dict, str, int, bool, float, list]c                ó–   — t          |t          ¦  «        r|j        s||_        |S t          |¦  «        }|                      ||¦  «        S r£   )rQ   r?   rJ   Ú_format_evaluator_resultr²   )rW   rœ   rJ   s      r(   Ú_format_resultz"DynamicRunEvaluator._format_result6  sR   € õ �fÕ.Ñ/Ô/ð 	ØÔ'ð 5Ø'4�Ô$ØˆMÝ)¨&Ñ1Ô1ˆØ×.Ò.¨v°}ÑEÔEÐEr6   c                ó"   — t          | d¦  «        S ©z¢Check if the evaluator function is asynchronous.

        Returns:
            bool: `True` if the evaluator function is asynchronous, `False` otherwise.
        r‚   ©ÚhasattrrV   s    r(   Úis_asynczDynamicRunEvaluator.is_asyncD  ó   € õ �t˜WÑ%Ô%Ð%r6   ro   c                ó   — | j         S )zéFeedback keys this evaluator emits, statically inferred from its source.

        Best-effort: empty when keys can't be determined without running the
        function (e.g. a dynamically computed key or unavailable source).
        )r‘   rV   s    r(   rv   z!DynamicRunEvaluator.feedback_keysM  s   € ð Ô"Ð"r6   r'   r   r_   r`   ra   rb   c                óB  ‡ ‡‡— t          ‰ d¦  «        st          ˆˆˆ fd„dd¦  «        S |€t          j        ¦   «         }d‰j        i}t          ‰dd¦  «        rt          ‰j        ¦  «        |d<   ‰                      ‰‰||d	œ¬
¦  «        }‰  	                    ||¦  «        S )a�  Evaluate a run using the wrapped function.

        This method directly invokes the wrapped function with the provided arguments.

        Args:
            run (Run): The run to be evaluated.
            example (Optional[Example]): An optional example to be used in the evaluation.

        Returns:
            Union[EvaluationResult, EvaluationResults]: The result of the evaluation.
        r€   c                 ó0   •— ‰                      ‰‰ ¦  «        S r£   )rn   )r_   r'   rW   s   €€€r(   ú<lambda>z2DynamicRunEvaluator.evaluate_run.<locals>.<lambda>i  s   ø€ ˜×*Ò*¨3°Ñ8Ô8€ r6   re   rn   NrK   Ú
session_idÚ
experiment©Úrun_idrB   ©Úlangsmith_extra)
rº   r)   ÚuuidÚuuid4Úidrs   r    rÁ   r€   r¶   )rW   r'   r_   ra   rB   rœ   s   ```   r(   re   z DynamicRunEvaluator.evaluate_runV  sÍ   øøø€ õ" �t˜VÑ$Ô$ð 	Ý,Ø8Ð8Ð8Ð8Ð8Ð8ØØñô ð ð
 Ð#Ý#œz™|œ|ÐØ$3°S´VÐ#<ˆÝ�3˜ dÑ+Ô+ð 	9Ý%(¨¬Ñ%8Ô%8ˆH�\Ñ"Ø—’ØØØ'7ÀXÐNÐNð ñ 
ô 
ˆð
 ×"Ò" 6Ð+;Ñ<Ô<Ð<r6   c              ƒ  ór  •K  — t          | d¦  «        s(t          ¦   «                              ||¦  «        ƒ d{V —†S |€t          j        ¦   «         }d|j        i}t          |dd¦  «        rt          |j        ¦  «        |d<   |  	                    ||||dœ¬¦  «        ƒ d{V —†}|  
                    ||¦  «        S )aÄ  Evaluate a run asynchronously using the wrapped async function.

        This method directly invokes the wrapped async function with the
            provided arguments.

        Args:
            run (Run): The run to be evaluated.
            example (Optional[Example]): An optional example to be used
                in the evaluation.

        Returns:
            Union[EvaluationResult, EvaluationResults]: The result of the evaluation.
        r‚   NrK   rÁ   rÂ   rÃ   rÅ   )rº   Úsuperrn   rÇ   rÈ   rÉ   rs   r    rÁ   r‚   r¶   )rW   r'   r_   ra   rB   rœ   Ú	__class__s         €r(   rn   z!DynamicRunEvaluator.aevaluate_runy  sí   øè è € õ& �t˜WÑ%Ô%ð 	=Ý™œ×.Ò.¨s°GÑ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ØÐ#Ý#œz™|œ|ÐØ$3°S´VÐ#<ˆÝ�3˜ dÑ+Ô+ð 	9Ý%(¨¬Ñ%8Ô%8ˆH�\Ñ"Ø—z’zØØØ'7ÀXÐNÐNð "ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 ×"Ò" 6Ð+;Ñ<Ô<Ð<r6   c                ó.   — |                       ||¦  «        S )aÉ  Make the evaluator callable, allowing it to be used like a function.

        This method enables the evaluator instance to be called directly, forwarding the
        call to `evaluate_run`.

        Args:
            run (Run): The run to be evaluated.
            example (Optional[Example]): An optional example to be used in the evaluation.

        Returns:
            Union[EvaluationResult, EvaluationResults]: The result of the evaluation.
        )re   )rW   r'   r_   s      r(   Ú__call__zDynamicRunEvaluator.__call__š  s   € ð × Ò   gÑ.Ô.Ð.r6   r    c                ó   — d| j         › d�S )ú)Represent the DynamicRunEvaluator object.z<DynamicRunEvaluator ú>©r•   rV   s    r(   Ú__repr__zDynamicRunEvaluator.__repr__«  s   € à4 t¤zÐ4Ð4Ð4Ð4r6   r£   )r€   r�   r‚   rƒ   )F)rœ   r�   rJ   rž   rŸ   r    r"   r?   )r\   r«   rJ   rž   r"   rc   )rœ   r³   rJ   rž   r"   rc   ©r"   r    ry   rw   rx   )r'   r   r_   r`   ra   rb   )r'   r   r_   r`   r"   rc   ©r"   r    )r0   r1   r2   r3   r›   rª   r²   r¶   rz   r»   rv   re   rn   rÎ   rÓ   Ú__classcell__)rÌ   s   @r(   r   r   Á   sW  ø€ € € € € ðð ð, ð9Jð 9Jð 9Jð 9Jð 9Jð~ #ð	ð ð ð ð ð<
ð 
ð 
ð 
ð"Fð Fð Fð Fð ð&ð &ð &ñ „Xð&ð ð#ð #ð #ñ „Xð#ð &*Ø04ð	!=ð !=ð !=ð !=ð !=ðL &*Ø04ð	=ð =ð =ð =ð =ð =ð =ðD 6:ð/ð /ð /ð /ð /ð"5ð 5ð 5ð 5ð 5ð 5ð 5ð 5r6   r   r€   r�   c                ó    — t          | ¦  «        S )zmCreate a run evaluator from a function.

    Decorator that transforms a function into a `RunEvaluator`.
    )r   ©r€   s    r(   Úrun_evaluatorrÙ   °  s   € õ ˜tÑ$Ô$Ð$r6   i'  Úobjc                ó~   — t          | ¦  «        }t          |¦  «        t          k    r|d t          dz
  …         dz   }|S )Né   z...))ÚreprÚlenÚ_MAXSIZE)rÚ   Úss     r(   Ú_maxsize_reprrá   ¿  s:   € ÝˆS‰	Œ	€AÝ
ˆ1�v„v•ÒÐØˆn•˜1‘ˆnÔ Ñ&ˆØ€Hr6   c                  ó‚   — e Zd ZdZ	 ddd„Zedd
„¦   «         Z	 ddd„Z	 ddd„Z	 ddd„Z	d d„Z
ed!d„¦   «         Zd"d„ZdS )#ÚDynamicComparisonRunEvaluatorz4Compare predictions (as traces) from 2 or more runs.Nr€   úfCallable[[Sequence[Run], Optional[Example]], Union[_COMPARISON_OUTPUT, Awaitable[_COMPARISON_OUTPUT]]]r‚   úUOptional[Callable[[Sequence[Run], Optional[Example]], Awaitable[_COMPARISON_OUTPUT]]]c                óž  ‡— t          |¦  «        \  }Š|rt          |¦  «        \  }Šdˆfd„} t          |¦  «        | ¦  «         ddlm} |�2|                     ||¬¦  «        | _        t          |d	d
¦  «        | _        t          j	        |¦  «        rE|�t          d¦  «        ‚|                     ||¬¦  «        | _        t          |d	d
¦  «        | _        dS |                     t          t          t          t                   t          t                    gt"          f         |¦  «        |¬¦  «        | _        t          |d	d
¦  «        | _        dS )züInitialize the `DynamicRunEvaluator` with a given function.

        Args:
            func (Callable): A function that takes a `Run` and an optional `Example` as
            arguments, and returns an `EvaluationResult` or `EvaluationResults`.
        r…   rF   r"   c                ó|   •— ‰€| S  ‰|                       d¦  «        |                       d¦  «        ¦  «        \  }}}|S )NÚrunsr_   r‡   r‰   s      €r(   r�   z>DynamicComparisonRunEvaluator.__init__.<locals>.process_inputsá  sK   ø€ ØÐ%Ø�Ø$2 NØ—
’
˜6Ñ"Ô" F§J¢J¨yÑ$9Ô$9ñ%ô %Ñ!ˆQ��=ð !Ð r6   r   r   NrŽ   r0   r   r�   r�   )Ú$_normalize_comparison_evaluator_funcr   r“   r   r”   r‚   rs   r•   r–   r—   r˜   r   r
   r   r   r   r   Ú_COMPARISON_OUTPUTr€   rš   s        @r(   r›   z&DynamicComparisonRunEvaluator.__init__É  s”  ø€ õ( "FÀdÑ!KÔ!KÑˆˆ~Øð 	RÝ&JÈ5Ñ&QÔ&QÑ#ˆU�Nð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð 	�ˆd‰Œ�DÑÔÐØ)Ð)Ð)Ð)Ð)Ð)àÐØ$×5Ò5Ø nð 6ñ ô ˆDŒJõ ! ¨
Ð4IÑJÔJˆDŒJÝÔ& tÑ,Ô,ð 	JØÐ Ýð3ñô ð ð
 %×5Ò5Ø ^ð 6ñ ô ˆDŒJõ !  zÐ3HÑIÔIˆDŒJˆJˆJà#×4Ò4ÝÝÝ!¥#œ­µÔ(9Ð:Ý*ð,ôð ñô ð  .ð 5ñ 	ô 	ˆDŒIõ !  zÐ3HÑIÔIˆDŒJˆJˆJr6   r"   r    c                ó"   — t          | d¦  «        S r¸   r¹   rV   s    r(   r»   z&DynamicComparisonRunEvaluator.is_async	  r¼   r6   rè   úSequence[Run]r_   r`   r|   c                ó  ‡ ‡‡— t          ‰ d¦  «        st          ˆˆˆ fd„dd¦  «        S t          j        ¦   «         }‰                      ‰¦  «        }‰                      ‰‰||dœ¬¦  «        }‰                      ||‰¦  «        S )z¯Compare runs to score preferences.

        Args:
            runs: A list of runs to compare.
            example: An optional example to be used in the evaluation.

        r€   c                 ó0   •— ‰                      ‰‰ ¦  «        S r£   )Úacompare_runs)r_   rè   rW   s   €€€r(   rÀ   z<DynamicComparisonRunEvaluator.compare_runs.<locals>.<lambda>  s   ø€ ˜×*Ò*¨4°Ñ9Ô9€ r6   Úcompare_runsrï   ©rÄ   ÚtagsrÅ   )rº   r)   rÇ   rÈ   Ú	_get_tagsr€   Ú_format_results©rW   rè   r_   rJ   rò   rœ   s   ```   r(   rð   z*DynamicComparisonRunEvaluator.compare_runs  s¤   øøø€ õ �t˜VÑ$Ô$ð 	Ý,Ø9Ð9Ð9Ð9Ð9Ð9ØØñô ð õ
 œ
™œˆØ�~Š~˜dÑ#Ô#ˆà—’ØØØ'4¸dÐCÐCð ñ 
ô 
ˆð
 ×#Ò# F¨M¸4Ñ@Ô@Ð@r6   c              ƒ  ó  K  — t          | d¦  «        s|                      ||¦  «        S t          j        ¦   «         }|                      |¦  «        }|                      ||||dœ¬¦  «        ƒ d{V —†}|                      |||¦  «        S )a¶  Evaluate a run asynchronously using the wrapped async function.

        This method directly invokes the wrapped async function with the
            provided arguments.

        Args:
            runs (Run): The runs to be evaluated.
            example (Optional[Example]): An optional example to be used
                in the evaluation.

        Returns:
            ComparisonEvaluationResult: The result of the evaluation.
        r‚   rñ   rÅ   N)rº   rð   rÇ   rÈ   ró   r‚   rô   rõ   s         r(   rï   z+DynamicComparisonRunEvaluator.acompare_runs,  s­   è è € õ  �t˜WÑ%Ô%ð 	4Ø×$Ò$ T¨7Ñ3Ô3Ð3Ýœ
™œˆØ�~Š~˜dÑ#Ô#ˆà—z’zØØØ'4¸dÐCÐCð "ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
ˆð
 ×#Ò# F¨M¸4Ñ@Ô@Ð@r6   c                ó.   — |                       ||¦  «        S )a¹  Make the evaluator callable, allowing it to be used like a function.

        This method enables the evaluator instance to be called directly, forwarding the
        call to `evaluate_run`.

        Args:
            run (Run): The run to be evaluated.
            example (Optional[Example]): An optional example to be used in the evaluation.

        Returns:
            ComparisonEvaluationResult: The result of the evaluation.
        )rð   )rW   rè   r_   s      r(   rÎ   z&DynamicComparisonRunEvaluator.__call__H  s   € ð × Ò   wÑ/Ô/Ð/r6   r    c                ó   — d| j         › d�S )rÐ   z<DynamicComparisonRunEvaluator rÑ   rÒ   rV   s    r(   rÓ   z&DynamicComparisonRunEvaluator.__repr__Y  s   € à>°´Ð>Ð>Ð>Ð>r6   ro   c                óÞ   — g }| D ]g}|                      dt          |j        ¦  «        z   ¦  «         t          |dd¦  «        r*|                      dt          |j        ¦  «        z   ¦  «         Œh|S )zExtract tags from runs.zrun:rÁ   Nzexperiment:)Úappendr    rÉ   rs   rÁ   )rè   rò   r'   s      r(   ró   z'DynamicComparisonRunEvaluator._get_tags]  su   € ð ˆØð 	Að 	AˆCØ�KŠK˜¥ S¤V¡¤Ñ,Ñ-Ô-Ð-Ý�s˜L¨$Ñ/Ô/ð AØ—’˜M­C°´Ñ,?Ô,?Ñ?Ñ@Ô@Ð@øØˆr6   rœ   ú-Union[dict, list, ComparisonEvaluationResult]rJ   rž   c                óš  — t          |t          ¦  «        r|j        s||_        |S t          |t          ¦  «        r$d„ t	          ||¦  «        D ¦   «         | j        |dœ}n8t          |t          ¦  «        rd|vr
| j        |d<   nd|›�}t          |¦  «        ‚	 t          di d|i|¥¤ŽS # t          $ r}t          d|› �¦  «        |‚d }~ww xY w)Nc                ó$   — i | ]\  }}|j         |“ŒS r5   )rÉ   )r¤   r'   rA   s      r(   ú
<dictcomp>zADynamicComparisonRunEvaluator._format_results.<locals>.<dictcomp>t  s    € ÐMÐMÐM©Z¨S°%˜3œ6 5ÐMÐMÐMr6   )r}   r@   rJ   r@   zXExpected 'dict', 'list' or 'ComparisonEvaluationResult' result object. Received: result=rJ   zˆExpected a dictionary with a 'key' and dictionary of scores mappingrun IDs to numeric scores, or ComparisonEvaluationResult object, got r5   )	rQ   r|   rJ   ÚlistÚzipr•   rF   r§   r   )rW   rœ   rJ   rè   Úmsgr©   s         r(   rô   z-DynamicComparisonRunEvaluator._format_resultsh  s:  € õ �fÕ8Ñ9Ô9ð 	"ØÔ'ð 5Ø'4�Ô$ØˆMÝ˜¥Ñ%Ô%ð 	"àMÐM½3¸tÀVÑ;LÔ;LÐMÑMÔMØ”zØ!.ðð ˆFˆFõ
 ˜¥Ñ%Ô%ð 	"Ø˜FÐ"Ð"Ø $¤
��u‘øð/Ø%+ð/ð /ð õ ˜S‘/”/Ð!ð		Ý-ð ð Ø" MÐ<°VÐ<ðð ð øõ ð 	ð 	ð 	Ýð!àð!ð !ñô ð ð	øøøøð	øøøs   ÂB( Â(
C
Â2CÃC
r£   )r€   rä   r‚   rå   rÔ   )rè   rì   r_   r`   r"   r|   rÕ   )rè   rì   r"   ro   )rœ   rû   rJ   rž   rè   rì   r"   r|   )r0   r1   r2   r3   r›   rz   r»   rð   rï   rÎ   rÓ   Ústaticmethodró   rô   r5   r6   r(   rã   rã   Æ  s  € € € € € Ø>Ð>ð ð>Jð >Jð >Jð >Jð >Jð@ ð&ð &ð &ñ „Xð&ð AEðAð Að Að Að Að6 AEðAð Að Að Að Að: AEð0ð 0ð 0ð 0ð 0ð"?ð ?ð ?ð ?ð ðð ð ñ „\ðð"ð "ð "ð "ð "ð "r6   rã   rä   c                ó    — t          | ¦  «        S )z.Create a comaprison evaluator from a function.)rã   rØ   s    r(   Úcomparison_evaluatorr  �  s   € õ )¨Ñ.Ô.Ð.r6   r
   ú¢tuple[Union[Callable[[Run, Optional[Example]], _RUNNABLE_OUTPUT], Callable[[Run, Optional[Example]], Awaitable[_RUNNABLE_OUTPUT]]], Optional[Callable[..., dict]]]c                óÔ  ‡ ‡‡‡‡— dŠt          j        ‰ ¦  «        Šd„ ‰j                             ¦   «         D ¦   «         }d„ ‰j                             ¦   «         D ¦   «         Š|r;t	          ˆˆfd„|D ¦   «         ¦  «        s4t          ˆfd„|D ¦   «         ¦  «        dk    rd‰› d�}t          |¦  «        ‚t	          ˆˆfd	„|D ¦   «         ¦  «        r|d
dgk    r‰ d fS t          j        ‰ ¦  «        r=dˆfd„Šdˆˆ fd„}t          ‰ d¦  «        rt          ‰ d¦  «        n|j
        |_
        |‰fS dˆfd„Šdˆˆ fd„}t          ‰ d¦  «        rt          ‰ d¦  «        n|j
        |_
        |‰fS )N)r'   r_   r…   ÚoutputsÚreference_outputsÚattachmentsc                ó8   — g | ]\  }}|j         |j        k    ¯|‘ŒS r5   ©ÚkindÚVAR_KEYWORD©r¤   ÚpnameÚps      r(   r¯   z-_normalize_evaluator_func.<locals>.<listcomp>©  ó*   € ÐXÐXÐX™(˜% ÀÄÈ!Ì-Ò@WÐ@W�Ð@WÐ@WÐ@Wr6   c                óH   — g | ]\  }}|j         t          j        j        u¯|‘Œ S r5   ©Údefaultr–   Ú	ParameterÚemptyr  s      r(   r¯   z-_normalize_evaluator_func.<locals>.<listcomp>ª  ó9   € ð ð ð áˆE�1ØŒ9�GÔ-Ô3Ð3Ð3ð 	à3Ð3Ð3r6   c              3  ó(   •K  — | ]}|‰v p|‰v V — Œd S r£   r5   ©r¤   r  Úargs_with_defaultsÚsupported_argss     €€r(   r¦   z,_normalize_evaluator_func.<locals>.<genexpr>°  óD   øè è € ð 
ð 
ØGLˆE�^Ð#ÐB uÐ0BÐ'Bð
ð 
ð 
ð 
ð 
ð 
r6   c                ó   •— g | ]}|‰v¯|‘Œ	S r5   r5   ©r¤   Úar  s     €r(   r¯   z-_normalize_evaluator_func.<locals>.<listcomp>³  ó$   ø€ ÐDÐDÐD�q¨Ð1CÐ(CÐ(C�Ð(CÐ(CÐ(Cr6   é   úUInvalid evaluator function. Must have at least one argument. Supported arguments are ú€. Please see https://docs.smith.langchain.com/evaluation/how_to_guides/evaluation/evaluate_llm_application#use-custom-evaluatorsc              3  ó(   •K  — | ]}|‰v p|‰v V — Œd S r£   r5   r  s     €€r(   r¦   z,_normalize_evaluator_func.<locals>.<genexpr>¾  óD   øè è € ð ð ØCHˆ�ÐÐ> 5Ð,>Ð#>ðð ð ð ð ð r6   r'   r_   r   r`   r"   útuple[list, dict, dict]c                ó~  •— | ||r|j         ni | j        pi |r	|j        pi ni |r	|j        pi ni dœ}i }g }i }‰j                             ¦   «         D ]i\  }}||v r`|j        |j        |j        fv r|                     ||         ¦  «         n||         ||<   |dv rt          ||         ¦  «        n||         ||<   Œj|||fS ©N)r'   r_   r…   r  r	  r  )r'   r_   ©
r…   r  r	  Ú
parametersÚitemsr  ÚPOSITIONAL_OR_KEYWORDÚPOSITIONAL_ONLYrú   rá   ©	r'   r_   Úarg_mapÚkwargsÚargsr‹   Ú
param_nameÚparamÚsigs	           €r(   Ú_prepare_inputsz2_normalize_evaluator_func.<locals>._prepare_inputsÈ  ó"  ø€ ð Ø&Ø07Ð?˜gœn˜n¸RØ"œ{Ð0¨bØ@GÐ#O 7Ô#6Ð#<¸"øÈRØBIÐ)Q¨¬Ð)>¸BøÈrðð �ð �Ø�Ø "�Ø),¬×)=Ò)=Ñ)?Ô)?ð ð Ñ%�J à! WÐ,Ð,Ø œ:Ø!Ô7Ø!Ô1ð*ð ð ð !ŸKšK¨°
Ô(;Ñ<Ô<Ð<Ð<à18¸Ô1D˜F :Ñ.ð  *Ð-?Ð?Ð?õ *¨'°*Ô*=Ñ>Ô>Ð>à!(¨Ô!4ð & jÑ1øð
 ˜V ]Ð2Ð2r6   r™   c              “  óD   •K  —  ‰| |¦  «        \  }}} ‰|i |¤Žƒ d {V —†S r£   r5   ©r'   r_   r1  r0  rŠ   r5  r€   s        €€r(   Úawrapperz+_normalize_evaluator_func.<locals>.awrapperç  sH   øè è € ð %4 O°C¸Ñ$AÔ$AÑ!��v˜qØ!˜T 4Ð2¨6Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2r6   r0   c                ó~  •— | ||r|j         ni | j        pi |r	|j        pi ni |r	|j        pi ni dœ}i }g }i }‰j                             ¦   «         D ]i\  }}||v r`|j        |j        |j        fv r|                     ||         ¦  «         n||         ||<   |dv rt          ||         ¦  «        n||         ||<   Œj|||fS r(  r)  r.  s	           €r(   r5  z2_normalize_evaluator_func.<locals>._prepare_inputsö  r6  r6   c                ó4   •—  ‰| |¦  «        \  }}} ‰|i |¤ŽS r£   r5   r8  s        €€r(   Úwrapperz*_normalize_evaluator_func.<locals>.wrapper  s0   ø€ Ø$3 O°C¸Ñ$AÔ$AÑ!��v˜qØ�t˜TÐ, VÐ,Ð,Ð,r6   )r'   r   r_   r`   r"   r&  )r'   r   r_   r`   r"   r™   ©r–   Ú	signaturer*  r+  r¨   rÞ   r§   r—   rº   rs   r0   ©	r€   Úall_argsr  r9  r<  r5  r  r4  r  s	   `    @@@@r(   r’   r’   —  s…  øøøøø€ ð€Nõ Ô
˜DÑ
!Ô
!€CØXÐX c¤n×&:Ò&:Ñ&<Ô&<ÐXÑXÔX€Hðð àœ×,Ò,Ñ.Ô.ðñ ô Ðð
 ð o.Ýð 
ð 
ð 
ð 
ð 
ØPXð
ñ 
ô 
ñ 
ô 
ðo.õ ÐDÐDÐDÐD˜HÐDÑDÔDÑEÔEÈÒJÐJðGØ1?ðGð Gð Gð 	õ ˜‰oŒoÐõ ð ð ð ð ð ØLTðñ ô ñ ô ð `.à	ØØðò 
ð 
ð �TˆzÐåÔ& tÑ,Ô,ð X	.ð3ð 3ð 3ð 3ð 3ð 3ð>3ð 3ð 3ð 3ð 3ð 3ð 3õ ˜4 Ñ,Ô,ð'•˜˜jÑ)Ô)Ð)àÔ&ð Ôð
 ˜oÐ.Ð.ð3ð 3ð 3ð 3ð 3ð 3ð>-ð -ð -ð -ð -ð -ð -õ ˜4 Ñ,Ô,ð&•˜˜jÑ)Ô)Ð)àÔ%ð Ôð
 ˜_Ð-Ð-r6   úºtuple[Union[Callable[[Sequence[Run], Optional[Example]], _COMPARISON_OUTPUT], Callable[[Sequence[Run], Optional[Example]], Awaitable[_COMPARISON_OUTPUT]]], Optional[Callable[..., dict]]]c                óÔ  ‡ ‡‡‡‡— dŠt          j        ‰ ¦  «        Šd„ ‰j                             ¦   «         D ¦   «         }d„ ‰j                             ¦   «         D ¦   «         Š|r;t	          ˆˆfd„|D ¦   «         ¦  «        s4t          ˆfd„|D ¦   «         ¦  «        dk    rd‰› d�}t          |¦  «        ‚t	          ˆˆfd	„|D ¦   «         ¦  «        r|d
dgk    r‰ d fS t          j        ‰ ¦  «        r=dˆfd„Šdˆˆ fd„}t          ‰ d¦  «        rt          ‰ d¦  «        n|j
        |_
        |‰fS dˆfd„Šdˆˆ fd„}t          ‰ d¦  «        rt          ‰ d¦  «        n|j
        |_
        |‰fS )N©rè   r_   r…   r  r  c                ó8   — g | ]\  }}|j         |j        k    ¯|‘ŒS r5   r  r  s      r(   r¯   z8_normalize_comparison_evaluator_func.<locals>.<listcomp>,  r  r6   c                óH   — g | ]\  }}|j         t          j        j        u¯|‘Œ S r5   r  r  s      r(   r¯   z8_normalize_comparison_evaluator_func.<locals>.<listcomp>-  r  r6   c              3  ó(   •K  — | ]}|‰v p|‰v V — Œd S r£   r5   r  s     €€r(   r¦   z7_normalize_comparison_evaluator_func.<locals>.<genexpr>3  r  r6   c                ó   •— g | ]}|‰v¯|‘Œ	S r5   r5   r  s     €r(   r¯   z8_normalize_comparison_evaluator_func.<locals>.<listcomp>6  r   r6   r!  r"  r#  c              3  ó(   •K  — | ]}|‰v p|‰v V — Œd S r£   r5   r  s     €€r(   r¦   z7_normalize_comparison_evaluator_func.<locals>.<genexpr>A  r%  r6   rè   r_   rì   r`   r"   r&  c                ól  •— | ||r|j         ni d„ | D ¦   «         |r	|j        pi ni dœ}i }g }i }‰j                             ¦   «         D ]i\  }}||v r`|j        |j        |j        fv r|                     ||         ¦  «         n||         ||<   |dv rt          ||         ¦  «        n||         ||<   Œj|||fS )Nc                ó    — g | ]}|j         pi ‘ŒS r5   ©r  ©r¤   r'   s     r(   r¯   zQ_normalize_comparison_evaluator_func.<locals>._prepare_inputs.<locals>.<listcomp>R  ó   € ÐBÐBÐB°c ¤Ð 1¨rÐBÐBÐBr6   rC  ©rè   r_   ©	r…   r  r*  r+  r  r,  r-  rú   rá   ©	rè   r_   r/  r0  r1  r‹   r2  r3  r4  s	           €r(   r5  z=_normalize_comparison_evaluator_func.<locals>._prepare_inputsK  ó  ø€ ð !Ø&Ø07Ð?˜gœn˜n¸RØBÐB¸TÐBÑBÔBØBIÐ)Q¨¬Ð)>¸BøÈrðð �ð �Ø�Ø "�Ø),¬×)=Ò)=Ñ)?Ô)?ð ð Ñ%�J à! WÐ,Ð,Ø œ:Ø!Ô7Ø!Ô1ð*ð ð ð !ŸKšK¨°
Ô(;Ñ<Ô<Ð<Ð<à18¸Ô1D˜F :Ñ.ð  *Ð-@Ð@Ð@õ *¨'°*Ô*=Ñ>Ô>Ð>à!(¨Ô!4ð & jÑ1øð
 ˜V ]Ð2Ð2r6   rê   c              “  óD   •K  —  ‰| |¦  «        \  }}} ‰|i |¤Žƒ d {V —†S r£   r5   ©rè   r_   r1  r0  rŠ   r5  r€   s        €€r(   r9  z6_normalize_comparison_evaluator_func.<locals>.awrapperi  sH   øè è € ð %4 O°D¸'Ñ$BÔ$BÑ!��v˜qØ!˜T 4Ð2¨6Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2r6   r0   c                ól  •— | ||r|j         ni d„ | D ¦   «         |r	|j        pi ni dœ}i }g }i }‰j                             ¦   «         D ]i\  }}||v r`|j        |j        |j        fv r|                     ||         ¦  «         n||         ||<   |dv rt          ||         ¦  «        n||         ||<   Œj|||fS )Nc                ó    — g | ]}|j         pi ‘ŒS r5   rK  rL  s     r(   r¯   zQ_normalize_comparison_evaluator_func.<locals>._prepare_inputs.<locals>.<listcomp>  rM  r6   rC  rN  rO  rP  s	           €r(   r5  z=_normalize_comparison_evaluator_func.<locals>._prepare_inputsx  rQ  r6   c                ó4   •—  ‰| |¦  «        \  }}} ‰|i |¤ŽS r£   r5   rS  s        €€r(   r<  z5_normalize_comparison_evaluator_func.<locals>.wrapper–  s2   ø€ ð %4 O°D¸'Ñ$BÔ$BÑ!��v˜qØ�t˜TÐ, VÐ,Ð,Ð,r6   )rè   rì   r_   r`   r"   r&  )rè   rì   r_   r`   r"   rê   r=  r?  s	   `    @@@@r(   ré   ré   !  s„  øøøøø€ ð S€NÝ
Ô
˜DÑ
!Ô
!€CØXÐX c¤n×&:Ò&:Ñ&<Ô&<ÐXÑXÔX€Hðð àœ×,Ò,Ñ.Ô.ðñ ô Ðð
 ð o,Ýð 
ð 
ð 
ð 
ð 
ØPXð
ñ 
ô 
ñ 
ô 
ðo,õ ÐDÐDÐDÐD˜HÐDÑDÔDÑEÔEÈÒJÐJðGØ1?ðGð Gð Gð 	õ ˜‰oŒoÐõ ð ð ð ð ð ØLTðñ ô ñ ô ð `,à	ØØðò 
ð 
ð �TˆzÐåÔ& tÑ,Ô,ð X	,ð3ð 3ð 3ð 3ð 3ð 3ð<3ð 3ð 3ð 3ð 3ð 3ð 3õ ˜4 Ñ,Ô,ð'•˜˜jÑ)Ô)Ð)àÔ&ð Ôð
 ˜_Ð,Ð,ð3ð 3ð 3ð 3ð 3ð 3ð<-ð -ð -ð -ð -ð -ð -õ ˜4 Ñ,Ô,ð&•˜˜jÑ)Ô)Ð)àÔ%ð Ôð
 ˜OÐ+Ð+r6   rœ   ú;Union[EvaluationResults, dict, str, int, bool, float, list]úUnion[EvaluationResults, dict]c                óŒ  — t          | t          t          t          f¦  «        rd| i} nœ| st	          d| › �¦  «        ‚t          | t
          ¦  «        r1t          d„ | D ¦   «         ¦  «        st	          d| › d�¦  «        ‚d| i} nBt          | t          ¦  «        rd| i} n(t          | t          ¦  «        rnt	          d| › �¦  «        ‚| S )	NrA   zdExpected a non-empty dict, str, bool, int, float, list, EvaluationResult, or EvaluationResults. Got c              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r£   )rQ   rF   )r¤   Úxs     r(   r¦   z+_format_evaluator_result.<locals>.<genexpr>¯  s,   è è € Ð7Ð7¨1•:˜a¥Ñ&Ô&Ð7Ð7Ð7Ð7Ð7Ð7r6   z8Expected a list of dicts or EvaluationResults. Received ú.r\   r-   zZExpected a dict, str, bool, int, float, list, EvaluationResult, or EvaluationResults. Got )	rQ   r    rS   rR   r§   rÿ   r¨   r    rF   )rœ   s    r(   rµ   rµ   ¤  s  € õ �&�4¥­Ð,Ñ-Ô-ð 
Ø˜6Ð"ˆˆØð 
ÝðDØ;AðDð Dñ
ô 
ð 	
õ 
�F�DÑ	!Ô	!ð 
ÝÐ7Ð7°Ð7Ñ7Ô7Ñ7Ô7ð 	ÝØTÈ6ÐTÐTÐTñô ð ð ˜VÐ$ˆˆÝ	�F�CÑ	 Ô	 ð 
Ø˜6Ð"ˆˆÝ	�F�DÑ	!Ô	!ð 
Øåð/Ø&,ð/ð /ñ
ô 
ð 	
ð €Mr6   ÚSUMMARY_EVALUATOR_Tc                ó0  ‡ ‡‡‡— dŠt          j        ‰ ¦  «        Šd„ ‰j                             ¦   «         D ¦   «         }d„ ‰j                             ¦   «         D ¦   «         Š|r;t	          ˆˆfd„|D ¦   «         ¦  «        s?t          ˆfd„|D ¦   «         ¦  «        dk    r d‰› d�}|r	|d	|› d�z  }t          |¦  «        ‚t	          ˆfd
„|D ¦   «         ¦  «        r|ddgk    r‰ S dˆ ˆfd„}t          ‰ d¦  «        rt          ‰ d¦  «        n|j	        |_	        |S )N©rè   Úexamplesr…   r  r  c                ó   — g | ]\  }}|‘ŒS r5   r5   r  s      r(   r¯   z0_normalize_summary_evaluator.<locals>.<listcomp>Ï  s   € Ð=Ð=Ð=™(˜% �Ð=Ð=Ð=r6   c                óH   — g | ]\  }}|j         t          j        j        u¯|‘Œ S r5   r  r  s      r(   r¯   z0_normalize_summary_evaluator.<locals>.<listcomp>Ð  r  r6   c              3  ó(   •K  — | ]}|‰v p|‰v V — Œd S r£   r5   r  s     €€r(   r¦   z/_normalize_summary_evaluator.<locals>.<genexpr>Ö  r  r6   c                ó   •— g | ]}|‰v¯|‘Œ	S r5   r5   r  s     €r(   r¯   z0_normalize_summary_evaluator.<locals>.<listcomp>Ù  r   r6   r!  r"  r\  z Received arguments c              3  ó    •K  — | ]}|‰v V — Œ	d S r£   r5   )r¤   r  r  s     €r(   r¦   z/_normalize_summary_evaluator.<locals>.<genexpr>ä  s(   øè è € Ð?Ð?¨U�˜.Ð(Ð?Ð?Ð?Ð?Ð?Ð?r6   rè   r`  úSequence[schemas.Run]úSequence[schemas.Example]r"   rc   c                ór  •— | |d„ |D ¦   «         d„ | D ¦   «         d„ |D ¦   «         dœ}i }g }‰	j                              ¦   «         D ]E\  }}||v r<|j        |j        |j        fv r|                     ||         ¦  «         Œ:||         ||<   ŒF ‰|i |¤Ž}t          |t          ¦  «        r|S t          |¦  «        S )Nc                ó   — g | ]	}|j         ‘Œ
S r5   )r…   ©r¤   r_   s     r(   r¯   zA_normalize_summary_evaluator.<locals>.wrapper.<locals>.<listcomp>ñ  s   € ÐBÐBÐB¨g˜7œ>ÐBÐBÐBr6   c                ó    — g | ]}|j         pi ‘ŒS r5   rK  rL  s     r(   r¯   zA_normalize_summary_evaluator.<locals>.wrapper.<locals>.<listcomp>ò  s   € Ð>Ð>Ð>°#˜CœKÐ-¨2Ð>Ð>Ð>r6   c                ó    — g | ]}|j         pi ‘ŒS r5   rK  rj  s     r(   r¯   zA_normalize_summary_evaluator.<locals>.wrapper.<locals>.<listcomp>ó  s   € Ð%TÐ%TÐ%TÀ g¤oÐ&;¸Ð%TÐ%TÐ%Tr6   r_  )	r*  r+  r  r,  r-  rú   rQ   r?   rµ   )
rè   r`  r/  r0  r1  r2  r3  rœ   r€   r4  s
           €€r(   r<  z-_normalize_summary_evaluator.<locals>.wrapperë  s  ø€ ð Ø$ØBÐB¸ÐBÑBÔBØ>Ð>¸Ð>Ñ>Ô>Ø%TÐ%TÈ8Ð%TÑ%TÔ%Tðð ˆGð ˆFØˆDØ%(¤^×%9Ò%9Ñ%;Ô%;ð 	Að 	AÑ!�
˜Eà Ð(Ð(Ø”zØÔ3ØÔ-ð&ð ð ð Ÿš G¨JÔ$7Ñ8Ô8Ð8Ð8à-4°ZÔ-@˜˜zÑ*øà�T˜4Ð* 6Ð*Ð*ˆFÝ˜&Õ"2Ñ3Ô3ð Ø�Ý+¨FÑ3Ô3Ð3r6   r0   )rè   rf  r`  rg  r"   rc   )
r–   r>  r*  r+  r¨   rÞ   r§   rº   rs   r0   )r€   r@  r  r<  r  r4  r  s   `   @@@r(   Ú_normalize_summary_evaluatorrm  Ì  sÆ  øøøø€ ØS€NÝ
Ô
˜DÑ
!Ô
!€CØ=Ð= c¤n×&:Ò&:Ñ&<Ô&<Ð=Ñ=Ô=€Hðð àœ×,Ò,Ñ.Ô.ðñ ô Ðð
 ð 5Ýð 
ð 
ð 
ð 
ð 
ØPXð
ñ 
ô 
ñ 
ô 
ð5õ ÐDÐDÐDÐD˜HÐDÑDÔDÑEÔEÈÒJÐJðCØ1?ðCð Cð Cð 	ð ð 	6ØÐ5¨(Ð5Ð5Ð5Ñ5ˆCÝ˜‰oŒoÐõ Ð?Ð?Ð?Ð?°hÐ?Ñ?Ô?Ñ?Ô?ð &À8ØØðPò Dð Dð ˆð	4ð 	4ð 	4ð 	4ð 	4ð 	4ð 	4õ: *1°°zÑ)BÔ)BÐX�G�D˜*Ñ%Ô%Ð%ÈÔHXð 	Ôð ˆr6   )r   r   r   r    r!   r    r"   r	   )r€   r�   )rÚ   r	   )r€   rä   r"   rã   )r€   r
   r"   r  )r€   r
   r"   rA  )rœ   rW  r"   rX  )r€   r
   r"   r]  )Br3   Ú
__future__r   r$   r–   ÚloggingrÇ   Úabcr   Úcollections.abcr   r   r   Ú	functoolsr   Útypingr	   r
   r   r   r   r   Úpydanticr   r   r   r   r   Útyping_extensionsr   r“   r   rh   r   Ú$langsmith.evaluation._key_extractionr   Úlangsmith.schemasr   r   r   r   Ú	getLoggerr0   rT   r)   r+   r8   r?   r[   r^   rF   r™   r|   rê   r   rÙ   rß   rá   rã   r  r’   ré   rµ   rÿ   r]  rm  r5   r6   r(   ú<module>ry     sH  ðØ EÐ Eà "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð TÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ 'Ð 'Ð 'Ð 'Ð 'Ð 'à 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø LÐ LÐ LÐ LÐ LÐ LØ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð'ð 'ð 'ð 'ð 'ˆyñ 'ô 'ð 'ð6ð 6ð 6ð 6ð 6�Y eð 6ñ 6ô 6ð 6ð'ð 'ð 'ð 'ð '�yñ 'ô 'ð 'ðT"ð "ð "ð "ð "˜	¨ð "ñ "ô "ð "ð(&ð (&ð (&ð (&ð (&ñ (&ô (&ð (&ðV Ð)Ð+<¸dÐBÔCÐ ðð ð ð ð  ñ ô ð ð( Ð5°tÐ;Ô<Ð ðl5ð l5ð l5ð l5ð l5˜,ñ l5ô l5ð l5ð^	%ð 	%ð 	%ð 	%ð €ðð ð ð ðDð Dð Dð Dð Dñ Dô Dð DðN/ð /ð /ð /ðG.ð G.ð G.ð G.ðT@,ð @,ð @,ð @,ðFð ð ð ð8 ØØ	�'”+Ô	 ¨¬Ô 9Ð:ØÐÐ 1Ð1Ô2ð	4ôð Ø	ˆgŒkÔ	˜D ¤Ô1Ð2ØÐÐ 1Ð1Ô2ð	4ôð	ô	Ð ð>ð >ð >ð >ð >ð >r6   