§
    xÅj¥¢  ã                   óV  — d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZ d dlmZmZmZmZ d dlZd dlmZ d dlmZmZmZmZmZ d dl m!Z!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. ddl/m0Z0m1Z1m2Z2 er"d dlm3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z; d dlm<Z< d dl=m>Z> dZ?	 d dl@mAZB dZ?n# eC$ r Y nw xY wejD        ZE G d„ de¦  «        ZF	 	 	 	 dZd„ZGd[d„ZHdddeIfd „ZJd\d$„ZKd]d'„ZLd]d(„ZMd^d*„ZNd+ddeOfd,„ZPd_d-„ZQd`d/„ZR	 	 	 	 dad3„ZS	 	 	 	 dbd5„ZT	 	 	 	 	 	 	 	 dcd<„ZUd=eId>d.dd?fd@„ZVdddA„ZW	 	 	 	 dedD„ZX	 	 	 	 dfdF„ZY	 	 	 	 dgdH„ZZdIdJdKeOddLfdM„Z[	 	 	 	 dhdN„Z\dOd?dPddeId!d"d8d9ddfdQ„Z]	 	 	 	 	 	 	 	 didR„Z^	 	 	 	 	 	 djdT„Z_	 	 	 	 	 	 dkdV„Z`	 	 	 	 	 	 	 	 	 	 dldW„Za	 	 	 	 	 	 	 	 dmdY„ZbdS )né    N)Úwraps)Úchain)
ÚTYPE_CHECKINGÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚ	TypedDictÚUnionÚcast)ÚContentÚGenerateContentConfigÚPartÚPartDict)ÚBLOB_DATA_SUBSTITUTE)Úget_modality_from_mime_typeÚnormalize_message_rolesÚset_data_normalizedÚtransform_google_content_partÚtruncate_and_annotate_messages)ÚOPÚSPANDATA)Úshould_send_default_pii)ÚStreamedSpan)Úhas_span_streaming_enabledÚshould_truncate_gen_ai_input)Úcapture_internal_exceptionsÚevent_from_exceptionÚhas_data_collection_enabledÚsafe_serializeé   )ÚGEN_AI_SYSTEMÚORIGINÚTOOL_ATTRIBUTES_MAP)	ÚContentDictÚContentListUnionÚContentUnionÚContentUnionDictÚEmbedContentResponseÚGenerateContentResponseÚModelÚToolÚ	ToolUnion)ÚTextPart)ÚSpanF)ÚImageTc                   óF   — e Zd ZU dZeed<   eed<   eed<   eed<   eed<   dS )Ú	UsageDatazStructure for token usage data.Úinput_tokensÚinput_tokens_cachedÚoutput_tokensÚoutput_tokens_reasoningÚtotal_tokensN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__© ó    ú[C:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/google_genai/utils.pyr4   r4   K   sT   € € € € € € Ø)Ð)àÐÐÑØÐÐÑØÐÐÑØ Ð Ð Ñ ØÐÐÑÐÐrA   r4   Úresponseú.Union[GenerateContentResponse, dict[str, Any]]Úreturnc                 óB  — t          ddddd¬¦  «        }t          | t          ¦  «        rË|                      di ¦  «        }|s|S |                     dd¦  «        pd}|                     dd¦  «        pd}||z   |d<   |                     dd¦  «        pd}||d<   |                     d	d¦  «        pd}||d
<   |                     dd¦  «        pd}||z   |d<   |                     dd¦  «        pd}||d<   |S t	          | d¦  «        s|S | j        }t          |dd¦  «        pd}t          |dd¦  «        pd}||z   |d<   t          |dd¦  «        pd}||d<   t          |d	d¦  «        pd}||d
<   t          |dd¦  «        pd}||z   |d<   t          |dd¦  «        pd}||d<   |S )a@  Extract usage data from response into a structured format.

    Args:
        response: The GenerateContentResponse object or dictionary containing usage metadata

    Returns:
        UsageData: Dictionary with input_tokens, input_tokens_cached,
                   output_tokens, and output_tokens_reasoning fields
    r   )r5   r6   r7   r8   r9   Úusage_metadataÚprompt_token_countÚtool_use_prompt_token_countr5   Úcached_content_token_countr6   Úthoughts_token_countr8   Úcandidates_token_countr7   Útotal_token_countr9   )r4   Ú
isinstanceÚdictÚgetÚhasattrrG   Úgetattr)	rC   Ú
usage_dataÚusageÚprompt_tokensÚtool_use_prompt_tokensÚcached_tokensÚreasoning_tokensÚcandidates_tokensr9   s	            rB   Úextract_usage_datarZ   U   s<  € õ ØØØØ !Øðñ ô €Jõ �(�DÑ!Ô!ð Ø—’Ð-¨rÑ2Ô2ˆØð 	ØÐàŸ	š	Ð"6¸Ñ:Ô:Ð?¸aˆØ!&§¢Ð+HÈ!Ñ!LÔ!LÐ!QÐPQÐØ%2Ð5KÑ%Kˆ
�>Ñ"àŸ	š	Ð">ÀÑBÔBÐGÀaˆØ,9ˆ
Ð(Ñ)à Ÿ9š9Ð%;¸QÑ?Ô?ÐDÀ1ÐØ0@ˆ
Ð,Ñ-à!ŸIšIÐ&>ÀÑBÔBÐGÀaÐð '8Ð:JÑ&Jˆ
�?Ñ#à—y’yÐ!4°aÑ8Ô8Ð=¸AˆØ%1ˆ
�>Ñ"àÐå�8Ð-Ñ.Ô.ð ØÐàÔ#€Eõ ˜EÐ#7¸Ñ;Ô;Ð@¸q€MÝ$ UÐ,IÈ1ÑMÔMÐRÐQRÐØ!.Ð1GÑ!G€Jˆ~Ñõ ˜EÐ#?ÀÑCÔCÐHÀq€MØ(5€JÐ$Ñ%õ ˜uÐ&<¸aÑ@Ô@ÐEÀAÐØ,<€JÐ(Ñ)õ   Ð'?ÀÑCÔCÐHÀqÐØ"3Ð6FÑ"F€JˆÑå˜5Ð"5°qÑ9Ô9Ð>¸Q€LØ!-€Jˆ~ÑàÐrA   Úexcr   c                 óŽ   — t          | t          j        ¦   «         j        dddœ¬¦  «        \  }}t          j        ||¬¦  «         dS )z.Capture exception with Google GenAI mechanism.Úgoogle_genaiF)ÚtypeÚhandled)Úclient_optionsÚ	mechanism)ÚhintN)r    Ú
sentry_sdkÚ
get_clientÚoptionsÚcapture_event)r[   Úeventrb   s      rB   Ú_capture_exceptionrh       sU   € å&ØÝ!Ô,Ñ.Ô.Ô6Ø)°eÐ<Ð<ðñ ô �K€Eˆ4õ
 Ô˜U¨Ð.Ñ.Ô.Ð.Ð.Ð.rA   ÚmodelzUnion[str, Model]c                 ó–   — t          | t          ¦  «        r| S t          | d¦  «        rt          | j        ¦  «        S t          | ¦  «        S )z(Extract model name from model parameter.Úname)rN   ÚstrrQ   rk   )ri   s    rB   Úget_model_namerm   ª   sE   € å�%�ÑÔð Øˆåˆu�fÑÔð Ý�5”:‰ŒÐÝˆu‰:Œ:ÐrA   Úcontentsr(   úList[Dict[str, Any]]c                 ó  — | €g S g }t          | t          ¦  «        rd| dœgS t          | t          ¦  «        ry| rLt          d„ | D ¦   «         ¦  «        r3g }| D ](}t	          |¦  «        }|�|                     |¦  «         Œ)d|dœgS | D ]&}t          |¦  «        }|                     |¦  «         Œ'|S t          | t          ¦  «        �rC|  	                    dd¦  «        }|  	                    d¦  «        }|r°g }g }|D ]m}t          |¦  «        }	|	€Œt          |	t          ¦  «        r/|	 	                    d¦  «        dk    r|                     |	¦  «         ŒX|                     |	¦  «         Œn|r$|dk    rd	n|pd}
|                     |
|dœ¦  «         |                     |¦  «         ndd
| v r#|                     || d
         d
dœgdœ¦  «         n=d| v r9|                     d| d          	                    dd¦  «        t          dœi¦  «         |S t          | d¦  «        rÎ| j        rÇt          | dd¦  «        pd}g }g }| j        D ]m}t          |¦  «        }	|	€Œt          |	t          ¦  «        r/|	 	                    d¦  «        dk    r|                     |	¦  «         ŒX|                     |	¦  «         Œn|r"|dk    rd	n|}
|                     |
|dœ¦  «         |                     |¦  «         |S t          | ¦  «        }	|	r8t          |	t          ¦  «        r|	 	                    d¦  «        dk    r|	gS d|	gdœgS t          r2t          | t           j        ¦  «        rt%          | ¦  «        }|rd|gdœgS t          | d¦  «        rSt          | d¦  «        rCt          | dd¦  «        }t          | dd¦  «        }|�|€d}dt'          |¦  «        ||dœ}d|gdœgS t          | d
¦  «        r#| j        rdt          | j        ¦  «        d
dœgdœgS g S )a$  Extract messages from contents parameter which can have various formats.

    Returns a list of message dictionaries in the format:
    - System: {"role": "system", "content": "string"}
    - User/Assistant: {"role": "user"|"assistant", "content": [{"text": "...", "type": "text"}, ...]}
    NÚuser©ÚroleÚcontentc              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Ú_is_part_like)Ú.0Úitems     rB   ú	<genexpr>z,extract_contents_messages.<locals>.<genexpr>Æ   s*   è è € ÐEÐE°D�M¨$Ñ/Ô/ÐEÐEÐEÐEÐEÐErA   rs   ÚpartsÚtoolri   Ú	assistantÚtext©r~   r^   Úinline_dataÚ	mime_typeÚ ©r�   ÚdataÚuri©r^   Úmodalityr�   r…   )rN   rl   ÚlistÚallÚ_extract_part_from_itemÚappendÚextract_contents_messagesÚextendrO   rP   Ú_extract_part_contentr   rQ   r{   rR   Ú_is_PIL_availableÚPILImager2   Ú_extract_pil_imager   r~   )rn   ÚmessagesÚcontent_partsry   ÚpartÚitem_messagesrs   r{   Útool_messagesÚpart_resultÚnormalized_roleÚ	blob_partÚfile_urir�   s                 rB   rŒ   rŒ   ´   s3  € ð ÐØˆ	à€Hõ �(�CÑ Ô ð 7Ø¨HÐ5Ð5Ð6Ð6õ �(�DÑ!Ô!ð Øð 	�ÐEÐE¸HÐEÑEÔEÑEÔEð 	àˆMØ ð /ð /�Ý.¨tÑ4Ô4�ØÐ#Ø!×(Ò(¨Ñ.Ô.Ð.øà#°Ð>Ð>Ð?Ð?ð !ð /ð /�Ý 9¸$Ñ ?Ô ?�Ø—’ Ñ.Ô.Ð.Ð.ØˆOõ �(�DÑ!Ô!ñ /Ø�|Š|˜F FÑ+Ô+ˆØ—’˜WÑ%Ô%ˆàð )	ØˆMØˆMàð 
6ð 
6�Ý3°DÑ9Ô9�ØÐ&Øå˜k­4Ñ0Ô0ð 6°[·_²_ÀVÑ5LÔ5LÐPVÒ5VÐ5Và!×(Ò(¨Ñ5Ô5Ð5Ð5ð "×(Ò(¨Ñ5Ô5Ð5Ð5ð ð Uà15¸²° + +ÀdÀnÈf�Ø—’¨À]Ð SÐ SÑTÔTÐTð �OŠO˜MÑ*Ô*Ð*Ð*Ø�xÐÐØ�OŠOà Ø)1°&Ô)9À6Ð JÐ JÐKðð ñô ð ð ð ˜hÐ&Ð&ð �OŠOà!Ø%-¨mÔ%<×%@Ò%@ÀÈbÑ%QÔ%QÝ 4ð$ð $ðñô ð ð ˆõ ˆx˜Ñ!Ô!ð  h¤nð Ý�x ¨Ñ.Ô.Ð8°&ˆØˆØˆà”Nð 	2ð 	2ˆDÝ/°Ñ5Ô5ˆKØÐ"Øå˜+¥tÑ,Ô,ð 2°·²ÀÑ1HÔ1HÈFÒ1RÐ1RØ×$Ò$ [Ñ1Ô1Ð1Ð1à×$Ò$ [Ñ1Ô1Ð1Ð1àð 	QØ-1°Wª_¨_˜k˜kÀ$ˆOØ�OŠO _ÀÐOÐOÑPÔPÐPà�Š˜Ñ&Ô&Ð&Øˆõ (¨Ñ1Ô1€KØð @Ý�k¥4Ñ(Ô(ð 	@¨[¯_ª_¸VÑ-DÔ-DÈÒ-NÐ-NØ�=Ð à#°°Ð>Ð>Ð?Ð?õ ð >�Z¨µ(´.ÑAÔAð >Ý& xÑ0Ô0ˆ	Øð 	>Ø#°°Ð<Ð<Ð=Ð=õ ˆx˜ÑÔð >¥G¨H°kÑ$BÔ$Bð >å˜8 U¨DÑ1Ô1ˆÝ˜H k°4Ñ8Ô8ˆ	àÐàÐ Ø�	ð Ý7¸	ÑBÔBØ&Øð	ð ˆIð $°°Ð<Ð<Ð=Ð=õ ˆx˜Ñ Ô ð 
 X¤]ð 
àµ#°h´mÑ2DÔ2DÈfÐ)UÐ)UÐ(VÐWÐWð
ð 	
ð €IrA   r”   úOptional[dict[str, Any]]c                 óä  — | €dS t          | t          ¦  «        rVd| v rt          | ¦  «        S |                      d¦  «        r| d         ddœS t	          | ¦  «        }|�d| v r
t
          |d<   |S dS t          | d¦  «        r| j        rt          | ¦  «        S t          | d¦  «        r| j        r
| j        ddœS t          | d¦  «        rJ| j	        rC| j	        }t          |dd¦  «        }t          |d	d¦  «        }|�|€d
}dt          |¦  «        ||dœS t          | d¦  «        rO| j        rH| j        }t          |dd¦  «        }t          |d	d¦  «        }|�|€d
}dt          |¦  «        |t
          dœS dS )z£Extract content from a Part object or dict.

    Returns:
        - dict for content part (text/blob) or tool message
        - None if part should be skipped
    NÚfunction_responser~   r   r€   rt   Ú	file_datarš   r�   r‚   r…   r†   r„   Úblob©r^   r‡   r�   rt   )rN   rO   Ú_extract_tool_message_from_partrP   r   r   rQ   r�   r~   rž   rR   r   r€   )r”   Úresultrž   rš   r�   r€   r„   s          rB   rŽ   rŽ   I  sò  € ð €|Øˆtõ �$�ÑÔð à $Ð&Ð&Ý2°4Ñ8Ô8Ð8à�8Š8�FÑÔð 	:Ø  œL°&Ð9Ð9Ð9õ /¨tÑ4Ô4ˆØÐà Ð$Ð$õ %9��yÑ!ØˆMàˆtõ ˆtÐ(Ñ)Ô)ð 5¨dÔ.Dð 5Ý.¨tÑ4Ô4Ð4õ ˆt�VÑÔð 3 ¤ð 3Øœ	¨6Ð2Ð2Ð2õ ˆt�[Ñ!Ô!ð  d¤nð Ø”Nˆ	Ý˜9 j°$Ñ7Ô7ˆÝ˜I {°DÑ9Ô9ˆ	àÐàÐ Ø�	ð Ý7¸	ÑBÔBØ&Øð	ð ð õ ˆt�]Ñ#Ô#ð ¨Ô(8ð ØÔ&ˆÝ�{ F¨DÑ1Ô1ˆÝ˜K¨°dÑ;Ô;ˆ	àÐàÐ Ø�	ð Ý7¸	ÑBÔBØ&Ý/ð	ð ð ð ˆ4rA   c                 ó¸  — d}t          | t          ¦  «        r|                      d¦  «        }nt          | d¦  «        r| j        }|sdS d}d}d}t          |t          ¦  «        rW|                     d¦  «        }|                     d¦  «        }|                     di ¦  «        }|                     d|¦  «        }net          |dd¦  «        }t          |dd¦  «        }t          |dd¦  «        }|€i }t          |t          ¦  «        r|                     d|¦  «        }n|}|sdS d|rt          |¦  «        ndt          |¦  «        |�t          |¦  «        nddœd	œS )
zÖExtract tool message from a Part with function_response.

    Returns:
        {"role": "tool", "content": {"toolCallId": "...", "toolName": "...", "output": "..."}}
        or None if not a valid tool message
    Nr�   Úidrk   rC   Úoutputr|   )Ú
toolCallIdÚtoolNamer¥   rr   )rN   rO   rP   rQ   r�   rR   rl   r"   )r”   r�   Útool_call_idÚ	tool_namer¥   Úresponse_dictÚresponse_objs          rB   r¡   r¡   ˜  s   € ð Ðå�$�ÑÔð 3Ø ŸHšHÐ%8Ñ9Ô9ÐÐÝ	�Ð*Ñ	+Ô	+ð 3Ø Ô2Ðàð Øˆtð €LØ€IØ€FåÐ#¥TÑ*Ô*ð "Ø(×,Ò,¨TÑ2Ô2ˆØ%×)Ò)¨&Ñ1Ô1ˆ	Ø)×-Ò-¨j¸"Ñ=Ô=ˆà×"Ò" 8¨]Ñ;Ô;ˆˆõ Ð0°$¸Ñ=Ô=ˆÝÐ-¨v°tÑ<Ô<ˆ	ÝÐ0°*¸dÑCÔCˆØÐØˆLÝ�l¥DÑ)Ô)ð 	"Ø!×%Ò% h°Ñ=Ô=ˆFˆFà!ˆFàð Øˆtð à/;ÐE�#˜lÑ+Ô+Ð+ÀÝ˜I™œØ06Ð0B•n VÑ,Ô,Ð,Èð
ð 
ðð ð rA   Úimagec                 ó¾   — t           rt          | t          j        ¦  «        sdS | j        pd}|                     ¦   «         }d|› �}dt          |¦  «        |t          dœS )z'Extract blob part from PIL.Image.Image.NÚJPEGzimage/rŸ   r    )r�   rN   r�   r2   ÚformatÚlowerr   r   )r¬   Ú
format_strÚsuffixr�   s       rB   r‘   r‘   Í  ss   € åð ¥J¨uµh´nÑ$EÔ$Eð Øˆtð ”Ð' €JØ×ÒÑÔ€FØ!˜Ð!Ð!€Ið Ý/°	Ñ:Ô:ØÝ'ð	ð ð rA   ry   c                 óx  — t          | t          t          f¦  «        rdS t          | t          t          f¦  «        rdS t          | t
          ¦  «        r3d| v sd| v rdS t          t          |                      ¦   «         z  ¦  «        S t          | d¦  «        rdS t          rt          | t          j        ¦  «        rdS dS )zZCheck if item is a part-like value (PartUnionDict) rather than a Content/multi-turn entry.TFrs   r{   r…   )rN   rl   r   rˆ   r   rO   ÚboolÚ_PART_DICT_KEYSÚkeysrQ   r�   r�   r2   )ry   s    rB   rw   rw   ß  s·   € å�$��d˜Ñ$Ô$ð ØˆtÝ�$��w˜Ñ(Ô(ð ØˆuÝ�$�ÑÔð 3Ø�Tˆ>ˆ>˜W¨˜_˜_Ø�5å•O d§i¢i¡k¤kÑ1Ñ2Ô2Ð2åˆt�UÑÔð Øˆtåð �Z¨­h¬nÑ=Ô=ð ØˆtØˆ5rA   c                 óò  — t          | t          ¦  «        r| ddœS t          | t          ¦  «        r*d| v r&d| d                              dd¦  «        t          dœiS t          | ¦  «        }|�|S t          r)t          | t          j        ¦  «        rt          | ¦  «        S t          | d¦  «        rJt          | d¦  «        r:t          | dd¦  «        }t          | dd¦  «        pd}|�dt          |¦  «        ||d	œS dS )
z7Convert a single part-like item to a content part dict.r~   r   r€   r�   r‚   rƒ   Nr…   r†   )rN   rl   rO   rP   r   rŽ   r�   r�   r2   r‘   rQ   rR   r   )ry   r¢   rš   r�   s       rB   rŠ   rŠ   ó  s3  € å�$�ÑÔð .Ø fÐ-Ð-Ð-õ �$�ÑÔð 
 -°4Ð"7Ð"7àØ! -Ô0×4Ò4°[À"ÑEÔEÝ,ðð ð
ð 	
õ # 4Ñ(Ô(€FØÐØˆõ ð (�Z¨­h¬nÑ=Ô=ð (Ý! $Ñ'Ô'Ð'õ ˆt�UÑÔð 	¥¨¨kÑ :Ô :ð 	Ý˜4 ¨Ñ-Ô-ˆÝ˜D +¨tÑ4Ô4Ð:¸ˆ	ØÐàÝ7¸	ÑBÔBØ&Øð	ð ð ð ˆ4rA   úOptional[str]c                 óÊ  — t          | ¦  «        }|sdS g }|D ]³}|                     d¦  «        }t          |t          ¦  «        r|                     |¦  «         ŒBt          |t
          ¦  «        r\|D ]Y}t          |t          ¦  «        rB|                     d¦  «        dk    r)|                     |                     dd¦  «        ¦  «         ŒZŒ´|rd                     |¦  «        ndS )zÊExtract text from contents parameter which can have various formats.

    This is a compatibility function that extracts text from messages.
    For new code, use extract_contents_messages instead.
    Nrt   r^   r~   r‚   ú )rŒ   rP   rN   rl   r‹   rˆ   rO   Újoin)rn   r’   ÚtextsÚmessagert   r”   s         rB   Úextract_contents_textr¾     sî   € õ )¨Ñ2Ô2€HØð Øˆtà€EØð 7ð 7ˆØ—+’+˜iÑ(Ô(ˆÝ�g�sÑ#Ô#ð 	7Ø�LŠL˜Ñ!Ô!Ð!Ð!Ý˜¥Ñ&Ô&ð 	7Øð 7ð 7�Ý˜d¥DÑ)Ô)ð 7¨d¯hªh°vÑ.>Ô.>À&Ò.HÐ.HØ—L’L §¢¨&°"Ñ!5Ô!5Ñ6Ô6Ð6øøà#Ð-ˆ3�8Š8�E‰?Œ?ˆ?¨Ð-rA   ÚtoolsúIterable[ToolUnion]úOptional[List[dict[str, Any]]]c           
      óà  — g }| D ]ä}t          |¦  «        r7|                     t          |dd¦  «        t          |dd¦  «        dœ¦  «         ŒHt          |d¦  «        rH|j        �A|j        D ]8}|                     t          |dd¦  «        t          |dd¦  «        dœ¦  «         Œ9Œ t          j        ¦   «         D ]0\  }}t          ||d¦  «        r|                     ||dœ¦  «          nŒ1Œå|r|ndS )	z%Format tools parameter for span data.r:   Úunknownr=   N)rk   ÚdescriptionÚfunction_declarationsrk   rÄ   )Úcallabler‹   rR   rQ   rÅ   r&   Úitems)r¿   Úformatted_toolsr|   Ú	func_declÚ	attr_namerÄ   s         rB   Ú_format_tools_for_spanrË   0  s`  € ð €OØð  ð  ˆÝ�D‰>Œ>ð 	à×"Ò"å# D¨*°iÑ@Ô@Ý#*¨4°¸DÑ#AÔ#Aðð ñô ð ð õ �DÐ1Ñ2Ô2ð	àÔ*Ð6ð "Ô7ð ð �	Ø×&Ò&å '¨	°6¸4Ñ @Ô @Ý'.¨y¸-ÈÑ'NÔ'Nðð ñô ð ð ðõ +>Ô*CÑ*EÔ*Eð ð Ñ&�	˜;Ý˜4 ¨DÑ1Ô1ð Ø#×*Ò*à$-Ø+6ðð ñô ð ð �Eðøð .Ð7ˆ?ˆ?°4Ð7rA   r,   c                 ó  — g }t          | dg ¦  «        }|rº| �¸|D ]µ}t          |d¦  «        rt          |j        dg ¦  «        sŒ)|j        �|j        j        €Œ=|j        j        D ]k}t          |dd¦  «        rX|j        }t          |dd¦  «        ddœ}t          |dd¦  «        rt          |j        ¦  «        |d	<   |                     |¦  «         ŒlŒ¶t          | d
