
    \j3                     N   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  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#d dZ$d!dZ%d!dZ&	 	 	 	 	 	 	 	 	 	 d"dZ'y# e$ r	  ed      w xY w)#    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                   B    e Zd ZdZde Zd	dd deddfdZed
d       Zy)LanggraphIntegration	langgraphzauto.ai.selfinclude_promptsreturnNc                     || _         y )N)r   )r   r   s     K/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/langgraph.py__init__zLanggraphIntegration.__init__   s
    .    c                     t        t        j                        t        _        t        t        d      r"t        t        j                        t        _        t        t        d      r#t        t        j                        t        _        y y )Ninvokeainvoke)	_wrap_state_graph_compiler   compilehasattrr   _wrap_pregel_invoker   _wrap_pregel_ainvoker     r   r   
setup_oncezLanggraphIntegration.setup_once   sP     7z7I7IJ
68$/>FM69%1&..AFN &r   )T)r   N)	__name__
__module____qualname__
identifieroriginboolr   staticmethodr'   r&   r   r   r   r      sE    J
|$F/- / /PT / B Br   r   c                 r    dD ]2  }t        | |      st        | |      }|st        |t              s0|c S  y )N)name
graph_namer(   _name)r#   getattr
isinstancestr)	graph_objattrr0   s      r   _get_graph_namer8   .   s=    ; 9d#9d+D
4-	
 r   c                     t        | d      sy t        | dd       | j                  d}dD ]#  }t        | |      st        | |      }||||<   % |S )Ncontenttype)roler:   )r0   
tool_callsfunction_calltool_call_idresponse_metadata)r#   r3   r:   )messageparsedr7   values       r   _normalize_langgraph_messagerD   7   se    7I&gvt4QF 
% 7D!GT*E $t
% Mr   c                    | sy d }t        | t              r| j                  d      }nLt        | d      r| j                  }n3t        | d      r't        | j                        r	 | j                  d      }|rt        |t        t        f      sy g }|D ]!  }	 t        |      }|r|j                  |       # |r|S d S # t        $ r Y Rw xY w# t        $ r Y Dw xY w)Nmessagesget)r4   dictrG   r#   rF   callable	ExceptionlisttuplerD   append)staterF   normalized_messagesrA   
normalizeds        r   _parse_langgraph_messagesrQ   L   s    H%99Z(	
	#>>		8EII#6	yy,H :hu> 	5g>J#**:6	 #6?4?  		  		s$   #B; C
;	CC
	CCc                 0     t               d fd       }|S )Nc                    t        j                         j                  t              }| | g|i |S t        j                  t
        j                  t        j                        5 } | g|i |}t        |dd       }|j                  t        j                  d       |j                  t        j                  |       |rd| |_        nd|_        |j                  dd       /|j                  t        j                  |j                  d             d }t        |dd       }|rt!        |      r|j#                         }	t        |	dd       }
|
rat%        |
t&              rQ|
j                  d      }|r>t        |d	d       }|r/t)        |d
      r#t+        |j,                  j/                               }| |j                  t        j0                  |       |cd d d        S # 1 sw Y   y xY w)N)opr,   r0   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,   r3   set_datar   GEN_AI_OPERATION_NAMEGEN_AI_AGENT_NAMEdescriptionrG   GEN_AI_REQUEST_MODELrI   rW   r4   rH   r#   rK   r[   keysGEN_AI_REQUEST_AVAILABLE_TOOLS)r   argskwargsintegrationspancompiled_graphcompiled_graph_namerY   rW   r6   rX   
tools_noderZ   fs                r   new_compilez._wrap_state_graph_compile.<locals>.new_compilel   s    ++-==>RST+D+F++""%%'..
 !	" t5d5f5N").&$"GMM(88.IMM(446IJ"%23F2G#H #1 zz'4(4h;;VZZ=PQETBIXi0*446		7D9Zt4!&7!3J!&z64@GD/$B$(););)@)@)B$CE hEEuM!C!	" !	" !	"s   *E.G""G+r   r   rh   r   ri   r   r   r   r   )ro   rp   s   ` r   r!   r!   k   s"    
1X%" %"N r   c                 0     t               d fd       }|S )Nc                 D   t        j                         j                  t              }| | g|i |S t	        |       }|rd| j                         nd}t        j                  t        j                  |t        j                        5 }|r@|j                  t        j                  |       |j                  t        j                  |       |j                  t        j                  d       d }t        |      dkD  rqt!               rg|j"                  r[t%        |d         }|rKt'        |      }t        j(                         }	t+        |||	      }
|
t-        |t        j.                  |
d        | g|i |}t1        ||||       |cd d d        S # 1 sw Y   y xY wNzinvoke_agent invoke_agent)rT   r0   r,   r   Funpackr\   r]   r^   r   r8   stripr_   r   GEN_AI_INVOKE_AGENTr,   ra   r   GEN_AI_PIPELINE_NAMErc   rb   lenr   r   rQ   r
   get_current_scoper   r	   GEN_AI_REQUEST_MESSAGES_set_response_attributesr   rh   ri   rj   r1   	span_namerk   input_messagesnormalized_input_messagesscopemessages_dataresultro   s               r   
