o
    ai!                     @   s   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rBd dlmZ d d	lmZ G d
d deZdddZ				dddZ								d 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                   @   s>   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_callszOptional[UsageData]usage_metadataN)__name__
__module____qualname____annotations__str r   r   l/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/sentry_sdk/integrations/google_genai/streaming.pyr      s   
 r   selfr   otherreturnc              	   C   sX   t t| d |d t| d |d t| d |d t| d |d t| d |d dS )Ninput_tokensoutput_tokensinput_tokens_cachedoutput_tokens_reasoningtotal_tokens)r$   r%   r&   r'   r(   )r   max)r!   r"   r   r   r    element_wise_usage_max   s   r*   chunksList[GenerateContentResponse]c                 C   s   g }g }g }d}d}d}| D ]N}t |ddr7t |dg D ]}t|dr6t |jdg r6t|j}	|	r6||	 qt|}
|
rB||
 t|}|rM|| t|}|du rW|nt	||}qt
d||||||d}|S )z?Accumulate streaming chunks into a single response-like object.N
candidatescontentparts )r   r   r   r   r   r   )getattrhasattrr.   r   appendr   extendr   r   r*   r   join)r+   accumulated_textr   r   
usage_dataresponse_idr   chunk	candidateextracted_textextracted_finish_reasonsextracted_tool_callschunk_usage_dataaccumulated_responser   r   r    accumulate_streaming_response-   sH   



	r@   spanr   integrationr   r?   Nc                 C   sd  t  r|jr|dr| tjt|d g |dr%t| tj|d  |dr5| tj	t|d  |drC| tj
|d  |drQ| tj|d  |d du rYdS |d d rj| 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   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)rA   rB   r?   r   r   r    $set_span_data_for_streaming_responsea   sj   









rP   )r!   r   r"   r   r#   r   )r+   r,   r#   r   )rA   r   rB   r   r?   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   r*   r@   rP   r   r   r   r    <module>   s2    
	
4