
    tni<                     :   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 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 	 	 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( n# e"$ r  ed          w xY werd dlm)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0  G d de          Z1d9dZ2d:dZ3dddd d!e4d"e4d#d$dd%fd&Z5	 	 	 	 	 	 	 	 d;d,Z6	 d<d'd(d+ddd d!d.d"d.d#d/d0e7ddfd1Z8d=d4Z9d>d5Z:d>d6Z;d7dde7fd8Z<dS )?    )Iterablewraps)TYPE_CHECKINGN)record_token_usage)GEN_AI_ALLOWED_MESSAGE_ROLESset_data_normalizednormalize_message_rolestruncate_and_annotate_messagesget_start_span_function)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)NotGiven)Omit)AsyncMessagesMessages)MessageStreamEventzAnthropic not installed)AnyAsyncIteratorIteratorListOptionalUnion)Spanc                   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     ^/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/anthropic.py__init__zAnthropicIntegration.__init__4   s    .    c                      t          d          } t          t          |            t          t          j                  t          _        t          t          j                  t          _        d S )Nr'   )r   r   r&   _wrap_message_creater   create_wrap_message_create_asyncr   )versions    r-   
setup_oncezAnthropicIntegration.setup_once7   sJ    !+..3W===.x??9-:NOOr/   )T)r*   N)	__name__
__module____qualname__
identifieroriginboolr.   staticmethodr5    r/   r-   r&   r&   0   s|        J$
$$F/ /- / /PT / / / / P P P \P P Pr/   r&   excr   r*   c                     t                       t          | t          j                    j        ddd          \  }}t          j        ||           d S )Nr'   F)typehandled)client_options	mechanism)hint)r   r   
sentry_sdk
get_clientoptionscapture_event)r>   eventrD   s      r-   _capture_exceptionrJ   @   sa    &!,..6&599  KE4
 U......r/   resultr   tuple[int, int]c                    d}d}t          | d          ri| j        }t          |d          r!t          |j        t                    r|j        }t          |d          r!t          |j        t                    r|j        }||fS )z6
    Get token usage from the Anthropic response.
    r   usageinput_tokensoutput_tokens)hasattrrN   
