
    `i"                        d dl Z d dlZd dlZd dlmZ ddlmZmZmZ d dl	m
Z
 d dlmZmZmZmZmZmZmZmZmZmZ d dlZd dlmZmZmZmZmZmZ d dlmZm Z  d d	l!m"Z" d d
l#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z* d dl+m,Z, erd dl-m.Z. d dl	m/Z/ d dl'm0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6  G d de          Z7	 	 	 	 dRdZ8dSdZ9ddde:fdZ;dTdZ<dUd"Z=dUd#Z>dVd%Z?dWd'Z@	 	 	 	 dXd+ZA	 	 	 	 dYd-ZB	 	 	 	 	 	 	 	 dZd4ZCd5e:d6d&dd7fd8ZDd[d:ZE	 	 	 	 d\d=ZF	 	 	 	 d]d?ZG	 	 	 	 d]d@ZHdAdBdCeIddDfdEZJ	 	 	 	 d^dFZKdGd7dHdde:ddd0d1ddfdIZL	 	 	 	 	 	 	 	 d_dJZM	 	 	 	 	 	 d`dLZN	 	 	 	 	 	 dadNZO	 	 	 	 	 	 	 	 	 	 dbdOZP	 	 	 	 	 	 	 	 dcdQZQdS )d    N)wraps   )ORIGINTOOL_ATTRIBUTES_MAPGEN_AI_SYSTEM)BLOB_DATA_SUBSTITUTE)
castTYPE_CHECKINGIterableAnyCallableListOptionalUnion	TypedDictDict)set_data_normalizedtruncate_and_annotate_messagesnormalize_message_rolesredact_blob_message_partstransform_google_content_partget_modality_from_mime_type)OPSPANDATA)should_send_default_pii)capture_internal_exceptionsevent_from_exceptionsafe_serialize)GenerateContentConfigPartContent)chain)Span)TextPart)GenerateContentResponseContentListUnionContentUnionDictToolModelEmbedContentResponseContentUnionc                   F    e Zd ZU dZeed<   eed<   eed<   eed<   eed<   dS )	UsageDatazStructure for token usage data.input_tokensinput_tokens_cachedoutput_tokensoutput_tokens_reasoningtotal_tokensN)__name__
__module____qualname____doc__int__annotations__     ~/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/sentry_sdk/integrations/google_genai/utils.pyr-   r-   5   sT         ))    r:   r-   response.Union[GenerateContentResponse, dict[str, Any]]returnc                 B   t          ddddd          }t          | t                    r|                     di           }|s|S |                    dd          pd}|                    dd          pd}||z   |d<   |                    dd          pd}||d<   |                    d	d          pd}||d
<   |                    dd          pd}||z   |d<   |                    dd          pd}||d<   |S t	          | d          s|S | j        }t          |dd          pd}t          |dd          pd}||z   |d<   t          |dd          pd}||d<   t          |d	d          pd}||d
<   t          |dd          pd}||z   |d<   t          |dd          pd}||d<   |S )a@  Extract usage data from response into a structured format.

    Args:
        response: The GenerateContentResponse object or dictionary containing usage metadata

    Returns:
        UsageData: Dictionary with input_tokens, input_tokens_cached,
                   output_tokens, and output_tokens_reasoning fields
    r   )r.   r/   r0   r1   r2   usage_metadataprompt_token_counttool_use_prompt_token_countr.   cached_content_token_countr/   thoughts_token_countr1   candidates_token_countr0   total_token_countr2   )r-   
