
    lhY                        d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d d	lmZmZmZ d d
lmZ erd dlmZmZmZmZmZmZmZ d dlmZ 	 	 d dlmZ d dl!m"Z"m#Z# d dl$m%Z%m&Z& erd dl'm(Z(m)Z) dZ*	 d dl+m,Z,m-Z- d dl.m/Z/  G d de      Z0d Z1d Z2d Z3d Z4d&dZ5d Z6d Z7d Z8d  Z9d! Z:d" Z;d# Z<d$ Z=d% Z>y# e $ r dZY kw xY w# e $ r	  ed      w xY w# e $ r dZ*Y ^w xY w)'    wrapsN)consts)record_token_usage)set_data_normalized)SPANDATA)DidNotEnableIntegration)should_send_default_pii)capture_internal_exceptionsevent_from_exceptionsafe_serialize)TYPE_CHECKING)AnyIterableListOptionalCallableAsyncIteratorIterator)Span)	NOT_GIVEN)CompletionsAsyncCompletions)
EmbeddingsAsyncEmbeddings)ChatCompletionMessageParamChatCompletionChunkzOpenAI not installedT)	ResponsesAsyncResponses)ResponseCompletedEventFc                   8    e Zd ZdZde ZddZed        Zd Zy)OpenAIIntegrationopenaizauto.ai.Nc                 Z    || _         d | _        |dd l}|j                  |      | _        y y Nr   )include_promptstiktoken_encodingtiktokenget_encoding)selfr'   tiktoken_encoding_namer)   s       p/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/sentry_sdk/integrations/openai.py__init__zOpenAIIntegration.__init__1   s4    .!%!-%-%:%:;Q%RD" .    c                     t        t        j                        t        _        t        t        j                        t        _        t        t        j                        t        _        t        t        j                        t        _        t        rEt        t        j                        t        _        t        t        j                        t        _        y y N)_wrap_chat_completion_creater   create"_wrap_async_chat_completion_creater   _wrap_embeddings_creater   _wrap_async_embeddings_creater   RESPONSES_API_ENABLED_wrap_responses_creater   _wrap_async_responses_creater     r/   r-   
setup_oncezOpenAIIntegration.setup_once;   s     :+:L:LM"D###
 4J4E4EF
!>?U?U!V 5i6F6FGI$@AVAV$WN! !r/   c                 d    | j                   $t        | j                   j                  |            S yr&   )r(   lenencode_ordinary)r+   ss     r-   count_tokenszOpenAIIntegration.count_tokensJ   s-    !!-t--==a@AAr/   )TN)	__name__
__module____qualname__
identifieroriginr.   staticmethodr;   r@   r:   r/   r-   r#   r#   -   s4    J
|$FS X Xr/   r#   c                     t        j                         }||j                  d d d        t        | t        j                         j
                  ddd      \  }}t        j                  ||       y )Nr$   F)typehandled)client_options	mechanism)hint)
sentry_sdkget_current_span__exit__r   
get_clientoptionscapture_event)exccurrent_spaneventrL   s       r-   _capture_exceptionrV   Q   sg     ..0LdD$/&!,,.66#6KE4
 U.r/   c                 |    |D ]7  }t        | |      st        t        | |      t              s+t        | |      c S  yr&   )hasattr
isinstancegetattrint)usagenamesnames      r-   
_get_usager_   a   s=     (5$Jwud/CS$I5$''( r/   c                 H   d}d}d}d}d}	t        |d      rt        |j                  ddg      }t        |j                  d      r!t        |j                  j                  dg      }t        |j                  ddg      }t        |j                  d	      r!t        |j                  j                  d
g      }t        |j                  dg      }	|dk(  rJ| xs g D ]A  }
t        |
t              rd|
v r| ||
d         z  }&t        |
t              s7| ||
      z  }C |dk(  rT||D ]  }
