
    i`^                        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
 d dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZ erd dlmZmZmZmZmZmZm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) erd dl*m+Z+m,Z, dZ-	 d dl.m/Z/m0Z0 d dl1m2Z2  G d de      Z3d'dZ4d Z5d Z6d Z7d'dZ8d Z9d Z:d  Z;d! Z<d" Z=d# Z>d$ Z?d% Z@d& ZAy# e#$ r dZ"Y lw xY w# e#$ r	  ed      w xY w# e#$ r dZ-Y _w xY w)(    wrapsN)consts)record_token_usage)set_data_normalizednormalize_message_roles)SPANDATA)DidNotEnableIntegration)should_send_default_pii)set_span_errored)capture_internal_exceptionsevent_from_exceptionsafe_serialize)TYPE_CHECKING)AnyIterableListOptionalCallableAsyncIteratorIterator)Span)	NOT_GIVEN)CompletionsAsyncCompletions)
EmbeddingsAsyncEmbeddings)ChatCompletionMessageParamChatCompletionChunkzOpenAI not installedT)	ResponsesAsyncResponses)ResponseCompletedEventFc                   8    e Zd ZdZde ZddZed        Zd Zy)OpenAIIntegrationopenaizauto.ai.Nc                 Z    || _         d | _        |dd l}|j                  |      | _        y y Nr   )include_promptstiktoken_encodingtiktokenget_encoding)selfr)   tiktoken_encoding_namer+   s       ~/var/www/html/hwPaymentPortal-be-dev/hw-payment-portal-api/venv/lib/python3.12/site-packages/sentry_sdk/integrations/openai.py__init__zOpenAIIntegration.__init__2   s4    .!%!-%-%:%:;Q%RD" .    c                     t        t        j                        t        _        t        t        j                        t        _        t        t        j                        t        _        t        t        j                        t        _        t        rEt        t        j                        t        _        t        t        j                        t        _        y y N)_wrap_chat_completion_creater   create"_wrap_async_chat_completion_creater   _wrap_embeddings_creater   _wrap_async_embeddings_creater   RESPONSES_API_ENABLED_wrap_responses_creater!   _wrap_async_responses_creater"    r1   r/   
setup_oncezOpenAIIntegration.setup_once<   s     :+:L:LM"D###
 4J4E4EF
!>?U?U!V 5i6F6FGI$@AVAV$WN! !r1   c                 d    | j                   $t        | j                   j                  |            S yr(   )r*   lenencode_ordinary)r-   ss     r/   count_tokenszOpenAIIntegration.count_tokensK   s-    !!-t--==a@AAr1   )TN)	__name__
__module____qualname__
identifieroriginr0   staticmethodr=   rB   r<   r1   r/   r%   r%   .   s4    J
|$FS X Xr1   r%   c                     t        j                         }t        |       |r||j                  d d d        t	        | t        j
                         j                  ddd      \  }}t        j                  ||       y )Nr&   F)typehandled)client_options	mechanism)hint)
sentry_sdkget_current_spanr   __exit__r   
get_clientoptionscapture_event)excmanual_span_cleanupcurrent_spaneventrN   s        r/   _capture_exceptionrY   R   sq     ..0L\"|7dD$/&!,,.66#6KE4
 U.r1   c                 |    |D ]7  }t        | |      st        t        | |      t              s+t        | |      c S  yr(   )hasattr
isinstancegetattrint)usagenamesnames      r/   
_get_usagerb   d   s=     (5$Jwud/CS$I5$''( r1   c                 H   d}d}d}d}d}	t        |d      rt        |j                  ddg      }t        |j                  d      r!t        |j                  j                  dg      }t        |j                  ddg      }t        |j                  d	      r!t        |j                  j                  d
g      }t        |j                  dg      }	|dk(  rJ| xs g D ]A  }
t        |
t              rd|
v r| ||
d         z  }&t        |
t              s7| ||
      z  }C |dk(  rT||D ]  }
| ||
      z  } n?t        |d      r3|j                  D ]$  }t        |d      s| ||j                        z  }& |xs d }|xs d }|xs d }|xs d }|	xs d }	t        ||||||	       y )Nr   r_   input_tokensprompt_tokensinput_tokens_detailscached_tokensoutput_tokenscompletion_tokensoutput_tokens_detailsreasoning_tokenstotal_tokenscontentchoicesmessage)rd   input_tokens_cachedrh   output_tokens_reasoningrl   )r[   rb   r_   rf   rj   r\   dictstrrn   ro   r   )messagesresponsespanstreaming_message_responsesrB   rd   rp   rh   rq   rl   ro   choices               r/   _calculate_token_usagery   l   s    LMLx!!(..>?2ST8>>#9:",33o5F# #NN_.AB
 8>>#:;&0447I6J'# "(..>2BC q~2 	6G'4(Y'-AWY-? @@GS)W 55		6 &26 7g!667Xy)"** B69-!\&..%AAMB
  '4L-5!)TM5='4L!/# 7!r1   c                 v   |j                  d      }||j                  d      }t        |t              r|g}|Lt        |      dkD  r>t	               r4|j
                  r(t        |      }t        | t        j                  |d       t        | t        j                  d       t        | t        j                  |       t        j                  t        j                  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 )	Nrt   inputr   Funpackr&   )modelstream
max_tokenspresence_penaltyfrequency_penaltytemperaturetop_ptools)getr\   rs   r?   r   r)   r   r   r	   GEN_AI_REQUEST_MESSAGESGEN_AI_SYSTEMGEN_AI_OPERATION_NAMEGEN_AI_REQUEST_MODELGEN_AI_RESPONSE_STREAMINGGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_PRESENCE_PENALTY GEN_AI_REQUEST_FREQUENCY_PENALTYGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_Pitemsr   GEN_AI_REQUEST_AVAILABLE_TOOLSr   )rv   kwargs	operationintegrationrt   normalized_messageskwargs_keys_to_attributeskey	attributevaluer   s              r/   _set_input_datar      s~    zz*%H::g&(C : 	MA#%''5h?(224GPU	

 h44h?h<<iH ..4488$DD%FF::..! 499; 8Y

3	!e&7i7	8 JJwEI%"3E
Q(99>%;P	
 9G"3r1   c                 V    t        d      r%t         t        j                  j                         |j                  d      |j                  d      t        t              rgt        d      rt               rfj                  rZj                  D cg c]  }|j                  j                          }}t        |      dkD  rt         t        j                  |       t         d j                          r j#                  d d d        y y t        d      r.t               rj                  rg g d}j$                  D ]t  }|j&                  dk(  r#|d	   j)                  |j                                5|j&                  d
k(  sE|j*                  D ]!  }		 |d   j)                  |	j,                         # v t        |d	         dkD  r t         t        j0                  |d	   d       t        |d         dkD  rt         t        j                  |d          t         d j                          r j#                  d d d        y y t        d      r_g j2                   fd}
 fd}t        t'        j2                              dk(  r |       _        y  |
       _        y t         d j                          r j#                  d d d        y y c c}w # t.        $ r& |d   j)                  |	j                                Y w xY w)Nr~   rt   r{   rn   r   output)ru   toolfunction_callr   ro   ru   Fr|   	_iteratorc            	   3     K   d} D ]6  }t               5  t        |d      rd}|j                  D ]v  }t        |d      rct        |j                  d      rM|j                  j                  }t              |k  rj                  g        |   j                  |xs d       |dz  }x nMt        |d      rAt              dk(  rj                  g        d   j                  |j                  xs d       t        r5t        |t              r%t        
|j                  d 	j                         d} d d d        | 9 t               5  t              dkD  rjD cg c]  }dj                  |       }}t               r'	j                  rt!        t"        j$                  |       | rt        
|	j                         d d d        rj'                  d d d        y y # 1 sw Y   xY wc c}w # 1 sw Y   1xY ww	NTrn   r   deltarm       Fr   r[   rn   r   rm   r?   appendr9   r\   r#   ry   ru   rB   joinr   r)   r   r	   GEN_AI_RESPONSE_TEXTrQ   count_tokens_manuallyxchoice_indexrx   rm   chunkall_responsesdata_buffinish_spanr   rt   old_iteratorru   rv   s          r/   new_iteratorz&_set_output_data.<locals>.new_iterator  s    $(!!  02 6q),'(&'ii .F&vw7G &i= +1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L. !G,x=A-$OOB/ **177=b9 -A?U1V.$JJ  '44 16-;6> A D -. x=1$AI$JRWWU^$JM$J.0[5P5P+ ("?"? -.$$ )'44  dD$/ c6 6F %K sH   HDG$3HG5G07AG5H$G-	)H0G55G>:Hc            	       K   d} 2 3 d {   }t               5  t        |d      rd}|j                  D ]v  }t        |d      rct        |j                  d      rM|j                  j                  }t              |k  rj                  g        |   j                  |xs d       |dz  }x nMt        |d      rAt              dk(  rj                  g        d   j                  |j                  xs d       t        r5t        |t              r%t        
|j                  d 	j                         d} d d d        | ?7 ;# 1 sw Y   xY w6 t               5  t              dkD  rpD cg c]  }dj                  |       nc c}w }}t               r'	j                  rt!        t"        j$                  |       | rt        
|	j                         d d d        n# 1 sw Y   nxY wrj'                  d d d        y y wr   r   r   s          r/   new_iterator_asyncz,_set_output_data.<locals>.new_iterator_asyncT  s    $(!'    a02 6q),'(&'ii .F&vw7G &i= +1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L. !G,x=A-$OOB/ **177=b9 -A?U1V.$JJ  '44 16-;6> A 6 6 (D -. x=1$AI$JRWWU^$J$JM$J.0[5P5P+ ("?"? -.$$ )'44   dD$/ s\   HEEEHDE
8HE
E	H!G)4FAG) 	H)G2.Hz<class 'async_generator'>)r[   r   r	   GEN_AI_RESPONSE_MODELr~   r   r\   rs   r   r)   rn   ro   rr   r?   r   ry   rB   rQ   r   rJ   r   rm   textAttributeErrorGEN_AI_RESPONSE_TOOL_CALLSr   )rv   ru   r   r   r   rx   response_textoutput_messagesr   output_messager   r   r   rt   r   s   `` ``       @@@r/   _set_output_datar      s   x!D("@"@(..Q zz*%H::g&
8S 9:x#"$)D)DAIAQAQRvV^^002RMR=!A%#D(*G*GWx4{?W?WXMM$d+  
8	$"$)D)DO
 #// 	V;;/1#F+226;;=A[[I-*0.. VV+J7>>~?R?RSV		V ?6*+a/#77#F+ 	 ?:./!3#(779T 	x4{?W?WXMM$d+  
;	'$&))6	0 6	0p5	0 5	0n tH&&'(,GG!3!5H!-Hx4{?W?WXMM$d+ O S.  . V+J7>>~?R?R?TUVs   "!K4'K99+L('L(c              /     K   t        j                         j                  t              }| | |i |S d|vr | |i |S 	 t	        |d          |j                  d      }d}t        j                  t        j                  j                  | d| t        j                        }|j                          t        ||||       | ||f}t        ||||d       |S # t
        $ r  | |i |cY S w xY ww)Nrt   r~   chat opra   rG   Tr   )rO   rR   get_integrationr%   iter	TypeErrorr   
start_spanr   OPGEN_AI_CHATrG   	__enter__r   r   fargsr   r   r~   r   rv   ru   s           r/   _new_chat_completion_commonr     s    '')99:KLK$!&!!$!&!!"VJ 
 JJwEI  99  {!E7# ''D
 	NND&)[9f_$HT8V[dKO)  "$!&!!"s*   >C3C BC3C0-C3/C00C3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r3   r   nextStopIterationr   	ExceptionrY   sendr   r   r   generesults         r/   _execute_syncz3_wrap_chat_completion_create.<locals>._execute_sync  s    )!=d=f=	"3iOAtV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	U   ; A A< 	AAAA	A9&A44A99A< <	BBBBc                      t        j                         j                  t              }|d|vr | i |S  g| i |S Nrt   rO   rR   r   r%   r   r   r   r   r   s      r/   _sentry_patched_create_synczA_wrap_chat_completion_create.<locals>._sentry_patched_create_sync  sQ     !++-==>OP*F":d%f%%Q0000r1   r   r   r   r   s   ` @r/   r4   r4     s(    ( 1X1 1 '&r1   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r3   r   r   s         r/   _execute_asyncz:_wrap_async_chat_completion_create.<locals>._execute_async  s     )!=d=f=	!"3iOAtV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	   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|vr | i | d {   S  g| i | d {   S 7 7 wr   r   r   r   r   r   r   s      r/   _sentry_patched_create_asynczH_wrap_async_chat_completion_create.<locals>._sentry_patched_create_async  sd      !++-==>OP*F":D+F+++#A77777 ,7s!   9AAAAAAr   r   r   r   s   ` @r/   r6   r6     s(    ( 1X8 8 ('r1   c              /     K   t        j                         j                  t              }| | |i |S |j	                  d      }d}t        j
                  t        j                  j                  | d| t        j                        5 }t        ||||       | ||f}t        ||||d       |cd d d        S # 1 sw Y   y xY ww)Nr~   
