
    \je                        d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlZd dl	m
Z
 d dlmZmZmZmZmZmZ d dlmZmZ d dlmZmZmZ d d	lmZ d d
lmZmZmZmZm Z  	 	 d dl!m"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+m,Z,m-Z-m.Z. d dl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 erd dl/m6Z6m7Z7 er,d dlm8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dl/mCZCmDZDmEZEm7Z7mFZF  G d d      ZG G d d      ZH G d de      ZId8dZJd9d ZK	 	 d:	 	 	 	 	 	 	 	 	 	 	 	 	 d;d!ZL	 	 	 	 d<d"ZM	 	 	 	 d=d#ZN	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d$ZO	 	 	 	 	 	 	 	 d?d%ZP	 	 	 	 	 	 d@d&ZQ	 	 	 	 	 	 dAd'ZR	 	 d:	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dBd(ZSdCd)ZT	 	 	 	 	 	 	 	 dCd*ZUdDd+ZVdEd,ZW	 	 	 	 	 	 dFd-ZX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGd.ZY	 	 	 	 dHd/ZZdDd0Z[	 	 	 	 dId1Z\dDd2Z]dDd3Z^dDd4Z_dDd5Z`d6ddeafd7Zby# e#$ r dZ"Y yw xY w# e#$ r dZ$Y w xY w# e#$ r	  ed      w xY w)J    N)Iterablewraps)TYPE_CHECKING)record_token_usage)GEN_AI_ALLOWED_MESSAGE_ROLESset_data_normalizednormalize_message_rolestruncate_and_annotate_messagesget_start_span_function transform_anthropic_content_part)OPSPANDATA)_check_minimum_versionDidNotEnableIntegration)should_send_default_pii)capture_internal_exceptionsevent_from_exceptionpackage_versionsafe_serializereraise)NotGiven)Omit)StreamAsyncStream)AsyncMessagesMessages)MessageStreamManagerMessageStreamAsyncMessageStreamManagerAsyncMessageStream)MessageStartEventMessageDeltaEventMessageStopEventContentBlockStartEventContentBlockDeltaEventContentBlockStopEvent)MessageStreamEventTextBlockParamzAnthropic not installed)AnyAsyncIteratorIteratorOptionalUnionCallable	Awaitable)Span)TextPart)RawMessageStreamEventMessageParam
ModelParamr*   ToolUnionParamc                   F    e Zd ZU dZeed<   dZeed<   dZded<   dZded<   y)_RecordedUsager   output_tokensinput_tokensOptional[int]cache_write_input_tokenscache_read_input_tokensN)	__name__
__module____qualname__r:   int__annotations__r;   r=   r>        K/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/anthropic.pyr9   r9   T   s,    M3L#01o1/0_0rE   r9   c                   H    e Zd ZdZ	 d
dddeddfdZddZ	 	 	 	 	 	 	 	 dd	Zy)_StreamSpanContextz
    Sets accumulated data on the stream's span and finishes the span on exit.
    Is a no-op if the stream has no span set, i.e., when the span has already been finished.
    streamz=Union[Stream, MessageStream, AsyncStream, AsyncMessageStream]guaranteed_streaming_statereturnNc                      || _         || _        y N)_stream_guaranteed_streaming_state)selfrI   rJ   s      rF   __init__z_StreamSpanContext.__init__a   s     +E(rE   c                     | S rM   rD   )rP   s    rF   	__enter__z_StreamSpanContext.__enter__j   s    rE   c           
         t               5  t        | j                  d      s
	 d d d        y | j                  sSt        | j                  d      s=| j                  j                  j                  |||       | j                  `	 d d d        y t        | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  j                         | j                  j                  j                  |||       | j                  `d d d        y # 1 sw Y   y xY w)N_span_model)spanintegrationmodelusagecontent_blocksresponse_idfinish_reason)r   hasattrrN   rO   rU   __exit___set_streaming_output_data_integrationrV   _usage_content_blocks_response_id_finish_reason)rP   exc_typeexc_valexc_tbs       rF   r_   z_StreamSpanContext.__exit__m   s    )* 	#4<<1	# 	# 33Gh= ""++HgvFLL&	# 	# '\\'' LL55ll))ll))#||;; LL55"ll99 LL'''6B"-	# 	# 	#s   E%AE%CE%%E.)F)rK   rH   )rf   zOptional[type[BaseException]]rg   zOptional[BaseException]rh   zOptional[Any]rK   N)r?   r@   rA   __doc__boolrQ   rS   r_   rD   rE   rF   rH   rH   [   sa     ,1	FOF %)	F
 
