
    tnia                        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          Z5dAddde6ddfdZ7ddd d!de8fd"Z9	 	 	 	 	 	 	 	 	 	 	 	 dBd,Z:d&d'd-d.d/e;d0dddf
d1Z<	 dAd&d'd%dd-d.d0dd2e6ddfd3Z=dCd6Z>dDd7Z?dDd8Z@dCd9ZAdEd:ZBdEd;ZCdCd<ZDdEd=ZEdEd>ZFd?dde6fd@ZGdS )F    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            	       f    e Zd ZdZde Z	 	 ddd deddd	dfd
Zedd            Zdd de	d	e
fdZdS )OpenAIIntegrationopenaizauto.ai.TNselfinclude_promptstiktoken_encoding_namezOptional[str]returnc                 f    || _         d | _        | dd l}|                    |          | _        d S d S Nr   )r*   tiktoken_encodingtiktokenget_encoding)r)   r*   r+   r0   s       [/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/openai.py__init__zOpenAIIntegration.__init__;   sH    
  /!%!-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$    r4   r2   
setup_oncezOpenAIIntegration.setup_onceH   s    9+:LMM"D##
 #
 4J4EFF
!>?U!V!V  	X5i6FGGI$@AV$W$WN!!!	X 	Xr4   sc                     | j         dS 	 t          | j                             |                    S # t          $ r Y dS w xY wr.   )r/   lenencode_ordinary	Exception)r)   rA   s     r2   count_tokenszOpenAIIntegration.count_tokensV   sV    !)1	t-==a@@AAA 	 	 	11	s   &2 
A A )TN)r,   N)__name__
__module____qualname__
identifieroriginboolr3   staticmethodr@   strintrF   r?   r4   r2   r'   r'   7   s        J$
$$F !%26S S!SS !0S 
	S S S S X X X \X. 3 3      r4   r'   excr   manual_span_cleanupr,   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)rP   rQ   current_spaneventrW   s        r2   _capture_exceptionr`   _   s     .00L\""" 0|7dD$///&!,..6#66  KE4
 U......r4   usagenamesz	List[str]c                     |D ]G}t          | |          r5t          t          | |          t                    rt          | |          c S HdS r.   )hasattr
