
    fi8                        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 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( d dl)m*Z*  G d de          Z+d Z,d Z-d Z.d Z/	 ddZ0d Z1d Z2d Z3d Z4dS )    wraps)TYPE_CHECKINGN)record_token_usage)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)Spanc                   :    e Zd ZdZde ZddZed             ZdS )AnthropicIntegration	anthropiczauto.ai.Tc                     || _         d S N)include_prompts)selfr%   s     q/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/sentry_sdk/integrations/anthropic.py__init__zAnthropicIntegration.__init__2   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_once6   sL     "+..3W===.x??9-:NOOr)   N)T)__name__
__module____qualname__
identifieroriginr(   staticmethodr/    r)   r'   r!   r!   .   sZ        J$
$$F/ / / / P P \P P Pr)   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)exceventr<   s      r'   _capture_exceptionrC   @   sa    &!,..6&599  KE4
 U......r)   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)hasattrrE   
isinstancerF   intrG   )resultrF   rG   rE   s       r'   _get_token_usagerL   L   s    
 LMvw 05.)) 	.j9KS.Q.Q 	. -L5/** 	0z%:Ms/S/S 	0!/M&&r)   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.
    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   ]   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c           	         |                     d          }|>t          |          dk    r*t                      r|j        rg }|D ]}|                     d          dk    rd|v rt	          |d         t
          t          f          rf|d         D ]\}|                     d          dk    rA|                    d	|                     d
          |                     d          dd           ]|                    |           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        t1          |                     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.
    messagesNr   roleusercontentr8   tool_resulttooltool_use_id)rb   output)r]   r_   Funpackstream)
max_tokensrV   temperaturetop_ktop_ptools)getlenr   r%   rI   listtuplerX   r   r=   get_current_scoper	   r   r   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   )spankwargsintegrationr\   normalized_messagesrU   itemrole_normalized_messagesscopemessages_datakwargs_keys_to_attributeskey	attributevaluerk   s                  r'   _set_input_datar   x   s   
 zz*%%HMMA#%% '  ! 	4 	4GF##v--((wy1D%=AA ) $I. 
 
Dxx''=88+22(.3788M3J3J.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)   Fc                 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.)responsera   r8   rQ   r   tool_usera   r   Frd   )rF   rG   N)set_datar   GEN_AI_RESPONSE_MODELr   r%   rX   rm   r   GEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_TEXTr   __exit__)	r{   r}   rV   rF   rG   rY   finish_spanoutput_messagesrc   s	            r'   _set_output_datar      s~    	MM(0%888   [%@ 
 

 % 	7 	7Ff~''
+226&>BBBB:--'..v666v&''!++3'	    z*++a//h3_Z5P   !#     (dD$'''''( (r)   c           
   /   *  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          rZ|j        f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\   rV    zchat )opnamer4   r_   to_dict
model_dumprQ   )r8   rQ   Tr{   r}   rV   rF   rG   rY   r   	_iteratorc            
   3      K   d } d}d}g }D ]}t          || |||          \  } }}}|V  t          | ||d                    |          ddgd           d S Nr   r   rQ   )rQ   r8   Tr   rZ   r   joinrV   rF   rG   rY   rB   r}   old_iteratorr{   s        r'   new_iteratorz3_sentry_patched_create_common.<locals>.new_iterator"  s        !!#)    E(!5,~  GE<
  KKKK  +!-"/-/WW^-D-Df$U$U#V $     r)   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_async;  s        !!##/              %(!5,~  GE<
  KKKKK $0 ! +!-"/-/WW^-D-Df$U$U#V $     s   3z<class 'async_generator'>unknown_response)popiter	TypeErrorrl   r
   r   GEN_AI_CHATstripr!   r4   	__enter__r   r   rH   rL   r_   rX   r   r   rQ   r   getattrr   strr8   r   r   )fargsr|   rV   rK   rF   rG   rY   content_blockr   r   r}   r   r{   s              @@@r'   _sentry_patched_create_commonr      s     **]++Kq$!&!!!q$!&!!!"VJ     " " "q$!&!!!!!" JJw##E$"$$>U__""$$#*  D
 	NND&+...dF?""F	$	&	& T, T,69%% S	,*: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      2      2 4())**.III#5#5#7#7  #/<>>   MM,d333MM$d+++iT, T, T, T, T, T, T, T, T, T, T, T, T, T, T,l Ms$   A AA3F	JJJc                 F     d t                      fd            }|S )Nc                 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   	ExceptionrC   sendr   r   r|   generK   rA   s          r'   _execute_syncz+_wrap_message_create.<locals>._execute_syncb  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Nr}   
r=   r>   get_integrationr!   get_current_spanstatusr   ERRORr   r   )r   r|   r}   r{   r   r   s       r'   _sentry_patched_create_syncz9_wrap_message_create.<locals>._sentry_patched_create_syncv  s    !+--==>RSS +}	4 =4T444V44.00DDK:3C$C$C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  $C .00DDK:3C$C$C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  $CsA   B( 6BB	!B	(9D!D9DD		DD	Dr   )r   r   r   s   ` @r'   r+   r+   `  sK      ( 1XX4 4 4 4 4 X4 '&r)   c                 F     d t                      fd            }|S )Nc                 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   r|   r}   r{   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:3C$C$C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  $C .00DDK:3C$C$C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  $CsA   B1 ?B##B'	*B'	19D*DDDDDDr   )r   r   r   s   ` @r'   r-   r-     sK      ( 1XX4 4 4 4 4 X4 ('r)   c                 ~    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   rI   r   )objs    r'   ry   ry     s=    
 
3 9 9uJsD11u4r)   )F)5	functoolsr   typingr   r=   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   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   sentry_sdk.tracingr   r!   rC   rL   rZ   r   r   r   r+   r-   ry   r6   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  (3333333333''''''P P P P P; P P P$	/ 	/ 	/' ' '"> > >6A
 A
 A
V -( -( -( -(`q q qh$' $' $'N$( $( $(N	 	 	 	 	sN   A B A"B !A""B &A- ,B -A74B 6A77B B