
    \jU                      @   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	m
Z
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 d d
lmZ erd dlmZ d dlmZmZ d dl m!Z! 	 d dlZddZ#ddZ$ddZ%	 	 	 	 	 	 ddZ&ddZ'	 	 	 	 	 	 ddZ(y# e"$ r	  ed      w xY w)    N)GEN_AI_ALLOWED_MESSAGE_ROLESnormalize_message_rolesset_data_normalizednormalize_message_roletruncate_and_annotate_messages)SPANDATA
SPANSTATUSOP)DidNotEnable)should_send_default_pii)set_span_errored)event_from_exceptionsafe_serialize)_transform_system_instructions)_is_system_instruction_get_system_instructions)TYPE_CHECKING)Any)UsageTResponseInputItem)TextPartzOpenAI Agents not installedc                     t                t        | t        j                         j                  ddd      \  }}t        j
                  ||       y )Nopenai_agentsF)typehandled)client_options	mechanism)hint)r   r   
sentry_sdk
get_clientoptionscapture_event)exceventr   s      U/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/openai_agents/utils.py_capture_exceptionr&   %   sE    &!,,.66*u=KE4
 U.    c                 N   | j                  t        j                  d       | j                  t        j                  |j                         |j
                  j                  r4| j                  t        j                  |j
                  j                         d }|j                  r9t        |j                  d      r|j                  j                  n|j                  }nt        |d      r|j                  }|r | j                  t        j                  |       |j
                  j                  r4| j                  t        j                  |j
                  j                         |j
                  j                  r4| j                  t        j                  |j
                  j                         |j
                  j                   r4| j                  t        j"                  |j
                  j                          |j
                  j$                  r4| j                  t        j&                  |j
                  j$                         t)        |j*                        dkD  rK| j                  t        j,                  t/        |j*                  D cg c]  }t1        |       c}             y y c c}w )Nopenaimodel_sentry_request_modelr   )set_datar   GEN_AI_SYSTEMGEN_AI_AGENT_NAMEnamemodel_settings