d¦  «        }|€|r|ndS |D ]�}t          |dd¦  «        sŒt          |dg ¦  «        D ]j}t          |dd¦  «        rW|j        }t          |dd¦  «        ddœ}t          |d¦  «        rt          |j        ¦  «        |d	<   |                     |¦  «         ŒkŒ‘|r|ndS )z\Extract tool/function calls from response candidates and automatic function calling history.Ú
candidatesNrt   r{   Úfunction_callrk   )rk   r^   ÚargsÚ	argumentsÚ"automatic_function_calling_history)rR   rQ   rt   r{   rÎ   r"   rÏ   r‹   )	rC   Ú
tool_callsrÍ   Ú	candidater”   rÎ   Ú	tool_callrÑ   rt   s	            rB   Úextract_tool_callsrÕ   Z  s  € ð
 €Jõ ˜ <°Ñ4Ô4€JØð 1�hÐ*Ø#ð 	1ð 	1ˆIÝ˜9 iÑ0Ô0ð ½ØÔ! 7¨Bñ9ô 9ð ð àÔ Ð(¨IÔ,=Ô,CÐ,KØà!Ô)Ô/ð 1ð 1�Ý˜4 °$Ñ7Ô7ð 1Ø$(Ô$6�Må '¨°v¸tÑ DÔ DØ /ð!ð !�Iõ ˜}¨f°dÑ;Ô;ð TÝ1?ÀÔ@RÑ1SÔ1S˜	 +Ñ.à×%Ò% iÑ0Ô0Ð0øð1õ  *1ØÐ6¸ñ*ô *Ð&ð *Ð1Ø'Ð1ˆzˆz¨TÐ1à5ð -ð -ˆÝ�w ¨Ñ.Ô.ð 	Øå˜G W¨bÑ1Ô1ð 	-ð 	-ˆDÝ�t˜_¨dÑ3Ô3ð -Ø $Ô 2�å# M°6¸4Ñ@Ô@Ø+ðð �	õ ˜=¨&Ñ1Ô1ð PÝ-;¸MÔ<NÑ-OÔ-O�I˜kÑ*à×!Ò! )Ñ,Ô,Ð,øð	-ð $Ð-ˆ:ˆ:¨Ð-rA   rÏ   útuple[Any, ...]Úkwargsúdict[str, Any]r|   úTool | Callable[..., Any]c                 ód  — |r|                      ¦   «         ni }t          |¦  «        s|S | r„	 t          j        |¦  «        }t	          |j                             ¦   «         ¦  «        }t          | ¦  «        D ]#\  }}|t          |¦  «        k     r||||         <   Œ$n# t          $ r | |d<   Y nw xY w|S )z(Capture tool input from args and kwargs.rÏ   )
