
    io6                     v   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
 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 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 Z0d Z1y# e$ r dZY Qw xY w# e$ r	  ed      w xY w)    wraps)TYPE_CHECKINGN)record_token_usage)set_data_normalizednormalize_message_roles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)	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     /var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/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_once0   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        | t        j                         j                  ddd      \  }}t        j
                  ||       y )Nr    F)typehandled)client_options	mechanism)hint)r   r   
sentry_sdk
get_clientoptionscapture_event)exceventr:   s      r%   _capture_exceptionrA   :   sE    &!,,.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)hasattrrC   
isinstancerD   intrE   )resultrD   rE   rC   s       r%   _get_token_usagerJ   F   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.
    r6   message_startcontent_block_startcontent_block_deltatextpartial_jsoncontent_block_stopmessage_deltaN)r   rF   r6   messagerC   rD   rE   modeldeltaappendrO   rP   )r@   rT   rD   rE   content_blocksrC   s         r%   _collect_ai_datarX   W   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      }|t        |      dkD  rt               r|j                  rg }|D ]  }|j                  d      dk(  rrd|v rnt	        |d   t
        t        f      rU|d   D ]L  }|j                  d      dk(  s|j                  d	|j                  d
      |j                  d      dd       N |j                  |        t        |      }t        | t        j                  |d       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   roleusercontentr6   tool_resulttooltool_use_id)r`   output)r[   r]   Funpackstream)
max_tokensrT   temperaturetop_ktop_ptools)getlenr   r#   rG   listtuplerV   r   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itemsr   GEN_AI_REQUEST_AVAILABLE_TOOLSr   )spankwargsintegrationrZ   normalized_messagesrS   itemrole_normalized_messageskwargs_keys_to_attributeskey	attributevalueri   s                r%   _set_input_datar   r   s   
 zz*%HMA#%''  	4GF#v-(wy1D%=A#I. 
Dxx'=8+22(.3788M3J.2hhy.A,"
 $**73%	4( $;;N#O ,,$		
 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                  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        | ||
       |r| j                  ddd       yy)z;
    Set output data for the span based on the AI response.)responser_   r6   rO   r   tool_user_   r   Frb   )rD   rE   N)set_datar   GEN_AI_RESPONSE_MODELr   r#   rV   rk   r   GEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_TEXTr   __exit__)	rw   ry   rT   rD   rE   rW   finish_spanoutput_messagesra   s	            r%   _set_output_datar      s    	MM(00%8 [%@%@

 % 	7Ff~'
+226&>B:-'..v6		7 v&'!+33'	 z*+a/h33_Z5P !# dD$' r'   c           
   /     K   |j                  d       | |i |S d|vr | |i |S 	 t        |d          |j                  dd      } t	               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}
t/        t1        |j,                              dk(  r |
       |_        n2 |	       |_        n%j3                  dd       j5                  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)Nry   rZ   rT    zchat )opnamer2   r]   to_dict
model_dumprO   )r6   rO   Trw   ry   rT   rD   rE   rW   r   	_iteratorc            
   3      K   d } d}d}g }D ]  }t        || |||      \  } }}}|  t        | ||dj                  |      ddgd       y wNr   r   rO   )rO   r6   Tr   rX   r   joinrT   rD   rE   rW   r@   ry   old_iteratorrw   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_async2  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	TypeErrorrj   r	   r
   GEN_AI_CHATstripr   r2   	__enter__r   r   rF   rJ   r]   rV   r   r   rO   r   getattrr   strr6   r   r   )fargsrx   rT   rI   rD   rE   rW   content_blockr   r   ry   r   rw   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   (H?H B H?<BH2CH2
H?H/,H?.H//H?2H<7H?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StopIterationr   	ExceptionrA   sendr   r   rx   generI   r?   s          r%   _execute_syncz+_wrap_message_create.<locals>._execute_syncY  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        j                         j                  t              }||d<   	  g| i |t        j                         }|E|j
                  t        j                  k(  r't               5  |j                  d d d        d d d        S S S # 1 sw Y   S xY w# t        j                         }|Q|j
                  t        j                  k(  r3t               5  |j                  d d d        d d d        w # 1 sw Y   w xY ww w xY wNry   
r;   r<   get_integrationr   get_current_spanstatusr   ERRORr   r   )r   rx   ry   rw   r   r   s       r%   _sentry_patched_create_syncz9_wrap_message_create.<locals>._sentry_patched_create_syncm  s     !++-==>RS +}	4 4T4V4..0DDKK:3C3C$C02 4MM$d34 4 %D4 4 ..0DDKK:3C3C$C02 4MM$d34 4 4 %Ds/   B" 7BB	">D C=4	D=D	Dr   )r   r   r   s   ` @r%   r)   r)   W  s(    ( 1X4 4 '&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_async  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                  8  K   t        j                         j                  t              }||d<   	  g| i | d {   t        j                         }|E|j
                  t        j                  k(  r't               5  |j                  d d d        d d d        S S S 7 _# 1 sw Y   S xY w# t        j                         }|Q|j
                  t        j                  k(  r3t               5  |j                  d d d        d d d        w # 1 sw Y   w xY ww w xY wwr   r   )r   rx   ry   rw   r   r   s       r%   _sentry_patched_create_asyncz@_wrap_message_create_async.<locals>._sentry_patched_create_async  s     !++-==>RS +}	4';D;F;;..0DDKK:3C3C$C02 4MM$d34 4 %D <4 4 ..0DDKK:3C3C$C02 4MM$d34 4 4 %Ds^   -DB.  B B. =DB"D B. "B+	'D.>D,D	 	D	D	DDr   )r   r   r   s   ` @r%   r+   r+   ~  s(    ( 1X4 4 ('r'   )F)2	functoolsr   typingr   r;   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   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   ImportErroranthropic.resourcesr   r   anthropic.typesr   r   r   r   sentry_sdk.tracingr   r   rA   rJ   rX   r   r   r   r)   r+   r4   r'   r%   <module>r      s        7 
 7 6 U U 4 5 2' <6 33'P; P$	/'">6>
P -(`qh$'N$(K  	  2
0
112s*   B B* B'$B* &B''B* *B8