§
    xÅj  ã                   óò   — d dl mZmZmZmZmZmZ d dl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 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 dS )é    )ÚTYPE_CHECKINGÚAnyÚListÚOptionalÚ	TypedDictÚUnionN)Úset_data_normalized)ÚSPANDATA)Úshould_send_default_pii)ÚStreamedSpan)Úhas_data_collection_enabledÚsafe_serializeé   )Ú	UsageDataÚextract_contents_textÚextract_finish_reasonsÚextract_tool_callsÚextract_usage_data)ÚGenerateContentResponse)ÚSpanc                   ó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_callszOptional[UsageData]Úusage_metadataN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Ústr© ó    ú_C:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/google_genai/streaming.pyr   r      sW   € € € € € € ØÐÐÑØÐÐÑØ
€I€I�IØÐÐÑØ&Ð&Ð&Ñ&Ø)Ð)Ð)Ñ)Ð)Ð)r%   r   Úselfr   ÚotherÚreturnc                 ó.  — 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)r'   r(   s     r&   Úelement_wise_usage_maxr1   $   sž   € ÝÝ˜˜nÔ-¨u°^Ô/DÑEÔEÝ˜$˜Ô/°°Ô1GÑHÔHÝØÐ&Ô'¨Ð/DÔ)Eñ
ô 
õ !$ØÐ*Ô+¨UÐ3LÔ-Mñ!
ô !
õ ˜˜nÔ-¨u°^Ô/DÑEÔEð
ñ 
ô 
ð 
r%   ÚchunksúList[GenerateContentResponse]c                 óB  — g }g }g }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          |¦  «        }|€|nt          ||¦  «        }Œèt          d                     |¦  «        |||||¬¦  «        }|S )z?Accumulate streaming chunks into a single response-like object.NÚ
candidatesÚcontentÚpartsÚ )r   r   r   r   r   r   )ÚgetattrÚhasattrr6   r   Úappendr   Úextendr   r   r1   r   Újoin)r2   Ú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_responserH   2   sŒ  € ð ÐØ€NØ€JØ€JØ€KØ€Eàð 
ð 
ˆå�5˜,¨Ñ-Ô-ð 	@Ý$ U¨L¸"Ñ=Ô=ð @ð @�	Ý˜9 iÑ0Ô0ð @µWØÔ% w°ñ6ô 6ð @õ &;¸9Ô;LÑ%MÔ%M�NØ%ð @Ø(×/Ò/°Ñ?Ô?Ð?øå#9¸%Ñ#@Ô#@Ð Ø#ð 	<Ø×!Ò!Ð":Ñ;Ô;Ð;å1°%Ñ8Ô8ÐØð 	4Ø×ÒÐ2Ñ3Ô3Ð3õ
 .¨eÑ4Ô4Ðð Ð!ð Ðå'¨
Ð4DÑEÔEð 	ˆ
õ /Ø�WŠWÐ%Ñ&Ô&Ø%ØØ!ØØðñ ô Ðð  Ðr%   ÚspanúUnion[Span, StreamedSpan]Úintegrationr   rG   c                 ó  — t          | t          ¦  «        r| j        n| j        }t	          j        ¦   «         }|                     d¦  «        r!t          | t          j	        |d         ¦  «         |                     d¦  «        }|� |t          j
        |¦  «         |                     d¦  «        }|� |t          j        |¦  «         |d         €dS |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¦  «        r€t#          |j        ¦  «        rC|j        d         d         d         r) |t          j        t)          |d         ¦  «        ¦  «         n) |t          j        t)          |d         ¦  «        ¦  «         |                     d¦  «        rœt#          |j        ¦  «        rG|j        d         d         d         r, |t          j        t)          |d         g¦  «        ¦  «         dS dS t-          ¦   «         r5|j        r0 |t          j        t)          |d         g¦  «        ¦  «         dS dS dS dS )z1Set span data for accumulated streaming response.r   r   Nr   r   r+   r-   r,   r.   r/   r   Údata_collectionÚgen_aiÚoutputsr   )Ú
