a
    bg                     @   sh   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 d dl
mZmZ d dlmZ G dd de	ZdS )    N)AnyDictListOptionalUnion)BaseCallbackHandler)AgentActionAgentFinish)	LLMResultc                       s  e Zd ZU dZdZeed< e dZeed< dZeed< d1e	e
 ee dd	 fd
dZeee
f e	e e
ddddZee
ddddZee
ddddZee
ddddZeee
f eee
f e
ddddZeee
f e
ddddZee
ddddZeee
f ee
dd d!d"Zee
e
d#d$d%Zd2e
ee ee e
dd&d'd(Zee
ddd)d*Zee
dd+d,d-Zee
dd.d/d0Z  ZS )3DeepEvalCallbackHandlera   Callback Handler that logs into deepeval.

    Args:
        implementation_name: name of the `implementation` in deepeval
        metrics: A list of metrics

    Raises:
        ImportError: if the `deepeval` package is not installed.

    Examples:
        >>> from langchain_community.llms import OpenAI
        >>> from langchain_community.callbacks import DeepEvalCallbackHandler
        >>> from deepeval.metrics import AnswerRelevancy
        >>> metric = AnswerRelevancy(minimum_score=0.3)
        >>> deepeval_callback = DeepEvalCallbackHandler(
        ...     implementation_name="exampleImplementation",
        ...     metrics=[metric],
        ... )
        >>> llm = OpenAI(
        ...     temperature=0,
        ...     callbacks=[deepeval_callback],
        ...     verbose=True,
        ...     openai_api_key="API_KEY_HERE",
        ... )
        >>> llm.generate([
        ...     "What is the best evaluation tool out there? (no bias at all)",
        ... ])
        "Deepeval, no doubt about it."
    z(https://github.com/confident-ai/deepevalREPO_URLz/issues
ISSUES_URLzhttps://docs.confident-ai.comBLOG_URLN)metricsimplementation_namereturnc                    sl   t    zddl}W n ty0   tdY n0 tjdrHtd || _	|| _
td| j d dS )aX  Initializes the `deepevalCallbackHandler`.

        Args:
            implementation_name: Name of the implementation you want.
            metrics: What metrics do you want to track?

        Raises:
            ImportError: if the `deepeval` package is not installed.
            ConnectionError: if the connection to deepeval fails.
        r   NzTo use the deepeval callback manager you need to have the 
                `deepeval` Python package installed. Please install it with 
                `pip install deepeval`z	.deepevalznYou are currently not logging anything to the dashboard, we 
                recommend using `deepeval login`.zThe `DeepEvalCallbackHandler` is currently in beta and is subject to change based on updates to `langchain`. Please report any issues to z as an `integration` issue.)super__init__deepevalImportErrorospathexistswarningswarnr   r   r   )selfr   r   r   	__class__ ~/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/callbacks/confident_callback.pyr   .   s$    

z DeepEvalCallbackHandler.__init__)
serializedpromptskwargsr   c                 K   s
   || _ dS )zStore the promptsN)r!   )r   r    r!   r"   r   r   r   on_llm_start\   s    z$DeepEvalCallbackHandler.on_llm_start)tokenr"   r   c                 K   s   dS )z)Do nothing when a new token is generated.Nr   )r   r$   r"   r   r   r   on_llm_new_tokenb   s    z(DeepEvalCallbackHandler.on_llm_new_token)responser"   r   c                 K   s   ddl m} ddlm} ddlm} ddlm} | jD ]}t	|j
D ]\}}	|	d j}
| j| }t||r|j|
|d}td|  qDt||r||
}td|  qDt||r||
}td	|  qDtd
|j dqDq6dS )z)Log records to deepeval when an LLM ends.r   )AnswerRelevancy)UnBiasedMetric)Metric)NonToxicMetric)outputqueryzAnswer Relevancy: zBias Score: zToxic Score: zMetric zA is not supported by deepeval 
                        callbacks.N)Z!deepeval.metrics.answer_relevancyr'   Z deepeval.metrics.bias_classifierr(   Zdeepeval.metrics.metricr)   Z!deepeval.metrics.toxic_classifierr*   r   	enumerateZgenerationstextr!   
isinstancemeasureprint
ValueError__name__)r   r&   r"   r'   r(   r)   r*   ZmetriciZ
generationr+   r,   resultZscorer   r   r   
on_llm_endf   s.    







z"DeepEvalCallbackHandler.on_llm_end)errorr"   r   c                 K   s   dS )z%Do nothing when LLM outputs an error.Nr   r   r7   r"   r   r   r   on_llm_error   s    z$DeepEvalCallbackHandler.on_llm_error)r    inputsr"   r   c                 K   s   dS )zDo nothing when chain startsNr   )r   r    r:   r"   r   r   r   on_chain_start   s    z&DeepEvalCallbackHandler.on_chain_start)outputsr"   r   c                 K   s   dS )zDo nothing when chain ends.Nr   )r   r<   r"   r   r   r   on_chain_end   s    z$DeepEvalCallbackHandler.on_chain_endc                 K   s   dS )z+Do nothing when LLM chain outputs an error.Nr   r8   r   r   r   on_chain_error   s    z&DeepEvalCallbackHandler.on_chain_error)r    	input_strr"   r   c                 K   s   dS )zDo nothing when tool starts.Nr   )r   r    r?   r"   r   r   r   on_tool_start   s    z%DeepEvalCallbackHandler.on_tool_start)actionr"   r   c                 K   s   dS )z.Do nothing when agent takes a specific action.Nr   )r   rA   r"   r   r   r   on_agent_action   s    z'DeepEvalCallbackHandler.on_agent_action)r+   observation_prefix
llm_prefixr"   r   c                 K   s   dS )zDo nothing when tool ends.Nr   )r   r+   rC   rD   r"   r   r   r   on_tool_end   s    z#DeepEvalCallbackHandler.on_tool_endc                 K   s   dS )z&Do nothing when tool outputs an error.Nr   r8   r   r   r   on_tool_error   s    z%DeepEvalCallbackHandler.on_tool_error)r.   r"   r   c                 K   s   dS z
Do nothingNr   )r   r.   r"   r   r   r   on_text   s    zDeepEvalCallbackHandler.on_text)finishr"   r   c                 K   s   dS rG   r   )r   rI   r"   r   r   r   on_agent_finish   s    z'DeepEvalCallbackHandler.on_agent_finish)N)NN) r3   
__module____qualname____doc__r   str__annotations__r   r   r   r   r   r   r   r#   r%   r
   r6   BaseExceptionr9   r;   r=   r>   r@   r   rB   rE   rF   rH   r	   rJ   __classcell__r   r   r   r   r      sN   
 /
	  
r   )r   r   typingr   r   r   r   r   Zlangchain_core.callbacksr   Zlangchain_core.agentsr   r	   Zlangchain_core.outputsr
   r   r   r   r   r   <module>   s   