
    lh-                     f   d dl mZ d dlZd dlmZ d dl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mZ d dlmZ d d	lmZmZmZmZ 	 	 d d
lmZ d dlmZmZ erd dlmZ 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Z*d Z+d Z,d Z-y# e$ r dZY Qw xY w# e$ r	  ed      w xY w)    wrapsN)TYPE_CHECKING)record_token_usage)set_data_normalized)OPSPANDATA)_check_minimum_versionDidNotEnableIntegration)should_send_default_pii)capture_internal_exceptionsevent_from_exceptionpackage_versionsafe_serialize)	NOT_GIVEN)AsyncMessagesMessages)MessageStreamEventzAnthropic not installed)AnyAsyncIteratorIterator)Spanc                   2    e Zd ZdZde ZddZed        Zy)AnthropicIntegration	anthropiczauto.ai.c                     || _         y N)include_prompts)selfr   s     s/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/sentry_sdk/integrations/anthropic.py__init__zAnthropicIntegration.__init__(   s
    .    c                      t        d      } t        t        |        t        t        j
                        t        _        t        t        j
                        t        _        y )Nr   )r   r
   r   _wrap_message_creater   create_wrap_message_create_asyncr   )versions    r!   
setup_oncezAnthropicIntegration.setup_once,   s<     "+.3W=.x?9-:N:NOr#   N)T)__name__
__module____qualname__
identifieroriginr"   staticmethodr)    r#   r!   r   r   $   s.    J
|$F/ P Pr#   r   c                     t        | t        j                         j                  ddd      \  }}t        j                  ||       y )Nr   F)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)exceventr6   s      r!   _capture_exceptionr=   6   s?    &!,,.66&59KE4
 U.r#   c                 
   d}d}t        | d      rp| 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)hasattrr?   
