
    \j                        d dl Z d dlZd dlZd dlmZ 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mZ d dlmZmZmZ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&m'Z' d dl(m)Z) e)r<d dl(m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0mZ d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z> 	 	 d dl=m?Z? 	 d dl=m>Z> d dlAmBZBmCZC d dlDmEZEmFZF d dl=mGZGmHZH e)rd dlImJZJmKZK dZL	 d dlMmNZNmOZO d dlPmQZQ  G d  d!e      ZRdKd"d#d$eSd%dfd&ZTd'd(d)eUd%eSfd*ZV	 	 	 	 	 	 	 	 	 	 	 	 	 	 dLd.ZW	 	 	 	 	 	 	 	 	 	 	 	 dMd0ZX	 	 	 	 	 	 	 	 dNd4ZY	 	 	 	 	 	 	 	 dNd5ZZ	 	 	 	 	 	 	 	 dNd6Z[	 dKd,d-d+d#d/d#d3d!d7eSd%dfd8Z\dOd9Z]	 dKd,d-d+d#d1d2d3d!d7eSd%dfd:Z^	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dPd;Z_	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dQd<Z`	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dRd=Za	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dSd>Zb	 dKd,d-d+d#d1d2d3d!d7eSd%dfd?Zc	 dKd,d-d+d#d1d2d3d!d7eSd%dfd@ZddTdAZedTdBZfdOdCZgdUdDZhdUdEZidOdFZjdUdGZkdUdHZldId#d%eSfdJZmy# e@$ r dZ?Y ow xY w# e@$ r dZ>Y vw xY w# e@$ r	  ed      w xY w# e@$ r dZLY bw xY w)V    Nwraps)Iterable)consts)record_token_usage)set_data_normalizednormalize_message_rolestruncate_and_annotate_messages&truncate_and_annotate_embedding_inputs)_is_system_instruction_get_system_instructions_transform_system_instructions_get_text_items)r   r   )SPANDATA)DidNotEnableIntegration)should_send_default_pii)set_span_errored)capture_internal_exceptionsevent_from_exceptionsafe_serializereraise)TYPE_CHECKING)AnyListOptionalCallableAsyncIteratorIteratorUnionr   )Span)TextPart)ResponseUsage)ResponseInputParamSequenceNotStrResponseStreamEvent)CompletionUsage)Omit)NotGiven)CompletionsAsyncCompletions)
EmbeddingsAsyncEmbeddings)StreamAsyncStream)ChatCompletionMessageParamChatCompletionChunkzOpenAI not installedT)	ResponsesAsyncResponses)ResponseCompletedEventFc            	       ^    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y)OpenAIIntegrationopenaizauto.ai.Nselfinclude_promptstiktoken_encoding_namezOptional[str]returnc                 Z    || _         d | _        |dd l}|j                  |      | _        y y Nr   )r9   tiktoken_encodingtiktokenget_encoding)r8   r9   r:   r?   s       H/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/openai.py__init__zOpenAIIntegration.__init__c   s6    
  /!%!-%-%:%:;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_creater2   _wrap_async_responses_creater3    rC   rA   
setup_oncezOpenAIIntegration.setup_oncep   s    9+:L:LM"D###
 4J4E4EF
!>?U?U!V 5i6F6FGI$@AVAV$WN! !rC   sc                     | j                   y	 t        | j                   j                  |            S # t        $ r Y yw xY wr=   )r>   lenencode_ordinary	Exception)r8   rP   s     rA   count_tokenszOpenAIIntegration.count_tokens~   sD    !!)	t--==a@AA 		s   #3 	??)TN)r;   N)__name__
__module____qualname__
identifieroriginboolrB   staticmethodrO   strintrU   rN   rC   rA   r6   r6   _   sz    J
|$F !%26S!SS !0S 
	S X X. 3 3 rC   r6   excr   manual_span_cleanupr;   c                     t        j                         }t        |       |r||j                  d d d        t	        | t        j
                         j                  ddd      \  }}t        j                  ||       y )Nr7   F)typehandled)client_options	mechanism)hint)