new_invokez'_wrap_pregel_invoke.<locals>.new_invoke   s    ++-==>RST+D+F++$T*
4>mJ<(..0N 	 ""%%'..
 %	 h;;ZHh88*EMM(88.I "ND	A+-//!:47!C!0G0W-&88:E$B14%M %0+ $<<)#(	 t-d-f-F$T>6;OK%	 %	 %	s   C?FFrq   r   )ro   r   s   ` r   r$   r$      s"    
1X/ /b r   c                 0     t               d fd       }|S )Nc                 v  K   t        j                         j                  t              }| | g|i | d {   S t	        |       }|rd| j                         nd}t        j                  t        j                  |t        j                        5 }|r@|j                  t        j                  |       |j                  t        j                  |       |j                  t        j                  d       d }t        |      dkD  rqt!               rg|j"                  r[t%        |d         }|rKt'        |      }t        j(                         }	t+        |||	      }
|
t-        |t        j.                  |
d        | g|i | d {   }t1        ||||       |cd d d        S 7 l7  # 1 sw Y   y xY wwrt   rx   r   s               r   new_ainvokez)_wrap_pregel_ainvoke.<locals>.new_ainvoke   s     ++-==>RS41$1&111$T*
4>mJ<(..0N 	 ""%%'..
 $	 h;;ZHh88*EMM(88.I!ND	A+-//!:47!C!0G0W-&88:E$B14%M %0+ $<<)#(	 T3D3F33F$T>6;OI$	 $	 2N 4A$	 $	s;   9F9F(AF9C3F-
F+F-F9+F--F62F9rq   r   )ro   r   s   ` r   r%   r%      s"    
1X. .` r   c                 \    |sy| s|S t        |       }t        |      |kD  r||d ng }|r|S dS )z;Extract only the new messages added during this invocation.N)r|   )r   output_messagesinput_countnew_messagess       r   _get_new_messagesr     sL      n%K),_)=)K%QS  (<1T1r   c                     | sy t        |       D ]Q  }t        |t              s|j                  d      }|dv s*|j                  d      }|s>t        |t              sO|c S  y )Nr<   )	assistantair:   )reversedr4   rH   rG   r5   )rF   rA   r<   r:   s       r   _extract_llm_response_textr     sa    H% #gt$;;v&D**!++i0z'37"N# r   c                     | sy g }| D ]I  }t        |t              s|j                  d      }|s(t        |t              s9|j	                  |       K |r|S d S )Nr=   )r4   rH   rG   rK   extend)rF   r=   rA   msg_tool_callss       r   _extract_tool_callsr   $  s]    J 2gt$$[[6N*^T"B!!.1	2 $:--r   c                    d}d}d}|D ]  }|j                  d      }||j                  d      }|s+|t        |j                  dd            z  }|t        |j                  dd            z  }|t        |j                  dd            z  } |dkD  r | j                  t        j                  |       |dkD  r | j                  t        j
                  |       |dkD  r!| j                  t        j                  |       y y )Nr   r@   token_usageprompt_tokenscompletion_tokenstotal_tokens)rG   intra   r   GEN_AI_USAGE_INPUT_TOKENSGEN_AI_USAGE_OUTPUT_TOKENSGEN_AI_USAGE_TOTAL_TOKENS)rk   rF   input_tokensoutput_tokensr   rA   r@   r   s           r   _set_usage_datar   2  s    LML @#KK(;<$'++M:KOOOQ?@@[__-@!DEEKOONA>??@ ah88,Gqh99=Ia..	
 r   c                     t        |      dk(  ry |d   }|j                  d      }|y |j                  d      }|y t        | t        j                  |       y )Nr   r@   
model_name)r|   rG   r	   r   GEN_AI_RESPONSE_MODEL)rk   rF   last_messager@   r   s        r   _set_response_model_namer   Q  s`    
8}B<L$(()<= "&&|4Jh<<jIr   c                    t        |      }t        ||      }|y t        | |       t        | |       t	               r|j
                  sy t        |      }|rt        | t        j                  |       n9|rt        | t        j                  |       nt        | t        j                  |       t        |      }|r't        | t        j                  t        |      d       y y )NFrv   )rQ   r   r   r   r   r   r   r	   r   GEN_AI_RESPONSE_TEXTr   GEN_AI_RESPONSE_TOOL_CALLSr   )rk   r   r   rj   parsed_response_messagesr   llm_response_textr=   s           r   r   r   a  s      9@$^5MNLD,'T<0#%+*E*E2<@D("?"?ARS	D("?"?ND("?"?H$\2J//:&		
 r   )r6   r   r   Optional[str])rA   r   r   r   )rN   r   r   Optional[List[Any]])ro   Callable[..., Any]r   r   )r   r   r   r   r   r   )rF   r   r   r   )rF   r   r   r   )rk   zsentry_sdk.tracing.SpanrF   r   r   N)
rk   r   r   r   r   r   rj   r   r   N)(	functoolsr   typingr   r   r   r   r\   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   r8   rD   rQ   r!   r$   r%   r   r   r   r   r   r   r&   r   r   <module>r      s     0 0  
 + = 4 +2*'
B; B.*@>)X3l2j2)2<Q22&.
>J !

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

 
!
]
  2
0
112s   B B$