
    `iR                        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mZ d dlmZmZmZ d d	l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% n# e&$ r dZ%Y nw xY w	 d dl$m'Z' n# e&$ r dZ'Y nw xY wd dl(m)Z)m*Z* erd dl+m,Z,m-Z- n# e&$ r  ed          w xY werd dlm.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6m7Z7  G d d          Z8 G d de          Z9dEdZ:dFdZ;	 	 	 	 	 	 	 	 	 	 dGd(Z<	 	 	 	 dHd+Z=	 	 	 	 dId/Z>	 	 	 	 	 	 	 	 dJd4Z?	 dKd0d1d3dd"d#d6d7d8d7d9d7d:d7d%d;d<e@ddfd=ZAdLd@ZBdMdAZCdMdBZDdCdde@fdDZEdS )N    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
SPANSTATUS)_check_minimum_versionDidNotEnableIntegration)should_send_default_pii)set_span_errored)capture_internal_exceptionsevent_from_exceptionpackage_versionsafe_serializereraise)NotGiven)Omit)AsyncMessagesMessages)MessageStreamEventTextBlockParamzAnthropic not installed)AnyAsyncIteratorIteratorListOptionalUnion)Span)TextPartc                   H    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<   dS )_RecordedUsager   output_tokensinput_tokenszOptional[int]cache_write_input_tokenscache_read_input_tokensN)	__name__
__module____qualname__r+   int__annotations__r,   r-   r.        u/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sentry_sdk/integrations/anthropic.pyr*   r*   5   sT         M3L#01o111/0_00000r5   r*   c                   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 )AnthropicIntegration	anthropiczauto.ai.Tselfinclude_promptsreturnNc                     || _         d S N)r;   )r:   r;   s     r6   __init__zAnthropicIntegration.__init__@   s    .r5   c                      t          d          } t          t          |            t          t          j                  t          _        t          t          j                  t          _        d S )Nr9   )r   r   r8   _wrap_message_creater   create_wrap_message_create_asyncr   )versions    r6   
setup_oncezAnthropicIntegration.setup_onceC   sJ    !+..3W===.x??9-:NOOr5   )T)r<   N)	r/   r0   r1   
identifieroriginboolr?   staticmethodrE   r4   r5   r6   r8   r8   <   s|        J$
$$F/ /- / /PT / / / / P P P \P P Pr5   r8   excr!   r<   c                     t                       t          | t          j                    j        ddd          \  }}t          j        ||           d S )Nr9   F)typehandled)client_options	mechanism)hint)r   r   
sentry_sdk
get_clientoptionscapture_event)rJ   eventrP   s      r6   _capture_exceptionrV   L   sa    &!,..6&599  KE4
 U......r5   resultr   tuple[int, int, int, int]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        }||||fS )z
    Get token usage from the Anthropic response.
    Returns: (input_tokens, output_tokens, cache_read_input_tokens, cache_write_input_tokens)
    r   usager,   r+   r.   cache_creation_input_tokens)hasattrrZ   
isinstancer,   r2   r+   r.   r[   )rW   r,   r+   r.   r-   rZ   s         r6   _get_token_usager^   W   s   
 LM vw I5.)) 	.j9KS.Q.Q 	. -L5/** 	0z%:Ms/S/S 	0!/M5344 	D)3:
 :
 	D ',&C#5788 	IZ-s>
 >
 	I (-'H$ 	 	 r5   rU   r   model
str | NonerZ   content_blocks	list[str],tuple[str | None, _RecordedUsage, list[str]]c                    t                      5  t          | d          r| j        dk    rn| j        dk    rjt          | j        d          r |                    | j        j                   nAt          | j        d          r|                    | j        j                   n| j        dk    r	 | j        dk    ro| j        j        p|}| 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	          }|||_        |||fcd	d	d	           S d	d	d	           n# 1 swxY w Y   |||fS )zl
    Collect model information, token usage, and collect content blocks from the AI streaming response.
    rL   content_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_startr[   Nr.   message_deltar,   )r   r\   rL   deltaappendrg   rh   messager_   rZ   r+   r,   getattrr-   r.   )rU   r_   rZ   ra   incoming_usager,   r[   r.   s           r6   _collect_ai_datarq   w   s    
%	&	& < <5&!! ;	z2224445;// D"))%+*:;;;;U[.99 D"))%+*BCCC333 z_,,+4u!&!4&4&B#%3%@"18"$A42 2. 18"$=t1 1-
 "9< < < < < < < <F z_,,&+k&?#  'u{NDII+)5E&.5K!>/ /+ /:5PE2*1K!:D+ +' +64KE1 "q< < < < < < < < < < < < < < < < < < < < < < <~ 	 s   DF>(A=F>>GGcontent_blockdict[str, Any]c                    |                      d          dk    r\|                      d          }t          |t                    r2|                     d          dk    rd|                     dd          dS t          |           }||n| S )z
    Transform an Anthropic content block using the Anthropic-specific transformer,
    with special handling for Anthropic's text-type documents.
    rL   documentsourcerg   data rL   rg   )getr]   dictr   )rr   rv   rW   s      r6   "_transform_anthropic_content_blockr|      s       J..""8,,fd## 	

6(:(:f(D(D

62..   .m<<F'66]:r5   system_instructions$Union[str, Iterable[TextBlockParam]]list[TextPart]c                 P    t          | t                    rd| dgS d | D             S )Nrg   rL   contentc                 V    g | ]&}t          |t                    rd |v d |d          d'S )rg   r   )r]   r{   ).0instructions     r6   
<listcomp>z2_transform_system_instructions.<locals>.<listcomp>   sX       
 k4(( .4{-B-B	 "6*	
 	

 .C-B-Br5   )r]   str)r}   s    r6   _transform_system_instructionsr      sV     %s++ 
 . 
 	
 
 /   r5   spanr'   kwargsintegrationc                 N   t          | t          j        d           |                    d          }|                    d          }|;t	          |          dk    r't                      r|j        rt          |t                    st          |t                    r?| 
                    t          j        t          j        t          |                               g }|D ]O}|                    d          t          j        k    rd|v rt          |d         t"          t$          f          rg }|d         D ]j}t          |t&                    r|                    d          d	k    r1|                    t          |t&                    rt+          |          n|           k|r+|                    |                    d          |d
           |                                }	d|	v r3|	d         }
t          |
t"          t$          f          rd |
D             |	d<   |                    |	           Qt/          |          }t1          j                    }t5          || |          }|t          | t          j        |d           t          | t          j        |                    dd                     t          j        t          j        t          j        t          j         t          j!        d}|"                                D ]<\  }}|                    |          }| tG          |          rt          | ||           =|                    d          }|LtG          |          r?t	          |          dk    r.t          | t          j$        tK          |                     dS dS dS dS )zq
    Set input data for the span based on the provided keyword arguments for the anthropic message creation.
    chatsystemmessagesNr   roler   rL   tool_result)r   r   c                 Z    g | ](}t          |t                    rt          |          n|)S r4   )r]   r{   r|   )r   items     r6   r   z#_set_input_data.<locals>.<listcomp>)  sJ     : : : !%  *$55&>tDDD!%: : :r5   Funpackstream)
max_tokensr_   temperaturetop_ktop_ptools)&r	   r   GEN_AI_OPERATION_NAMErz   lenr   r;   r]   r   r   set_dataGEN_AI_SYSTEM_INSTRUCTIONSjsondumpsr   r   USERlisttupler{   rm   r|   copyr
   rQ   get_current_scoper   GEN_AI_REQUEST_MESSAGES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items	_is_givenGEN_AI_REQUEST_AVAILABLE_TOOLSr   )r   r   r   r}   r   normalized_messagesrn   transformed_contentr   transformed_messager   role_normalized_messagesscopemessages_datakwargs_keys_to_attributeskey	attributevaluer   s                      r6   _set_input_datar      s    h<fEEEBH**XBVBVzz*%%HMMA#%% '  )3// 	:4
 4
 	 MM3
9:MNNOO  
 ! (	@ (	@GF##'C'HHH((wy1D%=AA ) ')##I.  D "$-- !$((62B2Bm2S2S  (..%dD11":4@@@!    ' '..$+KK$7$7':    '.llnn# 3331)<G!'D%=99 : : )0	: : :+I6 $**+>????#:;N#O#O ,..6$dE
 
 $h6e    h0&**Xu2M2M  
 8.:..! ! 499;; 8 8Y

35!1!1i777 JJwEYu--#e**q..(9>%;P;P	
 	
 	
 	
 	
 ..r5   Fr,   z
int | Noner+   r.   r-   z	list[Any]finish_spanc	                 x   |                      t          j        |           t                      r|j        rg g d}	|D ]W}
|
d         dk    r"|	d                             |
d                    0|
d         dk    r|	d                             |
           Xt          |	d                   dk    r#t          | t          j        |	d         d	           t          |	d                   dk    r!t          | t          j	        |	d                    t          | ||||
           |r|                     ddd           dS dS )z;
    Set output data for the span based on the AI response.)responsetoolrL   rg   r   tool_user   r   Fr   )r,   r+   input_tokens_cachedinput_tokens_cache_writeN)r   r   GEN_AI_RESPONSE_MODELr   r;   rm   r   r	   GEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_TEXTr   __exit__)r   r   r_   r,   r+   r.   r-   ra   r   output_messagesoutputs              r6   _set_output_datar   T  s    	MM(0%888   [%@ 3
 3

 % 	7 	7Ff~''
+226&>BBBB:--'..v666v&''!++3'	    z*++a//h3_Z5P   !#3!9     (dD$'''''( (r5   fargsc              /   6  K   |                     d           | |i |S d|vr | |i |S 	 t          |d                    n# t          $ r  | |i |cY S w xY w|                    dd          } t	                      t
          j        d|                                 t          j	                  
                                 t          |           | ||fV }t                      5  t          |d          rt          |          \  }}}}g }	|j        D ]}
t          |
d          r(|	                    |
                                           :t          |
d	          r(|	                    |
                                           rt          |
d
          r|	                    d
|
j        d           t)          t+          |dd           |||||	d	  	         nt          |d          r\|j        dfd}dfd}t/          t1          |j                            dk    r |            |_        n= |            |_        n-                    dd                               d d d            d d d            n# 1 swxY w Y   |S )Nr   r   r_   rx   zchat )opnamerG   r   to_dict
model_dumprg   ry   T	r   r   r_   r,   r+   r.   r-   ra   r   	_iteratorr<   Iterator[MessageStreamEvent]c               3      K   d } t                      }g }D ]}t          || ||          \  } }}|V  t          | |j        |j        |j        |j        d                    |          ddgd	  	         d S Nrx   rg   )rg   rL   Tr   r*   rq   r   r,   r+   r.   r-   joinr_   rZ   ra   rU   r   old_iteratorr   s       r6   new_iteratorz3_sentry_patched_create_common.<locals>.new_iterator  s      &((.0)    E
 )&	 	&  KKKK  +!&!3"'"5,1,I-2-K-/WW^-D-Df$U$U#V $
 
 
 
 
 
r5   !AsyncIterator[MessageStreamEvent]c                   K   d } t                      }g }2 3 d {V }t          || ||          \  } }}|W V  #6 t          | |j        |j        |j        |j        d                    |          ddgd	  	         d S r   r   r   s       r6   new_iterator_asyncz9_sentry_patched_create_common.<locals>.new_iterator_async  s      &((.0#/              %
 )&	 	&  KKKKK $0 ! +!&!3"'"5,1,I-2-K-/WW^-D-Df$U$U#V $
 
 
 
 
 
s   ;z<class 'async_generator'>unknown_response)r<   r   )r<   r   )popiter	TypeErrorrz   r   r   GEN_AI_CHATstripr8   rG   	__enter__r   r   r\   r^   r   rm   r   r   rg   r   ro   r   r   rL   r   r   )r   r   r   r_   rW   r,   r+   r.   r-   ra   rr   r   r   r   r   r   s                @@@r6   _sentry_patched_create_commonr     s     **]++Kq$!&!!!q$!&!!!"VJ     " " "q$!&!!!!!" JJw##E$"$$>U__""$$#*  D
 	NND&+...dF?""F	$	&	& e, e,69%% d	, !(('(  N!' X X=)44 X"))-*?*?*A*ABBBB]L99 X"))-*B*B*D*DEEEE]F33 X"))6=CU*V*VWWW'fgt44)+(?)A- 
 
 
 
 
 V[)) F	,!+L       <       < 4())**.III#5#5#7#7  #/<>>   MM,d333MM$d+++Ke, e, e, e, e, e, e, e, e, e, e, e, e, e, e,N Ms$   A AA3FJJJc                 J     ddt                     d	 fd            }|S )
Nr   r!   r   r   r<   c                    t          | g|R i |}	 t          |          \  } }}n# t          $ r}|j        cY d }~S d }~ww xY w	 	  | |i |}nh# t          $ r[}t          j                    }t                      5  t          |           d d d            n# 1 swxY w Y   t          |  Y d }~nd }~ww xY w|
                    |          S # t          $ r}|j        cY d }~S d }~ww xY wr>   r   nextStopIterationr   	Exceptionsysexc_infor   rV   r   sendr   r   r   generW   rJ   r   s           r6   _execute_syncz+_wrap_message_create.<locals>._execute_sync  s~   +A??????	"3iiOAtVV 	 	 	7NNNNNN		#D+F++ # # #<>>022 , ,&s+++, , , , , , , , , , , , , , ,"""""""	# 88F### 	 	 	7NNNNNN	s}   & 
A<AAA C 
B4!B/:B
B/B	B/B	B/*C /B44C 
C'C"C'"C'c                  ,   t          j                                        t                    }||d<   	  g| R i |t          j                    }|S|j        t          j        k    r?t                      5  |	                    d d d            d d d            S # 1 swxY w Y   S S S # t          j                    }|S|j        t          j        k    r?t                      5  |	                    d d d            d d d            w # 1 swxY w Y   w w w xY wNr   
rQ   rR   get_integrationr8   get_current_spanstatusr   INTERNAL_ERRORr   r   )r   r   r   r   r   r   s       r6   _sentry_patched_create_syncz9_wrap_message_create.<locals>._sentry_patched_create_sync!  s    +--==>RSS +}	4 =4T444V44.00DDK:3L$L$L022 4 4MM$d3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4  $L .00DDK:3L$L$L022 4 4MM$d3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4  $LsA   B( 6BB	!B	(9D!D9DD		DD	Dr   r!   r   r!   r   r!   r<   r!   r   r!   r   r!   r<   r!   r   )r   r   r   s   ` @r6   rA   rA     sU       * 1XX
4 
4 
4 
4 
4 
4 X
4 '&r5   c                 J     ddt                     d	 fd            }|S )
Nr   r!   r   r   r<   c                   K   t          | g|R i |}	 t          |          \  } }}n$# t          $ r}|j         d {V cY d }~S d }~ww xY w	 	  | |i | d {V }nh# t          $ r[}t          j                    }t                      5  t          |           d d d            n# 1 swxY w Y   t          |  Y d }~nd }~ww xY w|
                    |          S # t          $ r}|j        cY d }~S d }~ww xY wr>   r   r   s           r6   _execute_asyncz2_wrap_message_create_async.<locals>._execute_async2  s     +A??????	!"3iiOAtVV 	! 	! 	!======      	!	# q$1&11111111 # # #<>>022 , ,&s+++, , , , , , , , , , , , , , ,"""""""	# 88F### 	 	 	7NNNNNN	s   ( 