sentry_sdkget_current_spanr   __exit__r   
get_clientoptionscapture_event)r_   r`   current_spaneventrf   s        rA   _capture_exceptionro      sq     ..0L\"|7dD$/&!,,.66#6KE4
 U.rC   token_usagez%Union[CompletionUsage, ResponseUsage]	attr_namec                 T    t        | |      xr t        t        | |d       t              S rE   )hasattr
isinstancegetattrr^   )rp   rq   s     rA   _has_attr_and_is_intrv      s-     ;	* zY-s0 rC   responsespanr!   c                    d}d}d}d}	d}
d}||}nt        |d      r|j                  }|t        |d      r|j                  }t        |d      r|j                  }t        |d      r|j
                  }
t        |d      r)t        |j                  dd      }t        |t              r|}t        |d	      r)t        |j                  d
d      }t        |t              r|}	|dk(  rn| xs g D ]e  }t        |t              r| |      z  }t        |t              s0|j                  d      }|Dt        |      }|t        fd|D              z  }g |dk(  ru||D ]  }| |      z  } n`t        |d      rT|j                   D ]E  }t        |d      st        |j"                  d      s'| |j"                  j$                        z  }G |xs d}|xs d}|xs d}|	xs d}	|
xs d}
t'        |||||	|
       y)zDExtract and record token usage from a Chat Completions API response.r   Nusageprompt_tokenscompletion_tokenstotal_tokensprompt_tokens_detailscached_tokenscompletion_tokens_detailsreasoning_tokenscontentc              3   .   K   | ]  } |        y wrE   rN   .0textrU   s     rA   	<genexpr>z5_calculate_completions_token_usage.<locals>.<genexpr>        #N4L$6#N   choicesmessageinput_tokensinput_tokens_cachedoutput_tokensoutput_tokens_reasoningr}   )rs   rz   rv   r{   r|   r}   ru   r~   rt   r^   r   r]   dictgetr   sumr   r   r   r   )messagesrw   rx   streaming_message_responses#streaming_message_total_token_usagerU   r   r   r   r   r}   rz   cached	reasoningr   message_content
