
    \j!                         d dl mZmZmZmZmZ d dlm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mZmZ erd dlmZ d d	lmZ  G d
 de      ZddZ	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZy)    )TYPE_CHECKINGAnyList	TypedDictOptional)set_data_normalized)SPANDATA)should_send_default_pii)safe_serialize   )extract_tool_callsextract_finish_reasonsextract_contents_textextract_usage_data	UsageData)Span)GenerateContentResponsec                   J    e Zd ZU ded<   ded<   eed<   ded<   ded<   d	ed
<   y)AccumulatedResponsezOptional[str]idmodeltextz	List[str]finish_reasonszList[dict[str, Any]]
tool_callszOptional[UsageData]usage_metadataN)__name__
__module____qualname____annotations__str     X/root/env/lib/python3.12/site-packages/sentry_sdk/integrations/google_genai/streaming.pyr   r      s%    
I&&))r"   r   c                     t        t        | d   |d         t        | d   |d         t        | d   |d         t        | d   |d         t        | d   |d               S )Ninput_tokensoutput_tokensinput_tokens_cachedoutput_tokens_reasoningtotal_tokens)r%   r&   r'   r(   r)   )r   max)selfothers     r#   element_wise_usage_maxr-      s    n-u^/DE$/1GH&'/D)E
 !$*+U3L-M!
 n-u^/DE
 
r"   c                    g }g }g }d}d}d}| D ]  }t        |dd      r`t        |dg       D ]P  }t        |d      st        |j                  dg       s(t        |j                        }	|	s@|j	                  |	       R t        |      }
|
r|j                  |
       t        |      }|r|j                  |       t        |      }||nt        ||      } t        dj                  |      |||||      }|S )z?Accumulate streaming chunks into a single response-like object.N
candidatescontentparts )r   r   r   r   r   r   )getattrhasattrr0   r   appendr   extendr   r   r-   r   join)chunksaccumulated_textr   r   
usage_dataresponse_idr   chunk	candidateextracted_textextracted_finish_reasonsextracted_tool_callschunk_usage_dataaccumulated_responses                 r#   accumulate_streaming_responserC   -   s0    NJJKE 
5,-$UL"= @	9i0W%%w6 &;9;L;L%MN%(//?@ $:%#@ #!!":;1%823
 .e4 ! '
4DE 	/
: /WW%&%!  r"   Nc                 .   t               rJ|j                  r>|j                  d      r-| j                  t        j
                  t        |d   g             |j                  d      rt        | t        j                  |d          |j                  d      r,| j                  t        j                  t        |d                |j                  d      r#| j                  t        j                  |d          |j                  d      r#| j                  t        j                  |d          |d   y|d   d   r&| j                  t        j                  |d   d          |d   d	   r&| j                  t        j                  |d   d	          |d   d
   r&| j                  t        j                  |d   d
          |d   d   r&| j                  t        j                  |d   d          |d   d   r'| j                  t        j                   |d   d          yy)z1Set span data for accumulated streaming response.r   r   r   r   r   r   Nr%   r'   r&   r(   r)   )r
   include_promptsgetset_datar	   GEN_AI_RESPONSE_TEXTr   r   GEN_AI_RESPONSE_FINISH_REASONSGEN_AI_RESPONSE_TOOL_CALLSGEN_AI_RESPONSE_IDGEN_AI_RESPONSE_MODEL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)spanintegrationrB   s      r#   $set_span_data_for_streaming_responserT   a   s   
 	 !'' $$V,))089:	

  0133 !12	
 -///=>	

 %h113G3MN(h446J76ST,-5,-n=.. !12>B	

 ,-.CD55 !123HI	

 ,-o>// !12?C	

 ,-.GH99 !123LM	

 ,-n=.. !12>B	
 >r"   )r+   r   r,   r   returnr   )r8   zList[GenerateContentResponse]rU   r   )rR   r   rS   r   rB   r   rU   N)typingr   r   r   r   r   sentry_sdk.ai.utilsr   sentry_sdk.constsr	   sentry_sdk.scoper
   sentry_sdk.utilsr   utilsr   r   r   r   r   sentry_sdk.tracingr   google.genai.typesr   r   r-   rC   rT   r!   r"   r#   <module>r^      sz    @ @ 3 & 4  ':*) *1 +1 1 h?

?
$?
<Q?
	?
r"   