isinstancer@   intrA   )resultr@   rA   r?   s       r!   _get_token_usagerF   @   st    
 LMvw5.)j9K9KS.Q --L5/*z%:M:Ms/S!//M&&r#   c                    t               5  t        | d      r-| j                  dk(  rO| j                  j                  }||j
                  z  }||j                  z  }| j                  j                  xs |}n| j                  dk(  rn| j                  dk(  rxt        | j                  d      r&|j                  | j                  j                         ntt        | j                  d      r^|j                  | j                  j                         n8| j                  dk(  rn(| j                  dk(  r|| j                  j                  z  }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.
    r2   message_startcontent_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_deltaN)r   rB   r2   messager?   r@   rA   modeldeltaappendrK   rL   )r<   rP   r@   rA   content_blocksr?   s         r!   _collect_ai_datarT   Q   s"   
 
%	& ;5&!zz_,++ 2 22!4!44++4u44445;;/"))%++*:*:;U[[.9"))%++*B*BC33.!:!::#;& ,~=='; ;s   D;EEc                    |j                  d      }|Ht        |      dkD  r:t               r0|j                  r$t	        | t
        j                  t        |             t	        | t
        j                  |j                  dd             t
        j                  t
        j                  t
        j                  t
        j                  t
        j                  d}|j                         D ]/  \  }}|j                  |      }|t        us |#t	        | ||       1 |j                  d      }|t        ur7|4t        |      dkD  r%t	        | t
        j                   t        |             yyyy)zq
    Set input data for the span based on the provided keyword arguments for the anthropic message creation.
    messagesNr   streamF)
max_tokensrP   temperaturetop_ktop_ptools)getlenr   r   r   r	   GEN_AI_REQUEST_MESSAGESr   GEN_AI_RESPONSE_STREAMINGGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_MODELGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_KGEN_AI_REQUEST_TOP_Pitemsr   GEN_AI_REQUEST_AVAILABLE_TOOLS)	spankwargsintegrationrV   kwargs_keys_to_attributeskey	attributevaluer\   s	            r!   _set_input_dataro   l   s7   
 zz*%HMA#%''(22N84L	
 h00&**Xu2M
 88..::....! 499; 8Y

3	!e&7i78 JJwEI%"3E
Q(99>%;P	
 9G"3r#   c                    | j                  t        j                  |       t               r<|j                  r0t        | t        j                  t        j                  |      d       t        | ||       |r| j                  ddd       yy)z;
    Set output data for the span based on the AI response.F)unpack)r@   rA   N)set_datar	   GEN_AI_RESPONSE_MODELr   r   r   GEN_AI_RESPONSE_TEXTjsondumpsr   __exit__rh   rj   rP   r@   rA   rS   finish_spans          r!   _set_output_datarz      sv     	MM(00%8 [%@%@))JJ~&		
 !# dD$' r#   c           
   /     K   |j                  d       | |i |S d|vr | |i |S 	 t        |d          |j                  dd      }t	        j
                  t        j                  d| j                         t        j                        j                          t        |       | ||f}t               5  t        |d      rt        |      \  }}g }|j                   D ]  }t        |d      r |j#                  |j%                                /t        |d	      r |j#                  |j'                                [t        |d
      sh|j#                  d
|j(                  d        t+        t-        |dd       |||d       nt        |d      rU|j.                  fd}	fd}
t1        t3        |j.                              dk(  r |
       |_        n2 |	       |_        n%j5                  dd       j7                  d d d        d d d        |S # t        $ r  | |i |cY S w xY w# 1 sw Y   |S xY ww)Nrj   rV   rP    zchat )opnamer.   contentto_dict
model_dumprK   )r2   rK   Trx   	_iteratorc            
   3      K   d } d}d}g }D ]  }t        || |||      \  } }}}|  t        | ||dj                  |      ddgd       y wNr   r|   rK   )rK   r2   Trx   rT   rz   joinrP   r@   rA   rS   r<   rj   old_iteratorrh   s        r!   new_iteratorz3_sentry_patched_create_common.<locals>.new_iterator   s       !!#)  E(!5,~ GE<
  K  ! +!-"/-/WW^-Df$U#V $s   AAc            
        K   d } d}d}g }2 3 d {   }t        || |||      \  } }}}| #7 6 t        | ||dj                  |      ddgd       y wr   r   r   s        r!   new_iterator_asyncz9_sentry_patched_create_common.<locals>.new_iterator_async  s       !!##/    %(!5,~ GE<
  K < ! +!-"/-/WW^-Df$U#V $s   A313A3'Az<class 'async_generator'>unknown_response)popiter	TypeErrorr]   r7   
start_spanr   GEN_AI_CHATstripr   r.   	__enter__ro   r   rB   rF   r   rR   r   r   rK   rz   getattrr   strr2   rr   rw   )fargsri   rP   rE   r@   rA   rS   content_blockr   r   rj   r   rh   s              @@@r!   _sentry_patched_create_commonr      s<    **]+K$!&!!$!&!!"VJ  JJw#E  >>UG_""$#**D
 	NND&+.dF?"F	$	& T,69%*:6*B'L-N!' X=)4"))-*?*?*AB]L9"))-*B*B*DE]F3"))6=CUCU*VWX 'fgt4)+-  V[)!++L22 4(()*.II#5#7 #/>  MM,d3MM$d+iT,l MM  "$!&!!" T,l MsH   (IH  BIBH7CH7
I H41I3H44I7I<Ic                 8     d t                fd       }|S )Nc                 <   t        | g|i |}	 t        |      \  } }}	 	  | |i |}|j                  |      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr   r   nextStopIterationrn   	Exceptionr=   sendr   r   ri   generE   r;   s          r!   _execute_syncz+_wrap_message_create.<locals>._execute_sync+  s    +A???	"3iOAtV		$D+F+
 88F##  	77N	  $"3't#$
  	77N	sU   ; A A< 	AAAA	A9&A44A99A< <	BBBBc                  t    t        j                         j                  t              }||d<    g| i |S Nrj   r7   r8   get_integrationr   )r   ri   rj   r   r   s      r!   _sentry_patched_create_syncz9_wrap_message_create.<locals>._sentry_patched_create_sync?  s>     !++-==>RS +}Q0000r#   r   )r   r   r   s   ` @r!   r%   r%   )  s(    ( 1X1 1 '&r#   c                 8     d t                fd       }|S )Nc                 j  K   t        | g|i |}	 t        |      \  } }}	 	  | |i | d {   }|j                  |      S # t        $ r}|j                   d {  7  cY d }~S d }~ww xY w7 @# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwr   r   r   s          r!   _execute_asyncz2_wrap_message_create_async.<locals>._execute_asyncL  s     +A???	!"3iOAtV		$ $1&11
 88F##  	!== 	!
 2 $"3't#$
  	77N	s   B3A A2 A0A2 B B3	A-A(A A("A-#B3(A--B30A2 2	B;B		BB 	B0B+%B0&B3+B00B3c                     K   t        j                         j                  t              }||d<    g| i | d {   S 7 wr   r   )r   ri   rj   r   r   s      r!   _sentry_patched_create_asyncz@_wrap_message_create_async.<locals>._sentry_patched_create_async`  sH      !++-==>RS +}#A777777s   <AA Ar   )r   r   r   s   ` @r!   r'   r'   J  s(    ( 1X8 8 ('r#   )F).	functoolsr   ru   typingr   r7   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   sentry_sdk.constsr   r	   sentry_sdk.integrationsr
   r   r   sentry_sdk.scoper   sentry_sdk.utilsr   r   r   r   r   r   ImportErroranthropic.resourcesr   r   anthropic.typesr   r   r   r   sentry_sdk.tracingr   r   r=   rF   rT   ro   rz   r   r%   r'   r0   r#   r!   <module>r      s         7 3 * U U 4 2' <6 33'P; P$/'">6%
^ (Bqh'B(k	  	  2
0
112s*   B B" BB" BB" "B0