Ë
    ³ŒjÄ	  ã                  ó0   — d Z ddlmZ ddlmZ dd„Zdd„Zy)	z9Shared token-usage normalization for Gemini integrations.é    )Úannotations)ÚAnyc                ó
  — t        | t        t        f«      syd}d}| D ]^  }t        |dd«      }t        |d|«      }t        |dd«      }t	        |«      j                  «       dk(  sŒGt        |t        «      sŒX||z  }d}Œ` |r|S dS )	zBSum the audio token count from a Gemini modality-details sequence.Nr   FÚmodalityÚvalueÚtoken_countÚAUDIOT)Ú
isinstanceÚlistÚtupleÚgetattrÚstrÚupperÚint)ÚdetailsÚtotalÚfoundÚentryr   Úcounts         ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/integrations/_gemini_usage.pyÚ_audio_tokensr      sŒ   € ä�g¤¤e˜}Ô-ØØ€EØ€EÛˆÜ˜5 *¨dÓ3ˆÜ˜8 W¨hÓ7ˆÜ˜˜}¨dÓ3ˆÜˆx‹=×ÑÓ  GÓ+´
¸5Ä#Õ0FØ�U‰NˆEØ‰Eð ñ ˆ5Ð#˜tÐ#ó    c                óÆ  — | €yi }dD ]0  \  }}|D ]&  }t        | |d«      }t        |t        «      sŒ!|||<    Œ0 Œ2 i }t        t        | dd«      «      x}	 �||d<   t        t        | dd«      x}t        «      r||d<   |r||d<   i }	t        | dd«      }
|
€t        | d	d«      }
t        |
«      x}�||	d<   t        t        | d
d«      x}t        «      r||	d<   |	r|	|d<   |xs dS )a3  Map a Gemini usage object onto LangSmith's canonical token metadata.

    Gemini's direct Live API uses ``response_*`` output fields, while ADK and
    older generated response types use ``candidates_*``. Only the known token
    fields below are read so provider objects cannot add arbitrary metadata.
    N))Úinput_tokens)Úprompt_token_count)Úoutput_tokens)Úresponse_token_countÚcandidates_token_count)Útotal_tokens)Útotal_token_countÚprompt_tokens_detailsÚaudioÚcached_content_token_countÚ
cache_readÚinput_token_detailsÚresponse_tokens_detailsÚcandidates_tokens_detailsÚthoughts_token_countÚ	reasoningÚoutput_token_details)r   r
   r   r   )ÚusageÚresultÚkeyÚattrsÚattrr   Úinput_detailsr"   ÚcachedÚoutput_detailsÚresponse_detailsr)   s               r   Únormalize_gemini_usage_metadatar4      s6  € ð €}Øà€Fó‰
ˆˆUó
 ˆDÜ˜E 4¨Ó.ˆEÜ˜%¤Õ%Ø#��s‘Ùñ	 ðð %'€Mäœw uÐ.EÀtÓLÓMÐMˆØðð "'ˆ�gÑÜœG EÐ+GÈÓNÐN�&ÔPSÔTØ&,ˆ�lÑ#ÙØ(5ˆÐ$Ñ%à%'€NÜ˜uÐ&?ÀÓFÐØÐÜ" 5Ð*EÀtÓLÐÜÐ/Ó0Ð0ˆÐ=Ø"'ˆ�wÑÜœw uÐ.DÀdÓKÐK�)ÌSÔQØ&/ˆ�{Ñ#ÙØ)7ˆÐ%Ñ&àŠ>�TÐr   N)r   r   Úreturnz
int | None)r+   r   r5   zdict[str, Any] | None)Ú__doc__Ú
__future__r   Útypingr   r   r4   © r   r   Ú<module>r:      s   ðÙ ?å "å ó$ô +r   