o
    S۷i(                     @   s   d dl mZ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rDd 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Union)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    d/home/ubuntu/vllm_env/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   



	rA   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)rB   rC   r@   r    r    r!   $set_span_data_for_streaming_responsea   sj   









rQ   )r"   r   r#   r   r$   r   )r,   r-   r$   r   )rB   r   rC   r   r@   r   r$   N)typingr   r   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+   rA   rQ   r    r    r    r!   <module>   s2     
	
4