
    gh                     \   U d 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
 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+m,Z, ddl-m.Z.m/Z/ de0de1e2         fdZ3i e'j4        e#e'j5        e"e'j6        e!e'j7        ee'j8        e,e'j9        ee'j:        e+e'j;        ee'j<        ee'j=        ee'j>        e/e'j?        e.e'j@        ee'jA        ee'jB        ee'jC        ee'jD        ee'jE        ee'jF        e%e'jG        eiZHe2e'eeIe(         eIe
         eIe)         f         f         eJd<   ddde'dee         dedee
e)f         fdZKddddee'         dee         d ee2         dede1ee
e)f                  f
d!ZLdS )"z Loading datasets and evaluators.    )Sequence)AnyOptionalUnion)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                     	 ddl m} n# t          $ r t          d          w xY w |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                     g | ]}|S  r%   ).0ds     Y/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/langchain/evaluation/loading.py
<listcomp>z load_dataset.<locals>.<listcomp>G   s    (((!A(((    train)datasetsr#   ImportError)r    r#   datasets      r(   r#   r#   (   s    ,
))))))) 
 
 
:
 
 	

 l55566G((ww'((((s   	 #_EVALUATOR_MAPN)llm	evaluatorr0   kwargsc          	         | t           vr9t          d|  dt          t                                                                t           |          }t	          |t
                    r	 	 ddlm} n5# t          $ r( 	 ddl	m} n# t          $ r t          d          w xY wY nw xY w|p |ddd          }n&# t          $ r}t          d	| d
          |d}~ww xY 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: r   )
ChatOpenAIzCould not import langchain_openai or fallback onto langchain_community. Please install langchain_openai or specify a language model explicitly. It's recommended to install langchain_openai AND specify a language model explicitly.zgpt-4*   )modelseed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   langchain_openair4   r-   &langchain_community.chat_models.openai	Exceptionfrom_llm)r1   r0   r2   evaluator_clsr4   es         r(   load_evaluatorrC   d   s   6 &&@y @ @"&~':':'<'<"="=@ @
 
 	
 #9-M-.. '	7777777          #   %?    J'JJJCC 	 	 	5} 5 5 5  	 &}%88#8888}&&v&&&sN   'A. -B4 .
B 9B ?B  BB B4 B  B4 4
C>CC)r0   config
evaluatorsrD   c          	          g }| D ]B}|r|                     |i           ni }|                    t          |fd|ii ||           C|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appendrC   )rE   r0   rD   r2   loadedr1   _kwargss          r(   load_evaluatorsrK      sr    B F S S	/5=&**Y+++2nYQQCQ;Pf;P;PQQRRRRMr*   )M__doc__collections.abcr   typingr   r   r   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:   dictr#   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/   type__annotations__rC   rK   r%   r*   r(   <module>rw      s\   & & & $ $ $ $ $ $ ' ' ' ' ' ' ' ' ' ' < < < < < < ' ' ' ' ' ' Q Q Q Q Q Q C C C C C C U U U U U U               L K K K K K        Q P P P P P H H H H H H S S S S S S S S S S K K K K K K T T T T T T T T T T              )c )d4j ) ) ) )Hk. 0 !#:	
  4 )+I &(C "$7 - "$< !#: *,K $&@ -/Q !6  !6!" $&?#$ (*=88)  5l+T%[$:OOPP   : (,>' >' >'>' 
#	$>' 	>'
 5/!">' >' >' >'H (,!	% % %'% 
#	$% TN	%
 % 
%&
'(% % % % % %r*   