embeddingsr   r   Fr   )rO   rR   r   r%   r   r   r   r   GEN_AI_EMBEDDINGSrG   r   r   r   s           r/   _new_embeddings_create_commonr     s     '')99:KLK$!&!!JJwEI			99&&{!E7# ''
  
fi=D&(x%P  s   BC
'B;1
C;C C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 d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wNF)rV   r   r   r   r   r   rY   r   r   s         r/   r   z._wrap_embeddings_create.<locals>._execute_sync  s    +A???	"3iOAtV		"D+F+
 88F##  	77N	  ""1%@T!"
  	77N	sU   ; A A> 	AAAA	A;&A66A;;A> >	BBBBc                  ~    t        j                         j                  t              }| | i |S  g| i |S r3   r   r   s      r/   r   z<_wrap_embeddings_create.<locals>._sentry_patched_create_sync+  J     !++-==>OPd%f%%Q0000r1   r   r   s   ` @r/   r7   r7     (    ( 1X1 1 '&r1   c                 8     d t                fd       }|S )Nc                 n  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 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/   r   z5_wrap_async_embeddings_create.<locals>._execute_async9  s     +A???	!"3iOAtV		" $1&11
 88F##  	!== 	!
 2 ""1%@T!"
  	77N	s   B5A A2 A0A2 B B5	A-A(A A("A-#B5(A--B50A2 2	B;BBB 	B2B-'B2(B5-B22B5c                     K   t        j                         j                  t              }| | i | d {   S  g| i | d {   S 7 7 wr3   r   r   s      r/   r   zC_wrap_async_embeddings_create.<locals>._sentry_patched_create_asyncM  ]      !++-==>OPD+F+++#A77777 ,7!   5AAAAAAr   r   s   ` @r/   r8   r8   7  s(    ( 1X8 8 ('r1   c              /     K   t        j                         j                  t              }| | |i |S |j	                  d      }d}t        j
                  t        j                  j                  | d| t        j                        }|j                          t        ||||       | ||f}t        ||||d       |S w)Nr~   	responsesr   r   Tr   )rO   rR   r   r%   r   r   r   r   GEN_AI_RESPONSESrG   r   r   r   r   s           r/   _new_responses_create_commonr   Y  s     '')99:KLK$!&!!JJwEI  99%%{!E7# ''D
 	NND&)[9f_$HT8V[dKOs   B?C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r3   r   r   r   r   r   rY   r   r   s         r/   r   z-_wrap_responses_create.<locals>._execute_synct  s    *1>t>v>	"3iOAtV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	r   c                  ~    t        j                         j                  t              }| | i |S  g| i |S r3   r   r   s      r/   r   z;_wrap_responses_create.<locals>._sentry_patched_create_sync  r   r1   r   r   s   ` @r/   r:   r:   r  r   r1   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r3   r   r   s         r/   r   z4_wrap_async_responses_create.<locals>._execute_async  s     *1>t>v>	!"3iOAtV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	r   c                     K   t        j                         j                  t              }| | i | d {   S  g| i | d {   S 7 7 wr3   r   r   s      r/   _sentry_patched_responses_asynczE_wrap_async_responses_create.<locals>._sentry_patched_responses_async  r   r   r   )r   r  r   s   ` @r/   r;   r;     s(    ( 1X8 8 +*r1   )T)B	functoolsr   rO   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r   sentry_sdk.constsr	   sentry_sdk.integrationsr
   r   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   typingr   r   r   r   r   r   r   r   sentry_sdk.tracingr   r&   r   ImportError!openai.resources.chat.completionsr   r   openai.resourcesr   r   openai.types.chatr   r    r9   openai.resources.responsesr!   r"   /openai.types.responses.response_completed_eventr#   r%   rY   rb   ry   r   r   r   r4   r6   r   r7   r8   r   r:   r;   r<   r1   r/   <module>r     s      7 L & = 4 5  !WWW'/$ P<U  "DV
! !H/$:z.
bx,v F 'F (F.'D(D2'D+u  	  /
-
../  "!"s<   %C +C C, CC CC C),C65C6