ÚcopyrÆ   ÚinspectÚ	signaturerˆ   Ú
parametersr¶   Ú	enumerateÚlenÚ	Exception)rÏ   r×   r|   Ú
tool_inputÚsigÚparam_namesÚiÚargs           rB   Ú_capture_tool_inputrç   ˜  sÝ   € ð #)Ð0�—’‘”�¨b€Jå�D‰>Œ>ð ØÐð ð 	&ð	&ÝÔ# DÑ)Ô)ˆCÝ˜sœ~×2Ò2Ñ4Ô4Ñ5Ô5ˆKÝ# D™/œ/ð 5ð 5‘��3Ø•s˜;Ñ'Ô'Ò'Ð'Ø14�J˜{¨1œ~Ñ.øð5øõ ð 	&ð 	&ð 	&à!%ˆJ�vÑÐÐð	&øøøð Ðs   ­A-B ÂB-Â,B-r©   Útool_docúUnion[Span, StreamedSpan]c           	      óø  — t          t          j        ¦   «         j        ¦  «        }|rgt          j                             d| › �dt          j        dt          t          j
        | i¬¦  «        }|r |                     t          j        |¦  «         |S t          j        t          j        d| › �t          ¬¦  «        }|                     t          j
        | ¦  «         |r |                     t          j        |¦  «         |S )z!Create a span for tool execution.zexecute_tool z	sentry.opzsentry.origin)rk   Ú
