o
    Zh8                     @   sl   d dl m Z  d dlmZmZmZmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ G dd de
Zd	S )
    )datetime)AnyDictListOptional)AgentActionAgentFinish)BaseCallbackHandler)	LLMResult)import_pandasc                       s  e Zd ZdZ				d3dee dee dee dee ddf
 fdd	Zd
eeef de	e deddfddZ
dededdfddZdededdfddZdededdfddZd
eeef deeef deddfddZdeeef deddfddZdededdfddZd
eeef d ededdfd!d"Zd#ededefd$d%Z		d4d&ed'ee d(ee deddf
d)d*Zdededdfd+d,Zd-ededdfd.d/Zd0ededdfd1d2Z  ZS )5ArizeCallbackHandlerz$Callback Handler that logs to Arize.Nmodel_idmodel_version	SPACE_KEYAPI_KEYreturnc                    s   t    || _|| _|| _|| _g | _g | _g | _g | _	g | _
g | _d| _d| _d| _d| _ddlm}m} ddlm} |j|jjdddd| _|||d| _|d	ksX|d
kr\tdtd dS )zInitialize callback handler.r   )EmbeddingGeneratorUseCases)Clientzdistilbert-base-uncasedi      )Zuse_caseZ
model_nameZtokenizer_max_lengthZ
batch_size)	space_keyapi_keyr   r   u   ❌ CHANGE SPACE AND API KEYSu;   ✅ Arize client setup done! Now you can start using Arize!N)super__init__r   r   r   r   prompt_recordsZresponse_recordsZprediction_idsZpred_timestampsZresponse_embeddingsZprompt_embeddingsprompt_tokenscompletion_tokenstotal_tokensstepZarize.pandas.embeddingsr   r   Zarize.pandas.loggerr   Zfrom_use_caseZNLPZSEQUENCE_CLASSIFICATION	generatorarize_client
ValueErrorprint)selfr   r   r   r   r   r   r   	__class__ c/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/callbacks/arize_callback.pyr      s6   
	zArizeCallbackHandler.__init__
serializedpromptskwargsc                 K   s"   |D ]}| j |dd qd S )N
 )r   appendreplace)r#   r(   r)   r*   promptr&   r&   r'   on_llm_start6   s   z!ArizeCallbackHandler.on_llm_starttokenc                 K      dS zDo nothing.Nr&   )r#   r1   r*   r&   r&   r'   on_llm_new_token<      z%ArizeCallbackHandler.on_llm_new_tokenresponsec                 K   s  t  }ddlm}m}m}m} |jr6d|jv r6|jd dd| _|jd dd| _	|jd dd| _
n	d | _ | _	| _
|jD ]}|D ]}	| j| j }
| jd | _|| jj||
dd	d
jdd}|	jdd	}|| jj||	jdd	d
jdd}t  }g d}|||
|d |d | j| j	| j
gg}|j||d}|ddd}|ddd}|dg d||d}| jj||| j| j|j|jd}|jdkrtd qFtd|j d qFqBd S )Nr   )EmbeddingColumnNamesEnvironments
ModelTypesSchemaZtoken_usager   r   r      r+    )Ztext_colT)Zdrop)prediction_tsr6   r/   response_vectorprompt_vectorprompt_tokencompletion_tokentotal_token)columnsr?   r/   )Zvector_column_nameZdata_column_namer>   r6   r=   )r@   rA   rB   )Ztimestamp_column_nameZtag_column_namesZprompt_column_namesZresponse_column_names)Z	dataframeschemar   r   Z
model_typeenvironment   u&   ✅ Successfully logged data to Arize!u   ❌ Logging failed "") r   Zarize.utils.typesr7   r8   r9   r:   Z
llm_outputgetr   r   r   generationsr   r   ZSeriesr   Zgenerate_embeddingsr.   Zreset_indextextr   now	timestampZ	DataFramer    logr   r   ZGENERATIVE_LLMZ
PRODUCTIONstatus_coder"   )r#   r6   r*   pdr7   r8   r9   r:   rI   Z
generationr/   Zprompt_embeddingZresponse_textZresponse_embeddingZpred_timestamprC   datadfZprompt_columnsZresponse_columnsrD   Zresponse_from_arizer&   r&   r'   
on_llm_end@   s   





zArizeCallbackHandler.on_llm_enderrorc                 K   r2   r3   r&   r#   rS   r*   r&   r&   r'   on_llm_error   r5   z!ArizeCallbackHandler.on_llm_errorinputsc                 K      d S Nr&   )r#   r(   rV   r*   r&   r&   r'   on_chain_start   s   z#ArizeCallbackHandler.on_chain_startoutputsc                 K   r2   r3   r&   )r#   rZ   r*   r&   r&   r'   on_chain_end   r5   z!ArizeCallbackHandler.on_chain_endc                 K   r2   r3   r&   rT   r&   r&   r'   on_chain_error   r5   z#ArizeCallbackHandler.on_chain_error	input_strc                 K   rW   rX   r&   )r#   r(   r]   r*   r&   r&   r'   on_tool_start   s   z"ArizeCallbackHandler.on_tool_startactionc                 K   r2   r3   r&   )r#   r_   r*   r&   r&   r'   on_agent_action   r5   z$ArizeCallbackHandler.on_agent_actionoutputobservation_prefix
llm_prefixc                 K   rW   rX   r&   )r#   ra   rb   rc   r*   r&   r&   r'   on_tool_end   s   z ArizeCallbackHandler.on_tool_endc                 K   rW   rX   r&   rT   r&   r&   r'   on_tool_error      z"ArizeCallbackHandler.on_tool_errorrJ   c                 K   rW   rX   r&   )r#   rJ   r*   r&   r&   r'   on_text   rf   zArizeCallbackHandler.on_textfinishc                 K   rW   rX   r&   )r#   rh   r*   r&   r&   r'   on_agent_finish   rf   z$ArizeCallbackHandler.on_agent_finish)NNNN)NN)__name__
__module____qualname____doc__r   strr   r   r   r   r0   r4   r
   rR   BaseExceptionrU   rY   r[   r\   r^   r   r`   rd   re   rg   r   ri   __classcell__r&   r&   r$   r'   r      s    (

h





	r   N)r   typingr   r   r   r   Zlangchain_core.agentsr   r   Zlangchain_core.callbacksr	   Zlangchain_core.outputsr
   Z#langchain_community.callbacks.utilsr   r   r&   r&   r&   r'   <module>   s    