text_itemschoices        `            rA   "_calculate_completions_token_usager      s8    %&L+,%&M/0$%LE*63	7	#7 ..L':;!33M~6 --L512U88/4PF&#&&,#556//1CTI )S)*3' q~2 
	G'3'W 55GT*")++i"8"*,_=
#N:#N NN
	 &26 7g!667Xy)"** J69-'&..)2T!\&..2H2H%IIMJ
  '4L-5!)TM5='4L!/# 7!rC   inputc                    d}d}d}d}d}	t        |d      r|j                  }
t        |
d      r|
j                  }t        |
d      r|
j                  }t        |
d      r|
j
                  }	t        |
d      r)t        |
j                  dd      }t        |t              r|}t        |
d	      r)t        |
j                  d
d      }t        |t              r|}|dk(  rn| xs g D ]e  }t        |t              r| |      z  }t        |t              s0|j                  d      }|Dt        |      }|t        fd|D              z  }g |dk(  rr||D ]  }| |      z  } n]t        |d      rQ|j                   D ]B  }t        |d      s|j"                  D ]$  }t        |d      s| |j$                        z  }& D |xs d}|xs d}|xs d}|xs d}|	xs d}	t'        ||||||	       y)z=Extract and record token usage from a Responses API response.r   rz   r   r   r}   input_tokens_detailsr   Noutput_tokens_detailsr   r   c              3   .   K   | ]  } |        y wrE   rN   r   s     rA   r   z3_calculate_responses_token_usage.<locals>.<genexpr>   r   r   outputr   r   )rs   rz   rv   r   r   r}   ru   r   rt   r^   r   r]   r   r   r   r   r   r   r   r   )r   rw   rx   r   rU   r   r   r   r   r}   rz   r   r   r   r   r   output_itemcontent_items       `             rA    _calculate_responses_token_usager      s+    %&L+,%&M/0$%Lx!~6 --L7!//M~6 --L501U77$OF&#&&,#512 ; ;=OQUVI)S)*3' q{ 	G'3'W 55GT*")++i"8"*,_=
#N:#N NN	 &26 7g!667Xx(' M;	2(3(;(; M"<8)\,:K:K-LLMMM  '4L-5!)TM5='4L!/# 7!rC   kwargsdict[str, Any]integrationc                 8   |j                  d      }|j                  d      }|j                  d      }|=t        |      r2t        |      dkD  r$t        | t        j
                  t        |             |j                  d      }| | j                  t        j                  |       |j                  d      }|+t        |      r | j                  t        j                  |       |j                  d      }|+t        |      r | j                  t        j                  |       |j                  d      }	|	+t        |	      r | j                  t        j                  |	       t               r|j                  st        | t        j                  d	       y |`|^t        |      rS| j                  t        j                  t!        j"                  d
|dg             t        | t        j                  d	       y |t        | t        j                  d	       y g }
|t        |      r|
j%                  d
|d       t'        |      }|
t)        |      z  }
t        |
      dkD  r3| j                  t        j                  t!        j"                  |
             t+        |t,              rht/        |g      }t1        j2                         }t5        || |      }|t        | t        j6                  |d       t        | t        j                  d	       y |D cg c]  }t9        |      r| }}t        |      dkD  rKt/        |      }t1        j2                         }t5        || |      }|t        | t        j6                  |d       t        | t        j                  d	       y c c}w )Ninstructionsr   toolsr   modelmax_output_tokenstemperaturetop_p	responsesr   )rb   r   Funpack)r   	_is_givenrR   r   r   GEN_AI_REQUEST_AVAILABLE_TOOLSr   set_dataGEN_AI_REQUEST_MODELGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_Pr   r9   GEN_AI_OPERATION_NAMEGEN_AI_SYSTEM_INSTRUCTIONSjsondumpsappend"_get_system_instructions_responsesr   rt   r]   r	   rg   get_current_scoper
   GEN_AI_REQUEST_MESSAGES _is_system_instruction_responses)rx   r   r   explicit_instructionsr   r   r   
max_tokensr   r   instructions_text_partssystem_instructionsnormalized_messagesscopemessages_datar   non_system_messagess                    rA   _set_responses_api_input_datar   @  s7   
 ;A**^:T;A::g;NHJJwEYu-#e*q.(99>%;P	
 JJwEh33U;/0J)J"7h88*E**]+K9[#9h99;GJJwEYu-h33U;"$K,G,GD("@"@+N 	!-+,//JJ !'#8
	
 	D("@"@+ND("@"@+N02(Y7L-M&&0	
 =XF =>QRR
"#a'//JJ./	

 (C 5xjA,,.67JDRWX$h66e 	D("@"@+N  (/OPW/X  !#56IJ,,.67JDRWX$h66e h<<kJs   NNc                 X   |j                  d      }|j                  d      }|=t        |      r2t        |      dkD  r$t        | t        j
                  t        |             |j                  d      }| | j                  t        j                  |       |j                  d      }|+t        |      r | j                  t        j                  |       |j                  d      }|+t        |      r | j                  t        j                  |       |j                  d      }|+t        |      r | j                  t        j                  |       |j                  d      }	|	+t        |	      r | j                  t        j                  |	       |j                  d	      }
|
+t        |
      r | j                  t        j                  |
       t               r|j                  r|t        | t        j                   d
       y t#        |t$              rht'        |g      }t)        j*                         }t-        || |      }|t        | t        j.                  |d       t        | t        j                   d
       y t#        |t0              rt#        |t2              rt        | t        j                   d
       y t5        |      }||d<   t7        |      }t        |      dkD  r<| j                  t        j8                  t;        j<                  t?        |                   |D cg c]  }tA        |      s| }}t        |      dkD  rKt'        |      }t)        j*                         }t-        || |      }|t        | t        j.                  |d       t        | t        j                   d
       y c c}w )Nr   r   r   r   r   presence_penaltyfrequency_penaltyr   r   chatFr   )!r   r   rR   r   r   r   r   r   r   r   GEN_AI_REQUEST_PRESENCE_PENALTY GEN_AI_REQUEST_FREQUENCY_PENALTYr   r   r   r9   r   rt   r]   r	   rg   r   r
   r   r   r   list$_get_system_instructions_completionsr   r   r   r   "_is_system_instruction_completions)rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s                    rA   _set_completions_api_input_datar     s!   
 NTZZNH JJwEYu-#e*q.(99>%;P	
 JJwEh33U;L)J)J"7h88*Ezz"45#	2B(Ch>>@PQ

#67$3D)Eh??ARS**]+K9[#9h99;GJJwEYu-h33U; $%**D("@"@&I(C 5xjA,,.67JDRWX$h66e 	D("@"@&I h)Z$-GD("@"@&IH~H!F:>xH
!#//JJ56IJK	
  1': 	 
 !#56IJ,,.67JDRWX$h66e h<<fEs   N'c                 d   |j                  d      }|j                  d      }| | j                  t        j                  |       t	               r|j
                  r|t        | t        j                  d       y t        |t              rht        | t        j                  d       t        |g      }t        j                         }t        || |      }|t        | t        j                  |d       y t        |t              rt        |t               rt        | t        j                  d       y t#        |      }||d<   t%        |      dkD  rKt        |      }t        j                         }t        || |      }|t        | t        j                  |d       t        | t        j                  d       y )Nr   r   
embeddingsFr   r   )r   r   r   r   r   r9   r   r   rt   r]   r	   rg   r   r   GEN_AI_EMBEDDINGS_INPUTr   r   r   rR   )rx   r   r   r   r   r   r   r   s           rA   _set_embeddings_input_datar     s   
 [aZdZd[H JJwEh33U; $%**D("@"@,O(C D("@"@,O5xjA,,.>u
 $h66e 	 h)Z$-GD("@"@,OH~HF7O
8}q5h?,,.>u
 $h66e h<<lKrC   finish_spanc                 "   t        |d      r%t        | t        j                  |j                         t        |d      rt               rr|j                  rf|j                  D cg c](  }|j                  |j                  j                         * }}t        |      dkD  rt        | t        j                  |       t        ||| d 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        j,                  |d   d       t        |d
         dkD  rt        | t        j                  |d
          t/        ||| d |j                         |r| j                  d d d        y y t        ||| d d |j                         |r| j                  d d d        y y c c}w # t*        $ r& |d
   j#                  |	j%                                Y w xY w)Nr   r   r   r   rw   rx   r   r   rU   r   )rw   toolfunction_callr   r   rw   Fr   r   rw   rx   r   rU   )rs   r   r   GEN_AI_RESPONSE_MODELr   r   r9   r   r   
model_dumprR   GEN_AI_RESPONSE_TEXTr   rU   ri   r   rb   r   r   r   r   AttributeErrorGEN_AI_RESPONSE_TOOL_CALLSr   )
rx   rw   r   r   r   r   response_textoutput_messagesr   output_messages
             rA   _set_common_output_datar   >  s    x!D("@"@(..Q x#"$)D)D '..>>- ))+M 
 =!A%#D(*G*GW*(,04$11	
 MM$d+  
8	$"$)D)D7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 	)(,$11	
 MM$d+  	+(,04$11	
 MM$d+ QF  . V+J7>>~?R?R?TUVs   "-I5I+JJc           	   /   H  K   t        j                         j                  t              }| | |i |S d|vr | |i |S 	 t	        |d          |j                  d      }t        j                  t        j                  j                  d| t        j                        }|j                          |j                  t        j                  d       |j                  dd      xs d}|j                  t        j                   |       t#        |||       t%        j&                         }| ||f}t)        |t*              rUt-        |d      rI|j                  d      }	|	t)        |	t.              r|	g}	t1        ||||	||j2                  d	
      |_        |S t)        |t4              rUt-        |d      rI|j                  d      }	|	t)        |	t.              r|	g}	t7        ||||	||j2                  d	
      |_        |S t9        ||||d	       |S # t
        $ r  | |i |cY S w xY ww)Nr   r   zchat opnamerZ   r7   streamF	_iteratorT)rx   r   
start_timer   rw   old_iteratorr   r   )rg   rj   get_integrationr6   iter	TypeErrorr   
start_spanr   OPGEN_AI_CHATrZ   	__enter__r   r   GEN_AI_SYSTEMGEN_AI_RESPONSE_STREAMINGr   timeperf_counterrt   r.   rs   r]   ,_wrap_synchronous_completions_chunk_iteratorr   r/   -_wrap_asynchronous_completions_chunk_iterator _set_completions_api_output_data)
fargsr   r   r   rx   is_streaming_responser   rw   r   s
             rA   _new_chat_completion_commonr    s!    '')99:KLK$!&!!$!&!!"VJ 
 JJwE  99  UG_ ''D
 	NNMM((((3 #JJx7@5MM(446KL#D&+>""$Jf_$H (F#+(F::j)Jx$= zHI#!!++
> O) 
Hk	*wx/M::j)Jx$= zHJ#!!++
 O	 	)(FKT	
 O}  "$!&!!"s*   >H"H F<H"HH"HH"c                 n    |j                  d      }|t        |t              r|g}t        | ||||       y Nr   r   rt   r]   r   )rx   rw   r   r   r   r   s         rA   r   r     s?     zz*%H
8S 9:rC   c           	   #     K   d}g }d}	|D ]
  }
| j                  t        j                  |
j                         t	               5  t        |
d      rd}|
j                  D ]  }t        |d      r~t        |j                  d      rh||t        j                         |z
  }|j                  j                  }t        |      |k  r|j                  g        ||   j                  |xs d       |dz  } t        |
d      r|
j                  }	ddd       |
  t	               5  |t        | t        j                  |       d}t        |      dkD  rO|D cg c]  }dj!                  |       }}t#               r'|j$                  rt        | t        j&                  |       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
/  
    Sets information received while iterating the response stream on the AI Client Span.
    Compute token count based on inputs and outputs using tiktoken if token counts are not in the model response.
    Responsible for closing the AI Client Span if instructed to by the `finish_span` argument.
    Nr   r   deltar       rz   r   r   r   r   r   r   rs   r   r
  r   r   r   rR   r   rz   r   #GEN_AI_RESPONSE_TIME_TO_FIRST_TOKENjoinr   r9   r   r   rU   ri   rx   r   r   r   rw   r   r   ttftdata_bufr   xchoice_indexr   r   all_responseschunks                   rA   r   r     s     D"$H*.' h44agg>(* 	>q)$ ii &Fvw/GFLL)4T%1dl#'#4#4#6#CD"(,,"6"6x=L8$OOB/ .55gmD A%L& q'"67gg3	> %( 
%	& 
hBBD x=19ABRWWU^BMB&([-H-H#D(*G*GW*(50S$11	

( dD$' K	> 	>0 C
 
sJ   AG7CG
G7#2G+G&-AG+;G7G#	G7&G++G40G7c           	       K   d}g }d}	|2 3 d{   }
| j                  t        j                  |
j                         t	               5  t        |
d      rd}|
j                  D ]  }t        |d      r~t        |j                  d      rh||t        j                         |z
  }|j                  j                  }t        |      |k  r|j                  g        ||   j                  |xs d       |dz  } t        |
d      r|
j                  }	ddd       |
 7 # 1 sw Y   xY w6 t	               5  |t        | t        j                  |       d}t        |      dkD  rU|D cg c]  }dj!                  |       nc c}w }}t#               r'|j$                  rt        | t        j&                  |       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                   rA   r   r   6  s     D"$H*.'  ah44agg>(* 	>q)$ ii &Fvw/GFLL)4T%1dl#'#4#4#6#CD"(,,"6"6x=L8$OOB/ .55gmD A%L& q'"67gg3	> %	> 	>  ( 
%	& 
hBBD x=19ABRWWU^BBMB&([-H-H#D(*G*GW*(50S$11	

 
 
( dD$' s]   	HD-DD-5HCD!HD-!D*	&H82G*FAG	HG($Hc           	   #     K   d}g }d}	|D ]  }
t               5  t        |
d      r\||t        j                         |z
  }t	        |      dk(  r|j                  g        |d   j                  |
j                  xs d       t        |
t              rZ| j                  t        j                  |
j                  j                         t        ||
j                  | d|j                         d}	ddd       |
  t               5  |t!        | t        j"                  |       t	        |      dkD  rk|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r	  NTr
  r   r  r   Fr   rs   r   r   rR   r   r
  rt   r4   r   r   r   rw   r   r   rU   r   r  r  r   r9   r   ri   rx   r   r   r   rw   r   r   r  r  count_tokens_manuallyr  r  r  s                rA   *_wrap_synchronous_responses_event_iteratorr  t  s     D"$H  (* 	.q'")dl,,.;Dx=A%OOB'""177=b1!34h<<ajj>N>NO0ZZ04!,!9!9 ).%%	.( +. 
%	& hBBD x=19ABRWWU^BMB&([-H-H#D(*G*GW$0%0=!,!9!9& dD$' S	. 	.8 C sH   GCF9+G0G
3GAG
G9G	>GG

GGc           	       K   d}g }d}	|2 3 d{   }
t               5  t        |
d      r\||t        j                         |z
  }t	        |      dk(  r|j                  g        |d   j                  |
j                  xs d       t        |
t              rZ| j                  t        j                  |
j                  j                         t        ||
j                  | d|j                         d}	ddd       |
 7 # 1 sw Y   xY w6 t               5  |t!        | t        j"                  |       t	        |      dkD  rq|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                rA   +_wrap_asynchronous_responses_event_iteratorr    s     #D"$H   a(* 	.q'")dl,,.;Dx=A%OOB'""177=b1!34h<<ajj>N>NO0ZZ04!,!9!9 ).%%	.( +	. 	.  . 
%	& hBBD x=19ABRWWU^BBMB&([-H-H#D(*G*GW$0%0=!,!9!9  " dD$' s\   	G!DC?DG!CD1G!?DD
	G!0F>E! AF>5	G!>GG!c                 n    |j                  d      }|t        |t              r|g}t        | ||||       y Nr   r  rx   rw   r   r   r   r   s         rA   _set_responses_api_output_datar#    ?     JJwEZs3rC   c                 n    |j                  d      }|t        |t              r|g}t        | ||||       y r!  r  r"  s         rA   _set_embeddings_output_datar&    r$  rC   c                 <     ddt               d 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        $ rQ}t        j                         }t               5  t        |       d d d        n# 1 sw Y   nxY wt        |  Y d }~d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wrE   r  nextStopIterationvaluerT   sysexc_infor   ro   r   sendr   r  r   generesultr.  s          rA   _execute_syncz3_wrap_chat_completion_create.<locals>._execute_sync  s    )!=d=f=	"3iOAtV	#D+F+ 88F##  	77N	  #<<>02 *&q)* * *"	#  	77N	s   ; A B: 	AAAA	B7&B2B	B2B"	B2-B: 2B77B: :	CCCCc                      t        j                         j                  t              }|d|vr | i |S  g| i |S r  rg   rj   r   r6   r  r   r   r4  r   s      rA   _sentry_patched_create_synczA_wrap_chat_completion_create.<locals>._sentry_patched_create_sync2  sO     ++-==>OP*F":d%f%%Q0000rC   r   r   r  r   r   r   r;   r   r  r   r   r   r;   r   r   r   r9  r4  s   ` @rA   rF   rF     s(    * 1X1 1 '&rC   c                 <     ddt               d fd       }|S )Nc                   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        $ rQ}t        j                         }t               5  t        |       d d d        n# 1 sw Y   nxY wt        |  Y d }~d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwrE   r)  r0  s          rA   _execute_asyncz:_wrap_async_chat_completion_create.<locals>._execute_async?  s     )!=d=f=	!"3iOAtV	# $1&11 88F##  	!== 	!
 2 #<<>02 *&q)* * *"	#  	77N	   C1A A2 A0A2 C C1	A-A(A A("A-#C1(A--C10A2 2	C;CB.%	C.B7	3CC CC 	C.C)#C.$C1)C..C1c                     K   t        j                         j                  t              }|d|vr | i | d {   S  g| i | d {   S 7 7 wr  r7  r  r   r   r?  r   s      rA   _sentry_patched_create_asynczH_wrap_async_chat_completion_create.<locals>._sentry_patched_create_asyncT  sb      ++-==>OP*F":D+F+++#A77777 ,7s!   9AAAAAAr:  r;  r   r   rC  r?  s   ` @rA   rH   rH   >  s(    * 1X8 8 ('rC   c              /     K   t        j                         j                  t              }| | |i |S |j	                  d      }t        j
                  t        j                  j                  d| t        j                        5 }|j                  t        j                  d       t        |||       | ||f}t        ||||d       |cd d d        S # 1 sw Y   y xY ww)Nr   zembeddings r   r7   Fr   )rg   rj   r   r6   r   r   r   r   GEN_AI_EMBEDDINGSrZ   r   r   r   r   r&  )r   r  r   r   r   rx   rw   s          rA   _new_embeddings_create_commonrG  `  s     '')99:KLK$!&!!JJwE			99&&5'" ''
  