isinstancegetattrrO   )ra   rb   names      r2   
_get_usagerh   p   sZ     ( (5$ 	(Jwud/C/CS$I$I 	(5$'''''1r4   messages.Optional[Iterable[ChatCompletionMessageParam]]responsespanr   streaming_message_responsesOptional[List[str]]rF   Callable[..., Any]c                 v   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    rm||D ]}
| ||
          z  }nWt          |d          rG|j        D ]?}t          |d          r-t          |j	        d          r| ||j	        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)rq   input_tokens_cachedru   output_tokens_reasoningry   )rd   rh   ra   rs   rw   re   dictrN   r{   r|   rz   r   )ri   rk   rl   rm   rF   rq   r}   ru   r~   ry   r|   choices               r2   _calculate_token_usager   w   sm    %&L+,%&M/0$%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)) 	J"* J J69-- J'&.)2T2T J!\\&.2H%I%IIM  '4L-5!)TM5='4L!/# 7!     r4   kwargszdict[str, Any]	operationintegrationc                 J   |                     d          }||                     d          }t          |t                    r|g}|t          |          dk    rt	                      r}|j        rvt          |          }t          j                    }t          || |          }|A|dk    rt          | t          j        |d           n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 ]<\  }	}
|                     |	          }| t1          |          rt          | |
|           =|                     d	          }|Lt1          |          r?t          |          dk    r.t          | t          j        t5          |                     d S d S d S d S )
Nri   inputr   
embeddingsFunpackr(   )modelstream
max_tokenspresence_penaltyfrequency_penaltytemperaturetop_ptools)getre   rN   rC   r   r*   r   rX   get_current_scoper	   r   r
   GEN_AI_EMBEDDINGS_INPUT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   )rl   r   r   r   ri   normalized_messagesscopemessages_datakwargs_keys_to_attributeskey	attributevaluer   s                r2   _set_input_datar      s7    zz*%%H::g&&(C   : 	MMA#%% '  6h??,..67JDRWXX$L((#(:MRW     $(:MRW   
 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	
 	
 	
 	
 	
 ..r4   finish_spanc                     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          rhg j        d fd}	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   ri   r   r{   c                 N    g | ]"}|j         	|j                                         #S r6   )r|   
model_dump).0r   s     r2   
<listcomp>z$_set_output_data.<locals>.<listcomp>
  s8       >- ))++---r4   r   output)rk   toolfunction_callr   r|   rk   Fr   	_iteratorr,   Iterator[ChatCompletionChunk]c            	   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 )
NTr{   r   deltarz       Fc                 8    g | ]}d                      |          S r   joinr   chunks     r2   r   z:_set_output_data.<locals>.new_iterator.<locals>.<listcomp>f  "    $J$J$JRWWU^^$J$J$Jr4   r   rd   r{   r   rz   rC   appendr<   re   r%   r   rk   rF   r   r*   r   r
   GEN_AI_RESPONSE_TEXTrZ   count_tokens_manuallyxchoice_indexr   rz   all_responsesdata_bufr   r   ri   old_iteratorrk   rl   s         r2   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,"AsyncIterator[ChatCompletionChunk]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 )
NTr{   r   r   rz   r   r   Fc                 8    g | ]}d                      |          S r   r   r   s     r2   r   z@_set_output_data.<locals>.new_iterator_async.<locals>.<listcomp>  r   r4   r   r   s         r2   new_iterator_asyncz,_set_output_data.<locals>.new_iterator_asyncw  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,   r   )rd   r   r
   GEN_AI_RESPONSE_MODELr   r   re   rN   r   r*   r{   rC   r   r   rF   rZ   r   rS   r   r   rz   textAttributeErrorGEN_AI_RESPONSE_TOOL_CALLSr   )rl   rk   r   r   r   response_textoutput_messagesr   output_messager   r   r   ri   r   s   `` ``      @@@r2   _set_output_datar      sG    x!! RD("@(.QQQ zz*%%H::g&&
8S 9 9:x## l,"$$ 	X)D 	X &.  M
 =!!A%%#D(*GWWWx4{?WXXX 	,MM$d+++++	, 	, 
8	$	$ ],"$$ 	)D 	7 7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+++++	, 	, 
;	'	' y,&()5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0 5	0n4	0 4	0 4	0 4	0 4	0 4	0 4	0 4	0 4	0 4	0 4	0 4	0l tH&''((,GGG!3!3!5!5H!-Hx4{?WXXX 	,MM$d+++++	, 	,s    F<<7G65G6fargsc              /     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 )Nri   r   chat oprg   rK   Tr   )rX   r[   get_integrationr'   iter	TypeErrorr   
start_spanr   OPGEN_AI_CHATrK   	__enter__r   r   r   r   r   r   r   r   rl   rk   s           r2   _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                 J     ddt                     d	 fd            }|S )
Nr   r   r   r   r,   c                 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r6   r   nextStopIterationr   rE   r`   sendr   r   r   generesults         r2   _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 Nri   rX   r[   r   r'   r   r   r   r   r   s      r2   _sentry_patched_create_synczA_wrap_chat_completion_create.<locals>._sentry_patched_create_sync  se     +--==>OPP*F":":1d%f%%%}Q0000000r4   r   r   r   r   r   r   r,   r   r   r   r   r   r,   r   r   r   r   r   s   ` @r2   r7   r7     sU       & 1XX1 1 1 1 1 1 X1 '&r4   c                 J     ddt                     d	 fd            }|S )
Nr   r   r   r   r,   c                 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r6   r   r   s         r2   _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      r2   _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7r4   r   r   r   r   r  r   s   ` @r2   r9   r9     sU       & 1XX8 8 8 8 8 8 X8 ('r4   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   r   r   r   Fr   )rX   r[   r   r'   r   r   r   r   GEN_AI_EMBEDDINGSrK   r   r   r   s           r2   _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                 J     ddt                     d	 fd            }|S )
Nr   r   r   r   r,   c                 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)rQ   r  r   r   r   rE   r`   r   r   s         r2   r   z._wrap_embeddings_create.<locals>._execute_sync0  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 r6   r   r   s      r2   r   z<_wrap_embeddings_create.<locals>._sentry_patched_create_syncC  [     +--==>OPP1d%f%%%}Q0000000r4   r   r   r   r   s   ` @r2   r:   r:   /  U       & 1XX1 1 1 1 1 1 X1 '&r4   c                 J     ddt                     d	 fd            }|S )
Nr   r   r   r   r,   c                 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         r2   r   z5_wrap_async_embeddings_create.<locals>._execute_asyncO  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 r6   r   r  s      r2   r  zC_wrap_async_embeddings_create.<locals>._sentry_patched_create_asyncb         +--==>OPPD+F+++++++++#^A7777777777777r4   r   r   r   r  s   ` @r2   r;   r;   N  sU       & 1XX8 8 8 8 8 8 X8 ('r4   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   )rX   r[   r   r'   r   r   r   r   GEN_AI_RESPONSESrK   r   r   r   r   s           r2   _new_responses_create_commonr  m  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Or4   c                 J     ddt                     d	 fd            }|S )
Nr   r   r   r   r,   c                 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r6   r  r   r   r   rE   r`   r   r   s         r2   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 r6   r   r   s      r2   r   z;_wrap_responses_create.<locals>._sentry_patched_create_sync  r  r4   r   r   r   r   s   ` @r2   r=   r=     r  r4   c                 J     ddt                     d	 fd            }|S )
Nr   r   r   r   r,   c                 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r6   r  r   s         r2   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 r6   r   r  s      r2   _sentry_patched_responses_asynczE_wrap_async_responses_create.<locals>._sentry_patched_responses_async  r  r4   r   r   r   )r   r  r   s   ` @r2   r>   r>     sU       & 1XX8 8 8 8 8 8 X8 +*r4   objc                 ~    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   re   r   )r  s    r2   r   r     s=     
3 9 9uJsD11u4r4   )T)ri   rj   rk   r   rl   r   rm   rn   rF   ro   r,   Nr   )r   ro   r,   ro   )r   r   r,   r   )H	functoolsr   rX   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'   rL   r`   rO   rh   r   rN   r   r   r   r7   r9   r  r:   r;   r  r=   r>   r   r?   r4   r2   <module>r0     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 " " "!"% % % % % % % %P/ /E / / / / / /"e K C    =>== = "7	=
 '= 
= = = =@;

;
;
 ;
 %	;

 
;
 ;
 ;
 ;
F , ,
,, , %	,
 , 
, , , ,D   D' ' ' '@( ( ( (@   ,' ' ' '>( ( ( (>   0' ' ' '>+ + + +>5 T      s`   'A. -B+ .A85B+ 7A88B+ <B B+ B
B+ BB+ +B<C CC