
    dh                     n    S SK r S SKrS SKJrJrJrJrJr  S SKJ	r	  S SK
JrJr  S SKJr   " S S\	5      rg)    N)AnyDictListOptionalUnion)BaseCallbackHandler)AgentActionAgentFinish)	LLMResultc                     ^  \ rS rSr% SrSr\\S'   \ S3r\\S'   Sr	\\S'    S+S
\
\   S\\   SS	4U 4S jjjrS\\\4   S\
\   S\SS	4S jrS\S\SS	4S jrS\S\SS	4S jrS\S\SS	4S jrS\\\4   S\\\4   S\SS	4S jrS\\\4   S\SS	4S jrS\S\SS	4S jrS\\\4   S\S\SS	4S jrS\S\S\4S  jr  S,S!\S"\\   S#\\   S\SS	4
S$ jjrS\S\SS	4S% jrS&\S\SS	4S' jrS(\S\SS	4S) jrS*r U =r!$ )-DeepEvalCallbackHandler   a  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                 2  > [         TU ]  5          SSKn[        R
                  R                  S5      (       a  [        R                  " S5        X l	        Xl
        [        R                  " SU R                   S35        g! [         a    [        S5      ef = f)a   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       h/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/callbacks/confident_callback.pyr    DeepEvalCallbackHandler.__init__.   s      		 77>>+&&MM5 $7 OO$$?A	
#  	* 	s   B   B
serializedpromptskwargsc                     X l         g)zStore the promptsN)r$   )r   r#   r$   r%   s       r!   on_llm_start$DeepEvalCallbackHandler.on_llm_start\   s	         tokenc                     g)z)Do nothing when a new token is generated.N )r   r*   r%   s      r!   on_llm_new_token(DeepEvalCallbackHandler.on_llm_new_tokenb       r)   responsec                 $   SSK Jn  SSKJn  SSKJn  SSKJn  U R                   H  n[        UR                  5       H  u  pU	S   R                  n
U R                  U   n[        Xs5      (       a   UR                  U
US9n[        SU 35        MS  [        Xt5      (       a!  UR                  U
5      n[        SU 35        M  [        Xv5      (       a!  UR                  U
5      n[        S	U 35        M  [!        S
UR"                   S35      e   M     g)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_relevancyr2    deepeval.metrics.bias_classifierr3   deepeval.metrics.metricr4   !deepeval.metrics.toxic_classifierr5   r   	enumerategenerationstextr$   
isinstancemeasureprint
ValueError__name__)r   r0   r%   r2   r3   r4   r5   metrici
generationr6   r7   resultscores                 r!   
on_llm_end"DeepEvalCallbackHandler.on_llm_endf   s    EC2DllF!*8+?+?!@#A++Qf66#^^%# , F .vh7877"NN62EL0177"NN62EM%12$#FOO#4 5# & # "A #r)   errorc                     g)z%Do nothing when LLM outputs an error.Nr,   r   rK   r%   s      r!   on_llm_error$DeepEvalCallbackHandler.on_llm_error   r/   r)   inputsc                     g)zDo nothing when chain startsNr,   )r   r#   rP   r%   s       r!   on_chain_start&DeepEvalCallbackHandler.on_chain_start   s     	r)   outputsc                     g)zDo nothing when chain ends.Nr,   )r   rT   r%   s      r!   on_chain_end$DeepEvalCallbackHandler.on_chain_end   r/   r)   c                     g)z+Do nothing when LLM chain outputs an error.Nr,   rM   s      r!   on_chain_error&DeepEvalCallbackHandler.on_chain_error   r/   r)   	input_strc                     g)zDo nothing when tool starts.Nr,   )r   r#   r[   r%   s       r!   on_tool_start%DeepEvalCallbackHandler.on_tool_start   s     	r)   actionc                     g)z.Do nothing when agent takes a specific action.Nr,   )r   r_   r%   s      r!   on_agent_action'DeepEvalCallbackHandler.on_agent_action   r/   r)   r6   observation_prefix
llm_prefixc                     g)zDo nothing when tool ends.Nr,   )r   r6   rc   rd   r%   s        r!   on_tool_end#DeepEvalCallbackHandler.on_tool_end   s     	r)   c                     g)z&Do nothing when tool outputs an error.Nr,   rM   s      r!   on_tool_error%DeepEvalCallbackHandler.on_tool_error   r/   r)   r>   c                     gz
Do nothingNr,   )r   r>   r%   s      r!   on_textDeepEvalCallbackHandler.on_text   r/   r)   finishc                     grl   r,   )r   ro   r%   s      r!   on_agent_finish'DeepEvalCallbackHandler.on_agent_finish   r/   r)   )r   r   r$   )N)NN)"rC   
__module____qualname____firstlineno____doc__r   str__annotations__r   r   r   r   r   r   r   r'   r-   r   rI   BaseExceptionrN   rR   rV   rY   r]   r	   ra   rf   ri   rm   r
   rq   __static_attributes____classcell__)r    s   @r!   r   r      s8   < ?Hc>!
'*J*3Hc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>r      s)    	  3 3 8 : ,l1 lr)   