h,,h7"4=D&(#(FKU	
   s   BC"AC
C"CC"c                 <     ddt               d 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        $ rS}t        j                         }t               5  t        |d       d d d        n# 1 sw Y   nxY wt        |  Y d }~d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wNF)r`   rG  r*  r+  r,  rT   r-  r.  r   ro   r   r/  r0  s          rA   r4  z._wrap_embeddings_create.<locals>._execute_syncy  s    +A???	"3iOAtV	#D+F+ 88F##  	77N	  #<<>02 E&qeDE E E"	#  	77N	ss   ; A B< 	AAAA	B9&B4B	B4B$	 B4/B< 4B99B< <	CCCCc                  ~    t        j                         j                  t              }| | i |S  g| i |S rE   r7  r8  s      rA   r9  z<_wrap_embeddings_create.<locals>._sentry_patched_create_sync  H     ++-==>OPd%f%%Q0000rC   r:  r;  r   r<  s   ` @rA   rI   rI   x  (    * 1X1 1 '&rC   c                 <     ddt               d fd       }|S )Nc                   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        $ rS}t        j                         }t               5  t        |d       d d d        n# 1 sw Y   nxY wt        |  Y d }~d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwrJ  rK  r0  s          rA   r?  z5_wrap_async_embeddings_create.<locals>._execute_async  s     +A???	!"3iOAtV	# $1&11 88F##  	!== 	!
 2 #<<>02 E&qeDE E E"	#  	77N	s   C3A A2 A0A2 C C3	A-A(A A("A-#C3(A--C30A2 2	C;C	B0'	C	0B9	5C	C 	CC 	C0C+%C0&C3+C00C3c                     K   t        j                         j                  t              }| | i | d {   S  g| i | d {   S 7 7 wrE   r7  rB  s      rA   rC  zC_wrap_async_embeddings_create.<locals>._sentry_patched_create_async  [      ++-==>OPD+F+++#A77777 ,7!   5AAAAAAr:  r;  r   rD  s   ` @rA   rJ   rJ     s(    * 1X8 8 ('rC   c           	   /     K   t        j                         j                  t              }| | |i |S |j	                  d      }t        j
                  t        j                  j                  d| t        j                        }|j                          |j                  t        j                  d       |j	                  dd      xs d}|j                  t        j                  |       t        |||       t!        j"                         }| ||f}t%        |t&              rUt)        |d      rI|j	                  d      }	|	t%        |	t*              r|	g}	t-        ||||	||j.                  d	
      |_        |S t%        |t0              rUt)        |d      rI|j	                  d      }	|	t%        |	t*              r|	g}	t3        ||||	||j.                  d	
      |_        |S t5        ||||d	       |S w)Nr   z
