
    fia                     :   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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# 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( d dl)m*Z*m+Z+ erd dl,m-Z-m.Z. n# e$$ r  ed          w xY wdZ/	 d dl0m1Z1m2Z2 d dl3m4Z4 n# e$$ r dZ/Y nw xY w G d de          Z5d)dZ6d Z7d Z8d Z9d)dZ:d Z;d  Z<d! Z=d" Z>d# Z?d$ Z@d% ZAd& ZBd' ZCd( ZDdS )*    wrapsN)consts)record_token_usage)set_data_normalizednormalize_message_rolestruncate_and_annotate_messages)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)NotGiven)Omit)CompletionsAsyncCompletions)
EmbeddingsAsyncEmbeddings)ChatCompletionMessageParamChatCompletionChunkzOpenAI not installedT)	ResponsesAsyncResponses)ResponseCompletedEventFc                   @    e Zd ZdZde ZddZed             Zd ZdS )	OpenAIIntegrationopenaizauto.ai.TNc                 f    || _         d | _        | dd l}|                    |          | _        d S d S Nr   )include_promptstiktoken_encodingtiktokenget_encoding)selfr+   tiktoken_encoding_namer-   s       n/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/sentry_sdk/integrations/openai.py__init__zOpenAIIntegration.__init__;   sF    .!%!-OOO%-%:%:;Q%R%RD""" .-    c                     t          t          j                  t          _        t          t          j                  t          _        t          t          j                  t          _        t          t          j                  t          _        t          rHt          t          j                  t          _        t          t          j                  t          _        d S d S 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$    r3   r1   
setup_oncezOpenAIIntegration.setup_onceE   s     :+:LMM"D##
 #
 4J4EFF
!>?U!V!V  	X5i6FGGI$@AV$W$WN!!!	X 	Xr3   c                 b    | j         't          | j                             |                    S dS r*   )r,   lenencode_ordinary)r/   ss     r1   count_tokenszOpenAIIntegration.count_tokensT   s/    !-t-==a@@AAAqr3   )TN)	__name__
__module____qualname__
identifieroriginr2   staticmethodr?   rD   r>   r3   r1   r'   r'   7   sk        J$
$$FS S S S X X \X    r3   r'   c                    t          j                    }t          |           |r||                    d d d            t	          | t          j                    j        ddd          \  }}t          j        ||           d S )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eventrP   s        r1   _capture_exceptionr[   [   s     .00L\""" 0|7dD$///&!,..6#66  KE4
 U......r3   c                     |D ]G}t          | |          r5t          t          | |          t                    rt          | |          c S HdS r*   )hasattr
isinstancegetattrint)usagenamesnames      r1   
_get_usagerd   m   sZ     ( (5$ 	(Jwud/C/CS$I$I 	(5$'''''1r3   c                 B   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    rX| pg D ]S}
t          |
t                    rd|
v r| ||
d                   z  }0t          |
t                    r| ||
          z  }T|dk    rS||D ]}
| ||
          z  }n=t          |d          r-|j        D ]%}t          |d          r| ||j	                  z  }&|pd }|pd }|pd }|pd }|	pd }	t          ||||||	           d S )Nr   ra   input_tokensprompt_tokensinput_tokens_detailscached_tokensoutput_tokenscompletion_tokensoutput_tokens_detailsreasoning_tokenstotal_tokenscontentchoicesmessage)rf   input_tokens_cachedrj   output_tokens_reasoningrn   )r]   rd   ra   rh   rl   r^   dictstrrp   rq   r   )messagesresponsespanstreaming_message_responsesrD   rf   rr   rj   rs   rn   rq   choices               r1   _calculate_token_usager{   u   sV    LMLx!! D!(.>?2STT8>#9:: 	",3o5F# # #N_.AB
 
 8>#:;; 	&047I6J' '# "(.>2BCC q~2 	6 	6G'4(( 6Y'-A-AWY-? @ @@GS)) 6W 5 55&26 7 7g!6!667Xy)) 	B"* B B69-- B!\\&.%A%AAM  '4L-5!)TM5='4L!/# 7!     r3   c                    |                     d          }||                     d          }t          |t                    r|g}|zt          |          dk    rgt	                      rY|j        rRt          |          }t          j                    }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}|                                D ]<\  }	}
|                     |	          }| t/          |          rt          | |
|           =|                     d          }|Lt/          |          r?t          |          dk    r.t          | t          j        t3          |                     d S d S d S d S )	Nrv   inputr   Funpackr(   )modelstream
max_tokenspresence_penaltyfrequency_penaltytemperaturetop_ptools)getr^   ru   rA   r   r+   r   rQ   get_current_scoper	   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items	_is_givenGEN_AI_REQUEST_AVAILABLE_TOOLSr   )rx   kwargs	operationintegrationrv   normalized_messagesscopemessages_datakwargs_keys_to_attributeskey	attributevaluer   s                r1   _set_input_datar      s     zz*%%H::g&&(C   : 	MMA#%% '  6h??,..67JDRWXX$h6e   
 h4h???h<iHHH .48$D%F:.! ! 499;; 8 8Y

35!1!1i777 JJwEYu--#e**q..(9>%;P;P	
 	
 	
 	
 	
 ..r3   c                     t          d          r t           t          j        j                   |                    d          |                    d          t          t                    rgt          d          rt                      rFj	        r?d j
        D             }t          |          dk    rt           t          j        |           t           d j                   r                     d d d            d S d S t          d          r}t                      r9j	        r1g g d}j        D ]}|j        d	k    r.|d
                             |                                           ;|j        dk    rh|j        D ]`}	 |d                             |j                   $# t,          $ r0 |d                             |                                           Y ]w xY wt          |d
                   dk    r#t           t          j        |d
         d           t          |d                   dk    r!t           t          j        |d                    t           d j                   r                     d d d            d S d S t          d          rfg j         fd}	 fd}
t          t#          j                            dk    r |
            _        d S  |	            _        d S t           d j                   r                     d d d            d S d S )Nr   rv   r}   rp   c                 N    g | ]"}|j         	|j                                         #S r5   )rq   
model_dump).0rz   s     r1   
<listcomp>z$_set_output_data.<locals>.<listcomp>   s8       >- ))++---r3   r   output)rw   toolfunction_callr   rq   rw   Fr~   	_iteratorc            	   3      K   d} 
D ]Z}t                      5  t          |d          rd}|j        D ]}}t          |d          rft          |j        d          rQ|j        j        }t                    |k    r                    g            |                             |pd           |dz  }~nZt          |d          rJt                    dk    r                    g            d                             |j        pd           t          r4t          |t                    rt          	|j        d j                   d} d d d            n# 1 swxY w Y   |V  \t                      5  t                    dk    rVd	 D             }t                      r"j        rt          t           j        |           | rt          	|j                   d d d            n# 1 swxY w Y   r                    d d d            d S d S )
NTrp   r   deltaro       Fc                 8    g | ]}d                      |          S r   joinr   chunks     r1   r   z:_set_output_data.<locals>.new_iterator.<locals>.<listcomp>S  "    $J$J$JRWWU^^$J$J$Jr3   r   r]   rp   r   ro   rA   appendr;   r^   r%   r{   rw   rD   r   r+   r   r
   GEN_AI_RESPONSE_TEXTrS   count_tokens_manuallyxchoice_indexrz   ro   all_responsesdata_buffinish_spanr   rv   old_iteratorrw   rx   s         r1   new_iteratorz&_set_output_data.<locals>.new_iterator,  s     $(!!    022 6 6q),, :'(&'i . .F&vw77 MG &i= = M +1,*>#&x==L#@#@$,OOB$7$7$7 ( 6 = =gm L L L(A-LL. !G,, :x==A--$OOB/// **17=b999 - 6A?U1V1V 6.$J  '4   16-;6 6 6 6 6 6 6 6 6 6 6 6 6 6 6> ,..  x==1$$$J$J$J$J$JM.00 [5P + ("?   - .$$ )'4                   0dD$/////0 0s%   D.EE	E	2A*G((G,/G,c            	     ,  K   d} 
2 3 d {V }t                      5  t          |d          rd}|j        D ]}}t          |d          rft          |j        d          rQ|j        j        }t                    |k    r                    g            |                             |pd           |dz  }~nZt          |d          rJt                    dk    r                    g            d                             |j        pd           t          r4t          |t                    rt          	|j        d j                   d} d d d            n# 1 swxY w Y   |W V  a6 t                      5  t                    dk    rVd	 D             }t                      r"j        rt          t           j        |           | rt          	|j                   d d d            n# 1 swxY w Y   r                    d d d            d S d S )
NTrp   r   r   ro   r   r   Fc                 8    g | ]}d                      |          S r   r   r   s     r1   r   z@_set_output_data.<locals>.new_iterator_async.<locals>.<listcomp>  r   r3   r   r   s         r1   new_iterator_asyncz,_set_output_data.<locals>.new_iterator_asyncd  s     $(!'              a022 6 6q),, :'(&'i . .F&vw77 MG &i= = M +1,*>#&x==L#@#@$,OOB$7$7$7 ( 6 = =gm L L L(A-LL. !G,, :x==A--$OOB/// **17=b999 - 6A?U1V1V 6.$J  '4   16-;6 6 6 6 6 6 6 6 6 6 6 6 6 6 6> A (D -..  x==1$$$J$J$J$J$JM.00 [5P + ("?   - .$$ )'4                  0dD$/////0 0s*   E)D.EE	E	8A*G..G25G2z<class 'async_generator'>)r]   r   r
   GEN_AI_RESPONSE_MODELr   r   r^   ru   r   r+   rp   rA   r   r{   rD   rS   r   rL   r   rt   ro   textAttributeErrorGEN_AI_RESPONSE_TOOL_CALLSr   )rx   rw   r   r   r   response_textoutput_messagesr   output_messager   r   r   rv   r   s   `` ``      @@@r1   _set_output_datar      s;   x!! RD("@(.QQQ zz*%%H::g&&
8S 9 9:x## n,"$$ 	X)D 	X &.  M
 =!!A%%#D(*GWWWx4{?WXXX 	,MM$d+++++	, 	, 
8	$	$ _,"$$ 	)D 	 O
 #/ 	V 	V;/11#F+226;;==AAAA[I--*0. V VV+J7>>~?RSSSS- V V V+J7>>~?R?R?T?TUUUUUV ?6*++a//#7#F+ 	    ?:.//!33#(79T   	x4{?WXXX 	,MM$d+++++	, 	, 
;	'	' {,$&)6	0 6	0 6	0 6	0 6	0 6	0 6	0 6	0 6	0 6	0 6	0p5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0n tH&''((,GGG!3!3!5!5H!-Hx4{?WXXX 	,MM$d+++++	, 	,s    F<<7G65G6c              /     K   t          j                                        t                    }| | |i |S d|vr | |i |S 	 t	          |d                    n# t
          $ r  | |i |cY S w xY w|                    d          }d}t          j        t          j	        j
        | d| t          j                  }|                                 t          ||||           | ||fV }t          ||||d           |S )Nrv   r   chat oprc   rI   Tr   )rQ   rT   get_integrationr'   iter	TypeErrorr   
start_spanr   OPGEN_AI_CHATrI   	__enter__r   r   fargsr   r   r   r   rx   rw   s           r1   _new_chat_completion_commonr     sR     '))99:KLLKq$!&!!!q$!&!!!"VJ     " " "q$!&!!!!!" JJwEI 9 ##E## '  D
 	NND&)[999f_$$HT8V[dKKKKOs   A A0/A0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r5   r   nextStopIterationr   	Exceptionr[   sendr   r   r   generesults         r1   _execute_syncz3_wrap_chat_completion_create.<locals>._execute_sync  s    )!=d===f==	"3iiOAtVV 	 	 	7NNNNNN			"D+F++ " " ""1%%%T!" 88F### 	 	 	7NNNNNN	S   & 
A<AAA B 
A0A++A00B 
B#BB#B#c                      t          j                                        t                    }|d|vr | i |S  g| R i |S Nrv   rQ   rT   r   r'   r   r   r   r   r   s      r1   _sentry_patched_create_synczA_wrap_chat_completion_create.<locals>._sentry_patched_create_sync  sg     !+--==>OPP*F":":1d%f%%%}Q0000000r3   r   r   r   r   s   ` @r1   r6   r6     sK      ( 1XX1 1 1 1 1 X1 '&r3   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r5   r   r   s         r1   _execute_asyncz:_wrap_async_chat_completion_create.<locals>._execute_async  s(     )!=d===f==	!"3iiOAtVV 	! 	! 	!======      	!		" q$1&11111111 " " ""1%%%T!" 88F### 	 	 	7NNNNNN	U   ( 
A	AA	A	A B 
A>'A99A>>B 
B1 B,&B1,B1c                     K   t          j                                        t                    }|d|vr | i | d {V S  g| R i | d {V S r   r   r   r   r   r   r   s      r1   _sentry_patched_create_asynczH_wrap_async_chat_completion_create.<locals>._sentry_patched_create_async  s       !+--==>OPP*F":":D+F+++++++++#^A7777777777777r3   r   r   r   r   s   ` @r1   r8   r8     sK      ( 1XX8 8 8 8 8 X8 ('r3   c              /     K   t          j                                        t                    }| | |i |S |                    d          }d}t          j        t          j        j        | d| t          j	                  5 }t          ||||           | ||fV }t          ||||d           |cd d d            S # 1 swxY w Y   d S )Nr   
embeddingsr   r   Fr   )rQ   rT   r   r'   r   r   r   r   GEN_AI_EMBEDDINGSrI   r   r   r   s           r1   _new_embeddings_create_commonr     s0     '))99:KLLKq$!&!!!JJwEI		9&##E## '
 
 
  
fi===D&((x%PPPP                 s   /C  CCc                 F     d t                      fd            }|S )Nc                 P   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 d }~ww xY w|                    |          S # t          $ r}|j        cY d }~S d }~ww xY wNF)rX   r   r   r   r   r   r[   r   r   s         r1   r   z._wrap_embeddings_create.<locals>._execute_sync'  s   +A??????	"3iiOAtVV 	 	 	7NNNNNN			"D+F++ " " ""1%@@@@T!" 88F### 	 	 	7NNNNNN	sS   & 
A<AAA B
 
A2A--A22B
 

B%B B% B%c                      t          j                                        t                    }| | i |S  g| R i |S r5   r   r   s      r1   r   z<_wrap_embeddings_create.<locals>._sentry_patched_create_sync;  ]     !+--==>OPP1d%f%%%}Q0000000r3   r   r   s   ` @r1   r9   r9   %  K      ( 1XX1 1 1 1 1 X1 '&r3   c                 F     d t                      fd            }|S )Nc                 l  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 d }~ww xY w|                    |          S # t          $ r}|j        cY d }~S d }~ww xY wr   r   r   s         r1   r   z5_wrap_async_embeddings_create.<locals>._execute_asyncI  s-     +A??????	!"3iiOAtVV 	! 	! 	!======      	!		" q$1&11111111 " " ""1%@@@@T!" 88F### 	 	 	7NNNNNN	sU   ( 
A	AA	A	A B 
B 'A;;B  B 
B3"B.(B3.B3c                     K   t          j                                        t                    }| | i | d {V S  g| R i | d {V S r5   r   r   s      r1   r   zC_wrap_async_embeddings_create.<locals>._sentry_patched_create_async]         !+--==>OPPD+F+++++++++#^A7777777777777r3   r   r   s   ` @r1   r:   r:   G  sK      ( 1XX8 8 8 8 8 X8 ('r3   c              /     K   t          j                                        t                    }| | |i |S |                    d          }d}t          j        t          j        j        | d| t          j	                  }|
                                 t          ||||           | ||fV }t          ||||d           |S )Nr   	responsesr   r   Tr   )rQ   rT   r   r'   r   r   r   r   GEN_AI_RESPONSESrI   r   r   r   r   s           r1   _new_responses_create_commonr  i  s      '))99:KLLKq$!&!!!JJwEI 9%##E## '  D
 	NND&)[999f_$$HT8V[dKKKKOr3   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r5   r  r   r   r   r   r[   r   r   s         r1   r   z-_wrap_responses_create.<locals>._execute_sync  s    *1>t>>>v>>	"3iiOAtVV 	 	 	7NNNNNN			"D+F++ " " ""1%%%T!" 88F### 	 	 	7NNNNNN	r   c                      t          j                                        t                    }| | i |S  g| R i |S r5   r   r   s      r1   r   z;_wrap_responses_create.<locals>._sentry_patched_create_sync  r  r3   r   r   s   ` @r1   r<   r<     r  r3   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r5   r  r   s         r1   r   z4_wrap_async_responses_create.<locals>._execute_async  s(     *1>t>>>v>>	!"3iiOAtVV 	! 	! 	!======      	!		" q$1&11111111 " " ""1%%%T!" 88F### 	 	 	7NNNNNN	r   c                     K   t          j                                        t                    }| | i | d {V S  g| R i | d {V S r5   r   r   s      r1   _sentry_patched_responses_asynczE_wrap_async_responses_create.<locals>._sentry_patched_responses_async  r  r3   r   )r   r  r   s   ` @r1   r=   r=     sK      ( 1XX8 8 8 8 8 X8 +*r3   c                 ~    t           t          | t                     rdS t          t          | t                    rdS dS )zF
    Check for givenness safely across different openai versions.
    NFT)r   r^   r   )objs    r1   r   r     s=    
 
3 9 9uJsD11u4r3   )T)E	functoolsr   rQ   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r   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   ImportErrorr   !openai.resources.chat.completionsr   r   openai.resourcesr   r    openai.types.chatr!   r"   r;   openai.resources.responsesr#   r$   /openai.types.responses.response_completed_eventr%   r'   r[   rd   r{   r   r   r   r6   r8   r   r9   r:   r  r<   r=   r   r>   r3   r1   <module>r&     s                   7 7 7 7 7 7         
 ' & & & & & = = = = = = = = 4 4 4 4 4 4 5 5 5 5 5 5          !           (WWWWWWWWWWWWWWWWWW''''''/#######       POOOOOOO<<<<<<<< VUUUUUUUU / / /
,-
.
../  "DDDDDDDDVVVVVVV " " "!"! ! ! ! ! ! ! !H/ / / /$  : : :z1
 1
 1
h|, |, |, |,~     F '  '  'F (  (  (F  .' ' 'D( ( (D  2' ' 'D+ + +D	 	 	 	 	s`   'A. -B+ .A85B+ 7A88B+ <B B+ B
B+ BB+ +B<C CC