| ||
      z  } n?t        |d      r3|j                  D ]$  }t        |d      s| ||j                        z  }& |xs d }|xs d }|xs d }|xs d }|	xs d }	t        ||||||	       y )Nr   r\   input_tokensprompt_tokensinput_tokens_detailscached_tokensoutput_tokenscompletion_tokensoutput_tokens_detailsreasoning_tokenstotal_tokenscontentchoicesmessage)ra   input_tokens_cachedre   output_tokens_reasoningri   )rX   r_   r\   rc   rg   rY   dictstrrk   rl   r   )messagesresponsespanstreaming_message_responsesr@   ra   rm   re   rn   ri   rl   choices               r-   _calculate_token_usagerv   i   s    LMLx!!(..>?2ST8>>#9:",33o5F# #NN_.AB
 8>>#:;&0447I6J'# "(..>2BC q~2 	6G'4(Y'-AWY-? @@GS)W 55		6 &26 7g!667Xy)"** B69-!\&..%AAMB
  '4L-5!)TM5='4L!/# 7!r/   c                 \   |j                  d      }||j                  d      }t        |t              r|g}|?t        |      dkD  r1t	               r'|j
                  rt        | t        j                  |       t        | t        j                  d       t        | t        j                  |       t        j                  t        j                  t        j                  t        j                  t        j                  t        j                   t        j"                  d}|j%                         D ]/  \  }}|j                  |      }|t&        us |#t        | ||       1 |j                  d      }	|	t&        ur7|	4t        |	      dkD  r%t        | t        j(                  t+        |	             y y y y )Nrq   inputr   r$   )modelstream
max_tokenspresence_penaltyfrequency_penaltytemperaturetop_ptools)getrY   rp   r=   r   r'   r   r   GEN_AI_REQUEST_MESSAGESGEN_AI_SYSTEMGEN_AI_OPERATION_NAMEGEN_AI_REQUEST_MODELGEN_AI_RESPONSE_STREAMINGGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_PRESENCE_PENALTY GEN_AI_REQUEST_FREQUENCY_PENALTYGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_Pitemsr   GEN_AI_REQUEST_AVAILABLE_TOOLSr   )
rs   kwargs	operationintegrationrq   kwargs_keys_to_attributeskey	attributevaluer   s
             r-   _set_input_datar      sl    zz*%H::g&(C : 	MA#%''D("B"BHM h44h?h<<iH ..4488$DD%FF::..! 499; 8Y

3	!e&7i7	8 JJwEI%"3E
Q(99>%;P	
 9G"3r/   c                    
 t        d      r%t         t        j                  j                         |j                  d      |j                  d      t        t              rgt        d      rt               roj                  rcj                  D cg c]  }|j                  j                          }}t        |      dkD  r$t         t        j                  t        |             t!         d j"                         r j%                  d d d        y y t        d      rt               rej                  rYj&                  D cg c]  }|j)                          }}t        |      dkD  r$t         t        j                  t        |             t!         d j"                         r j%                  d d d        y y t        d      r_g 
j*                  
 fd}
 fd	}	t        t-        j*                              d
k(  r |	       _        y  |       _        y t!         d j"                         r j%                  d d d        y y c c}w c c}w )Nry   rq   rx   rk   r   output	_iteratorc            	   3     K   t               5  d} D ]#  }t        |d      rd}|j                  D ]v  }t        |d      rct        |j                  d      rM|j                  j                  }t              |k  rj                  g        |   j                  |xs d       |dz  }x nMt        |d      rAt              dk(  rj                  g        d   j                  |j                  xs d       t        r5t        |t              r%t        
|j                  d 	j                         d} | & t              dkD  rjD cg c]  }dj                  |       }}t               r'	j                  rt!        t"        j$                  |       | rt        
|	j                         d d d        rj'                  d d d        y y c c}w # 1 sw Y   %xY ww	NTrk   r   deltarj       Fr   rX   rk   r   rj   r=   appendr7   rY   r!   rv   rr   r@   joinr   r'   r   r   GEN_AI_RESPONSE_TEXTrO   count_tokens_manuallyxchoice_indexru   rj   chunkall_responsesdata_buffinish_spanr   rq   old_iteratorrr   rs   s          r-   new_iteratorz&_set_output_data.<locals>.new_iterator  s    ,. 0(,%% Aq),'(&'ii .F&vw7G &i= +1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L. !G,x=A-$OOB/ **177=b9 -A?U1V.$JJ  '44 16-G?B x=1$AI$JRWWU^$JM$J.0[5P5P+ ("?"? -.$$ )'44U0d dD$/  %KI0 0s0   G"D>GG$AG2G"GGG"c            	       K   t               5  d} 2 3 d {   }t        |d      rd}|j                  D ]v  }t        |d      rct        |j                  d      rM|j                  j                  }t              |k  rj                  g        |   j                  |xs d       |dz  }x nMt        |d      rAt              dk(  rj                  g        d   j                  |j                  xs d       t        r5t        |t              r%t        
|j                  d 	j                         d} | ,7 (6 t              dkD  rpD cg c]  }dj                  |       nc c}w }}t               r'	j                  rt!        t"        j$                  |       | rt        
|	j                         d d d        n# 1 sw Y   nxY wrj'                  d d d        y y wr   r   r   s          r-   new_iterator_asyncz,_set_output_data.<locals>.new_iterator_async8  s    ,. 0(,%+  !q),'(&'ii .F&vw7G &i= +1,,*>*>#&x=L#@$,OOB$7 ( 6 = =gm L(A-L. !G,x=A-$OOB/ **177=b9 -A?U1V.$JJ  '44 16-G?|B x=1$AI$JRWWU^$J$JM$J.0[5P5P+ ("?"? -.$$ )'44U0 0 0b dD$/ sJ   G-G
ED?ED$G
?EG
E.-AG
	G-
