
    tniN                         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S )    )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                   L    e Zd ZU ded<   ded<   eed<   ded<   ded<   d	ed
<   dS )AccumulatedResponsezOptional[str]idmodeltextz	List[str]finish_reasonszList[dict[str, Any]]
tool_callsr   usage_metadataN)__name__
__module____qualname____annotations__str     k/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/sentry_sdk/integrations/google_genai/streaming.pyr   r      sW         
III&&&&r"   r   chunksList[GenerateContentResponse]returnc                    g }g }g }d}d}d}d}d}d}	d}
| D ]}t          |dd          ret          |dg           D ]S}t          |d          rAt          |j        dg           r+t          |j                  }|r|                    |           Tt          |          }|r|                    |           t          |          }|r|                    |           t          |          }||d         z  }||d         z  }||d         z  }||d	         z  }||d
         z  }t          d
                    |          ||t          |||||          |	|
          }|S )z?Accumulate streaming chunks into a single response-like object.r   N
candidatescontentpartsinput_tokensoutput_tokensinput_tokens_cachedoutput_tokens_reasoningtotal_tokens )r+   r,   r-   r.   r/   )r   r   r   r   r   r   )getattrhasattrr)   r   appendr   extendr   r   r   joinr   )r$   accumulated_textr   r   total_input_tokenstotal_output_tokensr/   total_cached_tokenstotal_reasoning_tokensresponse_idr   chunk	candidateextracted_textextracted_finish_reasonsextracted_tool_callsextracted_usage_dataaccumulated_responses                     r#   accumulate_streaming_responserC   %   s    NJLKE = =5,-- 	@$UL"== @ @	9i00 @W%w6 6 @ &;9;L%M%MN% @(//???#9%#@#@ # 	<!!":;;;1%88 	42333  2%882>BB3ODD34IJJ"67P"QQ,^<<.WW%&&% +- 3$:%
 
 
     r"   spanr   integrationr   rB   Nc                    t                      rP|j        rI|                    d          r4|                     t          j        t          |d         g                     |                    d          r!t          | t          j        |d                    |                    d          r3|                     t          j	        t          |d                              |                    d          r&|                     t          j
        |d                    |                    d          r&|                     t          j        |d                    |d         d         r,|                     t          j        |d         d                    |d         d         r,|                     t          j        |d         d                    |d         d	         r,|                     t          j        |d         d	                    |d         d
         r,|                     t          j        |d         d
                    |d         d         r.|                     t          j        |d         d                    dS dS )z1Set span data for accumulated streaming response.r   r   r   r   r   r   r+   r-   r,   r.   r/   N)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)rD   rE   rB   s      r#   $set_span_data_for_streaming_responserT   a   s   
 	 !!
'
 !$$V,,

 	)089::	
 	
 	

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

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

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

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

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

 ,-n= 
. !12>B	
 	
 	
 	
 	

 
r"   )r$   r%   r&   r   )rD   r   rE   r   rB   r   r&   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   rC   rT   r!   r"   r#   <module>r]      s                4 3 3 3 3 3 & & & & & & 4 4 4 4 4 4                    ;''''''::::::         )      9 +9 9  9  9  9 x<

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