o
    Jjg4                     @   sT  d Z ddl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 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% eeee geeee&f f Z'eee eee  geeee&f f Z(G dd deZ)G dd de)Z*ee'ee"f Z+ee!e,e)f Z-G dd deZ.dS )z!Configuration for run evaluators.    )AnyCallableDictListOptionalSequenceUnion)
Embeddings)BaseLanguageModel)BasePromptTemplate)RunEvaluator)EvaluationResultEvaluationResults)ExampleRun)	BaseModel
ConfigDictField)CRITERIA_TYPE)EmbeddingDistance)EvaluatorTypeStringEvaluator)StringDistancec                   @   s0   e Zd ZU dZeed< deeef fddZ	dS )
EvalConfiga  Configuration for a given run evaluator.

    Parameters
    ----------
    evaluator_type : EvaluatorType
        The type of evaluator to use.

    Methods
    -------
    get_kwargs()
        Get the keyword arguments for the evaluator configuration.

    evaluator_typereturnc                 C   s2   i }| D ]\}}|dkrq|du rq|||< q|S )zGet the keyword arguments for the load_evaluator call.

        Returns
        -------
        Dict[str, Any]
            The keyword arguments for the load_evaluator call.

        r   N )selfkwargsfieldvalr   r   Y/var/www/html/zoom/venv/lib/python3.10/site-packages/langchain/smith/evaluation/config.py
get_kwargs0   s   	
zEvalConfig.get_kwargsN)
__name__
__module____qualname____doc__r   __annotations__r   strr   r"   r   r   r   r!   r      s   
 r   c                       sf   e Zd ZU dZdZee ed< 	 dZee ed< 	 dZ	ee ed< 	 de
eef f fddZ  ZS )	SingleKeyEvalConfigzBConfiguration for a run evaluator that only requires a single key.Nreference_keyprediction_key	input_keyr   c                    s$   t   }dD ]}||d  q|S )N)r*   r+   r,   )superr"   pop)r   r   key	__class__r   r!   r"   Q   s   
zSingleKeyEvalConfig.get_kwargs)r#   r$   r%   r&   r*   r   r(   r'   r+   r,   r   r   r"   __classcell__r   r   r0   r!   r)   C   s   
 "r)   c                   @   s  e Zd ZU dZeedZeee	e
f  ed< 	 dZeee
  ed< 	 dZeee  ed< 	 dZee ed< 	 dZee ed< 	 dZee ed	< 	 dZee ed
< 	 eddZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZG dd deZ G dd de!Z"G dd  d eZ#G d!d" d"eZ$G d#d$ d$eZ%G d%d& d&e%Z&dS )'RunEvalConfiga0  Configuration for a run evaluation.

    Parameters
    ----------
    evaluators : List[Union[EvaluatorType, EvalConfig, RunEvaluator, Callable]]
        Configurations for which evaluators to apply to the dataset run.
        Each can be the string of an :class:`EvaluatorType <langchain.evaluation.schema.EvaluatorType>`, such
        as EvaluatorType.QA, the evaluator type string ("qa"), or a configuration for a
        given evaluator (e.g., :class:`RunEvalConfig.QA <langchain.smith.evaluation.config.RunEvalConfig.QA>`).

    custom_evaluators : Optional[List[Union[RunEvaluator, StringEvaluator]]]
        Custom evaluators to apply to the dataset run.

    reference_key : Optional[str]
        The key in the dataset run to use as the reference string.
        If not provided, it will be inferred automatically.

    prediction_key : Optional[str]
        The key from the traced run's outputs dictionary to use to
        represent the prediction. If not provided, it will be inferred
        automatically.

    input_key : Optional[str]
        The key from the traced run's inputs dictionary to use to represent the
        input. If not provided, it will be inferred automatically.

    eval_llm : Optional[BaseLanguageModel]
        The language model to pass to any evaluators that use a language model.
    )default_factory