max_tokensGEN_AI_REQUEST_MAX_TOKENSr*   hasattrr+   GEN_AI_REQUEST_MODELpresence_penaltyGEN_AI_REQUEST_PRESENCE_PENALTYtemperatureGEN_AI_REQUEST_TEMPERATUREtop_pGEN_AI_REQUEST_TOP_Pfrequency_penalty GEN_AI_REQUEST_FREQUENCY_PENALTYlentoolsGEN_AI_REQUEST_AVAILABLE_TOOLSr   vars)spanagent
model_nametools       r%   _set_agent_datarE   0   s   MM 	MM(,,ejj9&&..0D0D0O0O	

 J{{*1%++w*GU[[&&U[[
	/	000
h33Z@,,44  11	

 ''//1E1E1Q1Q	
 !!h33U5I5I5O5OP--55  22	

 5;;!335;;?4DJ?@	
  @s   J"c                    | j                  t        j                  |j                         | j                  t        j                  |j
                  j                         | j                  t        j                  |j                         | j                  t        j                  |j                  j                         | j                  t        j                  |j                         y )N)r,   r   GEN_AI_USAGE_INPUT_TOKENSinput_tokens GEN_AI_USAGE_INPUT_TOKENS_CACHEDinput_tokens_detailscached_tokensGEN_AI_USAGE_OUTPUT_TOKENSoutput_tokens$GEN_AI_USAGE_OUTPUT_TOKENS_REASONINGoutput_tokens_detailsreasoning_tokensGEN_AI_USAGE_TOTAL_TOKENStotal_tokens)rA   usages     r%   _set_usage_datarT   a   s    MM(44e6H6HIMM11""00 	MM(55u7J7JKMM55##44 	MM(44e6H6HIr'   c                    t               sy g }|j                  dg       }g }|j                  d      }||j                  d|d       t        |      }|t	        |      z  }t        |      dkD  r3| j                  t        j                  t        j                  |             |D cg c]  }t        |      r| }}|D ]  }d|v rVt        |j                  d            }	|j                  d      }
|j                  |	t        |
t              rd|
dgn|
d	       ]|j                  d
      dk(  r$|j                  t        j                   |gd	       |j                  d
      dk(  s|j                  t        j"                  |gd	        t%        |      }t'        j(                         }t+        || |      }|t-        | t        j.                  |d       y y c c}w )Ninputsystem_instructionstext)r   contentr   rolerY   )r   rX   )rZ   rY   r   function_callfunction_call_outputF)unpack)r   getappendr   r   r=   r,   r   GEN_AI_SYSTEM_INSTRUCTIONSjsondumpsr   r   
isinstancestrr   	ASSISTANTTOOLr   r   get_current_scoper   r   GEN_AI_REQUEST_MESSAGES)rA   get_response_kwargsrequest_messagesmessagesinstructions_text_partsexplicit_instructionsrW   messagenon_system_messagesnormalized_rolerY   normalized_messagesscopemessages_datas                 r%   _set_input_datart   o   s    #$1D1H1HRT1UH02/334IJ(&&0	
 38< =>QRR
"#a'//JJ./	
  (/Eg/N  ' W4W[[5HIOkk),G##+ &gs3 #)':;$	 {{6"o5 '' < F F$+9 V$(>> '' < A A$+9/< 22BC((*E23FeTM ,,		
 !Is   'G8Gc                 f   t               sy g 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,| j                  t        j                  t        |d                t        |d         dkD  rt        | t        j                  |d          y y # t        $ r% |d   j                  |j	                                Y w xY w)N)responserD   r[   rD   rn   rv   r   )r   outputr   r_   dictrY   rX   AttributeErrorr=   r,   r   GEN_AI_RESPONSE_TOOL_CALLSr   r   GEN_AI_RESPONSE_TEXT)rA   resultoutput_messagesrw   output_messages        r%   _set_output_datar      s.   "$ /O
 -- 	N;;/)F#**6;;=9[[I%"(.. NN#J/66~7J7JKN		N ?6"#a'//PV@W1X	
 ?:&'!+(//1L	
 , & N#J/66~7J7J7LMNs   2D+D0/D0c                 j   |j                   D ]  }|j                  j                  dk(  st        j                  t
        j                  d|j                   | j                        5 }|j                  t        j                  |j                         t               rT|j                  t        j                  |j                         |j                  t        j                  |j                          |j                   r|j#                  t$        j&                         d d d         y # 1 sw Y   %xY w)NMcpCallzexecute_tool )opdescriptionstart_timestamp)rw   	__class____name__r   
start_spanr
   GEN_AI_EXECUTE_TOOLr/   r   r,   r   GEN_AI_TOOL_NAMEr   GEN_AI_TOOL_INPUT	argumentsGEN_AI_TOOL_OUTPUTerror
set_statusr	   INTERNAL_ERROR)rA   r|   rw   execute_tool_spans       r%   _create_mcp_execute_tool_spansr      s     -- L$$	1&&))+FKK=9 $ 4 4 L #!**8+D+DfkkR*,%.. 22F4D4D &.. 33V]] <<%001J1JKL LLL Ls   (B4D((D2	)r#   r   returnN)rA   sentry_sdk.tracing.SpanrB   zagents.Agentr   N)rA   r   rS   r   r   N)rA   r   ri   zdict[str, Any]r   N)rA   r   r|   r   r   N)rA   r   r|   zagents.Resultr   N))ra   r   sentry_sdk.ai.utilsr   r   r   r   r   sentry_sdk.constsr   r	   r
   sentry_sdk.integrationsr   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   %sentry_sdk.ai._openai_completions_apir   #sentry_sdk.ai._openai_responses_apir   r   typingr   r   agentsr   r   sentry_sdk._typesr   ImportErrorr&   rE   rT   rt   r   r    r'   r%   <module>r      s       7 6 0 4 5 A P
 !0*6/.
bJI

#I
:JI
	I
X
>L
#L-<L	Ls  6
4
556s   &B B