isinstancedictgethasattrr@   getattr)	r<   
usage_datausageprompt_tokenstool_use_prompt_tokenscached_tokensreasoning_tokenscandidates_tokensr2   s	            r;   extract_usage_datarS   ?   s<     !  J (D!! -r22 			"6::?a!&+H!!L!L!QPQ%25K%K
>"		">BBGa,9
() 99%;Q??D10@
,-!II&>BBGa '8:J&J
?#yy!4a88=A%1
>"8-.. #E E#7;;@qM$U,I1MMRQR!.1G!GJ~ E#?CCHqM(5J$% u&<a@@EA,<J()  '?CCHq"36F"FJ5"5q99>QL!-J~r:   excr   c                     t          | t          j                    j        ddd          \  }}t          j        ||           dS )z.Capture exception with Google GenAI mechanism.google_genaiF)typehandled)client_options	mechanism)hintN)r   
sentry_sdk
get_clientoptionscapture_event)rT   eventr[   s      r;   _capture_exceptionra      sU    &!,..6)e<<  KE4
 U......r:   modelzUnion[str, Model]c                     t          | t                    r| S t          | d          rt          | j                  S t          |           S )z(Extract model name from model parameter.name)rG   strrJ   rd   )rb   s    r;   get_model_namerf      sE    % uf 5:u::r:   contentsr&   List[Dict[str, Any]]c                    | g S g }t          | t                    rd| dgS t          | t                    r+| D ]&}t          |          }|                    |           '|S t          | t
                    r|                     dd          }|                     d          }|rg }g }|D ]m}t          |          }	|	t          |	t
                    r/|	                    d          dk    r|                    |	           X|                    |	           n|r$|dk    rdn|pd}
|                    |
|d           |                    |           n(d	| v r$|                    |pd| d	         d	d
gd           |S t          | d          r| j
        rt          | dd          pd}g }g }| j
        D ]m}t          |          }	|	t          |	t
                    r/|	                    d          dk    r|                    |	           X|                    |	           n|r"|dk    rdn|}
|                    |
|d           |                    |           |S t          |           }	|	r8t          |	t
                    r|	                    d          dk    r|	gS d|	gdgS 	 ddlm} t          | |j                  rt          |           }|rd|gdgS n# t          $ r Y nw xY wt          | d          rSt          | d          rCt          | dd          }t          | dd          }||d}dt!          |          ||d}d|gdgS t          | d	          r#| j        rdt          | j                  d	d
gdgS g S )a$  Extract messages from contents parameter which can have various formats.

    Returns a list of message dictionaries in the format:
    - System: {"role": "system", "content": "string"}
    - User/Assistant: {"role": "user"|"assistant", "content": [{"text": "...", "type": "text"}, ...]}
    Nuserrolecontentrl   partstoolrb   	assistanttextrq   rW   r   Imageuri	mime_type rW   modalityrv   ru   )rG   re   listextract_contents_messagesextendrH   rI   _extract_part_contentappendrJ   rn   rK   PILrt   _extract_pil_imageImportErrorr   rq   )rg   messagesitemitem_messagesrl   rn   content_partstool_messagespartpart_resultnormalized_rolePILImage	blob_partfile_urirv   s                  r;   r{   r{      s    	H (C   7H5566 (D!!  	+ 	+D5d;;MOOM**** (D!! %||FF++W%% 	MM 
6 
63D99&k400 6[__V5L5LPV5V5V!((5555 "((5555  U15++dnf] S STTT OOM****xOO NF)1&)96 J JK     x!! hn x..8&N 	2 	2D/55K"+t,, 21H1HF1R1R$$[1111$$[1111 	Q-1W__kk$OOO_OOPPP&&& (11K @k4(( 	@[__V-D-D-N-N= #>>??))))))h// 	B*844I B!'YK@@AA    x >GHk$B$B >8UD11Hk488	 	 7	BB&	 I $<<== x   
X] 
#hm2D2Df)U)U(VWW
 	
 Is   '2K 
K('K(r   Optional[dict[str, Any]]c                    | dS t          | t                    rd| v rt          |           S |                     d          r| d         ddS t	          |           }|Ud| v rO| d         }t          |t                    r2t          |                    d          t
                    r
t          |d<   |S dS t          | d          r| j        rt          |           S t          | d          r| j	        r
| j	        ddS t          | d          rJ| j
        rC| j
        }t          |d	d          }t          |d
d          }||d}dt          |          ||dS t          | d          ri| j        rb| j        }t          |dd          }t          |d
d          }|7|d}t          |t
                    rt          }n|}dt          |          ||dS dS )zExtract content from a Part object or dict.

    Returns:
        - dict for content part (text/blob) or tool message
        - None if part should be skipped
    Nfunction_responserq   rr   inline_datadatarm   	file_datar   rv   rw   ru   rx   blobrW   ry   rv   rm   )rG   rH   _extract_tool_message_from_partrI   r   bytesr   rJ   r   rq   r   rK   r   r   )r   resultr   r   r   rv   r   rm   s           r;   r}   r}   #  sR    |t $ $&&2488888F 	: L&999 /t44$$"=1k400 =ZOOF++U6 6 = )=F9%Mt t()) 5d.D 5.t444 tV 3 3	6222 t[!! dn N	9j$77I{D99	 	 7	BB&	   t]## (8 &{FD11Kd;;	 	 $&& .  7	BB&"	   4r:   c                    d}t          | t                    r|                     d          }nt          | d          r| j        }|sdS d}d}d}t          |t                    rW|                    d          }|                    d          }|                    di           }|                    d|          }net          |dd          }t          |dd          }t          |dd          }|i }t          |t                    r|                    d|          }n|}|sdS d|rt          |          ndt          |          |t          |          nddd	S )
