o
    h                     @   s   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
 d dlmZmZ d dlmZ er>d d	lmZ d d
lmZ zd dlZW n eyO   edw dd Zdd Zdd Zdd Zdd ZdS )    N)set_data_normalized)SPANDATA)DidNotEnable)should_send_default_pii)set_span_errored)event_from_exceptionsafe_serialize)TYPE_CHECKING)Any)UsagezOpenAI Agents not installedc                 C   s6   t   t| t jdddd\}}tj||d d S )Nopenai_agentsF)typehandled)client_options	mechanism)hint)r   r   
sentry_sdk
get_clientoptionscapture_event)exceventr    r   m/var/www/html/pro-man-master/venv/lib/python3.10/site-packages/sentry_sdk/integrations/openai_agents/utils.py_capture_exception   s   
r   c                 C   s  |  tjd |  tj|j |jjr|  tj|jj |jr3t	|jdr)|jjn|j}|  tj
| |jjr@|  tj|jj |jjrM|  tj|jj |jjrZ|  tj|jj |jjrg|  tj|jj t|jdkr|  tjtdd |jD  d S d S )Nopenaimodelr   c                 S   s   g | ]}t |qS r   )vars).0toolr   r   r   
<listcomp>J   s    z#_set_agent_data.<locals>.<listcomp>)set_datar   GEN_AI_SYSTEMGEN_AI_AGENT_NAMEnamemodel_settings
max_tokensGEN_AI_REQUEST_MAX_TOKENSr   hasattr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   )spanagent
model_namer   r   r   _set_agent_data"   sB   

r8   c                 C   sX   |  tj|j |  tj|jj |  tj|j |  tj	|j
j |  tj|j d S )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)r5   usager   r   r   _set_usage_dataN   s   rF   c                 C   s   t  sd S g g g g d}|d}|r|d d|d |dg D ]4}d|v r:||d d|dd q#|d	d
krI|d | q#|d	dkrW|d | q#g }| D ]\}}t|dkrp|||d q^t| tj|dd d S )N)systemuser	assistantr   system_instructionsrG   text)r   rK   inputrolecontentr   function_callrI   function_call_outputr   r   )rM   rN   F)unpack)r   getappenditemsr2   r   r   GEN_AI_REQUEST_MESSAGES)r5   get_response_kwargsmessages_by_rolerJ   messagerequest_messagesrM   messagesr   r   r   _set_input_data]   s8   


r[   c              
   C   s   t  sd S g g d}|jD ]8}|jdkr|d |  q|jdkrE|jD ]}z
|d |j W q& tyD   |d |  Y q&w qt|d dkrY| 	t
jt|d  t|d dkrlt| t
j|d  d S d S )N)responser   rO   r   rX   r\   r   )r   outputr   rS   dictrN   rK   AttributeErrorr2   r!   r   GEN_AI_RESPONSE_TOOL_CALLSr   r   GEN_AI_RESPONSE_TEXT)r5   resultoutput_messagesr]   output_messager   r   r   _set_output_data   s2   



re   )r   sentry_sdk.ai.utilsr   sentry_sdk.constsr   sentry_sdk.integrationsr   sentry_sdk.scoper   sentry_sdk.tracing_utilsr   sentry_sdk.utilsr   r   typingr	   r
   agentsr   ImportErrorr   r8   rF   r[   re   r   r   r   r   <module>   s*    ,$