o
    h+                     @   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	 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yQ   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)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 )
LanggraphIntegration	langgraphzauto.ai.Tc                 C   s
   || _ d S )N)include_prompts)selfr    r   c/var/www/html/pro-man-master/venv/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_name,   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)roler/   )r&   
tool_callsfunction_calltool_call_id)r   r)   r/   )messageparsedr-   valuer   r   r   _normalize_langgraph_message6   s   


r8   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*   dictr:   r   r9   callable	Exceptionlisttupler8   append)stater9   normalized_messagesr5   
normalizedr   r   r   _parse_langgraph_messagesF   s4   


rD   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&   create_agentzcreate_agent model	get_graphnodestoolsdatatools_by_name)
sentry_sdk
get_clientget_integrationr   
start_spanr	   GEN_AI_CREATE_AGENTr$   r)   set_datar
   GEN_AI_OPERATION_NAMEGEN_AI_AGENT_NAMEdescriptionr:   GEN_AI_REQUEST_MODELr<   rI   r*   r;   r   r>   rM   keysGEN_AI_REQUEST_AVAILABLE_TOOLS)r   argskwargsintegrationspancompiled_graphcompiled_graph_namerK   rI   r,   rJ   
tools_noderL   fr   r   new_compileh   s@   
$z._wrap_state_graph_compile.<locals>.new_compiler   )rb   rc   r   ra   r   r   f   s   (r   c                    rE   )Nc           	         s  t  t}|d u r | g|R i |S t| }|r#d|  nd}t jtj|tj	dR}|r@|
tj| |
tj| |
tjd d }t|dkrft rf|jrft|d }|rft|tj|dd  | g|R i |}t|||| |W  d    S 1 sw   Y  d S Nzinvoke_agent invoke_agent)rF   r&   r$   r   FunpackrN   rO   rP   r   r.   striprQ   r	   GEN_AI_INVOKE_AGENTr$   rS   r
   GEN_AI_PIPELINE_NAMErU   rT   lenr   r   rD   r   GEN_AI_REQUEST_MESSAGES_set_response_attributes	r   rZ   r[   r\   r'   	span_namer]   input_messagesresultra   r   r   
new_invoke   sD   $z'_wrap_pregel_invoke.<locals>.new_invoker   )rb   rs   r   ra   r   r      s   ,r   c                    rE   )Nc           	         s$  t  t}|d u r | g|R i |I d H S t| }|r'd|  nd}t jtj|tj	dU}|rD|
tj| |
tj| |
tjd d }t|dkrjt rj|jrjt|d }|rjt|tj|dd  | g|R i |I d H }t|||| |W  d    S 1 sw   Y  d S rd   rh   ro   ra   r   r   new_ainvoke   sF   $z)_wrap_pregel_ainvoke.<locals>.new_ainvoker   )rb   rt   r   ra   r   r      s   +r   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)rl   )rq   output_messagesinput_countnew_messagesr   r   r   _get_new_messages   s   rx   c                 C   sV   | sd S t | D ] }t|tr(|d}|dv r(|d}|r(t|tr(|  S qd S )Nr1   )	assistantair/   )reversedr*   r;   r:   r+   )r9   r5   r1   r/   r   r   r   _extract_llm_response_text  s   


r|   c                 C   sN   | sd S g }| D ]}t |tr |d}|r t |tr || q|r%|S d S )Nr2   )r*   r;   r:   r>   extend)r9   r2   r5   msg_tool_callsr   r   r   _extract_tool_calls  s   


r   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 )NFrf   )r   r   rD   rx   r|   r   r
   GEN_AI_RESPONSE_TEXTr   GEN_AI_RESPONSE_TOOL_CALLSr   )r]   rq   rr   r\   parsed_response_messagesrw   llm_response_textr2   r   r   r   rn   *  s&   

rn   )$	functoolsr   typingr   r   r   r   rN   sentry_sdk.ai.utilsr   sentry_sdk.constsr	   r
   sentry_sdk.integrationsr   r   sentry_sdk.scoper   sentry_sdk.utilsr   langgraph.graphr   langgraph.pregelr   ImportErrorr   r.   r8   rD   r   r   r   rx   r|   r   rn   r   r   r   r   <module>   s2    
 .32