
    Ng                     v    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e	          ZdS )    N)AnyDictListOptionalUnion)BaseCallbackHandler)AgentActionAgentFinish)	LLMResultc                       e Zd ZU dZdZeed<   e dZeed<   dZeed<   	 d)d	e	e
         d
ee         ddf fdZdeee
f         de	e         de
ddfdZdede
ddfdZdede
ddfdZdede
ddfdZdeee
f         deee
f         de
ddfdZdeee
f         de
ddfdZdede
ddfdZdeee
f         dede
ddfdZdede
de
fdZ	 	 d*d e
d!ee         d"ee         de
ddf
d#Zdede
ddfd$Zd%ede
ddfd&Zd'ede
ddfd(Z xZS )+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                 J   t                                                       	 ddl}n# t          $ r t          d          w xY wt          j                            d          rt          j        d           || _	        || _
        t          j        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__s       l/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/callbacks/confident_callback.pyr   z DeepEvalCallbackHandler.__init__.   s      		OOOO 	 	 	*  	 7>>+&& 	M5   $7 AOA A A	
 	
 	
 	
 	
s	   ( A
serializedpromptskwargsc                     || _         dS )zStore the promptsN)r"   )r   r!   r"   r#   s       r    on_llm_startz$DeepEvalCallbackHandler.on_llm_start\   s         tokenc                     dS )z)Do nothing when a new token is generated.N )r   r'   r#   s      r    on_llm_new_tokenz(DeepEvalCallbackHandler.on_llm_new_tokenb       r&   responsec                 4   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*|                    |
|          }t          d|            Yt          ||          r(|                    |
          }t          d|            t          ||          r(|                    |
          }t          d	|            t!          d
|j         d          d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)!deepeval.metrics.answer_relevancyr.    deepeval.metrics.bias_classifierr/   deepeval.metrics.metricr0   !deepeval.metrics.toxic_classifierr1   r   	enumerategenerationstextr"   
isinstancemeasureprint
ValueError__name__)r   r,   r#   r.   r/   r0   r1   metrici
generationr2   r3   resultscores                 r    
on_llm_endz"DeepEvalCallbackHandler.on_llm_endf   s   EEEEEECCCCCC222222DDDDDDl 	 	F!*8+?!@!@  :#A+Qfo66 #^^%# ,  F 7v77888877 
"NN622E000111177 "NN622E1%112222$&FO & & &  #	 	r&   errorc                     dS )z%Do nothing when LLM outputs an error.Nr)   r   rF   r#   s      r    on_llm_errorz$DeepEvalCallbackHandler.on_llm_error   r+   r&   inputsc                     dS )zDo nothing when chain startsNr)   )r   r!   rJ   r#   s       r    on_chain_startz&DeepEvalCallbackHandler.on_chain_start   s	     	r&   outputsc                     dS )zDo nothing when chain ends.Nr)   )r   rM   r#   s      r    on_chain_endz$DeepEvalCallbackHandler.on_chain_end   r+   r&   c                     dS )z+Do nothing when LLM chain outputs an error.Nr)   rH   s      r    on_chain_errorz&DeepEvalCallbackHandler.on_chain_error   r+   r&   	input_strc                     dS )zDo nothing when tool starts.Nr)   )r   r!   rR   r#   s       r    on_tool_startz%DeepEvalCallbackHandler.on_tool_start   s	     	r&   actionc                     dS )z.Do nothing when agent takes a specific action.Nr)   )r   rU   r#   s      r    on_agent_actionz'DeepEvalCallbackHandler.on_agent_action   r+   r&   r2   observation_prefix
llm_prefixc                     dS )zDo nothing when tool ends.Nr)   )r   r2   rX   rY   r#   s        r    on_tool_endz#DeepEvalCallbackHandler.on_tool_end   s	     	r&   c                     dS )z&Do nothing when tool outputs an error.Nr)   rH   s      r    on_tool_errorz%DeepEvalCallbackHandler.on_tool_error   r+   r&   r:   c                     dS z
Do nothingNr)   )r   r:   r#   s      r    on_textzDeepEvalCallbackHandler.on_text   r+   r&   finishc                     dS r_   r)   )r   ra   r#   s      r    on_agent_finishz'DeepEvalCallbackHandler.on_agent_finish   r+   r&   )N)NN) r?   
__module____qualname____doc__r   str__annotations__r   r   r   r   r   r   r   r%   r*   r   rE   BaseExceptionrI   rL   rO   rQ   rT   r	   rW   r[   r]   r`   r
   rc   __classcell__)r   s   @r    r   r      sK         < ?Hc>>>!***J***3Hc333
 .2,
 ,
c,
 &c],
 
	,
 ,
 ,
 ,
 ,
 ,
\sCx.379HK	   c S T    9      <- 3 4    sCx.26sCx.LO	   DcN c d    M S T    cN  	
 
   k S S     -1$(	  %SM SM	
  
   = C D    C 3 4    k S T        r&   r   )r   r   typingr   r   r   r   r   langchain_core.callbacksr   langchain_core.agentsr	   r
   langchain_core.outputsr   r   r)   r&   r    <module>ro      s    				  3 3 3 3 3 3 3 3 3 3 3 3 3 3 8 8 8 8 8 8 : : : : : : : : , , , , , ,l l l l l1 l l l l lr&   