
    gh-                        S SK Jr  S SKrS SKJr  S SKrS SKJr  S SKJ	r	  S SK
JrJr  S SKJrJrJr  S SKJr  S S	KJrJrJrJr    S S
KJr  S SKJrJr  \(       a  S SKJr  \(       a  S SKJ r J!r!J"r"  S SK#J$r$   " S S\5      r%S r&S r'S r(S r) SS jr*S r+S r,S r-g! \ a    Sr N]f = f! \ a	    \" S5      ef = f)    wrapsN)TYPE_CHECKING)record_token_usage)set_data_normalized)OPSPANDATA)_check_minimum_versionDidNotEnableIntegration)should_send_default_pii)capture_internal_exceptionsevent_from_exceptionpackage_versionsafe_serialize)	NOT_GIVEN)AsyncMessagesMessages)MessageStreamEventzAnthropic not installed)AnyAsyncIteratorIterator)Spanc                   <    \ rS rSrSrS\ 3rSS jr\S 5       rSr	g)	AnthropicIntegration$   	anthropiczauto.ai.c                     Xl         g Ninclude_prompts)selfr!   s     d/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/anthropic.py__init__AnthropicIntegration.__init__(   s    .    c                      [        S5      n [        [        U 5        [        [        R
                  5      [        l        [        [        R
                  5      [        l        g )Nr   )r   r
   r   _wrap_message_creater   create_wrap_message_create_asyncr   )versions    r#   
setup_onceAnthropicIntegration.setup_once,   s<     "+.3W=.x?9-:N:NOr&   r    N)T)
__name__
__module____qualname____firstlineno__
identifieroriginr$   staticmethodr,   __static_attributes__ r&   r#   r   r   $   s.    J
|$F/ P Pr&   r   c                     [        U [        R                  " 5       R                  SSS.S9u  p[        R                  " XS9  g )Nr   F)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)exceventr<   s      r#   _capture_exceptionrC   6   s;    &!,,.66&59KE
 U.r&   c                 :   SnSn[        U S5      (       a  U R                  n[        US5      (       a+  [        UR                  [        5      (       a  UR                  n[        US5      (       a+  [        UR
                  [        5      (       a  UR
                  nX4$ )z.
Get token usage from the Anthropic response.
r   usageinput_tokensoutput_tokens)hasattrrE   
isinstancerF   intrG   )resultrF   rG   rE   s       r#   _get_token_usagerL   @   s    
 LMvw5.))j9K9KS.Q.Q --L5/**z%:M:Ms/S/S!//M&&r&   c                    [        5          [        U S5      (       Ga>  U R                  S:X  aR  U R                  R                  nX%R
                  -  nX5R                  -  nU R                  R                  =(       d    UnOU R                  S:X  a  OU R                  S:X  a  [        U R                  S5      (       a&  UR                  U R                  R                  5        Oz[        U R                  S5      (       a%  UR                  U R                  R                  5        O9U R                  S:X  a  O(U R                  S:X  a  X0R                  R                  -  nS	S	S	5        XX44$ ! , (       d  f       N= f)
zd
Collect model information, token usage, and collect content blocks from the AI streaming response.
r8   message_startcontent_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_deltaN)r   rH   r8   messagerE   rF   rG   modeldeltaappendrQ   rR   )rB   rV   rF   rG   content_blocksrE   s         r#   _collect_ai_datarZ   Q   s   
 
%	&5&!!zz_,++ 2 22!4!44++4u44445;;//"))%++*:*:;U[[.99"))%++*B*BC33.!:!::# 
'& ==' 
'	&s   EE((
E6c                    UR                  S5      nUbS  [        U5      S:  aD  [        5       (       a5  UR                  (       a$  [	        U [
        R                  [        U5      5        [	        U [
        R                  UR                  SS5      5        [
        R                  [
        R                  [
        R                  [
        R                  [
        R                  S.nUR                  5        H2  u  pVUR                  U5      nU[        Ld  M!  Uc  M&  [	        XU5        M4     UR                  S5      nU[        La9  Ub5  [        U5      S:  a%  [	        U [
        R                   [        U5      5        gggg)zi
Set input data for the span based on the provided keyword arguments for the anthropic message creation.
messagesNr   streamF)
max_tokensrV   temperaturetop_ktop_ptools)getlenr   r!   r   r	   GEN_AI_REQUEST_MESSAGESr   GEN_AI_RESPONSE_STREAMINGGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_MODELGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_KGEN_AI_REQUEST_TOP_Pitemsr   GEN_AI_REQUEST_AVAILABLE_TOOLS)	spankwargsintegrationr\   kwargs_keys_to_attributeskey	attributevaluerb   s	            r#   _set_input_dataru   l   s1   
 zz*%HMA#%%''(22N84L	
 h00&**Xu2M
 88..::....! 499;

3	!e&77 < JJwEI%"3E
Q(99>%;P	
 9G"3r&   c                 ,   U R                  [        R                  U5        [        5       (       a?  UR                  (       a.  [        U [        R                  [        R                  " U5      SS9  [        U UUS9  U(       a  U R                  SSS5        gg)z7
Set output data for the span based on the AI response.F)unpack)rF   rG   N)set_datar	   GEN_AI_RESPONSE_MODELr   r!   r   GEN_AI_RESPONSE_TEXTjsondumpsr   __exit__rn   rp   rV   rF   rG   rY   finish_spans          r#   _set_output_datar      sy     	MM(00%8  [%@%@))JJ~&		
 !# dD$' r&   c              /     ^^^#    UR                  S5      mTc  U " U0 UD6$ SU;  a  U " U0 UD6$  [        US   5        UR                  SS5      n[        R
                  " [        R                  SU 3R                  5       [        R                  S9mTR                  5         [        TUT5        XU4v n[        5          [        US5      (       a  [        U5      u  pV/ nUR                    H  n[        US5      (       a!  UR#                  UR%                  5       5        M5  [        US	5      (       a!  UR#                  UR'                  5       5        Mg  [        US
5      (       d  Mz  UR#                  S
UR(                  S.5        M     [+        TT[-        USS 5      UUUSS9  O[        US5      (       aX  UR.                  mUUU4S jn	UUU4S jn
[1        [3        UR.                  5      5      S:X  a  U
" 5       Ul        O2U	" 5       Ul        O%TR5                  SS5        TR7                  S S S 5        S S S 5        U$ ! [         a    U " U0 UD6s $ f = f! , (       d  f       U$ = f7f)Nrp   r\   rV    zchat )opnamer3   contentto_dict
model_dumprQ   )r8   rQ   Tr~   	_iteratorc            
   3      >#    S n SnSn/ nT H  n[        X@XU5      u  pp#Uv   M     [        TTU UUSR                  U5      SS./SS9  g 7fNr   r   rQ   )rQ   r8   Tr~   rZ   r   joinrV   rF   rG   rY   rB   rp   old_iteratorrn   s        r#   new_iterator3_sentry_patched_create_common.<locals>.new_iterator   st       !!#)E(!,~ GE
  K * ! +!-"/-/WW^-Df$U#V $s   A	Ac            
        >#    S n SnSn/ nT  S h  vN n[        X@XU5      u  pp#U7v   M    N
 [        TTU UUSR                  U5      SS./SS9  g 7fr   r   r   s        r#   new_iterator_async9_sentry_patched_create_common.<locals>.new_iterator_async  s{       !!##/  %(!,~ GE
  K < ! +!-"/-/WW^-Df$U#V $s   A0.0A0$Az<class 'async_generator'>unknown_response)popiter	TypeErrorrc   r=   
start_spanr   GEN_AI_CHATstripr   r3   	__enter__ru   r   rH   rL   r   rX   r   r   rQ   r   getattrr   strr8   rx   r}   )fargsro   rV   rK   rF   rG   rY   content_blockr   r   rp   r   rn   s              @@@r#   _sentry_patched_create_commonr      s:    **]+K$!&!!$!&!!"VJ  JJw#E  >>UG_""$#**D
 	NND&+.F?"F	$	&69%%*:6*B'LN!'=)44"))-*?*?*AB]L99"))-*B*B*DE]F33"))6=CUCU*VW "0 'fgt4)+-  V[))!++L22 4(()*.II#5#7 #/>  MM,d3MM$d+i 
'l MM  "$!&!!"  
'	&l MsH   +I'H= BI'B#I(CI3
I'=II'II'
I$I'c                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 @   [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6nUR                  U5      $ ! [         a  nUR                  s S nA$ S nAff = f! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = fr   r   nextStopIterationrt   	ExceptionrC   sendr   r   ro   generK   rA   s          r#   _execute_sync+_wrap_message_create.<locals>._execute_sync+  s    +A???	"3iOAV		$D+F+
 88F##  	77N	  $"3't#$
  	77N	sU   : A A= 
AAAA
A:'A55A::A= =
BBBBc                  t   > [         R                  " 5       R                  [        5      nX!S'   T" T/U Q70 UD6$ Nrp   r=   r>   get_integrationr   )r   ro   rp   r   r   s      r#   _sentry_patched_create_sync9_wrap_message_create.<locals>._sentry_patched_create_sync?  s<     !++-==>RS +}Q0000r&   r   )r   r   r   s   ` @r#   r(   r(   )  s(    ( 1X1 1 '&r&   c                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 n  #    [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6I S h  vN nUR                  U5      $ ! [         a  nUR                  I S h  vN  s S nA$ S nAff = f NA! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = f7fr   r   r   s          r#   _execute_async2_wrap_message_create_async.<locals>._execute_asyncL  s     +A???	!"3iOAV		$ $1&11
 88F##  	!== 	!
 2 $"3't#$
  	77N	s   B5A A2 A0A2 B B5
A-A(A A("A-#B5(A--B50A2 2
B<B

BB 
B2B-'B2(B5-B22B5c                     >#    [         R                  " 5       R                  [        5      nX!S'   T" T/U Q70 UD6I S h  vN $  N7fr   r   )r   ro   rp   r   r   s      r#   _sentry_patched_create_async@_wrap_message_create_async.<locals>._sentry_patched_create_async`  sE      !++-==>RS +}#A777777s   <AA Ar   )r   r   r   s   ` @r#   r*   r*   J  s(    ( 1X8 8 ('r&   )F).	functoolsr   r{   typingr   r=   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   sentry_sdk.constsr   r	   sentry_sdk.integrationsr
   r   r   sentry_sdk.scoper   sentry_sdk.utilsr   r   r   r   r   r   ImportErroranthropic.resourcesr   r   anthropic.typesr   r   r   r   sentry_sdk.tracingr   r   rC   rL   rZ   ru   r   r   r(   r*   r6   r&   r#   <module>r      s         7 3 * U U 4 2' <6 33'P; P$/'">6%
^ (Bqh'B(k	  	  2
0
112s*   B  B.  B+(B. *B++B. .B=