A	AA	A	A C 
C'!B=B$B=$B(	(B=+B(	,B=8C =CC 
C5$C0*C50C5c                  >  K   t          j                                        t                    }||d<   	  g| R i | d {V 	 t          j                    }|S|j        t          j        k    r?t                      5  |	                    d d d            d d d            S # 1 swxY w Y   S S S # t          j                    }|S|j        t          j        k    r?t                      5  |	                    d d d            d d d            w # 1 swxY w Y   w w w xY wr   r   )r   r   r   r   r   r   s       r6   _sentry_patched_create_asyncz@_wrap_message_create_async.<locals>._sentry_patched_create_asyncG  s      +--==>RSS +}	4';D;;;F;;;;;;;;;.00DDK:3L$L$L022 4 4MM$d3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4  $L .00DDK:3L$L$L022 4 4MM$d3334 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4  $LsA   B1 ?B##B'	*B'	19D*DDDDDDr   r   r   )r   r  r   s   ` @r6   rC   rC   1  sU       * 1XX
4 
4 
4 
4 
4 
4 X
4 ('r5   objc                 ~    t           t          | t                     rdS t          t          | t                    rdS dS )zI
    Check for givenness safely across different anthropic versions.
    NFT)r   r]   r   )r  s    r6   r   r   W  s=     
