
    \j              	       L   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Z	d dl	m
Z
 d dlmZ d dlmZ d dlmZmZmZ d d	lmZ er,d 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         Z edd      ZddZddZdeddddfdZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ y)    N)wraps)_set_span_data_attribute)SPANDATA)
start_span)Span)StreamedSpan)
ContextVarreraisecapture_internal_exceptions)TYPE_CHECKING)OptionalCallable	AwaitableAnyUnionTypeVarF.)boundai_pipeline_name)defaultreturnc                 .    t         j                  |        y N)_ai_pipeline_nameset)names    B/root/env/lib/python3.12/site-packages/sentry_sdk/ai/monitoring.pyset_ai_pipeline_namer      s    $    c                  *    t         j                         S r   )r   get r   r   get_ai_pipeline_namer#      s      ""r   descriptionspan_kwargsr   zCallable[[F], F]c                      d fd}|S )Nc                      d fd}d fd}t        j                         r t               |      S  t               |      S )Nc            
         t         j                         }j                  d|rdnd      }t        d|d5 }|j                  di       j	                         D ]  \  }}|j                  ||        |j                  di       j	                         D ]  \  }}|j                  ||        |r1|j                  t        j                  |        | i |cd d d        S t         j                         	  | i |}t         j                  d        cd d d        S # t        $ r}t        j                         }	t               5  t        j                  j!                  |t        j"                         j$                  ddd	
      \  }
}t        j&                  |
|       d d d        n# 1 sw Y   nxY wt)        |	  Y d }~d }~ww xY w# t         j                  d        w xY w# 1 sw Y   y xY w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sysexc_infor   
sentry_sdkutilsevent_from_exception
get_clientoptionscapture_eventr
   argskwargscurr_pipeliner*   spankvreser;   eventr2   r$   fr%   s               r   sync_wrappedz1ai_track.<locals>.decorator.<locals>.sync_wrapped!   s   -113M=xmTBCC{C t"JJ}b9??A 'DAqLLA&'"JJ}b9??A (DAqMM!Q'( MM("?"?Od-f-  &))+6400 *--d31  % 	+#&<<>8: G*4*:*:*O*O !/9/D/D/F/N/N3Bu*U +P +KE4
 '44UFG G G  *	+ *--d3/ sa   BG'"G'8D  G' 	G
)GAF,#	G,F51G GG

GG$$G''G0c            
        K   t         j                         }j                  d|rdnd      }t        d|d5 }|j                  di       j	                         D ]  \  }}|j                  ||        |j                  di       j	                         D ]  \  }}|j                  ||        |r9|j                  t        j                  |        | i | d {   cd d d        S t         j                         	  | i | d {   }t         j                  d        cd d d        S 7 S7 &# t        $ r}t        j                         }	t               5  t        j                  j!                  |t        j"                         j$                  ddd	
      \  }
}t        j&                  |
|       d d d        n# 1 sw Y   nxY wt)        |	  Y d }~d }~ww xY w# t         j                  d        w xY w# 1 sw Y   y xY wwr)   r3   rB   s               r   async_wrappedz2ai_track.<locals>.decorator.<locals>.async_wrapped?   s    -113M=xmTBCC{C t"JJ}b9??A 'DAqLLA&'"JJ}b9??A (DAqMM!Q'( MM("?"?O!"D!3F!33  &))+64$%t$6v$66 *--d31  4 7$ 	+#&<<>8: G*4*:*:*O*O !/9/D/D/F/N/N3Bu*U +P +KE4
 '44UFG G G  *	+ *--d3/ s   9H	B"G=D2G="
H	,G=D6D4D6G=(
H	2G=4D66	G ?GAG9	GGGG#G  G##G::G==HH	)rC   r   rD   r   r   r   )inspectiscoroutinefunctionr   )rL   rM   rO   r$   r%   s   `  r   	decoratorzai_track.<locals>.decorator    s?    	<	< &&q)58M**58L))r   )rL   r   r   r   r"   )r$   r%   rR   s   `` r   ai_trackrS      s    @*D r   c                    t               }|rt        | t        j                  |       |t        | t        j                  |       |t        | t        j
                  |       |t        | t        j                  |       |t        | t        j                  |       |t        | t        j                  |       |	||||z   }|t        | t        j                  |       y y r   )
r#   r   r   r8   GEN_AI_USAGE_INPUT_TOKENS GEN_AI_USAGE_INPUT_TOKENS_CACHED%GEN_AI_USAGE_INPUT_TOKENS_CACHE_WRITEGEN_AI_USAGE_OUTPUT_TOKENS$GEN_AI_USAGE_OUTPUT_TOKENS_REASONINGGEN_AI_USAGE_TOTAL_TOKENS)rF   input_tokensinput_tokens_cachedinput_tokens_cache_writeoutput_tokensoutput_tokens_reasoningtotal_tokensr   s           r   record_token_usagera   e   s     ,- x'D'DFVW x'I'I<X& 55	
  + ::$	
   (55}	
 * 99#	
  8]=V#m3 x'I'I<X  r   )r   Optional[str]r   N)r   rb   )NNNNNN)rF   zUnion[Span, StreamedSpan]r[   Optional[int]r\   rc   r]   rc   r^   rc   r_   rc   r`   rc   r   N)!rP   r:   	functoolsr   sentry_sdk.ai.utilsr   sentry_sdk.constsr   sentry_sdk.utilsr<   r   sentry_sdk.tracingr   sentry_sdk.tracesr   r	   r
   r   typingr   r   r   r   r   r   r   r   r   r   r#   strrS   ra   r"   r   r   <module>rl      s    
  8 &  ! # * M M  II5#s(!3Xc9S>>Q5R!RSTA14@  #C# Ce C8J CP %)+/04%)/3$(/Y
%/Y!/Y )/Y .	/Y
 #/Y -/Y "/Y 
/Yr   