o
    wi                     @   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   h/home/ubuntu/sommelier/.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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>R       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_TOOLSsafe_serialize)spanagent
model_namer   r   r   _set_agent_data*   sB   

rA   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_dataV   s   rO   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_instructionsrP   text)r   rT   inputrolecontentr   function_callrR   function_call_outputr&   r   )rV   rW   )	r   getappenditemsr:   r)   r   GEN_AI_REQUEST_MESSAGESr=   )r>   get_response_kwargsmessages_by_rolerS   messagerequest_messagesrV   messagesr   r   r   _set_input_datae   s4   
rc   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&   rX   r&   r`   rd   r   )r   outputr   r[   dictrW   rT   AttributeErrorr:   r)   r   GEN_AI_RESPONSE_TOOL_CALLSr=   GEN_AI_RESPONSE_TEXT)r>   resultoutput_messagesre   output_messager   r   r   _set_output_data   s2   



rm   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%   xrw   r   r   r'      r(   z:safe_serialize.<locals>.serialize_item.<locals>.<listcomp>__dict__c                    s$   i | ]\}}| d s| |qS )_)
startswithrt   rw   r   r   ry      s    < )callablegetattr	Exceptionr   rp   
isinstancerf   r\   listtupler0   r$   repr)itemmodulequalnamer,   	full_pathattrsrw   r   r   rx      s8   



z&safe_serialize.<locals>.serialize_item)default)jsondumpsstrr   )data
serializedr   rw   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!   rA   rO   rc   rm   r=   r   r   r   r   <module>   s0    
	," 