isinstancerO   intrP   )rK   rO   rP   rN   s       r-   _get_token_usagerT   K   s     LMvw 05.)) 	.j9KS.Q.Q 	. -L5/** 	0z%:Ms/S/S 	0!/M&&r/   rI   r   modelz
str | NonerO   rP   content_blocksz	list[str]z&tuple[str | None, int, int, list[str]]c                 <   t                      5  t          | d          r| j        dk    r/| j        j        }||j        z  }||j        z  }| j        j        p|}n| j        dk    rn| j        dk    rjt          | j        d          r |	                    | j        j
                   n[t          | j        d          r|	                    | j        j                   n&| j        dk    rn| j        dk    r|| j        j        z  }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.
    r@   message_startcontent_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_deltaN)r   rQ   r@   messagerN   rO   rP   rU   deltaappendr[   r\   )rI   rU   rO   rP   rV   rN   s         r-   _collect_ai_datarb   [   sv    
%	&	& ; ;5&!! 	;z_,,+ 22!44+4u4444445;// D"))%+*:;;;;U[.99 D"))%+*BCCC333..!::#; ; ; ; ; ; ; ; ; ; ; ; ; ; ;& ,~==s   C2DDDspanr$   kwargsdict[str, Any]integrationc           	         t          | t          j        d           |                    d          }|                    d          }|t	          |          dk    rt                      r|j        rg }|rd}t          |t                    r|}nt          |t                    rqg }|D ]l}t          |t                    rU|                    d          dk    r<|                    d          r'|                    |                                           m|r"|                    t          j        |d           |D ]}|                    d	          t          j        k    rd
|v rt          |d
         t           t"          f          rp|d
         D ]f}|                    d          dk    rK|                    t          j        |                    d          |                    d
          dd           g|                    |           t'          |          }	t)          j                    }
t-          |	| |
          }|t          | t          j        |d           t          | t          j        |                    dd                     t          j        t          j        t          j        t          j        t          j        d}|                                D ]<\  }}|                    |          }| t?          |          rt          | ||           =|                    d          }|Lt?          |          r?t	          |          dk    r.t          | t          j         tC          |                     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   r@   r[   )rolecontentrk   rl   tool_resulttool_use_id)rn   outputFunpackstream)
max_tokensrU   temperaturetop_ktop_ptools)"r	   r   GEN_AI_OPERATION_NAMEgetlenr   r)   rR   strr   dictra   copyr   SYSTEMUSERlisttupleTOOLr
   rE   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   )rc   rd   rf   system_promptrj   normalized_messagessystem_prompt_contentitemr_   role_normalized_messagesscopemessages_datakwargs_keys_to_attributeskey	attributevaluerw   s                    r-   _set_input_datar   {   s    h<fEEEJJx((Mzz*%%HMMA#%% '  ! 	RV!--- 
B(5%%M844 B(*%) B BD"4..B HHV,,66 HHV,, 7 .44TYY[[AAA$ #** < C#8      	4 	4GF##'C'HHH((wy1D%=AA ) $I. 
 
Dxx''=88+22(D(I3788M3J3J.2hhy.A.A," ,"   
 $**73333#:;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	
 	
 	
 	
 	
 ..r/   Fz
int | Nonez	list[Any]finish_spanc                 t   |                      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toolr@   r[   r   tool_user   r   Frp   )rO   rP   N)set_datar   GEN_AI_RESPONSE_MODELr   r)   ra   rz   r	   GEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_TEXTr   __exit__)	rc   rf   rU   rO   rP   rV   r   output_messagesro   s	            r-   _set_output_datar      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   !#     (dD$'''''( (r/   fargsc           
   /   .  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 )Nrf   rj   rU    zchat )opnamer:   rl   to_dict
model_dumpr[   )r@   r[   Trc   rf   rU   rO   rP   rV   r   	_iteratorr*   Iterator[MessageStreamEvent]c            
   3      K   d } d}d}g }D ]}t          || |||          \  } }}}|V  t          | ||d                    |          ddgd           d S Nr   r   r[   )r[   r@   Tr   rb   r   joinrU   rO   rP   rV   rI   rf   old_iteratorrc   s        r-   new_iteratorz3_sentry_patched_create_common.<locals>.new_iterator<  s        !.0)    E(!5,~  GE<
  KKKK  +!-"/-/WW^-D-Df$U$U#V $     r/   !AsyncIterator[MessageStreamEvent]c            
        K   d } d}d}g }2 3 d {V }t          || |||          \  } }}}|W V  %6 t          | ||d                    |          ddgd           d S r   r   r   s        r-   new_iterator_asyncz9_sentry_patched_create_common.<locals>.new_iterator_asyncT  s        !.0#/              %(!5,~  GE<
  KKKKK $0 ! +!-"/-/WW^-D-Df$U$U#V $     s   3z<class 'async_generator'>unknown_response)r*   r   )r*   r   )popiter	TypeErrorry   r   r   GEN_AI_CHATstripr&   r:   	__enter__r   r   rQ   rT   rl   ra   r   r   r[   r   getattrr   r{   r@   r   r   )r   r   rd   rU   rK   rO   rP   rV   content_blockr   r   rf   r   rc   s              @@@r-   _sentry_patched_create_commonr     s     **]++Kq$!&!!!q$!&!!!"VJ     " " "q$!&!!!!!" JJw##E$"$$>U__""$$#*  D
 	NND&+...dF?""F	$	&	& R, R,69%% Q	,*:6*B*B'L-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)+-      V[)) :	,!+L       0       0 4())**.III#5#5#7#7  #/<>>   MM,d333MM$d+++eR, R, R, R, R, R, R, R, R, R, R, R, R, R, R,h Ms$   A AA3FJ

JJc                 J     ddt                     d	 fd            }|S )
Nr   r   r   rd   r*   c                 L   t          | g|R i |}	 t          |          \  } }}n# t          $ r}|j        cY d }~S d }~ww xY w	 	  | |i |}n$# t          $ r}t          |           |d d }~ww xY w|                    |          S # t          $ r}|j        cY d }~S d }~ww xY wr,   r   nextStopIterationr   	ExceptionrJ   sendr   r   rd   generK   r>   s          r-   _execute_syncz+_wrap_message_create.<locals>._execute_syncy  s    +A??????	"3iiOAtVV 	 	 	7NNNNNN			$D+F++ $ $ $"3'''t#$ 88F### 	 	 	7NNNNNN	sS   & 
A<AAA B 
A0A++A00B 
B#BB#B#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Nrf   
rE   rF   get_integrationr&   get_current_spanstatusr   INTERNAL_ERRORr   r   )r   rd   rf   rc   r   r   s       r-   _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   rd   r   r*   r   r   r   rd   r   r*   r   r   )r   r   r   s   ` @r-   r1   r1   x  sU       & 1XX
4 
4 
4 
4 
4 
4 X
4 '&r/   c                 J     ddt                     d	 fd            }|S )
Nr   r   r   rd   r*   c                 h  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 }n$# t          $ r}t          |           |d d }~ww xY w|                    |          S # t          $ r}|j        cY d }~S d }~ww xY wr,   r   r   s          r-   _execute_asyncz2_wrap_message_create_async.<locals>._execute_async  s(     +A??????	!"3iiOAtVV 	! 	! 	!======      	!		$ q$1&11111111 $ $ $"3'''t#$ 88F### 	 	 	7NNNNNN	sU   ( 
A	AA	A	A B 
A>'A99A>>B 
B1 B,&B1,B1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   rd   rf   rc   r   r   s       r-   _sentry_patched_create_asyncz@_wrap_message_create_async.<locals>._sentry_patched_create_async  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   ` @r-   r3   r3     sU       & 1XX
4 
4 
4 
4 
4 
4 X
4 ('r/   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   rR   r   )r   s    r-   r   r     s=     
3 9 9uJsD11u4r/   )r>   r   r*   N)rK   r   r*   rL   )rc   r$   rd   re   rf   r&   r*   N)Fr   )r   r   r*   r   )=collections.abcr   	functoolsr   typingr   rE   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   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'   r   ImportErrorr   anthropic.resourcesr   r   anthropic.typesr   r   r   r    r!   r"   r#   sentry_sdk.tracingr$   r&   rJ   rT   rS   rb   r   r;   r   r   r1   r3   r   r=   r/   r-   <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&&&&&&&   """""""    <;;;;;;; 7666666 2 2 2
,0
1
112  (JJJJJJJJJJJJJJJJ''''''P P P P P; P P P / / / /' ' ' ' >>> > 	>
  > .> > > >@Z

Z
*Z
9OZ
	Z
 Z
 Z
 Z
H ,( ,(
,(',( ,( 	,(
  ,(  ,( ,( 
,( ,( ,( ,(^n n n nb!' !' !' !'H!( !( !( !(H5 T      sN   A  B  A*'B )A**B .A5 4B 5A?<B >A??B B$