o
    .if%                     @   sf  U 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 ddlmZ dd	lmZmZ dd
lmZ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$m%Z%m&Z&m'Z' ddl(m)Z) ddl*m+Z+m,Z,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2m3Z3 de4dee fddZ5i e+j6e'e+j7e&e+j8e%e+j9ee+j:e0e+j;ee+j<e/e+j=ee+j>ee+j?ee+j@e3e+jAe2e+jBee+jCee+jDee+jEee+jFe!e+jGe#e+jHe)e+jIeiZJee+eee, ee ee- f f eKd< ddde+dee dedeee-f fddZLddd d!ee+ dee d"eeM dedeeee-f  f
d#d$ZNdS )%z Loading datasets and evaluators.    )AnyDictListOptionalSequenceTypeUnion)
ChatOpenAI)BaseLanguageModel)Chain)TrajectoryEvalChain)PairwiseStringEvalChain)LabeledPairwiseStringEvalChain)CriteriaEvalChainLabeledCriteriaEvalChain)EmbeddingDistanceEvalChain"PairwiseEmbeddingDistanceEvalChain)ExactMatchStringEvaluator)JsonEqualityEvaluatorJsonValidityEvaluator)JsonEditDistanceEvaluator)JsonSchemaEvaluator)ContextQAEvalChainCotQAEvalChainQAEvalChain)RegexMatchStringEvaluator)EvaluatorTypeLLMEvalChainStringEvaluator)LabeledScoreStringEvalChainScoreStringEvalChain)PairwiseStringDistanceEvalChainStringDistanceEvalChainurireturnc                 C   sH   zddl m} W n ty   tdw |d|  }dd |d D S )a  Load a dataset from the `LangChainDatasets on HuggingFace <https://huggingface.co/LangChainDatasets>`_.

    Args:
        uri: The uri of the dataset to load.

    Returns:
        A list of dictionaries, each representing a row in the dataset.

    **Prerequisites**

    .. code-block:: shell

        pip install datasets

    Examples
    --------
    .. code-block:: python

        from langchain.evaluation import load_dataset
        ds = load_dataset("llm-math")
    r   )load_datasetzXload_dataset requires the `datasets` package. Please install with `pip install datasets`zLangChainDatasets/c                 S   s   g | ]}|qS  r&   ).0dr&   r&   U/var/www/html/corbot_env/lib/python3.10/site-packages/langchain/evaluation/loading.py
<listcomp>F   s    z load_dataset.<locals>.<listcomp>train)datasetsr%   ImportError)r#   r%   datasetr&   r&   r)   r%   '   s   r%   _EVALUATOR_MAPN)llm	evaluatorr0   kwargsc             
   K   s   | t vrtd|  dtt   t |  }t|trHz|p&tdddidd}W n ty= } z	td| d	|d
}~ww |jdd|i|S |di |S )a<  Load the requested evaluation chain specified by a string.

    Parameters
    ----------
    evaluator : EvaluatorType
        The type of evaluator to load.
    llm : BaseLanguageModel, optional
        The language model to use for evaluation, by default None
    **kwargs : Any
        Additional keyword arguments to pass to the evaluator.

    Returns
    -------
    Chain
        The loaded evaluation chain.

    Examples
    --------
    >>> from langchain.evaluation import load_evaluator, EvaluatorType
    >>> evaluator = load_evaluator(EvaluatorType.QA)
    zUnknown evaluator type: z
Valid types are: zgpt-4seed*   r   )modelmodel_kwargstemperaturezEvaluation with the z requires a language model to function. Failed to create the default 'gpt-4' model. Please manually provide an evaluation LLM or check your openai credentials.Nr0   r&   )	r/   
ValueErrorlistkeys
issubclassr   r	   	Exceptionfrom_llm)r1   r0   r2   evaluator_clser&   r&   r)   load_evaluatorc   s,   




r@   )r0   config
evaluatorsrA   c                K   sH   g }| D ]}|r| |i ni }|t|fd|ii || q|S )ae  Load evaluators specified by a list of evaluator types.

    Parameters
    ----------
    evaluators : Sequence[EvaluatorType]
        The list of evaluator types to load.
    llm : BaseLanguageModel, optional
        The language model to use for evaluation, if none is provided, a default
        ChatOpenAI gpt-4 model will be used.
    config : dict, optional
        A dictionary mapping evaluator types to additional keyword arguments,
        by default None
    **kwargs : Any
        Additional keyword arguments to pass to all evaluators.

    Returns
    -------
    List[Chain]
        The loaded evaluators.

    Examples
    --------
    >>> from langchain.evaluation import load_evaluators, EvaluatorType
    >>> evaluators = [EvaluatorType.QA, EvaluatorType.CRITERIA]
    >>> loaded_evaluators = load_evaluators(evaluators, criteria="helpfulness")
    r0   )getappendr@   )rB   r0   rA   r2   loadedr1   _kwargsr&   r&   r)   load_evaluators   s
   !$rG   )O__doc__typingr   r   r   r   r   r   r   &langchain_community.chat_models.openair	   langchain_core.language_modelsr
   langchain.chains.baser   1langchain.evaluation.agents.trajectory_eval_chainr   langchain.evaluation.comparisonr   *langchain.evaluation.comparison.eval_chainr   (langchain.evaluation.criteria.eval_chainr   r   ,langchain.evaluation.embedding_distance.baser   r   %langchain.evaluation.exact_match.baser   !langchain.evaluation.parsing.baser   r   *langchain.evaluation.parsing.json_distancer   (langchain.evaluation.parsing.json_schemar   langchain.evaluation.qar   r   r   %langchain.evaluation.regex_match.baser   langchain.evaluation.schemar   r   r   'langchain.evaluation.scoring.eval_chainr   r    )langchain.evaluation.string_distance.baser!   r"   strr%   QACOT_QA
CONTEXT_QAPAIRWISE_STRINGSCORE_STRINGLABELED_PAIRWISE_STRINGLABELED_SCORE_STRINGAGENT_TRAJECTORYCRITERIALABELED_CRITERIASTRING_DISTANCEPAIRWISE_STRING_DISTANCEEMBEDDING_DISTANCEPAIRWISE_EMBEDDING_DISTANCEJSON_VALIDITYJSON_EQUALITYJSON_EDIT_DISTANCEJSON_SCHEMA_VALIDATIONREGEX_MATCHEXACT_MATCHr/   __annotations__r@   dictrG   r&   r&   r&   r)   <module>   s    $$	


6