
    tni3                     ^   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 	 d d	lmZ d d
lmZ n# e$ r  ed          w xY w G 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#d0d"Z$d1d%Z%d1d&Z&	 	 	 	 	 	 	 	 	 	 d2d)Z'dS )3    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                   J    e Zd ZdZde Zd
dd deddfdZedd	            ZdS )LanggraphIntegration	langgraphzauto.ai.Tselfinclude_promptsreturnNc                     || _         d S )N)r   )r   r   s     ^/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/langgraph.py__init__zLanggraphIntegration.__init__   s    .    c                  0   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   
setup_oncezLanggraphIntegration.setup_once   sn     7z7IJJ
68$$ 	?/>>FM69%% 	B1&.AAFNNN	B 	Br   )T)r   N)	__name__
__module____qualname__
identifieroriginboolr   staticmethodr'   r&   r   r   r   r      s|        J$
$$F/ /- / /PT / / / / B B B \B B Br   r   	graph_objr   r   Optional[str]c                     dD ]=}t          | |          r+t          | |          }|rt          |t                    r|c S >d S )N)name
graph_namer(   _name)r#   getattr
isinstancestr)r/   attrr2   s      r   _get_graph_namer9   .   sZ    ;  9d## 	9d++D 
4-- 4r   messagec                     t          | d          sd S t          | dd           | j        d}dD ])}t          | |          rt          | |          }||||<   *|S )Ncontenttype)roler<   )r2   
tool_callsfunction_calltool_call_idresponse_metadata)r#   r5   r<   )r:   parsedr8   values       r   _normalize_langgraph_messagerE   7   s}    7I&& tgvt44QQF 
% 
% 7D!! 	%GT**E $tMr   stateOptional[List[Any]]c                    | sd S d }t          | t                    r|                     d          }nct          | d          r| j        }nKt          | d          r;t          | j                  r'	 |                     d          }n# t          $ r Y nw xY w|rt          |t          t          f          sd S g }|D ]9}	 t          |          }|r|
                    |           *# t          $ r Y 6w xY w|r|nd S )Nmessagesget)r6   dictrJ   r#   rI   callable	ExceptionlisttuplerE   append)rF   rI   normalized_messagesr:   
normalizeds        r   _parse_langgraph_messagesrS   L   sJ    tH% 99Z((	
	#	# >			 8EI#6#6 	yy,,HH 	 	 	D	  :hu>> t  	5g>>J 7#**:666 	 	 	H	 #6?4?s$   /B 
BB<&C##
C0/C0fCallable[..., Any]c                 >     t                     d fd            }|S )Nr   r   argskwargsr   c                 :   t          j                                        t                    }| | g|R i |S t          j        t
          j        t          j                  5 } | g|R i |}t          |dd           }|	                    t          j        d           |	                    t          j        |           |rd| |_        nd|_        |                    dd           3|	                    t          j        |                    d                     d }t          |dd           }|rt!          |          r|                                }	t          |	dd           }
|
rut%          |
t&                    r`|
                    d          }|rIt          |d	d           }|r6t)          |d
          r&t+          |j                                                  }| |	                    t          j        |           |cd d d            S # 1 swxY w Y   d S )N)opr,   r2   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,   r5   set_datar   GEN_AI_OPERATION_NAMEGEN_AI_AGENT_NAMEdescriptionrJ   GEN_AI_REQUEST_MODELrL   r]   r6   rK   r#   rN   ra   keysGEN_AI_REQUEST_AVAILABLE_TOOLS)r   rW   rX   integrationspancompiled_graphcompiled_graph_namer_   r]   r/   r^   
tools_noder`   rT   s                r   new_compilez._wrap_state_graph_compile.<locals>.new_compilel   sx    +--==>RSS1T+D+++F+++"%'.
 
 
 !	" Qt5d555f55N").&$"G"GMM(8.IIIMM(46IJJJ" 2#H3F#H#H  #1 zz'4((4h;VZZ=P=PQQQETBBI DXi00 D*4466		7D99 DZt44 D!&7!3!3J! D&z64@@ DGD/$B$B D$();)@)@)B)B$C$CE hEuMMM!C!	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	" !	"s   %FHHHr   r   rW   r   rX   r   r   r   r   )rT   rs   s   ` r   r!   r!   k   s:    
1XX%" %" %" %" %" X%"N r   c                 >     t                     d fd            }|S )Nr   r   rW   rX   r   c                 ~   t          j                                        t                    }| | g|R i |S t	          |           }|rd|                                 nd}t          j        t          j        |t          j	                  5 }|r@|
                    t          j        |           |
                    t          j        |           |
                    t          j        d           d }t          |          dk    r~t!                      rp|j        rit%          |d                   }|rRt'          |          }t          j                    }	t+          |||	          }
|
t-          |t          j        |
d            | g|R i |}t1          ||||           |cd d d            S # 1 swxY w Y   d S Nzinvoke_agent invoke_agent)rZ   r2   r,   r   Funpackrb   rc   rd   r   r9   stripre   r   GEN_AI_INVOKE_AGENTr,   rg   r   GEN_AI_PIPELINE_NAMEri   rh   lenr   r   rS   r
   get_current_scoper   r	   GEN_AI_REQUEST_MESSAGES_set_response_attributesr   rW   rX   rn   r3   	span_namero   input_messagesnormalized_input_messagesscopemessages_dataresultrT   s               r   