GG-z<class 'async_generator'>)rX   r   r   GEN_AI_RESPONSE_MODELry   r   rY   rp   r   r'   rk   rl   ro   r=   r   r   rv   r@   rO   r   to_dictr   rH   )rs   rr   r   r   r   ru   response_textitemr   r   r   rq   r   s   `` ``     @@@r-   _set_output_datar      s!   x!D("@"@(..Q zz*%H::g&
8S 9:x#"$)D)DAIAQAQRvV^^002RMR=!A%#11"=1
 	x4{?W?WXMM$d+  
8	$"$)D)D8@HT\\^HMH=!A%#11"=1
 	x4{?W?WXMM$d+  
;	'$&))5	0 5	0n4	0 4	0l tH&&'(,GG!3!5H!-Hx4{?W?WXMM$d+ a S Is   "!I-I2c              /     K   t        j                         j                  t              }| | |i |S d|vr | |i |S 	 t	        |d          |j                  d      }d}t        j                  t        j                  j                  | d| t        j                        }|j                          t        ||||       | ||f}t        ||||d       |S # t
        $ r  | |i |cY S w xY ww)Nrq   ry   chat opr^   rE   Tr   )rM   rP   get_integrationr#   iter	TypeErrorr   
start_spanr   OPGEN_AI_CHATrE   	__enter__r   r   fargsr   r   ry   r   rs   rr   s           r-   _new_chat_completion_commonr   x  s    '')99:KLK$!&!!$!&!!"VJ 
 JJwEI  99  {!E7# ''D
 	NND&)[9f_$HT8V[dKO)  "$!&!!"s*   >C3C BC3C0-C3/C00C3c                 8     d t                fd       }|S )Nc                 <   t        | g|i |}	 t        |      \  } }}	 	  | |i |}|j                  |      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr1   r   nextStopIterationr   	ExceptionrV   sendr   r   r   generesults         r-   _execute_syncz3_wrap_chat_completion_create.<locals>._execute_sync  s    )!=d=f=	"3iOAtV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	U   ; A A< 	AAAA	A9&A44A99A< <	BBBBc                      t        j                         j                  t              }|d|vr | i |S  g| i |S Nrq   rM   rP   r   r#   r   r   r   r   r   s      r-   _sentry_patched_create_synczA_wrap_chat_completion_create.<locals>._sentry_patched_create_sync  sQ     !++-==>OP*F":d%f%%Q0000r/   r   r   r   r   s   ` @r-   r2   r2     s(    ( 1X1 1 '&r/   c                 8     d t                fd       }|S )Nc                 j  K   t        | g|i |}	 t        |      \  } }}	 	  | |i | d {   }|j                  |      S # t        $ r}|j                   d {  7  cY d }~S d }~ww xY w7 @# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwr1   r   r   s         r-   _execute_asyncz:_wrap_async_chat_completion_create.<locals>._execute_async  s     )!=d=f=	!"3iOAtV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	   B3A A2 A0A2 B B3	A-A(A A("A-#B3(A--B30A2 2	B;B		BB 	B0B+%B0&B3+B00B3c                     K   t        j                         j                  t              }|d|vr | i | d {   S  g| i | d {   S 7 7 wr   r   r   r   r   r   r   s      r-   _sentry_patched_create_asynczH_wrap_async_chat_completion_create.<locals>._sentry_patched_create_async  sd      !++-==>OP*F":D+F+++#A77777 ,7s!   9AAAAAAr   r   r   r   s   ` @r-   r4   r4     s(    ( 1X8 8 ('r/   c              /     K   t        j                         j                  t              }| | |i |S |j	                  d      }d}t        j
                  t        j                  j                  | d| t        j                        5 }t        ||||       | ||f}t        ||||d       |cd d d        S # 1 sw Y   y xY ww)Nry   
embeddingsr   r   Fr   )rM   rP   r   r#   r   r   r   r   GEN_AI_EMBEDDINGSrE   r   r   r   s           r-   _new_embeddings_create_commonr     s     '')99:KLK$!&!!JJwEI			99&&{!E7# ''
  
