o
    Zh                     @  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rFddlZ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returnpromptlayerc                  C  s&   zddl } W | S  ty   tdw )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   i/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/callbacks/promptlayer_callback.py_lazy_import_promptlayer   s   
r   c                   @  sh   e Zd ZdZ		d*d+d	d
Zdddd,ddZdddd-ddZddd.d d!Zd/d$d%Zd0d(d)Z	dS )1PromptLayerCallbackHandlerr   Npl_id_callbackOptional[Callable[..., Any]]pl_tagsOptional[List[str]]r   Nonec                 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tags
serializedDict[str, Any]messagesList[List[BaseMessage]]run_idr   r#   Optional[UUID]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>?   s    zBPromptLayerCallbackHandler.on_chat_model_start.<locals>.<listcomp>invocation_params.id)r'   r2   namerequest_start_timer$   getjoindatetimenow	timestampr    )r!   r%   r'   r)   r#   r$   r+   r   r0   r   on_chat_model_start4   s   
z.PromptLayerCallbackHandler.on_chat_model_startprompts	List[str]c                K  s6   || di d|d tj  |d| j|< d S )Nr2   r3   r4   )r>   r2   r5   r6   r$   r7   )r!   r%   r>   r)   r#   r$   r+   r   r   r   on_llm_startF   s   
z'PromptLayerCallbackHandler.on_llm_start)r#   responser   c                K  s8  ddl m}m} | j|i }|sd S tj  |d< tt	|j
D ]v}|j
| d }	|	j|jd}
|di }|dd d u}|rK|dg | n|dg | g}|rbt|	trb| |	jgn|
}||dd	||| j||d
|d| t| jd ut|t|t|dg dd}| jr| | q#d S )Nr   )get_api_keypromptlayer_api_requestZrequest_end_time)text
llm_outputr2   r'   r>   r5   Z	langchainr6   r$   )Z_langchain_run_idZ_langchain_parent_run_idZ_langchain_tags)Zreturn_pl_idmetadata)Zpromptlayer.utilsrB   rC   r    r8   r:   r;   r<   rangelenZgenerationsrD   rE   
isinstancer   _convert_message_to_dictmessager   boolr   str)r!   rA   r)   r#   r+   rB   rC   Zrun_infoiZ
generationrespZmodel_paramsZis_chat_modelZmodel_inputZmodel_responseZpl_request_idr   r   r   
on_llm_endX   sT   
z%PromptLayerCallbackHandler.on_llm_endrK   r   c                 C  s   t |trd|jd}n,t |trd|jd}n t |tr$d|jd}nt |tr1|j|jd}ntd| d|jv rD|jd |d< |S )Nuser)rolecontentZ	assistantsystemzGot unknown type r5   )	rI   r   rS   r   r   r   rR   
ValueErrorZadditional_kwargs)r!   rK   Zmessage_dictr   r   r   rJ      s   




z3PromptLayerCallbackHandler._convert_message_to_dictList[BaseMessage]+Tuple[List[Dict[str, Any]], Dict[str, Any]]c                   s   i } fdd|D }||fS )Nc                   s   g | ]}  |qS r   )rJ   r-   r0   r   r   r1      s    zDPromptLayerCallbackHandler._create_message_dicts.<locals>.<listcomp>r   )r!   r'   paramsZmessage_dictsr   r0   r   r,      s   z0PromptLayerCallbackHandler._create_message_dicts)NN)r   r   r   r   r   r   )r%   r&   r'   r(   r)   r   r#   r*   r$   r   r+   r   r   r   )r%   r&   r>   r?   r)   r   r#   r*   r$   r   r+   r   r   r   )
rA   r   r)   r   r#   r*   r+   r   r   r   )rK   r   r   r&   )r'   rV   r   rW   )
__name__
__module____qualname____doc__r"   r=   r@   rP   rJ   r,   r   r   r   r   r   &   s    
7r   )r   r   )r\   
__future__r   r:   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    $