new_invokez'_wrap_pregel_invoke.<locals>.new_invoke   s8    +--==>RSS1T+D+++F+++$T**
4>R(J((..000N 	 "%'.
 
 
 %	  Fh;ZHHHh8*EEEMM(8.III "ND		A+-- /  ";47!C!C! 0G0W0W-&8::E$B14% %M %0+ $<)#(	    Qt-d---f--F$T>6;OOOK%	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	 %	s   DF22F69F6rt   r   )rT   r   s   ` r   r$   r$      s:    
1XX/ / / / / X/b r   c                 >     t                     d fd            }|S )Nr   r   rW   rX   r   c                   K   t          j                                        t                    }| | g|R i | d {V S t	          |           }|rd|                                 nd}t          j        t          j        |t          j	                  5 }|r@|
                    t          j        |           |
                    t          j        |           |
                    t          j        d           d }t          |          dk    r~t!                      rp|j        rit%          |d                   }|rRt'          |          }t          j                    }	t+          |||	          }
|
t-          |t          j        |
d            | g|R i | d {V }t1          ||||           |cd d d            S # 1 swxY w Y   d S rw   r{   r   s               r   new_ainvokez)_wrap_pregel_ainvoke.<locals>.new_ainvoke   s^      +--==>RSS41$111&111111111$T**
4>R(J((..000N 	 "%'.
 
 
 $	  Fh;ZHHHh8*EEEMM(8.III!ND		A+-- /  ";47!C!C! 0G0W0W-&8::E$B14% %M %0+ $<)#(	    1T3D333F33333333F$T>6;OOOI$	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	 $	s   DG  GGrt   r   )rT   r   s   ` r   r%   r%      s:    
1XX. . . . . X.` r   r   output_messagesc                 z    |sdS | s|S t          |           }t          |          |k    r
||d         ng }|r|ndS )z;Extract only the new messages added during this invocation.N)r   )r   r   input_countnew_messagess       r   _get_new_messagesr     sh      t  n%%K),_)=)=)K)K%%QS  (1<<T1r   rI   c                     | sd S t          |           D ]`}t          |t                    rI|                    d          }|dv r0|                    d          }|rt          |t                    r|c S ad S )Nr>   )	assistantair<   )reversedr6   rK   rJ   r7   )rI   r:   r>   r<   s       r   _extract_llm_response_textr     s     tH%% # #gt$$ 	#;;v&&D***!++i00 #z'377 #"NNN4r   c                     | sd S g }| D ]X}t          |t                    rA|                    d          }|r*t          |t                    r|                    |           Y|r|nd S )Nr?   )r6   rK   rJ   rN   extend)rI   r?   r:   msg_tool_callss       r   _extract_tool_callsr   $  s     tJ 2 2gt$$ 	2$[[66N 2*^T"B"B 2!!.111#-::-r   ro   sentry_sdk.tracing.Spanc                 H   d}d}d}|D ]}|                     d          }||                     d          }|s2|t          |                     dd                    z  }|t          |                     dd                    z  }|t          |                     dd                    z  }|dk    r |                     t          j        |           |dk    r |                     t          j        |           |dk    r"|                     t          j        |           d S d S )Nr   rB   token_usageprompt_tokenscompletion_tokenstotal_tokens)rJ   intrg   r   GEN_AI_USAGE_INPUT_TOKENSGEN_AI_USAGE_OUTPUT_TOKENSGEN_AI_USAGE_TOTAL_TOKENS)ro   rI   input_tokensoutput_tokensr   r:   rB   r   s           r   _set_usage_datar   2  s?   LML @ @#KK(;<<$'++M:: 	KOOOQ??@@@[__-@!DDEEEKOONA>>???ah8,GGGqh9=IIIa.	
 	
 	
 	
 	
 r   c                     t          |          dk    rd S |d         }|                    d          }|d S |                    d          }|d S t          | t          j        |           d S )Nr   rB   
model_name)r   rJ   r	   r   GEN_AI_RESPONSE_MODEL)ro   rI   last_messagerB   r   s        r   _set_response_model_namer   Q  sz    
8}}B<L$(()<== "&&|44Jh<jIIIIIr   r   rn   c                     t          |          }t          ||          }|d S t          | |           t          | |           t	                      r|j        sd S t          |          }|rt          | t          j	        |           n9|rt          | t          j	        |           nt          | t          j	        |           t          |          }|r,t          | t          j        t          |          d           d S d S )NFry   )rS   r   r   r   r   r   r   r	   r   GEN_AI_RESPONSE_TEXTr   GEN_AI_RESPONSE_TOOL_CALLSr   )ro   r   r   rn   parsed_response_messagesr   llm_response_textr?   s           r   r   r   a  s'     9@@$^5MNNLD,'''T<000#%% +*E 2<@@ ID("?ARSSSS	 ID("?NNNND("?HHH$\22J 
/:&&		
 	
 	
 	
 	
 	

 
r   )r/   r   r   r0   )r:   r   r   r   )rF   r   r   rG   )rT   rU   r   rU   )r   rG   r   rG   r   rG   )rI   rG   r   r0   )rI   rG   r   rG   )ro   r   rI   r   r   N)
ro   r   r   rG   r   r   rn   r   r   N)(	functoolsr   typingr   r   r   r   rb   sentry_sdk.ai.utilsr	   r
   r   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r   sentry_sdk.scoper   sentry_sdk.utilsr   langgraph.graphr   langgraph.pregelr   ImportErrorr   r9   rE   rS   r!   r$   r%   r   r   r   r   r   r   r&   r   r   <module>r      s         0 0 0 0 0 0 0 0 0 0 0 0             
 + * * * * * * * = = = = = = = = 4 4 4 4 4 4 + + + + + +2******''''''' 2 2 2
,0
1
112B B B B B; B B B.      *@ @ @ @>) ) ) )X3 3 3 3l2 2 2 2j2)2<Q22 2 2 2&   . . . .
 
 
 
>J J J J !

!
)!
 !
 (	!

 
!
 !
 !
 !
 !
 !
s   A A