responses r   r7   r   Fr   r   T)rx   r   r   r   rw   r   r   r   )rg   rj   r   r6   r   r   r   r   GEN_AI_RESPONSESrZ   r   r   r   r   r   r   r   r   rt   r.   rs   r]   r  r   r/   r  r#  )
r   r  r   r   r   rx   r  r   rw   r   s
             rA   _new_responses_create_commonrV    s    '')99:KLK$!&!!JJwE  99%%%! ''D
 	NNMM((((3 #JJx7@5MM(446KL!$<""$Jf_$H (F#+(F

7#E3!7GEG#!!++
> O) 
Hk	*wx/M

7#E3!7GEH#!!++
 O	 	'(FKT	
 Os   G.G0c                 <     ddt               d 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        $ rQ}t        j                         }t               5  t        |       d d d        n# 1 sw Y   nxY wt        |  Y d }~d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wrE   rV  r*  r+  r,  rT   r-  r.  r   ro   r   r/  r0  s          rA   r4  z-_wrap_responses_create.<locals>._execute_sync  s    *1>t>v>	"3iOAtV	#D+F+ 88F##  	77N	  #<<>02 *&q)* * *"	#  	77N	r5  c                  ~    t        j                         j                  t              }| | i |S  g| i |S rE   r7  r8  s      rA   r9  z;_wrap_responses_create.<locals>._sentry_patched_create_sync  rM  rC   r:  r;  r   r<  s   ` @rA   rL   rL     rN  rC   c                 <     ddt               d fd       }|S )Nc                   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        $ rQ}t        j                         }t               5  t        |       d d d        n# 1 sw Y   nxY wt        |  Y d }~d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwrE   rY  r0  s          rA   r?  z4_wrap_async_responses_create.<locals>._execute_async  s     *1>t>v>	!"3iOAtV	# $1&11 88F##  	!== 	!
 2 #<<>02 *&q)* * *"	#  	77N	r@  c                     K   t        j                         j                  t              }| | i | d {   S  g| i | d {   S 7 7 wrE   r7  rB  s      rA   _sentry_patched_responses_asynczE_wrap_async_responses_create.<locals>._sentry_patched_responses_async3  rR  rS  r:  r;  r   )r   r^  r?  s   ` @rA   rM   rM     s(    * 1X8 8 +*rC   objc                 `    t         t        | t               ryt        t        | t              ryy)zF
    Check for givenness safely across different openai versions.
    FT)r)   rt   r(   )r_  s    rA   r   r   >  s+     