zExtract tool message from a Part with function_response.

    Returns:
        {"role": "tool", "content": {"toolCallId": "...", "toolName": "...", "output": "..."}}
        or None if not a valid tool message
    Nr   idrd   r<   outputro   )
toolCallIdtoolNamer   rk   )rG   rH   rI   rJ   r   rK   re   r   )r   r   tool_call_id	tool_namer   response_dictresponse_objs          r;   r   r   {  s    $ 3 HH%899	*	+	+ 3 2 t LIF#T** "(,,T22%))&11	)--j"==""8];; 0$==-vt<<	0*dCCLlD)) 	"!%%h==FF!F t /;E#l+++I060BnV,,,
 
  r:   imagec                     	 ddl m} t          | |j                  sdS | j        pd}|                                }d| }dt          |          |t          dS # t          $ r Y dS w xY w)z'Extract blob part from PIL.Image.Image.r   rs   NJPEGzimage/r   r   )r   rt   rG   formatlowerr   r   	Exception)r   r   
format_strsuffixrv   s        r;   r   r     s    ))))))%00 	4 \+V
!!##%V%%	 3I>>"+	
 
 	
    tts   A :A 
A('A(Optional[str]c                    t          |           }|sdS g }|D ]}|                    d          }t          |t                    r|                    |           Bt          |t
                    r\|D ]Y}t          |t                    rB|                    d          dk    r)|                    |                    dd                     Z|rd                    |          ndS )zExtract text from contents parameter which can have various formats.

    This is a compatibility function that extracts text from messages.
    For new code, use extract_contents_messages instead.
    Nrm   rW   rq   rw    )r{   rI   rG   re   r~   rz   rH   join)rg   r   textsmessagerm   r   s         r;   extract_contents_textr     s     )22H tE 7 7++i((gs## 	7LL!!!!&& 	7 7 7dD)) 7dhhv.>.>&.H.HLL&"!5!5666#-388E???-r:   tools#Iterable[Tool | Callable[..., Any]]Optional[List[dict[str, Any]]]c           
         g }| D ]}t          |          r7|                    t          |dd          t          |dd          d           Ht          |d          rH|j        A|j        D ]8}|                    t          |dd          t          |dd          d           9t          j                    D ]0\  }}t          ||d          r|                    ||d            n1|r|ndS )	z%Format tools parameter for span data.r3   unknownr6   N)rd   descriptionfunction_declarationsrd   r   )callabler~   rK   rJ   r   r   items)r   formatted_toolsro   	func_decl	attr_namer   s         r;   _format_tools_for_spanr     s`    O    D>> 	""#D*i@@#*4D#A#A     D122	*6 "7  	&& '	64 @ @'.y-'N'N     +>*C*E*E  &	;4D11 #**$-+6    E .7??47r:   r%   c                    g }t          | dg           r| j        D ]}t          |d          rt          |j        dg           s)|j        j        D ]k}t          |dd          rX|j        }t          |dd          dd}t          |dd          rt          |j                  |d	<   |                    |           lt          | d
d          r| j	        D ]}t          |dd          st          |dg           D ]j}t          |dd          rW|j        }t          |dd          dd}t          |d          rt          |j                  |d	<   |                    |           k|r|ndS )z\Extract tool/function calls from response candidates and automatic function calling history.
candidatesrm   rn   function_callNrd   )rd   rW   args	arguments"automatic_function_calling_history)
rK   r   rJ   rm   rn   r   r   r   r~   r   )r<   
tool_calls	candidater   r   	tool_callrm   s          r;   extract_tool_callsr     s   
 J xr** 1!, 	1 	1I9i00 !7B9 9  !)/ 1 14$77 1$($6M 'vt D D /! !I }fd;; T1?@R1S1S	+.%%i0001  x=tDD 1B 	1 	1G7GT22 "55 1 14$77 1$($6M 'vt D D /! !I }f55 T1?@R1S1S	+.%%i0001 $-::-r:   r   tuple[Any, ...]kwargsdict[str, Any]ro   r(   c                 B   |r|                                 ni }| r	 t          j        |          }t          |j                                                  }t          |           D ]#\  }}|t          |          k     r||||         <   $n# t          $ r | |d<   Y nw xY w|S )z(Capture tool input from args and kwargs.r   )	copyinspect	signaturerz   
parameterskeys	enumeratelenr   )r   r   ro   
tool_inputsigparam_namesiargs           r;   _capture_tool_inputr   =  s     #)0bJ  	&	&#D))Cs~224455K#D// 5 53s;''''14J{1~.5  	& 	& 	&!%Jv	& s   A-B
 
BBr   tool_docr#   c                    t          j        t          j        d|  t                    }|                    t          j        |            |                    t          j        d           |r |                    t          j	        |           |S )z!Create a span for tool execution.zexecute_tool )oprd   originfunction)
r\   
start_spanr   GEN_AI_EXECUTE_TOOLr   set_datar   GEN_AI_TOOL_NAMEGEN_AI_TOOL_TYPEGEN_AI_TOOL_DESCRIPTION)r   r   spans      r;   _create_tool_spanr   R  s     !(Y((  D
 	MM(+Y777MM(+Z888 Bh6AAAKr:   Tool | Callable[..., Any]c                      t                     s S t           dd           j        t          j                   rt                     d
 fd            }|S t                     d
 fd            }|S )z3Wrap a tool to emit execute_tool spans when called.r3   r   r   r   r   r>   c                  0  K   t                    5 }t          | |          }t                      5  |                    t          j        t          |                     d d d            n# 1 swxY w Y   	  | i | d {V }t                      5  |                    t          j        t          |                     d d d            n# 1 swxY w Y   |cd d d            S # t          $ r}t          |            d }~ww xY w# 1 swxY w Y   d S N
r   r   r   r   r   GEN_AI_TOOL_INPUTr   GEN_AI_TOOL_OUTPUTr   ra   	r   r   r   r   r   rT   ro   r   r   s	         r;   async_wrappedz#wrapped_tool.<locals>.async_wrappedk  s     "9h77 40vtDD
022  MM 2N:4N4N                
#'4#8#8#8888888F 566  $79O9O                
 "#       $ !   &s+++%         sv    D.A."D.A2	2D5A2	6D:C).CC)C	C)C	C))
D3DDDDDc                      t                    5 }t          | |          }t                      5  |                    t          j        t          |                     d d d            n# 1 swxY w Y   	  | i |}t                      5  |                    t          j        t          |                     d d d            n# 1 swxY w Y   |cd d d            S # t          $ r}t          |            d }~ww xY w# 1 swxY w Y   d S r   r   r   s	         r;   sync_wrappedz"wrapped_tool.<locals>.sync_wrapped  s   "9h77 40vtDD
022  MM 2N:4N4N                
!T42622F 566  $79O9O                
 "#       $ !   &s+++%         sv    D.A, D,A0	0D3A0	4D8C!.C<C!C	C!C	C!!
D +C;;D  DD
DN)r   r   r   r   r>   r   )r   rK   r6   r   iscoroutinefunctionr   )ro   r   r   r   r   s   `  @@r;   wrapped_toolr   `  s    D>> j)44I|H"4(( 5	t	 	 	 	 	 	 	 
	.  
t	 	 	 	 	 	 	 
	. r:   configr   c                     | rt          | dd          s| S t          j        |           }d | j        D             |_        |S )zWrap tools in config to emit execute_tool spans. Tools are sometimes passed directly as
    callable functions as a part of the config object.r   Nc                 ,    g | ]}t          |          S r9   )r   ).0ro   s     r;   
<listcomp>z-wrapped_config_with_tools.<locals>.<listcomp>  s     @@@4L&&@@@r:   )rK   r   r   )r   r   s     r;   wrapped_config_with_toolsr     sO      $77 YvF@@6<@@@FLMr:   Optional[List[str]]c                    | rt          | dg           sdS g }| j        D ]b}t          |d          rt          |j        d          s(|j        j        D ]-}t          |dd          r|                    |j                   .c|r|ndS )z&Extract text from response candidates.r   Nrm   rn   rq   )rK   r   rJ   rm   rn   r~   rq   )r<   r   r   r   s       r;   _extract_response_textr     s    
  78\2>> tE( ( (	y),, 	GI<Mw4W4W 	%+ 	( 	(DtVT** (TY'''	( #55t#r:   c                    | rt          | dg           sdS g }| j        D ][}t          |dd          rHt          |j                  }d|v r|                    d          d         }|                    |           \|r|ndS )z0Extract finish reasons from response candidates.r   Nfinish_reason.)rK   r   re   r   splitr~   )r<   finish_reasonsr   reasons       r;   extract_finish_reasonsr    s      78\2>> tN( * *	9ot44 	*011Ff}}c**2.!!&)))+5>>5r:   system_instructions%Union[ContentUnionDict, ContentUnion]can_be_contentlist[TextPart]c                    g }t          | t                    rd| dgS t          | t                    r| j        rd| j        dgS |rrt          | t                    r]t          | j        t                    rA| j        D ]9}t          |j        t                    r|                    d|j        d           :|S t          | t                    r!| 	                    d          rd| d         dgS |rt          | t                    r| 	                    dg           }|D ]}t          |t                    r8t          |j        t                    r|                    d|j        d           Ot          |t                    rFt          |	                    d          t                    r|                    d|d         d           |S |S )Nrq   )rW   rm   rn   )
rG   re   r    rq   r!   rn   rz   r~   rH   rI   )r  r  
text_partsr   rn   s        r;   '_transform_system_instruction_one_levelr	    s	    $&J%s++ B,?@@AA%t,, G1D1I G,?,DEEFF *%8'BB )/66 	N+1 N Ndi-- N%%v$)&L&LMMM%t,, 
1D1H1H1P1P 
,?,GHHII	 J':DAA #''44 	M 	MD$%% M*TY*D*D M!!6di"H"HIIIID$'' MJtxx7G7G,M,M M!!6d6l"K"KLLLr:   c                     g }t          | t                    r-t          t          j        d | D                                 }|S t	          | d          S )Nc              3   8   K   | ]}t          |d           V  dS )Fr  N)r	  )r   instructionss     r;   	<genexpr>z1_transform_system_instructions.<locals>.<genexpr>  sL           ! 8              r:   Tr  )rG   rz   r"   from_iterabler	  )r  r  s     r;   _transform_system_instructionsr    s}     $&J%t,, 
     %8	       
 

 2D   r:   r   integrationc                 6   |                      t          j        t                     |                      t          j        |           |                    dd          r |                      t          j        d           |                    d          }t                      r|j        rg }d}|rt          |d          r|j	        }n.t          |t                    rd|v r|                    d          }|?|                      t          j        t          j        t          |                               t!          |          }|                    |           |rRt%          |          }	t'          j                    }
t+          |	| |
          }|t-          | t          j        |d           dt          j        fd	t          j        fd
t          j        fdt          j        fdt          j        fdt          j        fdt          j        ffD ]=\  }}t          ||          r(t?          ||          }||                      ||           >|It          |d          r;|j         }|r4tC          |          }|r%t-          | t          j"        |d           dS dS dS dS dS )zSet span data for the request.streamFTr   Nsystem_instructionunpacktemperaturetop_ptop_kmax_output_tokenspresence_penaltyfrequency_penaltyseedr   )#r   r   r   GEN_AI_REQUEST_MODELrI   GEN_AI_RESPONSE_STREAMINGr   include_promptsrJ   r  rG   rH   GEN_AI_SYSTEM_INSTRUCTIONSjsondumpsr  r{   r|   r   r\   get_current_scoper   r   GEN_AI_REQUEST_MESSAGESGEN_AI_REQUEST_TEMPERATUREGEN_AI_REQUEST_TOP_PGEN_AI_REQUEST_TOP_KGEN_AI_REQUEST_MAX_TOKENSGEN_AI_REQUEST_PRESENCE_PENALTY GEN_AI_REQUEST_FREQUENCY_PENALTYGEN_AI_REQUEST_SEEDrK   r   r   GEN_AI_REQUEST_AVAILABLE_TOOLS)r   r  rb   rg   r   r   r   r  contents_messagesnormalized_messagesscopemessages_dataparamspan_keyvaluer   r   s                    r;   set_span_data_for_requestr5    s    	MM((-888MM(/777zz(E"" @h8$???06

80D0DF     [%@   # 	Cgf&:;; 	C"(";%% 	C*>&*H*H"(**-A"B"B*MM3
9:MNNOO   6h??)*** 	"9("C"C022E:#T5 M (#4! 	    
;<	(/0	(/0	h@A	XEF	hGH	-. / /x 65!! 	/FE**E h... gfg66 	4U;;O #;# 	      	 	 r:   c                 N   |sdS t                      rE|j        r>t          |          }|r-|                     t          j        t          |                     t          |          }|r-|                     t          j        t          |                     t          |          }|rt          | t          j        |           t          |dd          r%|                     t          j        |j                   t          |dd          r%|                     t          j        |j                   t#          |          }|d         r&|                     t          j        |d                    |d         r&|                     t          j        |d                    |d         r&|                     t          j        |d                    |d         r&|                     t          j        |d                    |d         r(|                     t          j        |d                    dS dS )	zSet span data for the response.Nresponse_idmodel_versionr.   r/   r0   r1   r2   )r   r   r   r   r   GEN_AI_RESPONSE_TEXTr   r   GEN_AI_RESPONSE_TOOL_CALLSr  r   GEN_AI_RESPONSE_FINISH_REASONSrK   GEN_AI_RESPONSE_IDr7  GEN_AI_RESPONSE_MODELr8  rS   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)r   r  r<   response_textsr   r   rL   s          r;   set_span_data_for_responserD  `  s-        Y[%@ Y/99 	YMM(79W9WXXX#H--J Wh9>*;U;UVVV+H55N 
(9>	
 	
 	
 x-- Ih183GHHHx$// Nh4h6LMMM#H--J.! Vh8*^:TUUU'( 
5,-	
 	
 	

 /" Xh9:o;VWWW+, 
901	
 	
 	

 .! Vh8*^:TUUUUUV Vr:   tuple[Any, Any, str]c                 $   | r| d         n|                     dd          }t          |           dk    r| d         n|                     d          }t          |          }|                     d          }t          |          }||ur||d<   |||fS )zBExtract and prepare common arguments for generate_content methods.r   rb   r   r   rg   r   )rI   r   rf   r   )r   r   rb   rg   