evaluatorsNcustom_evaluatorsbatch_evaluatorsr*   r+   r,   eval_llmTarbitrary_types_allowedc                       f   e Zd ZU dZdZee ed< dZee	 ed< e
jZe
ed< 	d
dee deddf fdd	Z  ZS )zRunEvalConfig.Criteriaa"  Configuration for a reference-free criteria evaluator.

        Parameters
        ----------
        criteria : Optional[CRITERIA_TYPE]
            The criteria to evaluate.
        llm : Optional[BaseLanguageModel]
            The language model to use for the evaluation chain.

        Ncriteriallmr   r   r   c                       t  jdd|i| d S Nr<   r   r-   __init__r   r<   r   r0   r   r!   rA         zRunEvalConfig.Criteria.__init__N)r#   r$   r%   r&   r<   r   r   r'   r=   r
   r   CRITERIAr   r   rA   r2   r   r   r0   r!   Criteria   s   
 rF   c                       r;   )zRunEvalConfig.LabeledCriteriaa,  Configuration for a labeled (with references) criteria evaluator.

        Parameters
        ----------
        criteria : Optional[CRITERIA_TYPE]
            The criteria to evaluate.
        llm : Optional[BaseLanguageModel]
            The language model to use for the evaluation chain.
        Nr<   r=   r   r   r   c                    r>   r?   r@   rB   r0   r   r!   rA      rC   z&RunEvalConfig.LabeledCriteria.__init__rD   )r#   r$   r%   r&   r<   r   r   r'   r=   r
   r   LABELED_CRITERIAr   r   rA   r2   r   r   r0   r!   LabeledCriteria   s   
 
rH   c                   @   sJ   e Zd ZU dZejZeed< dZe	e
 ed< dZe	e ed< eddZdS )zRunEvalConfig.EmbeddingDistanceaI  Configuration for an embedding distance evaluator.

        Parameters
        ----------
        embeddings : Optional[Embeddings]
            The embeddings to use for computing the distance.

        distance_metric : Optional[EmbeddingDistanceEnum]
            The distance metric to use for computing the distance.

        r   N
embeddingsdistance_metricTr9   )r#   r$   r%   r&   r   EMBEDDING_DISTANCEr   r'   rI   r   r	   rJ   EmbeddingDistanceEnumr   model_configr   r   r   r!   r      s   
 
r   c                   @   s>   e Zd ZU dZejZeed< dZe	e
 ed< 	 dZeed< dS )zRunEvalConfig.StringDistancezConfiguration for a string distance evaluator.

        Parameters
        ----------
        distance : Optional[StringDistanceEnum]
            The string distance metric to use.

        r   NdistanceTnormalize_score)r#   r$   r%   r&   r   STRING_DISTANCEr   r'   rN   r   StringDistanceEnumrO   boolr   r   r   r!   r      s   
 	r   c                   @   @   e Zd ZU dZejZeed< dZe	e
 ed< dZe	e ed< dS )zRunEvalConfig.QAa-  Configuration for a QA evaluator.

        Parameters
        ----------
        prompt : Optional[BasePromptTemplate]
            The prompt template to use for generating the question.
        llm : Optional[BaseLanguageModel]
            The language model to use for the evaluation chain.
        r   Nr=   prompt)r#   r$   r%   r&   r   QAr   r'   r=   r   r
   rT   r   r   r   r   r!   rU      s
   
 
rU   c                   @   rS   )zRunEvalConfig.ContextQA<  Configuration for a context-based QA evaluator.

        Parameters
        ----------
        prompt : Optional[BasePromptTemplate]
            The prompt template to use for generating the question.
        llm : Optional[BaseLanguageModel]
            The language model to use for the evaluation chain.

        r   Nr=   rT   r#   r$   r%   r&   r   
CONTEXT_QAr   r'   r=   r   r
   rT   r   r   r   r   r!   	ContextQA  
   
 rY   c                   @   rS   )zRunEvalConfig.CoTQArV   r   Nr=   rT   rW   r   r   r   r!   CoTQA  rZ   r[   c                   @       e Zd ZU dZejZeed< dS )zRunEvalConfig.JsonValidityz\Configuration for a json validity evaluator.

        Parameters
        ----------
        r   N)r#   r$   r%   r&   r   JSON_VALIDITYr   r'   r   r   r   r!   JsonValidity&     
 r^   c                   @   r\   )z#RunEvalConfig.JsonEqualityEvaluatorz\Configuration for a json equality evaluator.

        Parameters
        ----------
        r   N)r#   r$   r%   r&   r   JSON_EQUALITYr   r'   r   r   r   r!   JsonEqualityEvaluator/  r_   ra   c                   @   sD   e Zd ZU dZejZeed< dZe	ed< dZ
