U
    h8                     @   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                       sj  e Zd ZdZd+ee ee e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d,e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)d*Z  ZS )-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s|d
krtdn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__ P/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/callbacks/arize_callback.pyr      s6    	

zArizeCallbackHandler.__init__)
serializedpromptskwargsr   c                 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)tokenr*   r   c                 K   s   dS zDo nothing.Nr&   )r#   r1   r*   r&   r&   r'   on_llm_new_token<   s    z%ArizeCallbackHandler.on_llm_new_token)responser*   r   c                 K   s  t  }ddlm}m}m}m} |jrld|jkrl|jd dd| _|jd dd| _	|jd dd| _
nd | _ | _	| _
|jD ]T}|D ]H}	| 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  }ddddddddg}|||
|d |d | j| j	| j
gg}|j||d}|ddd}|ddd}|ddddg||d}| jj||| j| j|j|jd}|jdkrtd qtd|j d qqd S )Nr   )EmbeddingColumnNamesEnvironments
ModelTypesSchemaZtoken_usager   r   r      r+    )Ztext_colT)ZdropZprediction_tsr4   r/   Zresponse_vectorZprompt_vectorZprompt_tokenZcompletion_tokenZtotal_token)columns)Zvector_column_nameZdata_column_name)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.typesr5   r6   r7   r8   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#   r4   r*   pdr5   r6   r7   r8   rA   Z
generationr/   Zprompt_embeddingZresponse_textZresponse_embeddingZpred_timestampr;   dataZdfZprompt_columnsZresponse_columnsr<   Zresponse_from_arizer&   r&   r'   
on_llm_end@   s    
 
 
 
  
zArizeCallbackHandler.on_llm_end)errorr*   r   c                 K   s   dS r2   r&   r#   rJ   r*   r&   r&   r'   on_llm_error   s    z!ArizeCallbackHandler.on_llm_error)r(   inputsr*   r   c                 K   s   d S Nr&   )r#   r(   rM   r*   r&   r&   r'   on_chain_start   s    z#ArizeCallbackHandler.on_chain_start)outputsr*   r   c                 K   s   dS r2   r&   )r#   rP   r*   r&   r&   r'   on_chain_end   s    z!ArizeCallbackHandler.on_chain_endc                 K   s   dS r2   r&   rK   r&   r&   r'   on_chain_error   s    z#ArizeCallbackHandler.on_chain_error)r(   	input_strr*   r   c                 K   s   d S rN   r&   )r#   r(   rS   r*   r&   r&   r'   on_tool_start   s    z"ArizeCallbackHandler.on_tool_start)actionr*   r   c                 K   s   dS r2   r&   )r#   rU   r*   r&   r&   r'   on_agent_action   s    z$ArizeCallbackHandler.on_agent_action)outputobservation_prefix
llm_prefixr*   r   c                 K   s   d S rN   r&   )r#   rW   rX   rY   r*   r&   r&   r'   on_tool_end   s    z ArizeCallbackHandler.on_tool_endc                 K   s   d S rN   r&   rK   r&   r&   r'   on_tool_error   s    z"ArizeCallbackHandler.on_tool_error)rB   r*   r   c                 K   s   d S rN   r&   )r#   rB   r*   r&   r&   r'   on_text   s    zArizeCallbackHandler.on_text)finishr*   r   c                 K   s   d S rN   r&   )r#   r]   r*   r&   r&   r'   on_agent_finish   s    z$ArizeCallbackHandler.on_agent_finish)NNNN)NN)__name__
__module____qualname____doc__r   strr   r   r   r   r0   r3   r
   rI   BaseExceptionrL   rO   rQ   rR   rT   r   rV   rZ   r[   r\   r   r^   __classcell__r&   r&   r$   r'   r      sZ       )
  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   