attributes)Úoprk   Úorigin)r   rc   rd   re   ÚtracesÚ
start_spanr   ÚGEN_AI_EXECUTE_TOOLr%   r   ÚGEN_AI_TOOL_NAMEÚset_attributeÚGEN_AI_TOOL_DESCRIPTIONÚset_data)r©   rè   Úspan_streamingÚspans       rB   Ú_create_tool_spanr÷   °  sù   € õ 0µ
Ô0EÑ0GÔ0GÔ0OÑPÔP€NØð ÝÔ ×+Ò+Ø, Ð,Ð,à�RÔ3Ø¥ÝÔ)¨9ðð ,ñ 
ô 
ˆð ð 	KØ×Ò�xÔ?ÀÑJÔJÐJØˆåÔ ÝÔ!Ø(˜YÐ(Ð(Ýðñ ô €Dð
 	‡M‚M•(Ô+¨YÑ7Ô7Ð7Øð BØ�Š•hÔ6¸ÑAÔAÐAØ€KrA   c                 óþ   ‡ ‡‡— t          ‰ ¦  «        s‰ S t          ‰ dd¦  «        Š‰ j        Št          j        ‰ ¦  «        rt          ‰ ¦  «        d
ˆ ˆˆfd„¦   «         }|S t          ‰ ¦  «        d
ˆ ˆˆfd„¦   «         }|S )z3Wrap a tool to emit execute_tool spans when called.r:   rÃ   rÏ   r   r×   rE   c               Ÿ   óN  •K  — t          ‰	‰¦  «        5 }t          |t          ¦  «        r|j        n|j        }t          | |‰¦  «        }t          ¦   «         5   |t          j        t          |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   	  ‰| i |¤Žƒ d {V —†}t          ¦   «         5   |t          j
        t          |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |cd d d ¦  «         S # t          $ r}t          |¦  «         ‚ d }~ww xY w# 1 swxY w Y   d S rv   ©r÷   rN   r   rò   rô   rç   r   r   ÚGEN_AI_TOOL_INPUTr"   ÚGEN_AI_TOOL_OUTPUTrá   rh   ©
