o
    i[
                     @   s   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 d dlm	Z	 de
e deeeef  fd	d
ZG dd dZG dd deeZG dd deeZdS )    )Any)Optional)AsyncStreamHandler)StreamHandler)GOOGLE_GENAI_DEFAULT_MODEL_ROLE)	_get_attrchunksreturnc                 C   s  | sdS g }g }d}zq| D ]>}t |dg }|D ]3}t |dd}|s"q|du r,t |dt}t |dg }|D ]}	t |	dd}
|
rD||
 q4||	 q4qqg }|rZ|dd|i || d|rjd||digng i}| d	 }t |d
i |d
< |W S  ty   Y dS w )z
    Consolidates streamed response GenerateContentResponse chunks into a single dictionary representing the response.
    All chunks should have the same role since one generation call produces consistent content type.
    N
candidatescontentrolepartstext )r   r   usage_metadata)r   r   appendjoinextend	Exception)r   text_chunksnon_text_partsr   chunkr
   	candidater   r   partr   merged_response
last_chunk r   `/home/ubuntu/.local/lib/python3.10/site-packages/ddtrace/contrib/internal/google_genai/_utils.py_join_chunks
   sB   
r   c                   @      e Zd ZdddZdS )BaseGoogleGenAIStreamHandlerNc                 C   s0   | j j| j| j| jt| jdd | j  d S )Nllm)argskwargsresponse	operation)integrationllmobs_set_tagsprimary_spanrequest_argsrequest_kwargsr   r   finish)self	exceptionr   r   r   finalize_stream:   s   z,BaseGoogleGenAIStreamHandler.finalize_streamN)__name__
__module____qualname__r/   r   r   r   r   r!   9       r!   c                   @   r    )GoogleGenAIStreamHandlerNc                 C   s   | j | d S r0   r   r   r-   r   iteratorr   r   r   process_chunkF   s   z&GoogleGenAIStreamHandler.process_chunkr0   r1   r2   r3   r9   r   r   r   r   r5   E   r4   r5   c                   @   r    )GoogleGenAIAsyncStreamHandlerNc                    s   | j | d S r0   r6   r7   r   r   r   r9   K   s   z+GoogleGenAIAsyncStreamHandler.process_chunkr0   r:   r   r   r   r   r;   J   r4   r;   N)typingr   r   0ddtrace.llmobs._integrations.base_stream_handlerr   r   )ddtrace.llmobs._integrations.google_utilsr   ddtrace.llmobs._utilsr   listdictstrr   r!   r5   r;   r   r   r   r   <module>   s    "/