o
    0 i;.                     @   s  d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	m
Z
mZ d dlmZmZ d dlmZmZ d dlmZ d dlmZ zd d	lmZ d d
lmZ W n eyU   edw G dd deZdd Zdd Zdd Zdd Zdd Z dd Z!dd Z"dd Z#dd Z$d d! Z%dS )"    wraps)AnyCallableListOptionalN)set_data_normalizednormalize_message_rolestruncate_and_annotate_messages)OPSPANDATA)DidNotEnableIntegration)should_send_default_pii)safe_serialize)
StateGraph)Pregelzlanggraph not installedc                   @   s0   e Zd ZdZde Zd	ddZedd ZdS )
LanggraphIntegrationZ	langgraphzauto.ai.Tc                 C   s
   || _ d S )N)include_prompts)selfr    r   m/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/sentry_sdk/integrations/langgraph.py__init__   s   
zLanggraphIntegration.__init__c                   C   s@   t tjt_ttdrttjt_ttdrttjt_d S d S )Ninvokeainvoke)	_wrap_state_graph_compiler   compilehasattrr   _wrap_pregel_invoker   _wrap_pregel_ainvoker   r   r   r   r   
setup_once   s   


zLanggraphIntegration.setup_onceN)T)__name__
__module____qualname__
identifieroriginr   staticmethodr    r   r   r   r   r      s    

r   c                 C   s8   dD ]}t | |rt| |}|rt|tr|  S qd S )N)name
graph_namer!   _name)r   getattr
isinstancestr)	graph_objattrr'   r   r   r   _get_graph_name0   s   

r/   c                 C   sT   t | dsd S t| dd | jd}dD ]}t | |r't| |}|d ur'|||< q|S )Ncontenttype)roler0   )r'   
tool_callsZfunction_callZtool_call_id)r   r*   r0   )messageparsedr.   valuer   r   r   _normalize_langgraph_message:   s   


r7   c              	   C   s   | sd S d }t | tr| d}n$t| dr| j}nt| dr5t| jr5z| d}W n	 ty4   Y nw |r>t |ttfs@d S g }|D ]}zt	|}|rR|
| W qD ty\   Y qDw |ra|S d S )Nmessagesget)r+   dictr9   r   r8   callable	Exceptionlisttupler7   append)stater8   Znormalized_messagesr4   
normalizedr   r   r   _parse_langgraph_messagesJ   s4   


rB   c                       t   fdd}|S )Nc                    sj  t  t}|d u r | g|R i |S t jtjtjd} | g|R i |}t|dd }|	t
jd |	t
j| |rHd| |_nd|_|dd d ur]|	t
j|d d }t|dd }|rt|r| }	t|	dd }
|
rt|
tr|
d}|rt|d	d }|rt|d
rt|j }|d ur|	t
j| |W  d    S 1 sw   Y  d S )N)opr%   r'   Zcreate_agentzcreate_agent model	get_graphnodestoolsdatatools_by_name)
sentry_sdk
get_clientget_integrationr   
start_spanr   ZGEN_AI_CREATE_AGENTr%   r*   set_datar   GEN_AI_OPERATION_NAMEGEN_AI_AGENT_NAMEdescriptionr9   ZGEN_AI_REQUEST_MODELr;   rF   r+   r:   r   r=   rJ   keysZGEN_AI_REQUEST_AVAILABLE_TOOLS)r   argskwargsintegrationspanZcompiled_graphZcompiled_graph_namerH   rF   r-   rG   Z
tools_noderI   fr   r   new_compilel   s@   
$z._wrap_state_graph_compile.<locals>.new_compiler   )rY   rZ   r   rX   r   r   j   s   (r   c                    rC   )Nc                    s:  t  t}|d u r | g|R i |S t| }|r#d|  nd}t jtj|tj	dd}|r@|
tj| |
tj| |
tjd d }t|dkrxt rx|jrxt|d }|rxt|}t  }	t|||	}
|
d urxt|tj|
dd  | g|R i |}t|||| |W  d    S 1 sw   Y  d S Nzinvoke_agent Zinvoke_agent)rD   r'   r%   r   FunpackrK   rL   rM   r   r/   striprN   r   ZGEN_AI_INVOKE_AGENTr%   rO   r   ZGEN_AI_PIPELINE_NAMErQ   rP   lenr   r   rB   r	   Zget_current_scoper
   r   ZGEN_AI_REQUEST_MESSAGES_set_response_attributesr   rT   rU   rV   r(   Z	span_namerW   input_messagesZnormalized_input_messagesscopeZmessages_dataresultrX   r   r   
new_invoke   sP   $z'_wrap_pregel_invoke.<locals>.new_invoker   )rY   rf   r   rX   r   r      s   2r   c                    rC   )Nc                    sH  t  t}|d u r | g|R i |I d H S t| }|r'd|  nd}t jtj|tj	dg}|rD|
tj| |
tj| |
tjd d }t|dkr|t r||jr|t|d }|r|t|}t  }	t|||	}
|
d ur|t|tj|
dd  | g|R i |I d H }t|||| |W  d    S 1 sw   Y  d S r[   r^   rb   rX   r   r   new_ainvoke   sR   $z)_wrap_pregel_ainvoke.<locals>.new_ainvoker   )rY   rg   r   rX   r   r      s   1r   c                 C   s@   |sdS | s|S t | }t ||kr||d ng }|r|S dS )z;Extract only the new messages added during this invocation.N)r`   )rc   Zoutput_messagesZinput_countnew_messagesr   r   r   _get_new_messages	  s   ri   c                 C   sV   | sd S t | D ] }t|tr(|d}|dv r(|d}|r(t|tr(|  S qd S )Nr2   )Z	assistantZair0   )reversedr+   r:   r9   r,   )r8   r4   r2   r0   r   r   r   _extract_llm_response_text  s   


rk   c                 C   sN   | sd S g }| D ]}t |tr |d}|r t |tr || q|r%|S d S )Nr3   )r+   r:   r9   r=   extend)r8   r3   r4   Zmsg_tool_callsr   r   r   _extract_tool_calls+  s   


rm   c                 C   s   t  r|jsd S t|}t||}t|}|rt| tj| n|r)t| tj| nt| tj| t|}|rCt| tj	t
|dd d S d S )NFr\   )r   r   rB   ri   rk   r   r   ZGEN_AI_RESPONSE_TEXTrm   ZGEN_AI_RESPONSE_TOOL_CALLSr   )rW   rc   re   rV   Zparsed_response_messagesrh   Zllm_response_textr3   r   r   r   ra   :  s&   

ra   )&	functoolsr   typingr   r   r   r   rK   Zsentry_sdk.ai.utilsr   r	   r
   Zsentry_sdk.constsr   r   Zsentry_sdk.integrationsr   r   Zsentry_sdk.scoper   Zsentry_sdk.utilsr   Zlanggraph.graphr   Zlanggraph.pregelr   ImportErrorr   r/   r7   rB   r   r   r   ri   rk   rm   ra   r   r   r   r   <module>   s2    
 .98