model_namer   wrapped_configs          r;   prepare_generate_content_argsrI    s     ?DGGGY!?!?Ed))a--tAwwVZZ
-C-CH&&JZZ!!F.v66NV##)x(J&&r:   tuple[str, Any]c                 ~    |                     dd          }|                     d          }t          |          }||fS )zxExtract and prepare common arguments for embed_content methods.

    Returns:
        tuple: (model_name, contents)
    rb   r   rg   )rI   rf   )r   r   rb   rg   rG  s        r;   prepare_embed_content_argsrL    s@     JJw	**Ezz*%%H&&Jxr:   c                 b   t                      r|j        r|rg }t          |t                    r|g}nUt          |t                    r,|D ](}t          |          }|r|                    |           )nt          |          }|r|g}|r%t          | t          j	        |d           dS dS dS dS dS )z$Set span data for embedding request.Fr  N)
r   r   rG   re   rz   r   r~   r   r   GEN_AI_EMBEDDINGS_INPUT)r   r  rg   r   input_textsr   rq   s          r;   set_span_data_for_embed_requestrP    s   
    [%@  	K (C(( 
)'jHd++ )$ 1 1D066D 1#**40001
 -X66 )#'&K #4 	     '   	 	" r:   r*   c                 .   |sdS t          |d          r||j        rwd}|j        D ]C}t          |d          r1|j        r*t          |j        dd          }||t	          |          z  }D|dk    r&|                     t          j        |           dS dS dS dS )z%Set span data for embedding response.N
embeddingsr   
statisticstoken_count)rJ   rR  rS  rK   r7   r   r   r>  )r   r  r<   r2   	embeddingrT  s         r;    set_span_data_for_embed_responserV    s       x&& L8+> L!, 	5 	5Iy,// 5I4H 5%i&:M4PP* C$4$44L !MM(<lKKKKKL L L L r:   )r<   r=   r>   r-   )rT   r   r>   N)rg   r&   r>   rh   )r   r   r>   r   )r   r   r>   r   )rg   r&   r>   r   )r   r   r>   r   )r<   r%   r>   r   )r   r   r   r   ro   r(   r>   r   )ro   r   r>   r   )r   r   r>   r   )r<   r%   r>   r   )r  r  r>   r  )r   r#   r  r   r<   r%   r>   N)r   r   r   r   r>   rE  )r   r   r   r   r>   rJ  )
r   r#   r  r   rg   r   r   r   r>   N)r   r#   r  r   r<   r*   r>   N)Rr   r"  r   	functoolsr   constsr   r   r   sentry_sdk._typesr   typingr	   r
   r   r   r   r   r   r   r   r   r\   sentry_sdk.ai.utilsr   r   r   r   r   r   sentry_sdk.constsr   r   sentry_sdk.scoper   sentry_sdk.utilsr   r   r   google.genai.typesr   r    r!   	itertoolsr"   sentry_sdk.tracingr#   r$   r%   r&   r'   r(   r)   r*   r+   r-   rS   ra   re   rf   r{   r}   r   r   r   r   r   r   r   r   r   r   r  boolr	  r  r5  rD  rI  rL  rP  rV  r9   r:   r;   <module>rc     s6            > > > > > > > > > > 2 2 2 2 2 2                                           + * * * * * * * 4 4 4 4 4 4         
 D C C C C C C C C C       ''''''******                     	   H>HH H H HV/ / / /- #    B B B BJU U U Up2 2 2 2j   .. . . ..'80'8%'8 '8 '8 '8T2.'2.%2. 2. 2. 2.j
%5=C   *  F    > > > >B#   $'$$ $ $ $(6'66 6 6 6(@    D@   ,M
MM M !	M
 M 
M M M M`3V
3V$3V0I3V	3V 3V 3V 3Vl'
'%5'' ' ' '  
 %5        
$05?O	   @L
L$L0FL	L L L L L Lr:   