o
    BDi                     @   s   d dl Z d dlmZ 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 er8d dlmZmZmZ e
d	dd
Zdd Zdd Zdd Z	dddZdS )    N)wraps)SPANDATA)
start_span)Span)
ContextVar)TYPE_CHECKING)OptionalCallableAnyai_pipeline_name)defaultc                 C   s   t |  d S N)_ai_pipeline_nameset)name r   Q/var/www/Datamplify/venv/lib/python3.10/site-packages/sentry_sdk/ai/monitoring.pyset_ai_pipeline_name   s   r   c                   C   s   t  S r   )r   getr   r   r   r   get_ai_pipeline_name   s   r   c                    s    fdd}|S )Nc                    sB    fdd} fdd}t  rt |S t |S )Nc                     sZ  t  }d|rdnd}td |d}|di  D ]
\}}||| q!|di  D ]
\}}||| q4|rV|tj| | i |W  d    S t 	  z8z	| i |}W n' t
y } ztjj|t jddd	d
\}	}
tj|	|
d |d d }~ww W t 	d  nt 	d  w |W  d    S 1 sw   Y  d S Nopzai.runzai.pipeline)r   r   sentry_tagssentry_dataai_monitoringF)typehandled)client_options	mechanism)hintr   r   r   r   popitemsset_tagset_datar   AI_PIPELINE_NAMEr   	Exception
sentry_sdkutilsevent_from_exception
get_clientoptionscapture_eventargskwargscurr_pipeliner   spankvreseeventr   descriptionfspan_kwargsr   r   sync_wrapped    s8   
	

$z1ai_track.<locals>.decorator.<locals>.sync_wrappedc                     sh  t  }d|rdnd}td |d}|di  D ]
\}}||| q"|di  D ]
\}}||| q5|rZ|tj| | i |I d H W  d    S t 	  z;z| i |I d H }W n' t
y } ztjj|t jddd	d
\}	}
tj|	|
d |d d }~ww W t 	d  nt 	d  w |W  d    S 1 sw   Y  d S r   r    r-   r7   r   r   async_wrapped=   s:   
	

$z2ai_track.<locals>.decorator.<locals>.async_wrapped)inspectiscoroutinefunctionr   )r9   r;   r<   r8   r:   )r9   r   	decorator   s
   
zai_track.<locals>.decoratorr   )r8   r:   r@   r   r?   r   ai_track   s   ArA   c                 C   s   t  }|r| tj| |d ur| jd|d |d ur"| jd|d |d u r2|d ur2|d ur2|| }|d ur>| d| d S d S )Nai_prompt_tokens_used)valueai_completion_tokens_usedai_total_tokens_used)r   r$   r   r%   set_measurement)r1   prompt_tokenscompletion_tokenstotal_tokensr   r   r   r   record_token_usageb   s   rJ   )NNN)r=   	functoolsr   sentry_sdk.constsr   sentry_sdk.utilsr'   r   sentry_sdk.tracingr   r   typingr   r   r	   r
   r   r   r   rA   rJ   r   r   r   r   <module>   s     G