a
    bg                     @  s   d Z ddlmZ ddlZddlmZmZmZmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZ erddlZd	d
ddZG dd deZdS )!Callback handler for promptlayer.    )annotationsN)TYPE_CHECKINGAnyCallableDictListOptionalTuple)UUID)BaseCallbackHandler)	AIMessageBaseMessageChatMessageHumanMessageSystemMessage)ChatGeneration	LLMResultpromptlayer)returnc                  C  s,   zddl } W n ty&   tdY n0 | S )z2Lazy import promptlayer to avoid circular imports.r   NzsThe PromptLayerCallbackHandler requires the promptlayer package.  Please install it with `pip install promptlayer`.)r   ImportError)r    r   /var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/callbacks/promptlayer_callback.py_lazy_import_promptlayer   s    
r   c                	   @  s   e Zd ZdZd$ddddddZddd	d
dddddddddZddd	d
dddddddddZddddddddddZdd
dddZdd d!d"d#Z	dS )%PromptLayerCallbackHandlerr   NzOptional[Callable[..., Any]]zOptional[List[str]]None)pl_id_callbackpl_tagsr   c                 C  s    t   || _|pg | _i | _dS )z*Initialize the PromptLayerCallbackHandler.N)r   r   r   runs)selfr   r   r   r   r   __init__)   s    
z#PromptLayerCallbackHandler.__init__)parent_run_idtagszDict[str, Any]zList[List[BaseMessage]]r   zOptional[UUID]r   )
serializedmessagesrun_idr!   r"   kwargsr   c                  sD    fdd|D | di d|d tj  |d j|< d S )Nc                   s   g | ]}  |d  qS )r   )_create_message_dicts.0mr   r   r   
<listcomp>?       zBPromptLayerCallbackHandler.on_chat_model_start.<locals>.<listcomp>invocation_params.id)r$   r.   namerequest_start_timer"   getjoindatetimenow	timestampr   )r   r#   r$   r%   r!   r"   r&   r   r+   r   on_chat_model_start4   s    
z.PromptLayerCallbackHandler.on_chat_model_startz	List[str])r#   promptsr%   r!   r"   r&   r   c                K  s6   || di d|d tj  |d| j|< d S )Nr.   r/   r0   )r:   r.   r1   r2   r"   r3   )r   r#   r:   r%   r!   r"   r&   r   r   r   on_llm_startF   s    
z'PromptLayerCallbackHandler.on_llm_start)r!   r   )responser%   r!   r&   r   c                K  s8  ddl m}m} | j|i }|s&d S tj  |d< tt	|j
D ]}|j
| d }	|	j|jd}
|di }|dd d u}|r|dg | n|dg | g}|rt|	tr| |	jgn|
}||dd	||| j||d
|d| t| jd ut|t|t|dg dd}| jrF| | qFd S )Nr   )get_api_keypromptlayer_api_requestZrequest_end_time)text
llm_outputr.   r$   r:   r1   Z	langchainr2   r"   )Z_langchain_run_idZ_langchain_parent_run_idZ_langchain_tags)Zreturn_pl_idmetadata)Zpromptlayer.utilsr=   r>   r   r4   r6   r7   r8   rangelenZgenerationsr?   r@   
isinstancer   _convert_message_to_dictmessager   boolr   str)r   r<   r%   r!   r&   r=   r>   Zrun_infoiZ
generationrespZmodel_paramsZis_chat_modelZmodel_inputZmodel_responseZpl_request_idr   r   r   
on_llm_endX   sP    z%PromptLayerCallbackHandler.on_llm_endr   )rF   r   c                 C  s   t |trd|jd}nXt |tr0d|jd}n@t |trHd|jd}n(t |trb|j|jd}ntd| d|jv r|jd |d< |S )Nuser)rolecontentZ	assistantsystemzGot unknown type r1   )	rD   r   rN   r   r   r   rM   
ValueErrorZadditional_kwargs)r   rF   Zmessage_dictr   r   r   rE      s    




z3PromptLayerCallbackHandler._convert_message_to_dictzList[BaseMessage]z+Tuple[List[Dict[str, Any]], Dict[str, Any]])r$   r   c                   s   i } fdd|D }||fS )Nc                   s   g | ]}  |qS r   )rE   r(   r+   r   r   r,      r-   zDPromptLayerCallbackHandler._create_message_dicts.<locals>.<listcomp>r   )r   r$   paramsZmessage_dictsr   r+   r   r'      s    z0PromptLayerCallbackHandler._create_message_dicts)NN)
__name__
__module____qualname____doc__r    r9   r;   rK   rE   r'   r   r   r   r   r   &   s     7r   )rU   
__future__r   r6   typingr   r   r   r   r   r	   r
   uuidr   Zlangchain_core.callbacksr   Zlangchain_core.messagesr   r   r   r   r   Zlangchain_core.outputsr   r   r   r   r   r   r   r   r   <module>   s   $