3 9 9uJsD11u4r5   )rJ   r!   r<   N)rW   r   r<   rX   )
rU   r   r_   r`   rZ   r*   ra   rb   r<   rc   )rr   rs   r<   rs   )r}   r~   r<   r   )r   r'   r   rs   r   r8   r<   N)Fr   )r   r!   r<   r!   )Fr   r   collections.abcr   	functoolsr   typingr   rQ   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r	   r
   r   r   r   sentry_sdk.constsr   r   r   sentry_sdk.integrationsr   r   r   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   r   r   r9   r   ImportErrorr   anthropic.resourcesr   r   anthropic.typesr   r    r!   r"   r#   r$   r%   r&   sentry_sdk.tracingr'   sentry_sdk._typesr(   r*   r8   rV   r^   rq   r|   r   r   rH   r   r   rA   rC   r   r4   r5   r6   <module>r     s   



  $ $ $ $ $ $                       7 7 7 7 7 7                7 6 6 6 6 6 6 6 6 6 U U U U U U U U U U 4 4 4 4 4 4 5 5 5 5 5 5             2&&&&&&&   """""""    <;;;;;;; GFFFFFFFF 2 2 2
,0
1
112  +JJJJJJJJJJJJJJJJ''''''******1 1 1 1 1 1 1 1P P P P P; P P P / / / /   @KKK K  	K
 4K K K K\;#;; ; ; ;*?   *b

b
*b
9Ob
	b
 b
 b
 b
\ 0( 0(
0('0( 0( 	0(
  0( *0( +0(  0( 0( 
0( 0( 0( 0(fA A A AH#' #' #' #'L#( #( #( #(L5 T      sN   %A, +B! ,A63B! 5A66B! :B  B! BB! 
BB! !B2