o
    0 i                     @   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   d/home/app/PaddleOCR-VL-test/.venv_paddleocr/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   Zsentry_tagsZsentry_dataZai_monitoringF)typeZhandled)Zclient_optionsZ	mechanism)hintr   r   r   popr   itemsZset_tagset_datar   GEN_AI_PIPELINE_NAMEr   	Exception
sentry_sdkutilsZevent_from_exceptionZ
get_clientoptionsZcapture_eventargskwargsZ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(   r1   r   r   async_wrapped?   s:   
	

$z2ai_track.<locals>.decorator.<locals>.async_wrapped)inspectiscoroutinefunctionr   )r3   r5   r6   r2   r4   )r3   r   	decorator    s
   
zai_track.<locals>.decoratorr   )r2   r4   r:   r   r9   r   ai_track   s   Ar;   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#   ZGEN_AI_USAGE_INPUT_TOKENSZ GEN_AI_USAGE_INPUT_TOKENS_CACHEDZGEN_AI_USAGE_OUTPUT_TOKENSZ$GEN_AI_USAGE_OUTPUT_TOKENS_REASONINGZGEN_AI_USAGE_TOTAL_TOKENS)r+   Zinput_tokensZinput_tokens_cachedZoutput_tokensZoutput_tokens_reasoningZtotal_tokensr   r   r   r   record_token_usaged   s,   r<   )NNNNN)r7   	functoolsr   Zsentry_sdk.constsr   Zsentry_sdk.utilsr%   r   Zsentry_sdk.tracingr   r   typingr   r   r	   r
   r   r   r   r   r   r   r   r;   r<   r   r   r   r   <module>   s*     (H