fi=D&(x%P  s   BC
'B;1
C;C Cc                 8     d t                fd       }|S )Nc                 <   t        | g|i |}	 t        |      \  } }}	 	  | |i |}|j                  |      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr1   r   r   r   r   r   rV   r   r   s         r-   r   z._wrap_embeddings_create.<locals>._execute_sync  s    +A???	"3iOAtV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	r   c                  ~    t        j                         j                  t              }| | i |S  g| i |S r1   r   r   s      r-   r   z<_wrap_embeddings_create.<locals>._sentry_patched_create_sync  J     !++-==>OPd%f%%Q0000r/   r   r   s   ` @r-   r5   r5     (    ( 1X1 1 '&r/   c                 8     d t                fd       }|S )Nc                 j  K   t        | g|i |}	 t        |      \  } }}	 	  | |i | d {   }|j                  |      S # t        $ r}|j                   d {  7  cY d }~S d }~ww xY w7 @# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwr1   r   r   s         r-   r   z5_wrap_async_embeddings_create.<locals>._execute_async  s     +A???	!"3iOAtV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	r   c                     K   t        j                         j                  t              }| | i | d {   S  g| i | d {   S 7 7 wr1   r   r   s      r-   r   zC_wrap_async_embeddings_create.<locals>._sentry_patched_create_async0  ]      !++-==>OPD+F+++#A77777 ,7!   5AAAAAAr   r   s   ` @r-   r6   r6     s(    ( 1X8 8 ('r/   c              /     K   t        j                         j                  t              }| | |i |S |j	                  d      }d}t        j
                  t        j                  j                  | d| t        j                        }|j                          t        ||||       | ||f}t        ||||d       |S w)Nry   	responsesr   r   Tr   )rM   rP   r   r#   r   r   r   r   GEN_AI_RESPONSESrE   r   r   r   r   s           r-   _new_responses_create_commonr   <  s     '')99:KLK$!&!!JJwEI  99%%{!E7# ''D
 	NND&)[9f_$HT8V[dKOs   B?Cc                 8     d t                fd       }|S )Nc                 <   t        | g|i |}	 t        |      \  } }}	 	  | |i |}|j                  |      S # t        $ r}|j                  cY d }~S d }~ww xY w# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wr1   r   r   r   r   r   rV   r   r   s         r-   r   z-_wrap_responses_create.<locals>._execute_syncW  s    *1>t>v>	"3iOAtV		"D+F+
 88F##  	77N	  ""1%T!"
  	77N	r   c                  ~    t        j                         j                  t              }| | i |S  g| i |S r1   r   r   s      r-   r   z;_wrap_responses_create.<locals>._sentry_patched_create_synck  r   r/   r   r   s   ` @r-   r8   r8   U  r   r/   c                 8     d t                fd       }|S )Nc                 j  K   t        | g|i |}	 t        |      \  } }}	 	  | |i | d {   }|j                  |      S # t        $ r}|j                   d {  7  cY d }~S d }~ww xY w7 @# t        $ r}t        |       |d d }~ww xY w# t        $ r}|j                  cY d }~S d }~ww xY wwr1   r   r   s         r-   r   z4_wrap_async_responses_create.<locals>._execute_asyncy  s     *1>t>v>	!"3iOAtV		" $1&11
 88F##  	!== 	!
 2 ""1%T!"
  	77N	r   c                     K   t        j                         j                  t              }| | i | d {   S  g| i | d {   S 7 7 wr1   r   r   s      r-   _sentry_patched_responses_asynczE_wrap_async_responses_create.<locals>._sentry_patched_responses_async  r   r   r   )r   r   r   s   ` @r-   r9   r9   w  s(    ( 1X8 8 +*r/   )T)?	functoolsr   rM   r   sentry_sdk.ai.monitoringr   sentry_sdk.ai.utilsr   sentry_sdk.constsr   sentry_sdk.integrationsr	   r
   sentry_sdk.scoper   sentry_sdk.utilsr   r   r   typingr   r   r   r   r   r   r   r   sentry_sdk.tracingr   r$   r   ImportError!openai.resources.chat.completionsr   r   openai.resourcesr   r   openai.types.chatr   r   r7   openai.resources.responsesr   r    /openai.types.responses.response_completed_eventr!   r#   rV   r_   rv   r   r   r   r2   r4   r   r5   r6   r   r8   r9   r:   r/   r-   <module>r	     s      7 3 & = 4  !WWW'/$ P<U  "DV
! !H/ :z+
\a,H F 'F (F.'D(D2'D+}  	  /
-
../  "!"s<   C #C  C# CC CC C #C-,C-