F#1# +#  	#
 
#rE   rH   c                   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)AnthropicIntegration	anthropiczauto.ai.rP   include_promptsrK   Nc                     || _         y rM   )rn   )rP   rn   s     rF   rQ   zAnthropicIntegration.__init__   s
    .rE   c                  8   t        d      } t        t        |        	 t        t        j
                        t        _        t        t        j                        t        _        t        t        j
                        t        _        t        t        j                        t        _        	 t        t        j                        t        _        t        t         j"                        t         _        t%        t&        t              s"t        t&        j                        t&        _        t)        t        j                        t        _        t+        t,        j.                        t,        _        t%        t0        t              s#t        t0        j                        t0        _        y y )Nrm   )r   r   rl   _wrap_message_creater   create_wrap_closer   close_wrap_message_create_asyncr   _wrap_async_closer   _wrap_message_streamrI   "_wrap_message_stream_manager_enterr   rS   
issubclassr    _wrap_async_message_stream)_wrap_async_message_stream_manager_aenterr!   
__aenter__r"   )versions    rF   
setup_oncezAnthropicIntegration.setup_once   s   !+.3W=	 /x?"6<<09-:N:NO-k.?.?@	 /x?)K ***
& -0"-m.A.A"BM9-:N:NO5)44 	", ,k:'89K9Q9Q'R$ ;rE   )T)rK   N)	r?   r@   rA   
identifieroriginrj   rQ   staticmethodr~   rD   rE   rF   rl   rl      sE    J
|$F/- / /PT / -S -SrE   rl   r+   rK   c                     t        | t        j                         j                  ddd      \  }}t        j                  ||       y )Nrm   F)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)exceventr   s      rF   _capture_exceptionr      s?    &!,,.66&59KE4
 U.rE   c                    d}d}d}d}t        | d      r| j                  }t        |d      r&t        |j                  t              r|j                  }t        |d      r&t        |j
                  t              r|j
                  }t        |d      r&t        |j                  t              r|j                  }t        |d      r&t        |j                  t              r|j                  }|||z   z  }||||fS )z
    Get token usage from the Anthropic response.
    Returns: (input_tokens, output_tokens, cache_read_input_tokens, cache_write_input_tokens)
    r   rZ   r;   r:   r>   cache_creation_input_tokens)r^   rZ   
