Ë
    uPêj¼  ã                   ó‚   — d Z ddlmZmZmZ ddlZddlmZ erddlm	Z	m
Z
  G d„ d«      Zded	efd
„Zdeeef   d	efd„Zy)z%
Utility functions for A2A protocol.
é    )ÚTYPE_CHECKINGÚAnyÚFinalN)Úverbose_logger)ÚSendMessageRequestÚSendStreamingMessageRequestc            
       ó¶   — e Zd ZdZededefd„«       Zedeeef   defd„«       Z	edddefd	„«       Z
ed
edefd„«       Zedddeeef   deeeef   fd„«       Zy)ÚA2ARequestUtilsz2Utility class for A2A request/response processing.ÚmessageÚreturnc                 óŒ  — | €yt        | t        «      r| j                  dg «      }nt        | dg «      xs g }g }|D ]v  }t        |t        «      r7|j                  d«      dk(  sŒ(|j	                  |j                  dd«      «       ŒJt        |dd«      dk(  sŒ[|j	                  t        |dd«      «       Œx dj                  |«      S )zä
        Extract text content from A2A message parts.

        Args:
            message: A2A message dict or object with 'parts' containing text parts

        Returns:
            Concatenated text from all text parts
        NÚ ÚpartsÚkindÚtextú )Ú
isinstanceÚdictÚgetÚgetattrÚappendÚjoin)r   r   Ú
text_partsÚparts       ú_/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/a2a_protocol/utils.pyÚextract_text_from_messagez)A2ARequestUtils.extract_text_from_message   s¾   € ð ˆ?Øô �gœtÔ$Ø—K‘K ¨Ó,‰Eä˜G W¨bÓ1Ò7°RˆEà')ˆ
Øò 	AˆDÜ˜$¤Ô%Ø—8‘8˜FÓ# vÓ-Ø×%Ñ% d§h¡h¨v°rÓ&:Õ;ä˜4 ¨Ó.°&Ó8Ø×%Ñ%¤g¨d°F¸BÓ&?Õ@ð	Að �x‰x˜
Ó#Ð#ó    Úresponse_dictc                 óè   — | j                  di «      }t        |t        «      sy|j                  d«      dk(  rt        j	                  |«      S |j                  di «      }t        j	                  |«      S )zÜ
        Extract text content from A2A response result.

        Args:
            response_dict: A2A response dict with 'result' containing message

        Returns:
            Text from response message parts
        Úresultr   r   r   )r   r   r   r
   r   )r   r    r   s      r   Úextract_text_from_responsez*A2ARequestUtils.extract_text_from_response0   sh   € ð &×)Ñ)¨(°BÓ7ˆÜ˜&¤$Ô'Øð
 �:‰:�fÓ Ò*Ü"×<Ñ<¸VÓDÐDàŸ™ I¨rÓ2ˆÜ×8Ñ8¸ÓAÐAr   Úrequestz0SendMessageRequest | SendStreamingMessageRequestc                 ó<   — t        | dd«      }|€yt        |dd«      S )zÜ
        Extract the input message from an A2A request.

        Args:
            request: The A2A SendMessageRequest or SendStreamingMessageRequest

        Returns:
            The message object/dict or None
        ÚparamsNr   )r   )r"   r$   s     r   Úget_input_message_from_requestz.A2ARequestUtils.get_input_message_from_requestH   s)   € ô   ¨°4Ó8ˆØˆ>ØÜ�v˜y¨$Ó/Ð/r   r   c                 ó~   — | sy	 t        j                  | ¬«      S # t        $ r t        j                  d«       Y yw xY w)z¿
        Count tokens in text using litellm.token_counter.

        Args:
            text: Text to count tokens for

        Returns:
            Token count, or 0 if counting fails
        r   ©r   zFailed to count tokens)ÚlitellmÚtoken_counterÚ	Exceptionr   Údebugr'   s    r   Úcount_tokenszA2ARequestUtils.count_tokensZ   sA   € ñ Øð	Ü×(Ñ(¨dÔ3Ð3øÜò 	Ü× Ñ Ð!9Ô:Ùð	ús   … ›<»<c                 ó(  — t         j                  | «      }|�t        |d«      r|j                  d¬«      }t         j	                  |«      }t         j                  |«      }t         j                  |«      }t         j                  |«      }||z   }|||fS )a2  
        Calculate token usage from A2A request and response.

        Args:
            request: The A2A SendMessageRequest or SendStreamingMessageRequest
            response_dict: The A2A response as a dict

        Returns:
            Tuple of (prompt_tokens, completion_tokens, total_tokens)
        Ú
model_dumpÚjson)Úmode)r
   r%   Úhasattrr.   r   r,   r!   )r"   r   Úinput_messageÚ
input_textÚprompt_tokensÚoutput_textÚcompletion_tokensÚtotal_tokenss           r   Ú%calculate_usage_from_request_responsez5A2ARequestUtils.calculate_usage_from_request_responsem   s’   € ô& (×FÑFÀwÓOˆØÐ$¬°ÀÔ)MØ)×4Ñ4¸&Ð4ÓAˆMÜ+×EÑEÀmÓTˆ
Ü.×;Ñ;¸JÓGˆô -×GÑGÈÓVˆÜ#2×#?Ñ#?ÀÓ#LÐà+Ð.?Ñ?ˆàÐ/°Ð=Ð=r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústaticmethodr   Ústrr   r   r!   r%   Úintr,   Útupler8   © r   r   r
   r
      sÚ   „ Ù<àð$¨3ð $°3ò $ó ð$ð< ðB°$°s¸C°x±.ð BÀSò Bó ðBð. ð0ØCð0à	ò0ó ð0ð" ð˜3ð  3ò ó ðð$ ð>ØCð>à˜C ˜H‘~ð>ð 
ˆs�C˜ˆ}Ñ	ò>ó ñ>r   r
   r   r   c                 ó,   — t         j                  | «      S ©N)r
   r   )r   s    r   Úextract_text_from_a2a_messagerD   �   s   € Ü×4Ñ4°WÓ=Ð=r   r   c                 ó,   — t         j                  | «      S rC   )r
   r!   )r   s    r   Úextract_text_from_a2a_responserF   ”   s   € Ü×5Ñ5°mÓDÐDr   )r<   Útypingr   r   r   r(   Úlitellm._loggingr   Ú	a2a.typesr   r   r
   r>   rD   r   rF   rA   r   r   ú<module>rJ      s\   ðñ÷ -Ñ ,ã Ý +áßI÷~>ñ ~>ðD>¨3ð >°3ó >ðE°$°s¸C°x±.ð EÀSô Er   