
    ghY                        S SK Jr  S SKrS SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
JrJr  S SKJr  S S	KJrJrJr  S S
KJr  \(       a  S SKJrJrJrJrJrJrJr  S SKJr    S SKJr  S SK!J"r"J#r#  S SK$J%r%J&r&  \(       a  S SK'J(r(J)r)  Sr* S SK+J,r,J-r-  S SK.J/r/   " S S\5      r0S r1S r2S r3S r4S&S jr5S r6S r7S r8S  r9S! r:S" r;S# r<S$ r=S% r>g! \  a    Sr Nrf = f! \  a	    \" S5      ef = f! \  a    Sr* Nbf = f)'    wrapsN)consts)record_token_usage)set_data_normalized)SPANDATA)DidNotEnableIntegration)should_send_default_pii)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                   B    \ rS rSrSrS\ 3rS	S jr\S 5       rS r	Sr
g)
OpenAIIntegration-   openaizauto.ai.Nc                 Z    Xl         S U l        Ub  SS KnUR                  U5      U l        g g Nr   )include_promptstiktoken_encodingtiktokenget_encoding)selfr(   tiktoken_encoding_namer*   s       a/home/kali/devsecops-assessor/venv/lib/python3.13/site-packages/sentry_sdk/integrations/openai.py__init__OpenAIIntegration.__init__1   s2    .!%!-%-%:%:;Q%RD" .    c                     [        [        R                  5      [        l        [        [        R                  5      [        l        [        [        R                  5      [        l        [        [        R                  5      [        l        [        (       aE  [        [        R                  5      [        l        [        [        R                  5      [        l        g g 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_onceOpenAIIntegration.setup_once;   s     :+:L:LM"D###
 4J4E4EF
!>?U?U!V  5i6F6FGI$@AVAV$WN! !r1   c                 f    U R                   b$  [        U R                   R                  U5      5      $ gr'   )r)   lenencode_ordinary)r,   ss     r.   count_tokensOpenAIIntegration.count_tokensJ   s-    !!-t--==a@AAr1   )r(   r)   )TN)__name__
__module____qualname____firstlineno__
identifieroriginr/   staticmethodr=   rC   __static_attributes__r<   r1   r.   r#   r#   -   s4    J
|$FS X Xr1   r#   c                     [         R                  " 5       nUb  UR                  S S S 5        [        U [         R                  " 5       R
                  SSS.S9u  p#[         R                  " X#S9  g )Nr%   F)typehandled)client_options	mechanism)hint)
sentry_sdkget_current_span__exit__r   
get_clientoptionscapture_event)exccurrent_spaneventrR   s       r.   _capture_exceptionr\   Q   sc     ..0LdD$/&!,,.66#6KE
 U.r1   c                     U H@  n[        X5      (       d  M  [        [        X5      [        5      (       d  M5  [        X5      s  $    gr'   )hasattr
isinstancegetattrint)usagenamesnames      r.   
_get_usagere   a   s8    5Jwu/CS$I$I5''  r1   c           	         SnSnSnSnSn	[        US5      (       a  [        UR                  SS/5      n[        UR                  S5      (       a!  [        UR                  R                  S/5      n[        UR                  SS/5      n[        UR                  S	5      (       a!  [        UR                  R                  S
/5      n[        UR                  S/5      n	US:X  a]  U =(       d    /  HN  n
[        U
[        5      (       a  SU
;   a  XT" U
S   5      -  nM-  [        U
[        5      (       d  MD  XT" U
5      -  nMP     US:X  ab  Ub  U H  n
Xt" U
5      -  nM     OK[        US5      (       a:  UR                   H*  n[        US5      (       d  M  Xt" UR                  5      -  nM,     U=(       d    S nU=(       d    S nU=(       d    S nU=(       d    S nU	=(       d    S n	[        UUUUUU	S9  g )Nr   rb   input_tokensprompt_tokensinput_tokens_detailscached_tokensoutput_tokenscompletion_tokensoutput_tokens_detailsreasoning_tokenstotal_tokenscontentchoicesmessage)rg   input_tokens_cachedrk   output_tokens_reasoningro   )r^   re   rb   ri   rm   r_   dictstrrq   rr   r   )messagesresponsespanstreaming_message_responsesrC   rg   rs   rk   rt   ro   rr   choices               r.   _calculate_token_usager|   i   s    LMLx!!!(..>?2ST8>>#9::",33o5F# #NN_.AB
 8>>#:;;&0447I6J'# "(..>2BC q~2~G'4((Y'-AWY-? @@GS))W 55	 & &26g!66 7Xy))"**69--!\&..%AAM +
  '4L-5!)TM5='4L!/# 7!r1   c                    UR                  S5      nUc  UR                  S5      n[        U[        5      (       a  U/nUbJ  [        U5      S:  a;  [	        5       (       a,  UR
                  (       a  [        U [        R                  U5        [        U [        R                  S5        [        U [        R                  U5        [        R                  [        R                  [        R                  [        R                  [        R                  [        R                   [        R"                  S.nUR%                  5        H2  u  pgUR                  U5      nU[&        Ld  M!  Uc  M&  [        XU5        M4     UR                  S5      n	U	[&        La9  U	b5  [        U	5      S:  a%  [        U [        R(                  [+        U	5      5        g g g g )Nrw   inputr   r%   )modelstream
max_tokenspresence_penaltyfrequency_penaltytemperaturetop_ptools)getr_   rv   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   )
ry   kwargs	operationintegrationrw   kwargs_keys_to_attributeskey	attributevaluer   s
             r.   _set_input_datar      si    zz*%H::g&(C  : 	MA#%%''D("B"BHM h44h?h<<iH ..4488$DD%FF::..! 499;

3	!e&77	 < JJwEI%"3E
Q(99>%;P	
 9G"3r1   c                 |  ^ ^^^^
^^ [        TS5      (       a%  [        T [        R                  TR                  5        UR                  S5      mTc  UR                  S5      mTb  [        T[        5      (       a  T/m[        TS5      (       a  [        5       (       aw  TR                  (       af  TR                   Vs/ s H  oUR                  R                  5       PM     nn[        U5      S:  a$  [        T [        R                  [        U5      5        [!        TTT S TR"                  5        T(       a  T R%                  S S S 5        g g [        TS5      (       a  [        5       (       am  TR                  (       a\  TR&                   Vs/ s H  owR)                  5       PM     nn[        U5      S:  a$  [        T [        R                  [        U5      5        [!        TTT S TR"                  5        T(       a  T R%                  S S S 5        g g [        TS5      (       ab  / m
TR*                  mU
UUUUUU 4S jnU
UUUUUU 4S	 jn	[        [-        TR*                  5      5      S
:X  a  U	" 5       Tl        g U" 5       Tl        g [!        TTT S TR"                  5        T(       a  T R%                  S S S 5        g g s  snf s  snf )Nr   rw   r~   rq   r   output	_iteratorc            	   3   ^  >#    [        5          Sn T GHP  n[        US5      (       a  SnUR                   H  n[        US5      (       an  [        UR                  S5      (       aS  UR                  R                  n[        T5      U::  a  TR                  / 5        TU   R                  U=(       d    S5        US-  nM     OX[        US5      (       aG  [        T5      S:X  a  TR                  / 5        TS   R                  UR                  =(       d    S5        [        (       a:  [        U[        5      (       a%  [        T
UR                  TS T	R                  5        Sn Uv   GMS     [        T5      S:  a|  T Vs/ s H  nSR                  U5      PM     nn[        5       (       a,  T	R                  (       a  [!        T["        R$                  U5        U (       a  [        T
TTUT	R                  5        S S S 5        T(       a  TR'                  S S S 5        g g s  snf ! , (       d  f       N/= f7f	NTrq   r   deltarp       Fr   r^   rq   r   rp   r@   appendr9   r_   r!   r|   rx   rC   joinr   r(   r   r   GEN_AI_RESPONSE_TEXTrU   count_tokens_manuallyxchoice_indexr{   rp   chunkall_responsesdata_buffinish_spanr   rw   old_iteratorrx   ry   s          r.   new_iterator&_set_output_data.<locals>.new_iterator  s    ,.(,%%Aq),,'(&'iiF&vw77G &i= = +1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L '0 !G,,x=A-$OOB/ **177=b9 -,A?U1V1V.$JJ  '44 16-G? &B x=1$AI$JRWWU^M$J.00[5P5P+ ("?"? -.$$ )'44U /d dD$/  %KI /.s0   H-E-H;HAH3$H-H
H*&H-c            	     r  >#    [        5          Sn T  S h  vN n[        US5      (       a  SnUR                   H  n[        US5      (       an  [        UR                  S5      (       aS  UR                  R                  n[        T5      U::  a  TR                  / 5        TU   R                  U=(       d    S5        US-  nM     OX[        US5      (       aG  [        T5      S:X  a  TR                  / 5        TS   R                  UR                  =(       d    S5        [        (       a:  [        U[        5      (       a%  [        T
UR                  TS T	R                  5        Sn U7v   GMY   GNU
 [        T5      S:  a  T Vs/ s H  nSR                  U5      PM     Os  snf nn[        5       (       a,  T	R                  (       a  [!        T["        R$                  U5        U (       a  [        T
TTUT	R                  5        S S S 5        O! , (       d  f       O= fT(       a  TR'                  S S S 5        g g 7fr   r   r   s          r.   new_iterator_async,_set_output_data.<locals>.new_iterator_async8  s    ,.(,%+ !q),,'(&'iiF&vw77G &i= = +1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L '0 !G,,x=A-$OOB/ **177=b9 -,A?U1V1V.$JJ  '44 16-G?|B x=1$AI$JRWWU^$JM$J.00[5P5P+ ("?"? -.$$ )'44U /..b dD$/ sJ   H7H
E/E,E/EH
,E//H
FA#H
	H7

H#H7z<class 'async_generator'>)r^   r   r   GEN_AI_RESPONSE_MODELr   r   r_   rv   r   r(   rq   rr   ru   r@   r   r   r|   rC   rU   r   to_dictr   rN   )ry   rx   r   r   r   r{   response_textitemr   r   r   rw   r   s   `` ``     @@@r.   _set_output_datar      s6   x!!D("@"@(..Q zz*%H::g&
8S 9 9:x##"$$)D)DAIAQAQRAQv^^002AQMR=!A%#11"=1
 	x4{?W?WXMM$d+  
8	$	$"$$)D)D8@H\\^MH=!A%#11"=1
 	x4{?W?WXMM$d+  
;	'	'$&))5	0 5	0n4	0 4	0l tH&&'(,GG!3!5H!-Hx4{?W?WXMM$d+ a S Is   =#J4	J9c              /     #    [         R                  " 5       R                  [        5      nUc  U " U0 UD6$ SU;  a  U " U0 UD6$  [	        US   5        UR                  S5      nSn[         R                  " [        R                  R                  U SU 3[        R                  S9nUR                  5         [        XbXS5        XU4v n[        XgX#SS9  U$ ! [
         a    U " U0 UD6s $ f = f7f)Nrw   r   chat oprd   rJ   Tr   )rS   rV   get_integrationr#   iter	TypeErrorr   
start_spanr   OPGEN_AI_CHATrJ   	__enter__r   r   fargsr   r   r   r   ry   rx   s           r.   _new_chat_completion_commonr   x  s     '')99:KLK$!&!!$!&!!"VJ 
 JJwEI  99  {!E7# ''D
 	NND)9f_$HTVdKO)  "$!&!!"s+   AC.C BC.C+(C.*C++C.c                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 @   [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6nUR                  U5      $ ! [         a  nUR                  s S nA$ S nAff = f! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = fr3   r   nextStopIterationr   	Exceptionr\   sendr   r   r   generesults         r.   _execute_sync3_wrap_chat_completion_create.<locals>._execute_sync  s    )!=d=f=	"3iOAV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	U   : A A= 
AAAA
A:'A55A::A= =
BBBBc                     > [         R                  " 5       R                  [        5      nUb  SU;  a  T" U 0 UD6$ T" T/U Q70 UD6$ Nrw   rS   rV   r   r#   r   r   r   r   r   s      r.   _sentry_patched_create_syncA_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                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 n  #    [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6I S h  vN nUR                  U5      $ ! [         a  nUR                  I S h  vN  s S nA$ S nAff = f NA! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = f7fr3   r   r   s         r.   _execute_async:_wrap_async_chat_completion_create.<locals>._execute_async  s     )!=d=f=	!"3iOAV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	   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                     >#    [         R                  " 5       R                  [        5      nUb  SU;  a  T" U 0 UD6I S h  vN $ T" T/U Q70 UD6I S h  vN $  N N7fr   r   r   r   r   r   r   s      r.   _sentry_patched_create_asyncH_wrap_async_chat_completion_create.<locals>._sentry_patched_create_async  sb      !++-==>OP*F":D+F+++#A77777 ,7s#   =A AAAAAr   r   r   r   s   ` @r.   r6   r6     s(    ( 1X8 8 ('r1   c           	   /     #    [         R                  " 5       R                  [        5      nUc  U " U0 UD6$ UR	                  S5      nSn[         R
                  " [        R                  R                  U SU 3[        R                  S9 n[        XbXS5        XU4v n[        XgX#SS9  UsS S S 5        $ ! , (       d  f       g = f7f)Nr   
embeddingsr   r   Fr   )rS   rV   r   r#   r   r   r   r   GEN_AI_EMBEDDINGSrJ   r   r   r   s           r.   _new_embeddings_create_commonr     s     '')99:KLK$!&!!JJwEI			99&&{!E7# ''
 
i=&(%P
 
 
s   BC
B3)
C3
C=Cc                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 @   [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6nUR                  U5      $ ! [         a  nUR                  s S nA$ S nAff = f! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = fr3   r   r   r   r   r   r\   r   r   s         r.   r   ._wrap_embeddings_create.<locals>._execute_sync  s    +A???	"3iOAV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	r   c                     > [         R                  " 5       R                  [        5      nUc  T" U 0 UD6$ T" T/U Q70 UD6$ r3   r   r   s      r.   r   <_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                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 n  #    [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6I S h  vN nUR                  U5      $ ! [         a  nUR                  I S h  vN  s S nA$ S nAff = f NA! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = f7fr3   r   r   s         r.   r   5_wrap_async_embeddings_create.<locals>._execute_async  s     +A???	!"3iOAV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	r   c                     >#    [         R                  " 5       R                  [        5      nUc  T" U 0 UD6I S h  vN $ T" T/U Q70 UD6I S h  vN $  N N7fr3   r   r   s      r.   r   C_wrap_async_embeddings_create.<locals>._sentry_patched_create_async0  [      !++-==>OPD+F+++#A77777 ,7!   7AAAAAAr   r   s   ` @r.   r8   r8     s(    ( 1X8 8 ('r1   c              /   v  #    [         R                  " 5       R                  [        5      nUc  U " U0 UD6$ UR	                  S5      nSn[         R
                  " [        R                  R                  U SU 3[        R                  S9nUR                  5         [        XbXS5        XU4v n[        XgX#SS9  U$ 7f)Nr   	responsesr   r   Tr   )rS   rV   r   r#   r   r   r   r   GEN_AI_RESPONSESrJ   r   r   r   r   s           r.   _new_responses_create_commonr  <  s     '')99:KLK$!&!!JJwEI  99%%{!E7# ''D
 	NND)9f_$HTVdKOs   B7B9c                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 @   [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6nUR                  U5      $ ! [         a  nUR                  s S nA$ S nAff = f! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = fr3   r  r   r   r   r   r\   r   r   s         r.   r   -_wrap_responses_create.<locals>._execute_syncW  s    *1>t>v>	"3iOAV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	r   c                     > [         R                  " 5       R                  [        5      nUc  T" U 0 UD6$ T" T/U Q70 UD6$ r3   r   r   s      r.   r   ;_wrap_responses_create.<locals>._sentry_patched_create_synck  r   r1   r   r   s   ` @r.   r:   r:   U  r   r1   c                 :   ^ ^ S m[        T 5      UU 4S j5       nU$ )Nc                 n  #    [        U /UQ70 UD6n [        U5      u  pn  U " U0 UD6I S h  vN nUR                  U5      $ ! [         a  nUR                  I S h  vN  s S nA$ S nAff = f NA! [         a  n[        U5        US eS nAff = f! [         a  nUR                  s S nA$ S nAff = f7fr3   r  r   s         r.   r   4_wrap_async_responses_create.<locals>._execute_asyncy  s     *1>t>v>	!"3iOAV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	r   c                     >#    [         R                  " 5       R                  [        5      nUc  T" U 0 UD6I S h  vN $ T" T/U Q70 UD6I S h  vN $  N N7fr3   r   r   s      r.   _sentry_patched_responses_asyncE_wrap_async_responses_create.<locals>._sentry_patched_responses_async  r   r   r   )r   r  r   s   ` @r.   r;   r;   w  s(    ( 1X8 8 +*r1   )T)?	functoolsr   rS   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   sentry_sdk.constsr   sentry_sdk.integrationsr	   r
   sentry_sdk.scoper   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#   r\   re   r|   r   r   r   r4   r6   r   r7   r8   r  r:   r;   r<   r1   r.   <module>r     s      7 3 & = 4  !WWW'/$ P<U  "DV
! !H/ :z+
\a,H F 'F (F.'D(D2'D+}  	  /
-
../  "!"s<   "C (C 
C0 CC CC C-0C;:C;