isinstancer   Úset_attributeÚset_dataÚ
sentry_sdkÚ
get_clientÚgetr	   r
   ÚGEN_AI_RESPONSE_FINISH_REASONSÚ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_TOKENSr   ÚoptionsÚGEN_AI_RESPONSE_TOOL_CALLSr   ÚGEN_AI_RESPONSE_TEXTr   Úinclude_prompts)rI   rK   rG   Úset_on_spanÚclientr@   Úresponse_models          r&   Ú$set_span_data_for_streaming_responsere   f   s¥  € õ )¨­|Ñ<Ô<ÐOˆÔÐÀ$Ä-ð õ Ô"Ñ$Ô$€Fà×ÒÐ 0Ñ1Ô1ð 
ÝØÝÔ3Ø Ð!1Ô2ñ	
ô 	
ð 	
ð '×*Ò*¨4Ñ0Ô0€KØÐØˆ•HÔ/°Ñ=Ô=Ð=à)×-Ò-¨gÑ6Ô6€NØÐ!Øˆ•HÔ2°NÑCÔCÐCàÐ,Ô-Ð5ØˆàÐ,Ô-¨nÔ=ð 
ØˆÝÔ.Ø Ð!1Ô2°>ÔBñ	
ô 	
ð 	
ð
 Ð,Ô-Ð.CÔDð 
ØˆÝÔ5Ø Ð!1Ô2Ð3HÔIñ	
ô 	
ð 	
ð
 Ð,Ô-¨oÔ>ð 
ØˆÝÔ/Ø Ð!1Ô2°?ÔCñ	
ô 	
ð 	
ð
 Ð,Ô-Ð.GÔHð 
ØˆÝÔ9Ø Ð!1Ô2Ð3LÔMñ	
ô 	
ð 	
ð
 Ð,Ô-¨nÔ=ð 
ØˆÝÔ.Ø Ð!1Ô2°>ÔBñ	
ô 	
ð 	
ð
 ×Ò Ñ-Ô-ð Ý& v¤~Ñ6Ô6ð 	ØŒ~Ð/Ô0°Ô:¸9ÔEð Ø�ÝÔ7Ý"Ð#7¸Ô#EÑFÔFñô ð øð ˆKÝÔ3ÝÐ3°LÔAÑBÔBñô ð ð
 ×Ò Ñ'Ô'ð Ý& v¤~Ñ6Ô6ð 	ØŒ~Ð/Ô0°Ô:¸9ÔEð Ø�ÝÔ1Ý"Ð$8¸Ô$@Ð#AÑBÔBñô ð ð ð ðð õ %Ñ&Ô&ð 	¨;Ô+Fð 	ØˆKÝÔ-ÝÐ 4°VÔ <Ð=Ñ>Ô>ñô ð ð ð ðð ð	ð 	ð 	ð 	r%   )r'   r   r(   r   r)   r   )r2   r3   r)   r   )rI   rJ   rK   r   rG   r   r)   N)!Útypingr   r   r   r   r   r   rS   Úsentry_sdk.ai.utilsr	   Úsentry_sdk.constsr
   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   Úsentry_sdk.utilsr   r   Úutilsr   r   r   r   r   Úgoogle.genai.typesr   Úsentry_sdk.tracingr   r   r1   rH   re   r$   r%   r&   ú<module>ro      sÔ  ðØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gà Ð Ð Ð Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø &Ð &Ð &Ð &Ð &Ð &Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð
ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð (Ø:Ð:Ð:Ð:Ð:Ð:à'Ð'Ð'Ð'Ð'Ð'ð*ð *ð *ð *ð *˜)ñ *ô *ð *ðð ð ð ð1 Ø+ð1 àð1 ð 1 ð 1 ð 1 ðhUØ
%ðUàðUð 0ðUð 
ð	Uð Uð Uð Uð Uð Ur%   