o
    BDic                     @   s   d dl 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 er@d dl
mZ d dl
mZ d d	l
mZ d d
lmZ zd dlZW n eyQ   edw dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    N)SPANDATA)DidNotEnable)should_send_default_pii)event_from_exception)TYPE_CHECKING)Any)Callable)Union)UsagezOpenAI Agents not installedc                 C   s0   t | t jdddd\}}tj||d d S )Nopenai_agentsF)typehandled)client_options	mechanism)hint)r   
sentry_sdk
get_clientoptionscapture_event)exceventr    r   d/var/www/Datamplify/venv/lib/python3.10/site-packages/sentry_sdk/integrations/openai_agents/utils.py_capture_exception   s   
r   c                  C   s*   t  } | d uo| j| k}|rt jS t jS N)r   get_current_spancontaining_transaction
start_spanstart_transaction)current_spantransaction_existsr   r   r   _get_start_span_function!   s   r!   c                 C   s   |  tjd |  tj|j |jjr|  tj|jj |jr'|  tj	|j |jj
r4|  tj|jj
 |jjrA|  tj|jj |jjrN|  tj|jj |jjr[|  tj|jj t|jdkrs|  tjtdd |jD  d S d S )Nopenair   c                 S   s   g | ]}t |qS r   )vars).0toolr   r   r   
<listcomp>Q       z#_set_agent_data.<locals>.<listcomp>)set_datar   GEN_AI_SYSTEMGEN_AI_AGENT_NAMEnamemodel_settings
max_tokensGEN_AI_REQUEST_MAX_TOKENSmodel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_TOOLSsafe_serialize)spanagentr   r   r   _set_agent_data*   s@   

r?   c                 C   sX   |  tj|j |  tj|jj |  tj|j |  tj	|j
j |  tj|j d S r   )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)r=   usager   r   r   _set_usage_dataU   s   rM   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jt| d S )N)systemuser	assistantr%   system_instructionsrN   text)r   rR   inputrolecontentr   function_callrP   function_call_outputr%   r   )rT   rU   )	r   getappenditemsr9   r(   r   GEN_AI_REQUEST_MESSAGESr<   )r=   get_response_kwargsmessages_by_rolerQ   messagerequest_messagesrT   messagesr   r   r   _set_input_datad   s4   
ra   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rn| 	t
jt|d  d S d S )N)responser%   rV   r%   r^   rb   r   )r   outputr   rY   dictrU   rR   AttributeErrorr9   r(   r   GEN_AI_RESPONSE_TOOL_CALLSr<   GEN_AI_RESPONSE_TEXT)r=   resultoutput_messagesrc   output_messager   r   r   _set_output_data   s2   



rk   c                    s@    fdd z | }t j|tdW S  ty   t|  Y S w )z&Safely serialize to a readable string.c                    s2  t | rJz3t| dd }t| dd }t| dd}|r#|r#| d| }n|r/|r/| d| }n|}d| dW S  tyI   dt| j d Y S w t| trZ fd	d
|  D S t| tt	frj fdd| D S t
| drz fdd
t|  D }dt| j d| dW S  ty   t|  Y S w | S )N
__module____qualname____name__	anonymous.z
<function >z
<callable c                    s   i | ]	\}}| |qS r   r   r$   kvserialize_itemr   r   
<dictcomp>   s    z:safe_serialize.<locals>.serialize_item.<locals>.<dictcomp>c                    s   g | ]} |qS r   r   )r$   xru   r   r   r&      r'   z:safe_serialize.<locals>.serialize_item.<locals>.<listcomp>__dict__c                    s$   i | ]\}}| d s| |qS )_)
startswithrr   ru   r   r   rw      s    < )callablegetattr	Exceptionr   rn   
isinstancerd   rZ   listtuplehasattrr#   repr)itemmodulequalnamer+   	full_pathattrsru   r   r   rv      s8   



z&safe_serialize.<locals>.serialize_item)default)jsondumpsstrr   )data
serializedr   ru   r   r<      s   #r<   )r   r   sentry_sdk.constsr   sentry_sdk.integrationsr   sentry_sdk.scoper   sentry_sdk.utilsr   typingr   r   r   r	   agentsr
   ImportErrorr   r!   r?   rM   ra   rk   r<   r   r   r   r   <module>   s0    
	+" 