3 9JsD1rC   )T)r   .Optional[Iterable[ChatCompletionMessageParam]]rw   r   rx   r!   r   Optional[List[str]]r   zOptional[CompletionUsage]rU   Callable[..., Any]r;   N)r   r   rw   r   rx   r!   r   rb  rU   rc  r;   N)rx   r!   r   r   r   r6   r;   Nr:  )rx   r!   r   r6   r   Optional[float]r   ra  rw   zStream[ChatCompletionChunk]r   Iterator[ChatCompletionChunk]r   r[   r;   re  )rx   r!   r   r6   r   rd  r   ra  rw   z AsyncStream[ChatCompletionChunk]r   "AsyncIterator[ChatCompletionChunk]r   r[   r;   rf  )rx   r!   r   r6   r   rd  r   (Optional[Union[str, ResponseInputParam]]rw   zStream[ResponseStreamEvent]r   Iterator[ResponseStreamEvent]r   r[   r;   rh  )rx   r!   r   r6   r   rd  r   rg  rw   z AsyncStream[ResponseStreamEvent]r   "AsyncIterator[ResponseStreamEvent]r   r[   r;   ri  )r   rc  r;   rc  )r   r   r;   r   )nr-  r   r   	functoolsr   collections.abcr   rg   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   r	   r
   r   %sentry_sdk.ai._openai_completions_apir   r   r   r   r   r   #sentry_sdk.ai._openai_responses_apir   r   sentry_sdk.constsr   sentry_sdk.integrationsr   r   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   r   r   typingr   r   r   r   r   r   r   r    sentry_sdk.tracingr!   sentry_sdk._typesr"   %openai.types.responses.response_usager#   openai.types.responsesr$   r%   r&   openai.typesr'   r7   r(   r)   ImportError!openai.resources.chat.completionsr*   r+   openai.resourcesr,   r-   r.   r/   openai.types.chatr0   r1   rK   openai.resources.responsesr2   r3   /openai.types.responses.response_completed_eventr4   r6   r[   ro   r]   rv   r   r   r   r   r   r   r  r   r   r   r  r  r#  r&  rF   rH   rG  rI   rJ   rV  rL   rM   r   rN   rC   rA   <module>r     s.   
    $   7   ' = 4 5  !	 	 	 (*C 
 -/# P<*	
  "DV
% %P/E / / /"8EH	O>OO O "7	O
 *EO 'O 
OdKKK K "7	K
 'K 
K\fK
fKfK %fK 
	fKRWF
WFWF %WF 
	WFt8L
8L8L %8L 
	8L@ V,
V,V, V, %	V,
 V, 
V,rIb 
  %	
  
*;(
;($;( ";( ?	;(
 ,;( 2;( ;( %;(|;(
;($;( ";( ?	;(
 1;( 7;( ;( *;(|=(
=($=( "=( 6	=(
 ,=( 2=( =( %=(@;(
;($;( ";( 6	;(
 1;( 7;( ;( *;(F 
  %	
  
4 
  %	
  
*'D(D0'B(B?D'B+B5 T {'  
    /
-
../  "!"sZ   5H  <H. "H< 'I  H+'H< *H++H< .H95H< 8H99H< <I
II