isinstancer;   rB   r:   r>   r   )resultr;   r:   r>   r=   rZ   s         rF   _get_token_usager      s    
 LM vw5.)j9K9KS.Q --L5/*z%:M:Ms/S!//M534))3:
 ',&C&C#578Z--s>
 (-'H'H$
 +.FFFL 	 	 rE   c                    t               5  t        | d      r| j                  dk(  rn| j                  dk(  rxt        | j                  d      r&|j	                  | j                  j
                         nLt        | j                  d      r6|j	                  | j                  j                         n| j                  dk(  r	 | j                  dk(  r| j                  j                  xs |}| j                  j                  }| j                  j                  }|j                  |_        |j                  |_        t        |dd	      |_        t        |d
d	      |_        |||||fcd	d	d	       S | j                  dk(  r| j                  j                  |_        t        | j                  dd	      }|||_        t        | j                  dd	      }|||_        t        | j                  d
d	      }	|	|	|_        | j                  j                   | j                  j                   }|||||fcd	d	d	       S d	d	d	       |||||fS # 1 sw Y   xY w)zl
    Collect model information, token usage, and collect content blocks from the AI streaming response.
    r   content_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_startr   Nr>   message_deltar;   )r   r^   r   deltaappendr   r   messagerY   idrZ   r:   r;   getattrr=   r>   stop_reason)
r   rY   rZ   r[   r\   r]   incoming_usager;   r   r>   s
             rF   _collect_ai_datar      s:    
%	& >R5&!zz22445;;/"))%++*:*:;U[[.9"))%++*B*BC33 zz_,++4u#mm..!&!4!4&4&B&B#%3%@%@"18"$A42. 18"$=t1-
 "!;>R >RL zz_,&+kk&?&?#  'u{{NDI+)5E&.5KK!>/+ /:5PE2*1KK!:D+' +64KE1 ;;**6$)KK$;$;Munk=Q}>R >R >RB 	 A>R >Rs   EI +B<I  I	c                     | j                  d      dk(  rJ| j                  d      }t        |t              r)|j                  d      dk(  rd|j                  dd      dS t        |       }||S | S )z
    Transform an Anthropic content block using the Anthropic-specific transformer,
    with special handling for Anthropic's text-type documents.
    r   documentsourcer   data r   r   )getr   dictr   )content_blockr   r   s      rF   "_transform_anthropic_content_blockr   F  sx      J.""8,fd#

6(:f(D

62.  .m<F'6:]:rE   c                     t        | t              rd| dgS | D cg c]  }t        |t              rd|v rd|d   d  c}S c c}w )Nr   )r   content)r   strr   )system_instructionsinstructions     rF   _transform_system_instructionsr   [  sh     %s+ .
 	
 /
 k4(V{-B	 "6*	
  s   #Ac
                    | j                  t        j                  d       | j                  t        j                  d       |
t	        |      dkD  rt               r|j                  rt        |t              st        |t              r<| j                  t        j                  t        j                  t        |                   g }
|D ]4  }|j                  d      t        j                   k(  rd|v rt        |d   t"        t$        f      rg }|d   D ]S  }t        |t&              r|j                  d      dk(  r(|j)                  t        |t&              rt+        |      n|       U |s|
j)                  |j                  d      |d	       |j-                         }d|v rI|d   }t        |t"        t$        f      r.|D cg c]  }t        |t&              rt+        |      n|! c}|d<   |
j)                  |       7 t/        |
      }t1        j2                         }t5        || |      }|t7        | t        j8                  |d
       |+t;        |      r | j                  t        j<                  |       |+t;        |      r | j                  t        j>                  |       |+t;        |      r | j                  t        j@                  |       |+t;        |      r | j                  t        jB                  |       |+t;        |      r | j                  t        jD                  |       |	Et;        |	      r9t	        |	      dkD  r*| j                  t        jF                  tI        |	             yyyyc c}w )q
    Set input data for the span based on the provided keyword arguments for the anthropic message creation.
    rm   chatNr   roler   r   tool_result)r   r   Funpack)%set_datar   GEN_AI_SYSTEMGEN_AI_OPERATION_NAMElenr   rn   r   r   r   GEN_AI_SYSTEM_INSTRUCTIONSjsondumpsr   r   r   USERlisttupler   r   r   copyr
   r   get_current_scoper   r	   GEN_AI_REQUEST_MESSAGES	_is_givenGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_MODELGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_KGEN_AI_REQUEST_TOP_PGEN_AI_REQUEST_AVAILABLE_TOOLSr   )rW   rX   
max_tokensmessagesrY   systemtemperaturetop_ktop_ptoolsnormalized_messagesr   transformed_contentitemtransformed_messager   role_normalized_messagesscopemessages_datas                      rF   _set_common_input_datar   p  s    	MM(((+6MM(00&9MA#%''fc"j&BMM33

9&AB
 ! (	@GF#'C'H'HH(wy1D%=A&(##I. D "$-$((62Bm2S  (..%dD1 ;4@! ''..$+KK$7': '.lln# 331)<G!'D%=9
 )0	: !%  *$5 ?tD!%&:+I6 $**+>?Q(	@T $;;N#O ,,.6$dE
 $h66e )J"7h88*EYu-h33U;9[#9h99;GYu-h33U;Yu-h33U;Yu-#e*q.h==~e?TU 3A-;:s   $M7c                 ~   | j                  t        j                  |j                  dd             t	        | ||j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      |j                  d
      
       y)r   rI   Fr   r   rY   r   r   r   r   r   
rW   rX   r   r   rY   r   r   r   r   r   N)r   r   GEN_AI_RESPONSE_STREAMINGr   r   )rW   kwargsrX   s      rF   _set_create_input_datar     s     	MM(44fjj56QR::l+J'jj!zz(#JJ}-jj!jj!jj!rE   c              #      K   t        | d      5  |D ]A  }t        |t        t        t        t
        t        t        f      s| 2t        | |       | C 	 ddd       y# 1 sw Y   yxY wwz
    Sets information received while iterating the response stream on the AI Client Span.
    Responsible for closing the AI Client Span unless the span has already been closed in the close() patch.
    T)rJ   N	rH   r   r#   r$   r%   r&   r'   r(   _accumulate_event_datarI   iteratorr   s      rF   "_wrap_synchronous_message_iteratorr     sr      
Ft	D  	E %%$**)
 "651K%	  s   A-AA!	A-!A*&A-c                   K   t        | d      5  |2 3 d{   }t        |t        t        t        t
        t        t        f      s| 9t        | |       | K7 F6 	 ddd       y# 1 sw Y   yxY wwr   r   r   s      rF   #_wrap_asynchronous_message_iteratorr     sz      
Ft	D # 	 	% %%$**)
 "651K%	8  s=   A7A+A AA AA+A  A+"	A7+A40A7c
                 l   | j                  t        j                  |       | | j                  t        j                  |       |	!| j                  t        j                  |	g       t               r|j                  rg g d}
|D ]?  }|d   dk(  r|
d   j                  |d          #|d   dk(  s,|
d   j                  |       A t        |
d         dkD  r t        | t        j                  |
d   d	
       t        |
d         dkD  rt        | t        j                  |
d          t        | ||||       y)z;
    Set output data for the span based on the AI response.N)responsetoolr   r   r   tool_user   r   Fr   )r;   r:   input_tokens_cachedinput_tokens_cache_write)r   r   GEN_AI_RESPONSE_MODELGEN_AI_RESPONSE_IDGEN_AI_RESPONSE_FINISH_REASONSr   rn   r   r   r	   GEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_TEXTr   )rW   rX   rY   r;   r:   r>   r=   r[   r\   r]   output_messagesoutputs               rF   _set_output_datar   #  s6    	MM(00%8h11;? h==O [%@%@3

 % 	7Ff~'
+226&>B:-'..v6		7 v&'!+33'	 z*+a/h33_Z5P !#3!9rE   c                 x   |j                  d      }| | |i |S d|vr | |i |S 	 t        |d          |j                  dd      } t	               t
        j                  d| j                         t        j                        }|j                          t        |||       	  | |i |}t'        t(              r6||_        ||_        t/        |       t1        ||j2                        |_        |S t               5  t5        |d      rt7        |      \  }	}
}}g }|j8                  D ]  }t5        |d	      r |j;                  |j=                                /t5        |d
      r |j;                  |j?                                [t5        |d      sh|j;                  d|j@                  d        tC        ||tE        |dd      |	|
|||tE        |dd      tE        |dd      
       |j#                  ddd       n%|jG                  dd       |j#                  ddd       ddd       |S # t        $ r  | |i |cY S w xY w# t        $ ra}t        j                         }t               5  t!        |        |j"                  |  ddd       n# 1 sw Y   nxY wt%        |  Y d}~d}~ww xY w# 1 sw Y   |S xY wz[
    Creates and manages an AI Client Span for both non-streaming and streaming calls.
    rX   Nr   rY   r   chat opnamer   r   to_dict
model_dumpr   r   r   r   
rW   rX   rY   r;   r:   r>   r=   r[   r\   r]   unknown_responseT)$popiter	TypeErrorr   r   r   GEN_AI_CHATstriprl   r   rS   r   	Exceptionsysexc_infor   r   r_   r   r   r   rU   ra   #_initialize_data_accumulation_stater   	_iteratorr^   r   r   r   r   r  r   r   r   r   fargsr   rX   rY   rW   r   r   r  r;   r:   r>   r=   r[   r   s                  rF   _sentry_patched_create_syncr  X  s    **]+K$!&!!$!&!!"VJ  JJw#E$"$>>UG_""$#**D
 	NN45D#F# &&!)+F3=

 	$	& !,69% !('(  N!' X=)4"))-*?*?*AB]L9"))-*B*B*DE]F3"))6=CUCU*VWX 'fgt4)+(?)A-#FD$7%fmTB MM$d+MM,d3MM$d+C!,F MM  "$!&!!"   <<>(* 	%s#DMM8$	% 	% 	% 	&!,F MsU   H+ 'I ?BJ/BJ/+H?>H?	J,J')J	J'J	J''J,/J9c                   K   |j                  d      }| | |i | d{   S d|vr | |i | d{   S 	 t        |d          |j                  dd      } t	               t
        j                  d| j                         t        j                        }|j                          t        |||       	  | |i | d{   }t'        t(              r6||_        ||_        t/        |       t1        ||j2                        |_        |S t               5  t5        |d      rt7        |      \  }	}
}}g }|j8                  D ]  }t5        |d	      r |j;                  |j=                                /t5        |d
      r |j;                  |j?                                [t5        |d      sh|j;                  d|j@                  d        tC        ||tE        |dd      |	|
|||tE        |dd      tE        |dd      
       |j#                  ddd       n%|jG                  dd       |j#                  ddd       ddd       |S 7 $7 # t        $ r  | |i | d{  7  cY S w xY w7 # t        $ ra}t        j                         }t               5  t!        |        |j"                  |  ddd       n# 1 sw Y   nxY wt%        |  Y d}~
d}~ww xY w# 1 sw Y   |S xY wwr   )$r  r  r  r   r   r   r  r  rl   r   rS   r   r	  r
  r  r   r   r_   r   r   r   rU   ra   r  r   r  r^   r   r   r   r   r  r   r   r   r   r  s                  rF   _sentry_patched_create_asyncr    s     **]+K''''''''(VJ  JJw#E$"$>>UG_""$#**D
 	NN45$)&)) &+&)+F3>

 	$	& !,69% !('(  N!' X=)4"))-*?*?*AB]L9"))-*B*B*DE]F3"))6=CUCU*VWX 'fgt4)+(?)A-#FD$7%fmTB MM$d+MM,d3MM$d+C!,F M[ ( (  ('''''( * <<>(* 	%s#DMM8$	% 	% 	% 	&!,F Ms   K(IK(IK(I 	A/K(9I. I+I. 	AK(BK,BK;K(K(I(I" I(%K('I((K(+I. .	K7KJ90	K9K	>KK(KK(K% K(c                 0     t               d fd       }|S )Nc                  z    t        j                         j                  t              }||d<   t	        g| i |S NrX   )r   r   get_integrationrl   r  r  r   rX   r  s      rF   _sentry_wrapped_create_syncz9_wrap_message_create.<locals>._sentry_wrapped_create_sync  s<     ++-==>RS +}*1>t>v>>rE   r  r+   r   r+   rK   r+   r   )r  r  s   ` rF   rq   rq     s!    
1X? ? '&rE   c                 t    t        | d      s,d| _        t               | _        g | _        d| _        d| _        yy)zK
    Initialize fields for accumulating output on the Stream instance.
    rV   N)r^   rV   r9   rb   rc   rd   re   )rI   s    rF   r  r    s<     68$&(!#" $ %rE   c                     t        || j                  | j                  | j                  | j                  | j
                        \  }}}}}|| _        || _        || _        || _        || _        y)z?
    Update accumulated output from a single stream event.
    N)r   rV   rb   rc   rd   re   )rI   r   rY   rZ   r[   r\   r]   s          rF   r   r     sp     BRB>UE>; FMFM+F%F)FrE   c                     |j                   |j                  xs dz   |j                  xs dz   }t        | ||||j                  |j                  |j                  dj                  |      ddg||
       y)z6
    Set output attributes on the AI Client Span.
    r   r   r   )r   r   r  N)r;   r>   r=   r   r:   join)rW   rX   rY   rZ   r[   r\   r]   total_inputs           rF   r`   r`   4  s     	((-A	/)).Q	0   )) % = =!&!?!?!#!8&IJ#rE   c                      d fd}|S )zr
    Closes the AI Client Span unless the finally block in `_wrap_synchronous_message_iterator()` runs first.
    c                 V    t        |       5   |       cd d d        S # 1 sw Y   y xY wrM   rH   rP   r  s    rF   rt   z_wrap_close.<locals>.close]  s'    % 	T7	 	 	s   ()rP   Union[Stream, MessageStream]rK   NrD   r  rt   s   ` rF   rs   rs   V  s     LrE   c                 0     t               d fd       }|S )Nc                     K   t        j                         j                  t              }||d<   t	        g| i | d {   S 7 wr  )r   r   r  rl   r  r  s      rF   _sentry_wrapped_create_asyncz@_wrap_message_create_async.<locals>._sentry_wrapped_create_asynce  sF      ++-==>RS +}1!EdEfEEEEs   ?A	AA	r  r   )r  r(  s   ` rF   ru   ru   d  s#    
1XF F ('rE   c                      d fd}|S )zs
    Closes the AI Client Span unless the finally block in `_wrap_asynchronous_message_iterator()` runs first.
    c                 r   K   t        |       5   |        d {   cd d d        S 7 # 1 sw Y   y xY wwrM   r"  r#  s    rF   rt   z _wrap_async_close.<locals>.closev  s5     % 	!4=	! 	! 	! 	!s    7+)+
7+47)rP   r   rK   NrD   r%  s   ` rF   rv   rv   o  s    ! LrE   c                 0     t               d fd       }|S )
    Attaches user-provided arguments to the returned context manager.
    The attributes are set on AI Client Spans in the patch for the context manager.
    c                  x    | i |}|j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |S 	Nr   r   rY   r   r   r   r   r   	r   _max_tokens	_messagesrV   _system_temperature_top_k_top_p_toolsr  r   stream_managerr  s      rF   _sentry_patched_streamz4_wrap_message_stream.<locals>._sentry_patched_stream  s    D+F+%+ZZ%="#)::j#9  &

7 3!'H!5&,jj&?# &

7 3 &

7 3 &

7 3rE   )r  r+   r   r+   rK   r   r   r  r9  s   ` rF   rw   rw   }  s#     1X  "!rE   c                 0     t               d fd       }|S ).
    Creates and manages AI Client Spans.
    c                 @   t        | d      s |       S t        j                         j                  t              }| |       S | j
                   |       S 	 t        | j
                          t               t        j                  | j                  dnd| j                   j                         t        j                        }|j                          |j                  t         j"                  d       t%        ||| j&                  | j
                  | j                  | j(                  | j*                  | j,                  | j.                  | j0                  
       	  |       }|_         ||_!        tE        |       tG        ||jH                        |_$        |S # t        $ r  |       cY S w xY w# t2        $ r`}t5        j6                         }t9               5  t;        |        |j<                  |  d d d        n# 1 sw Y   nxY wt?        |  Y d }~d }~ww xY wNr0  r   r   r   Tr   )%r^   r   r   r  rl   r1  r  r  r   r   r  rV   r  r   rS   r   r   r   r   r0  r2  r3  r4  r5  r6  r	  r
  r  r   r   r_   r   rU   ra   r  r   r  rP   rX   rW   rI   r   r  r  s         rF   _sentry_patched_enterzA_wrap_message_stream_manager_enter.<locals>._sentry_patched_enter  s   t]+T7N ++-==>RST7N>>!T7N	  )&(~~;;.eDKK=4I4O4O4Q'..

 	h88$?#''^^++<<))++++++	
	tWF )+F3=

 U  	T7N	4  	||~H,. )"3'x() ) ) X	sB   F F4 F10F14	H=HG?6	H?H	HH)rP   r   rK   r    r   )r  r@  s   ` rF   rx   rx     s$    
 1X8 8t ! rE   c                 <     t               	 	 	 	 	 	 d fd       }|S )r,  c                  x    | i |}|j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |j                  d      |_        |S r.  r/  r7  s      rF   r9  z:_wrap_async_message_stream.<locals>._sentry_patched_stream  s     D+F+%+ZZ%="#)::j#9  &

7 3!'H!5&,jj&?# &

7 3 &

7 3 &

7 3rE   )r  r+   r   r+   rK   r!   r   r:  s   ` rF   rz   rz     s;     1X %	$   "!rE   c                 8     t               	 	 	 	 d fd       }|S )r<  c                   K   t        | d      s |        d {   S t        j                         j                  t              }| |        d {   S | j
                   |        d {   S 	 t        | j
                          t               t        j                  | j                  dnd| j                   j                         t        j                        }|j                          |j                  t         j"                  d       t%        ||| j&                  | j
                  | j                  | j(                  | j*                  | j,                  | j.                  | j0                  
       	  |        d {   }|_         ||_!        tE        |       tG        ||jH                        |_$        |S 7 7 n7 U# t        $ r  |        d {  7  cY S w xY w7 c# t2        $ r`}t5        j6                         }t9               5  t;        |        |j<                  |  d d d        n# 1 sw Y   nxY wt?        |  Y d }~d }~ww xY wwr>  )%r^   r   r   r  rl   r1  r  r  r   r   r  rV   r  r   rS   r   r   r   r   r0  r2  r3  r4  r5  r6  r	  r
  r  r   r   r_   r   rU   ra   r  r   r  r?  s         rF   _sentry_patched_aenterzI_wrap_async_message_stream_manager_aenter.<locals>._sentry_patched_aenter  s     t]+4=  ++-==>RS4= >>!4= 	!  )&(~~;;.eDKK=4I4O4O4Q'..

 	h88$?#''^^++<<))++++++	
	T7]F )+F3>

 m !
 ! !  	!4== 	!2 # 	||~H,. )"3'x() ) ) X	s   IF?8IGI0G1I6G C-I9G* G(G* 	7IIIG%GG%"I$G%%I(G* *	I3IH5,	I5H>	:I	III)rP   r!   rK   r"   r   )r  rE  s   ` rF   r{   r{     s4    
 1X:):	: :x "!rE   objc                 `    t         t        | t               ryt        t        | t              ryy)zI
    Check for givenness safely across different anthropic versions.
    FT)r   r   r   )rF  s    rF   r   r   7  s+     
3 9JsD1rE   )r   r+   rK   N)r   r   rK   ztuple[int, int, int, int])NN)r   r)   rY   
str | NonerZ   r9   r[   	list[str]r\   rH  r]   rH  rK   zDtuple[str | None, _RecordedUsage, list[str], str | None, str | None])r   dict[str, Any]rK   rJ  )r   z$Union[str, Iterable[TextBlockParam]]rK   zlist[TextPart])rW   r2   rX   rl   r   rB   r   zIterable[MessageParam]rY   r6   r   z.Optional[Union[str, Iterable[TextBlockParam]]]r   Optional[float]r   r<   r   rK  r   z"Optional[Iterable[ToolUnionParam]]rK   N)rW   r2   r   rJ  rX   rl   rK   N)rI   r$  r   :Iterator[Union[RawMessageStreamEvent, MessageStreamEvent]]rK   rL  )rI   z&Union[AsyncStream, AsyncMessageStream]r   ?AsyncIterator[Union[RawMessageStreamEvent, MessageStreamEvent]]rK   rM  )rW   r2   rX   rl   rY   rH  r;   
int | Noner:   rN  r>   rN  r=   rN  r[   z	list[Any]r\   rH  r]   rH  rK   N)r  r+   r  r+   r   r+   rK   r+   )r  r+   rK   r+   )rI   r$  rK   N)rI   r$  r   z0Union[RawMessageStreamEvent, MessageStreamEvent]rK   N)rW   r2   rX   rl   rY   Optional[str]rZ   r9   r[   rI  r\   rO  r]   rO  rK   N)r  Callable[..., None]rK   rP  )r  Callable[..., Awaitable[None]]rK   rQ  )cr
  r   collections.abcr   	functoolsr   typingr   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r	   r
   r   r   r   sentry_sdk.constsr   r   sentry_sdk.integrationsr   r   r   sentry_sdk.scoper   sentry_sdk.utilsr   r   r   r   r   rm   r   ImportErrorr   r   r   anthropic.resourcesr   r   anthropic.lib.streamingr   r    r!   r"   anthropic.typesr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   sentry_sdk.tracingr2   sentry_sdk._typesr3   r4   r5   r6   r7   r9   rH   rl   r   r   r   r   r   r   r   r   r   r   r  r  rq   r  r   r`   rs   ru   rv   rw   rx   rz   r{   rj   r   rD   rE   rF   <module>ra     s   
  $     7  + U U 4  2&" .;   F    (* 1 1.# .#b5S; 5Sp/"T !%"&QQQ Q  	Q
 Q  Q LQh;#;;*?*^V
^V'^V ^V '	^V
 ^V =^V #^V ^V ^V 0^V 
^VB
*9O	,*J B<4O GN !%"&2
2'2 2 	2
  2 *2 +2  2 2  2 
2jSlUUU&+U
Up'	%***=* 
*.
'  	
   ! # 
D('%"0@!F"4B"J5 T q   
  .  2
0
112sH   G $G  *6G. GG. GG.  G+'G. *G++G. .G<