§
    ~ŠtjÄ	  ã                  ó2   — d Z ddlmZ ddlmZ dd„Zdd„ZdS )z9Shared token-usage normalization for Gemini integrations.é    )Úannotations)ÚAnyÚdetailsr   Úreturnú
int | Nonec                óD  — t          | t          t          f¦  «        sdS d}d}| D ]v}t          |dd¦  «        }t          |d|¦  «        }t          |dd¦  «        }t	          |¦  «                             ¦   «         dk    rt          |t          ¦  «        r||z  }d}Œw|r|n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)r   ÚtotalÚfoundÚentryr	   Úcounts         úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langsmith/integrations/_gemini_usage.pyÚ_audio_tokensr      s³   € å�g¥¥e˜}Ñ-Ô-ð ØˆtØ€EØ€EØð ð ˆÝ˜5 *¨dÑ3Ô3ˆÝ˜8 W¨hÑ7Ô7ˆÝ˜˜}¨dÑ3Ô3ˆÝˆx‰=Œ=×ÒÑ Ô  GÒ+Ð+µ
¸5Å#Ñ0FÔ0FÐ+Ø�U‰NˆEØˆEøØÐ#ˆ5ˆ5˜tÐ#ó    Úusageúdict[str, Any] | Nonec                ó  — | €dS i }dD ]7\  }}|D ]/}t          | |d¦  «        }t          |t          ¦  «        r|||<    nŒ0Œ8i }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<   |p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   )r   ÚresultÚkeyÚattrsÚattrr
   Úinput_detailsr&   ÚcachedÚoutput_detailsÚresponse_detailsr-   s               r   Únormalize_gemini_usage_metadatar7      s„  € ð €}Øˆtà€Fðð 	ð 	‰
ˆˆUð
 ð 	ð 	ˆDÝ˜E 4¨Ñ.Ô.ˆEÝ˜%¥Ñ%Ô%ð Ø#��s‘Ø�ðøð %'€Må�w uÐ.EÀtÑLÔLÑMÔMÐMˆØðð "'ˆ�gÑÝ�G EÐ+GÈÑNÔNÐN�&ÕPSÑTÔTð -Ø&,ˆ�lÑ#Øð 6Ø(5ˆÐ$Ñ%à%'€NÝ˜uÐ&?ÀÑFÔFÐØÐÝ" 5Ð*EÀtÑLÔLÐÝÐ/Ñ0Ô0Ð0ˆÐ=Ø"'ˆ�wÑÝ�w uÐ.DÀdÑKÔKÐK�)ÍSÑQÔQð 0Ø&/ˆ�{Ñ#Øð 8Ø)7ˆÐ%Ñ&àˆ>�TÐr   N)r   r   r   r   )r   r   r   r   )Ú__doc__Ú
__future__r   Útypingr   r   r7   © r   r   ú<module>r<      sa   ðØ ?Ð ?à "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð ð$ð $ð $ð $ð +ð +ð +ð +ð +ð +r   