e	ed< dZe	ed< dS )zRunEvalConfig.ExactMatchax  Configuration for an exact match string evaluator.

        Parameters
        ----------
        ignore_case : bool
            Whether to ignore case when comparing strings.
        ignore_punctuation : bool
            Whether to ignore punctuation when comparing strings.
        ignore_numbers : bool
            Whether to ignore numbers when comparing strings.
        r   Fignore_caseignore_punctuationignore_numbersN)r#   r$   r%   r&   r   EXACT_MATCHr   r'   rb   rR   rc   rd   r   r   r   r!   
ExactMatch8  s   
 rf   c                   @   s,   e Zd ZU dZejZeed< dZe	ed< dS )zRunEvalConfig.RegexMatchzConfiguration for a regex match string evaluator.

        Parameters
        ----------
        flags : int
            The flags to pass to the regex. Example: re.IGNORECASE.
        r   r   flagsN)
r#   r$   r%   r&   r   REGEX_MATCHr   r'   rg   intr   r   r   r!   
RegexMatchJ  s   
 rj   c                	       s   e Zd ZU dZejZeed< dZe	e
 ed< dZe	e ed< dZe	e ed< dZe	e ed< 		dde	e
 de	e ded	df fd
dZ  ZS )zRunEvalConfig.ScoreStringa  Configuration for a score string evaluator.
        This is like the criteria evaluator but it is configured by
        default to return a score on the scale from 1-10.

        It is recommended to normalize these scores
        by setting `normalize_by` to 10.

        Parameters
        ----------
        criteria : Optional[CRITERIA_TYPE]
            The criteria to evaluate.
        llm : Optional[BaseLanguageModel]
            The language model to use for the evaluation chain.
        normalize_by: Optional[int] = None
            If you want to normalize the score, the denominator to use.
            If not provided, the score will be between 1 and 10 (by default).
        prompt : Optional[BasePromptTemplate]

        r   Nr<   r=   normalize_byrT   r   r   c                    s   t  jd||d| d S )N)r<   rk   r   r@   )r   r<   rk   r   r0   r   r!   rA   q  s   z"RunEvalConfig.ScoreString.__init__)NN)r#   r$   r%   r&   r   SCORE_STRINGr   r'   r<   r   r   r=   r
   rk   floatrT   r   r   rA   r2   r   r   r0   r!   ScoreStringV  s$   
 rn   c                   @   s   e Zd ZU ejZeed< dS )z RunEvalConfig.LabeledScoreStringr   N)r#   r$   r%   r   LABELED_SCORE_STRINGr   r'   r   r   r   r!   LabeledScoreStringy  s   
 rp   )'r#   r$   r%   r&   r   listr5   r   r   SINGLE_EVAL_CONFIG_TYPECUSTOM_EVALUATOR_TYPEr'   r6   r   r7   BATCH_EVALUATOR_LIKEr*   r(   r+   r,   r8   r
   r   rM   r)   rF   rH   r   r   rU   rY   r[   r^   r   ra   rf   rj   rn   rp   r   r   r   r!   r3   ]   sN   
 #		#r3   N)/r&   typingr   r   r   r   r   r   r   langchain_core.embeddingsr	   langchain_core.language_modelsr
   langchain_core.promptsr   	langsmithr   langsmith.evaluation.evaluatorr   r   langsmith.schemasr   r   pydanticr   r   r   (langchain.evaluation.criteria.eval_chainr   ,langchain.evaluation.embedding_distance.baser   rL   langchain.evaluation.schemar   r   )langchain.evaluation.string_distance.baser   rQ   dictRUN_EVALUATOR_LIKErt   r   r)   rs   r(   rr   r3   r   r   r   r!   <module>   s4    $$