o
    h                     @   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rRd dlmZmZmZmZmZmZ ed	eed
ef ed
ee f f d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	AwaitableAnyUnionTypeVarF.)boundai_pipeline_name)defaultc                 C   s   t |  d S N)_ai_pipeline_nameset)name r   Z/var/www/html/pro-man-master/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   popr   itemsset_tagset_datar   GEN_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%   r2   r<   r   r   async_wrapped?   s:   
	

$z2ai_track.<locals>.decorator.<locals>.async_wrapped)inspectiscoroutinefunctionr   )r>   r@   rA   r=   r?   )r>   r   	decorator    s
   
zai_track.<locals>.decoratorr   )r=   r?   rE   r   rD   r   ai_track   s   ArF   c                 C   s   t  }|r| tj| |d ur| tj| |d ur"| tj| |d ur-| tj| |d ur8| tj| |d u rH|d urH|d urH|| }|d urU| tj| d S d S r   )	r   r)   r   r*   GEN_AI_USAGE_INPUT_TOKENS GEN_AI_USAGE_INPUT_TOKENS_CACHEDGEN_AI_USAGE_OUTPUT_TOKENS$GEN_AI_USAGE_OUTPUT_TOKENS_REASONINGGEN_AI_USAGE_TOTAL_TOKENS)r6   input_tokensinput_tokens_cachedoutput_tokensoutput_tokens_reasoningtotal_tokensr   r   r   r   record_token_usaged   s,   rQ   )NNNNN)rB   	functoolsr   sentry_sdk.constsr   sentry_sdk.utilsr,   r   sentry_sdk.tracingr   r   typingr   r   r	   r
   r   r   r   r   r   r   r   rF   rQ   r   r   r   r   <module>   s*     (H