rÏ   r×   rö   Úset_on_spanrâ   r¢   r[   r|   rè   r©   s
          €€€rB   Úasync_wrappedz#wrapped_tool.<locals>.async_wrappedØ  s4  øè è € å" 9¨hÑ7Ô7ð ¸4õ " $­Ñ5Ô5ð'�DÔ&Ð&àœð õ 1°°v¸tÑDÔD�
Ý0Ñ2Ô2ð Xð XØ�K¥Ô :½NÈ:Ñ<VÔ<VÑWÔWÐWðXð Xð Xñ Xô Xð Xð Xð Xð Xð Xð Xøøøð Xð Xð Xð Xð
Ø#' 4¨Ð#8°Ð#8Ð#8Ð8Ð8Ð8Ð8Ð8Ð8�Fõ 5Ñ6Ô6ð Yð YØ#˜¥HÔ$?ÅÐPVÑAWÔAWÑXÔXÐXðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð "ð%ð ð ð ñ ô ð ð øõ& !ð ð ð Ý& sÑ+Ô+Ð+Øøøøøðøøøð'ð ð ð øøøð ð ð ð ð ð sx   ”ADÁ$BÁ;DÂB	ÂDÂB	ÂDÂC8Â/$CÃC8ÃC#	Ã#C8Ã&C#	Ã'C8Ã8
DÄDÄDÄDÄDÄ!Dc                  ó>  •— t          ‰	‰¦  «        5 }t          |t          ¦  «        r|j        n|j        }t          | |‰¦  «        }t          ¦   «         5   |t          j        t          |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   	  ‰| i |¤Ž}t          ¦   «         5   |t          j
        t          |¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   |cd d d ¦  «         S # t          $ r}t          |¦  «         ‚ d }~ww xY w# 1 swxY w Y   d S rv   rú   rý   s
          €€€rB   Úsync_wrappedz"wrapped_tool.<locals>.sync_wrappedô  s  ø€ å" 9¨hÑ7Ô7ð ¸4õ " $­Ñ5Ô5ð'�DÔ&Ð&àœð õ 1°°v¸tÑDÔD�
Ý0Ñ2Ô2ð Xð XØ�K¥Ô :½NÈ:Ñ<VÔ<VÑWÔWÐWðXð Xð Xñ Xô Xð Xð Xð Xð Xð Xð Xøøøð Xð Xð Xð Xð
Ø!˜T 4Ð2¨6Ð2Ð2�Fõ 5Ñ6Ô6ð Yð YØ#˜¥HÔ$?ÅÐPVÑAWÔAWÑXÔXÐXðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð "ð%ð ð ð ñ ô ð ð øõ& !ð ð ð Ý& sÑ+Ô+Ð+Øøøøøðøøøð'ð ð ð øøøð ð ð ð ð ð sx   ’ADÁ$BÁ9DÂB		Â	DÂB		ÂDÂC0Â'$CÃC0ÃC	ÃC0ÃC	ÃC0Ã0
DÃ:D
Ä
DÄDÄDÄDN)rÏ   r   r×   r   rE   r   )rÆ   rR   r=   rÜ   Úiscoroutinefunctionr   )r|   rÿ   r  rè   r©   s   `  @@rB   Úwrapped_toolr  Í  sÅ   øøø€ å�D‰>Œ>ð àˆå˜˜j¨)Ñ4Ô4€IØŒ|€HåÔ" 4Ñ(Ô(ð 7å	ˆt‰Œð	ð 	ð 	ð 	ð 	ð 	ð 	ñ 
Œð	ð0 Ðõ 
ˆt‰Œð	ð 	ð 	ð 	ð 	ð 	ð 	ñ 
Œð	ð0 ÐrA   ÚconfigúGenerateContentConfig | Nonec                 ó‚   — | s| S t          | dd¦  «        }|€| S t          j        | ¦  «        }d„ |D ¦   «         |_        |S )zŽWrap tools in config to emit execute_tool spans. Tools are sometimes passed directly as
    callable functions as a part of the config object.r¿   Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r@   )r  )rx   r|   s     rB   ú
<listcomp>z-wrapped_config_with_tools.<locals>.<listcomp>  s    € Ð9Ð9Ð9¨4•L Ñ&Ô&Ð9Ð9Ð9rA   )rR   rÛ   r¿   )r  r¿   r¢   s      rB   Úwrapped_config_with_toolsr	    sU   € ð
 ð Øˆå�F˜G TÑ*Ô*€EØ€}ØˆåŒY�vÑÔ€FØ9Ð9°5Ð9Ñ9Ô9€F„Là€MrA   úOptional[List[str | None]]c                 óR  — | rt          | dg ¦  «        sdS g }| j        €|r|ndS | j        D ]v}t          |d¦  «        rt          |j        d¦  «        sŒ(|j        �|j        j        €Œ<|j        j        D ]-}t          |dd¦  «        r|                     |j        ¦  «         Œ.Œw|r|ndS )z&Extract text from response candidates.rÍ   Nrt   r{   r~   )rR   rÍ   rQ   rt   r{   r‹   r~   )rC   r¼   rÓ   r”   s       rB   Ú_extract_response_textr  "  sç   € ð
 ð �7 8¨\¸2Ñ>Ô>ð Øˆtà "€EØÔÐ"ØÐ'ˆuˆu 4Ð'àÔ(ð 	(ð 	(ˆ	Ý�y )Ñ,Ô,ð 	µG¸IÔ<MÈwÑ4WÔ4Wð 	ØàÔÐ$¨	Ô(9Ô(?Ð(GØàÔ%Ô+ð 	(ð 	(ˆDÝ�t˜V TÑ*Ô*ð (Ø—’˜TœYÑ'Ô'Ð'øð	(ð Ð#ˆ5ˆ5˜tÐ#rA   úOptional[List[str]]c                 ó  — | rt          | dg ¦  «        sdS g }| j        €|r|ndS | j        D ][}t          |dd¦  «        rHt          |j        ¦  «        }d|v r|                     d¦  «        d         }|                     |¦  «         Œ\|r|ndS )z0Extract finish reasons from response candidates.rÍ   NÚfinish_reasonú.éÿÿÿÿ)rR   rÍ   rl   r  Úsplitr‹   )rC   Úfinish_reasonsrÓ   Úreasons       rB   Úextract_finish_reasonsr  <  sº   € ð ð �7 8¨\¸2Ñ>Ô>ð Øˆtà"$€NàÔÐ"Ø!/Ð9ˆ~ˆ~°TÐ9àÔ(ð *ð *ˆ	Ý�9˜o¨tÑ4Ô4ð 	*å˜Ô0Ñ1Ô1ˆFà�fˆ}ˆ}ØŸš cÑ*Ô*¨2Ô.�Ø×!Ò! &Ñ)Ô)Ð)øà+Ð5ˆ>ˆ>°Ð5rA   Úsystem_instructionsú%Union[ContentUnionDict, ContentUnion]Úcan_be_contentúlist[TextPart]c                 ó¾  — g }t          | t          ¦  «        rd| dœgS t          | t          ¦  «        r| j        rd| j        dœgS |rrt          | t          ¦  «        r]t          | j        t          ¦  «        rA| j        D ]9}t          |j        t          ¦  «        r|                     d|j        dœ¦  «         Œ:|S t          | t          ¦  «        r$d| v r t          d| ¦  «        d         }|€g S d|dœgS |rét          | t          ¦  «        rÔt          d| ¦  «         
                    dg ¦  «        }|€|S |D ]§}t          |t          ¦  «        r8t          |j        t          ¦  «        r|                     d|j        dœ¦  «         ŒOt          |t          ¦  «        sŒe| 
                    d¦  «        }t          |t          ¦  «        r|                     d|dœ¦  «         Œ¨|S |S )Nr~   )r^   rt   r   r'   r{   )rN   rl   r   r~   r   r{   rˆ   r‹   rO   r   rP   )r  r  Ú
text_partsr”   r~   r{   s         rB   Ú'_transform_system_instruction_one_levelr  T  s/  € ð $&€JåÐ%¥sÑ+Ô+ð BØÐ,?Ð@Ð@ÐAÐAåÐ%¥tÑ,Ô,ð GÐ1DÔ1Ið GØÐ,?Ô,DÐEÐEÐFÐFàð �*Ð%8½'ÑBÔBð ÝÐ)Ô/µÑ6Ô6ð 	NØ+Ô1ð Nð N�Ý˜dœi­Ñ-Ô-ð NØ×%Ò%¨vÀ$Ä)Ð&LÐ&LÑMÔMÐMøØÐåÐ%¥tÑ,Ô,ð °Ð;NÐ1NÐ1NÝ�JÐ 3Ñ4Ô4°VÔ<ˆØˆ<ØˆIà¨DÐ1Ð1Ð2Ð2à	ð �JÐ':½DÑAÔAð Ý�]Ð$7Ñ8Ô8×<Ò<¸WÀbÑIÔIˆØˆ=ØÐàð 
	Eð 
	EˆDÝ˜$¥Ñ%Ô%ð ­*°T´YÅÑ*DÔ*Dð Ø×!Ò!¨6¸d¼iÐ"HÐ"HÑIÔIÐIØå˜d¥DÑ)Ô)ð Øà—8’8˜FÑ#Ô#ˆDÝ˜$¥Ñ$Ô$ð EØ×!Ò!¨6¸dÐ"CÐ"CÑDÔDÐDøØÐàÐrA   c                 ó¬   — g }t          | t          ¦  «        r-t          t          j        d„ | D ¦   «         ¦  «        ¦  «        }|S t	          | d¬¦  «        S )Nc              3   ó8   K  — | ]}t          |d ¬¦  «        V — ŒdS )F©r  N)r  )rx   Úinstructionss     rB   rz   z1_transform_system_instructions.<locals>.<genexpr>Š  sL   è è € ð  ð  ð !õ 8Ø °ðñ ô ð ð  ð  ð  ð  ð  rA   Tr  )rN   rˆ   r   Úfrom_iterabler  )r  r  s     rB   Ú_transform_system_instructionsr"  ƒ  s}   € ð $&€JåÐ%¥tÑ,Ô,ð 
ÝÝÔð  ð  ð %8ð	 ñ  ô  ñ ô ñ
ô 
ˆ
ð Ðå2Ø¨Dðñ ô ð rA   rö   Úintegrationc                 ó€  — t          j        ¦   «         }t          | t          ¦  «        r| j        n| j        } |t          j        t          ¦  «          |t          j        |¦  «         | 	                    dd¦  «        r |t          j
        d¦  «         | 	                    d¦  «        }|�’t          |d¦  «        r‚|j        }|ryt          |¦  «        }	|	rht          |j        ¦  «        r7|j        d         d         d	         rt!          | t          j        |	d¬
¦  «         nt!          | t          j        |	d¬
¦  «         d}
t          |j        ¦  «        r|j        d         d         d	         rd}
nt%          ¦   «         r	|j        rd}
|
�r$g }d}|rt          |d¦  «        r|j        }n.t          |t*          ¦  «        rd|v r| 	                    d¦  «        }|�5 |t          j        t/          j        t3          |¦  «        ¦  «        ¦  «         t5          |¦  «        }|                     |¦  «         |r{t9          |¦  «        }t          j        ¦   «         }t          j        ¦   «         }t=          |j        ¦  «        rt?          || |¦  «        n|}|�t!          | t          j         |d¬
¦  «         dt          j!        fdt          j"        fdt          j#        fdt          j$        fdt          j%        fdt          j&        fdt          j'        ffD ]3\  }}t          ||¦  «        rtQ          ||¦  «        }|� |||¦  «         Œ4dS )zSet span data for the request.ÚstreamFTr  Nr¿   Údata_collectionÚgen_aiÚinputs©ÚunpackÚsystem_instructionÚtemperatureÚtop_pÚtop_kÚmax_output_tokensÚpresence_penaltyÚfrequency_penaltyÚseed))rc   rd   rN   r   rò   rô   r   r$   ÚGEN_AI_REQUEST_MODELrP   ÚGEN_AI_RESPONSE_STREAMINGrQ   r¿   rË   r!   re   r   ÚGEN_AI_REQUEST_AVAILABLE_TOOLSr   Úinclude_promptsr+  rO   ÚGEN_AI_SYSTEM_INSTRUCTIONSÚjsonÚdumpsr"  rŒ   r�   r   Úget_current_scoper   r   ÚGEN_AI_REQUEST_MESSAGESÚGEN_AI_REQUEST_TEMPERATUREÚGEN_AI_REQUEST_TOP_PÚGEN_AI_REQUEST_TOP_KÚGEN_AI_REQUEST_MAX_TOKENSÚGEN_AI_REQUEST_PRESENCE_PENALTYÚ GEN_AI_REQUEST_FREQUENCY_PENALTYÚGEN_AI_REQUEST_SEEDrR   )rö   r#  ri   rn   r×   Úclientrþ   r  r¿   rÈ   Úrecord_inputsr’   r  Úcontents_messagesÚnormalized_messagesÚscopeÚmessages_dataÚparamÚspan_keyÚvalues                       rB   Úset_span_data_for_requestrL  ™  s¨  € õ Ô"Ñ$Ô$€Få(¨­|Ñ<Ô<ÐOˆÔÐÀ$Ä-ð ð €K•Ô&­Ñ6Ô6Ð6Ø€K•Ô-¨uÑ5Ô5Ð5à‡z‚z�(˜EÑ"Ô"ð >Øˆ•HÔ6¸Ñ=Ô=Ð=à06·
²
¸8Ñ0DÔ0D€Fð Ð�g f¨gÑ6Ô6ÐØ”ˆØð 	Ý4°UÑ;Ô;ˆOØð Ý.¨v¬~Ñ>Ô>ð Ø”~Ð&7Ô8¸ÔBÀ8ÔLð Ý+Ø Ý$ÔCØ+Ø#(ð	ñ ô ð øõ (ØÝ Ô?Ø'Ø$ð	ñ ô ð ð €MÝ" 6¤>Ñ2Ô2ð ØŒ>Ð+Ô,¨XÔ6°xÔ@ð 	!Ø ˆMøÝ	 Ñ	"Ô	"ð  {Ô'Bð Øˆàñ #Øˆð #ÐØð 	C•g˜fÐ&:Ñ;Ô;ð 	CØ"(Ô";ÐÐÝ˜¥Ñ%Ô%ð 	CÐ*>À&Ð*HÐ*HØ"(§*¢*Ð-AÑ"BÔ"BÐàÐ*ØˆKÝÔ3Ý”
Õ9Ð:MÑNÔNÑOÔOñô ð õ 6°hÑ?Ô?ÐØ�ŠÐ)Ñ*Ô*Ð*àð 	Ý"9¸(Ñ"CÔ"CÐÝÔ*Ñ,Ô,ˆFÝÔ0Ñ2Ô2ˆEõ 0°´Ñ?Ô?ð)Õ.Ð/BÀDÈ%ÑPÔPÐPà(ð ð
 Ð(Ý#ØÝÔ4Ø!Ø ð	ñ ô ð ð 
�Ô;Ð<Ø	•(Ô/Ð0Ø	•(Ô/Ð0Ø	�hÔ@ÐAØ	�XÔEÐFØ	�hÔGÐHØ	•Ô-Ð.ðð -ð -‰ˆˆxõ �6˜5Ñ!Ô!ð 	-Ý˜F EÑ*Ô*ˆEØÐ Ø�˜H eÑ,Ô,Ð,øð-ð -rA   c                 ór  — |sd S t          j        ¦   «         }t          | t          ¦  «        r| j        n| j        }t          |¦  «        }|rt          | t          j	        |¦  «         t          |dd ¦  «        }|� |t          j        |¦  «         t          |dd ¦  «        }|� |t          j        |¦  «         t          |¦  «        }|d         r |t          j        |d         ¦  «         |d         r |t          j        |d         ¦  «         |d         r |t          j        |d         ¦  «         |d         r |t          j        |d         ¦  «         |d         r |t          j        |d         ¦  «         t'          |¦  «        }	|	rtt)          |j        ¦  «        r=|j        d         d	         d
         r# |t          j        t/          |	¦  «        ¦  «         n# |t          j        t/          |	¦  «        ¦  «         t)          |j        ¦  «        rS|j        d         d	         d
         r6t1          |¦  «        }
|
r' |t          j        t/          |
¦  «        ¦  «         d S d S d S t5          ¦   «         r=|j        r8t1          |¦  «        }
|
r) |t          j        t/          |
¦  «        ¦  «         d S d S d S d S )NÚresponse_idÚmodel_versionr5   r6   r7   r8   r9   r&  r'  Úoutputs)rc   rd   rN   r   rò   rô   r  r   r   ÚGEN_AI_RESPONSE_FINISH_REASONSrR   ÚGEN_AI_RESPONSE_IDÚGEN_AI_RESPONSE_MODELrZ   Ú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Õ   r!   re   ÚGEN_AI_RESPONSE_TOOL_CALLSr"   r  ÚGEN_AI_RESPONSE_TEXTr   r6  )rö   r#  rC   rC  rþ   r  rN  rO  rS   rÒ   Úresponse_textss              rB   Úset_span_data_for_responser\     s<  € ð
 ð ØˆåÔ"Ñ$Ô$€Få(¨­|Ñ<Ô<ÐOˆÔÐÀ$Ä-ð õ ,¨HÑ5Ô5€NØð 
ÝØ•(Ô9¸>ñ	
ô 	
ð 	
õ ˜( M°4Ñ8Ô8€KØÐØˆ•HÔ/°Ñ=Ô=Ð=å˜H o°tÑ<Ô<€MØÐ Øˆ•HÔ2°MÑBÔBÐBå# HÑ-Ô-€Jà�.Ô!ð TØˆ•HÔ6¸
À>Ô8RÑSÔSÐSàÐ'Ô(ð 
ØˆÝÔ5ØÐ,Ô-ñ	
ô 	
ð 	
ð
 �/Ô"ð VØˆ•HÔ7¸ÀOÔ9TÑUÔUÐUàÐ+Ô,ð 
ØˆÝÔ9ØÐ0Ô1ñ	
ô 	
ð 	
ð
 �.Ô!ð TØˆ•HÔ6¸
À>Ô8RÑSÔSÐSå# HÑ-Ô-€JØð YÝ& v¤~Ñ6Ô6ð 	YØŒ~Ð/Ô0°Ô:¸9ÔEð Ø�ÝÔ7½È
Ñ9SÔ9Sñô ð øð
 ˆK�Ô;½^ÈJÑ=WÔ=WÑXÔXÐXå" 6¤>Ñ2Ô2ð WØŒ>Ð+Ô,¨XÔ6°yÔAð 	Ý3°HÑ=Ô=ˆNØð Ø�ÝÔ1µ>À.Ñ3QÔ3Qñô ð ð ð ð	ð 	ðð õ 
!Ñ	"Ô	"ð W {Ô'Bð Wå/°Ñ9Ô9ˆØð 	WàˆK�Ô5µ~ÀnÑ7UÔ7UÑVÔVÐVÐVÐVðWð Wð Wð Wð	Wð 	WrA   útuple[Any, Any, str]c                 ó$  — | r| d         n|                      dd¦  «        }t          | ¦  «        dk    r| d         n|                      d¦  «        }t          |¦  «        }|                      d¦  «        }t          |¦  «        }||ur||d<   |||fS )zBExtract and prepare common arguments for generate_content methods.r   ri   rÃ   r#   rn   r  )rP   rà   rm   r	  )rÏ   r×   ri   rn   Ú
model_namer  Úwrapped_configs          rB   Úprepare_generate_content_argsra  L  s˜   € ð Ð?ˆD�ŒGˆG §¢¨G°YÑ!?Ô!?€EÝ˜d™)œ) aš-˜-ˆt�AŒwˆw¨V¯ZªZ¸
Ñ-CÔ-C€HÝ Ñ&Ô&€Jà-3¯ZªZ¸Ñ-AÔ-A€FÝ.¨vÑ6Ô6€NØ˜VÐ#Ð#Ø)ˆˆxÑà�(˜JÐ&Ð&rA   útuple[str, Any]c                 ó~   — |                      dd¦  «        }|                      d¦  «        }t          |¦  «        }||fS )zxExtract and prepare common arguments for embed_content methods.

    Returns:
        tuple: (model_name, contents)
    ri   rÃ   rn   )rP   rm   )rÏ   r×   ri   rn   r_  s        rB   Úprepare_embed_content_argsrd  \  s@   € ð �JŠJ�w 	Ñ*Ô*€EØ�zŠz˜*Ñ%Ô%€HÝ Ñ&Ô&€Jà�xÐÐrA   c                 óð  — t          j        ¦   «         }d}t          |j        ¦  «        r|j        d         d         d         rd}nt	          ¦   «         r	|j        rd}|r“|r“g }t          |t          ¦  «        r|g}nUt          |t          ¦  «        r,|D ](}t          |¦  «        }|r| 
                    |¦  «         Œ)nt          |¦  «        }|r|g}|r#t          | t          j        |d¬¦  «         dS dS dS dS )z$Set span data for embedding request.Fr&  r'  r(  Tr)  N)rc   rd   r!   re   r   r6  rN   rl   rˆ   r¾   r‹   r   r   ÚGEN_AI_EMBEDDINGS_INPUT)	rö   r#  rn   r×   rC  rD  Úinput_textsry   r~   s	            rB   Úset_span_data_for_embed_requestrh  k  s\  € õ Ô"Ñ$Ô$€Fà€MÝ" 6¤>Ñ2Ô2ð ØŒ>Ð+Ô,¨XÔ6°xÔ@ð 	!Ø ˆMøÝ	 Ñ	"Ô	"ð  {Ô'Bð Øˆàð Øð 	àˆKõ ˜(¥CÑ(Ô(ð 
)Ø'˜j��Ý˜H¥dÑ+Ô+ð )Ø$ð 1ð 1�DÝ0°Ñ6Ô6�DØð 1Ø#×*Ò*¨4Ñ0Ô0Ð0øð1õ
 -¨XÑ6Ô6�Øð )Ø#' &�Kàð Ý#ØÝÔ4ØØ ð	ñ ô ð ð ð ð'ð ð	ð 	ð"ð rA   r+   c                 óœ  — |sdS t          |d¦  «        r³|j        r®d}|j        D ]C}t          |d¦  «        r1|j        r*t          |j        dd¦  «        }|�|t	          |¦  «        z  }ŒD|dk    r]t          | t          ¦  «        r"|                      t          j	        |¦  «         dS |  
                    t          j	        |¦  «         dS dS dS dS )z%Set span data for embedding response.NÚ
embeddingsr   Ú
statisticsÚtoken_count)rQ   rj  rk  rR   r>   rN   r   rò   r   rT  rô   )rö   r#  rC   r9   Ú	embeddingrl  s         rB   Ú set_span_data_for_embed_responsern  –  s  € ð ð Øˆõ ˆx˜Ñ&Ô&ð P¨8Ô+>ð PØˆà!Ô,ð 	5ð 	5ˆIÝ�y ,Ñ/Ô/ð 5°IÔ4Hð 5Ý% iÔ&:¸MÈ4ÑPÔP�ØÐ*Ø ¥C¨Ñ$4Ô$4Ñ4�Løð ˜!ÒÐÝ˜$¥Ñ-Ô-ð PØ×"Ò"¥8Ô#EÀ|ÑTÔTÐTÐTÐTà—’�hÔ@À,ÑOÔOÐOÐOÐOðPð Pð Pð Pð ÐrA   )rC   rD   rE   r4   )r[   r   rE   N)rn   r(   rE   ro   )r”   r   rE   r›   )r¬   r   rE   r›   )ry   r   rE   r›   )rn   r(   rE   r¸   )r¿   rÀ   rE   rÁ   )rC   r,   rE   rÁ   )rÏ   rÖ   r×   rØ   r|   rÙ   rE   rØ   )r|   rÙ   rE   rÙ   )r  r  rE   r  )rC   r,   rE   r
  )rC   r,   rE   r  )r  r  rE   r  )rö   ré   r#  r   rC   r,   rE   N)rÏ   rÖ   r×   rØ   rE   r]  )rÏ   rÖ   r×   rØ   rE   rb  )
rö   ré   r#  r   rn   r   r×   rØ   rE   N)rö   ré   r#  r   rC   r+   rE   N)crÛ   rÜ   r8  Ú	functoolsr   Ú	itertoolsr   Útypingr   r   r   r   r	   r
   r   r   r   r   Úgoogle.genai.typesr   r   r   r   rc   Úsentry_sdk._typesr   Úsentry_sdk.ai.utilsr   r   r   r   r   Úsentry_sdk.constsr   r   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   Úsentry_sdk.tracing_utilsr   r   Úsentry_sdk.utilsr   r    r!   r"   Úconstsr$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   Úsentry_sdk.tracingr1   r�   ÚPILr2   r�   ÚImportErrorÚ__optional_keys__rµ   r4   rZ   rh   rl   rm   rŒ   rŽ   r¡   r‘   r´   rw   rŠ   r¾   rË   rÕ   rç   r÷   r  r	  r  r  r  r"  rL  r\  ra  rd  rh  rn  r@   rA   rB   ú<module>r     s0  ðØ €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð NÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ Mà Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >àð (ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð +Ð*Ð*Ð*Ð*Ð*Ø'Ð'Ð'Ð'Ð'Ð'àÐ ð	Ø%Ð%Ð%Ð%Ð%Ð%àÐÐøØð 	ð 	ð 	Ø€Dð	øøøð
 Ô,€ðð ð ð ð �	ñ ô ð ðHØ>ðHàðHð Hð Hð HðV/ð /ð /ð /ðÐ-ð °#ð ð ð ð ðRð Rð Rð RðjLð Lð Lð Lð^2ð 2ð 2ð 2ðjð ð ð ð$˜ð  $ð ð ð ð ð(#ð #ð #ð #ðL.ð .ð .ð .ð.'8Ø ð'8à%ð'8ð '8ð '8ð '8ðT;.Ø'ð;.à%ð;.ð ;.ð ;.ð ;.ð|Ø
ðØ%5ðØ=Xðàðð ð ð ð0ØðØ-ðà ðð ð ð ð:@ð @ð @ð @ðFØ*ðà#ðð ð ð ð$$Ø'ð$à!ð$ð $ð $ð $ð46Ø'ð6àð6ð 6ð 6ð 6ð0,Ø@ð,àð,ð ð,ð ,ð ,ð ,ð^Ø@ðàðð ð ð ð,d-Ø
%ðd-àðd-ð ðd-ð !ð	d-ð
 ðd-ð 
ðd-ð d-ð d-ð d-ðNIWØ
%ðIWàðIWð (ðIWð 
ð	IWð IWð IWð IWðX'Ø
ð'Ø%5ð'àð'ð 'ð 'ð 'ð  Ø
ð Ø%5ð àð ð  ð  ð  ð(Ø
%ð(àð(ð ð(ð ð	(ð
 
ð(ð (ð (ð (ðVPØ
%ðPàðPð %ðPð 
ð	Pð Pð Pð Pð Pð Ps   Â.B7 Â7B?Â>B?