Ë
    uPêj  ã            	       ó¸   — d Z ddlmZmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ  G d„ de	«      Zd	ee   d
efd„Zddeeef   deded
efd„Zddeeef   ded
efd„Zy)z4
Common utilities for A2A (Agent-to-Agent) Protocol
é    )ÚAnyÚFinal)Ú	BaseModel)Úconvert_content_list_to_str)ÚBaseLLMException)ÚAllMessageValuesc            	       ó>   ‡ — e Zd ZdZi fdededeeef   fˆ fd„Zˆ xZ	S )ÚA2AErrorz&Base exception for A2A protocol errorsÚstatus_codeÚmessageÚheadersc                 ó*   •— t         ‰| �  |||¬«       y )N)r   r   r   )ÚsuperÚ__init__)Úselfr   r   r   Ú	__class__s       €úb/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/a2a/common_utils.pyr   zA2AError.__init__   s    ø€ ô 	‰ÑØ#ØØð 	õ 	
ó    )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚstrÚdictr   r   Ú__classcell__)r   s   @r   r
   r
      s9   ø„ Ù0ð #%ñ	

àð

ð ð

ð �c˜3�h‘÷	

ñ 

r   r
   ÚmessagesÚreturnc                 ó^  — g }| D ]–  }t        |¬«      }t        |t        «      r!|j                  «       j	                  dd«      }n>t        |t
        «      r|j	                  dd«      }nt        |«      j	                  dd«      }|sŒ�|j                  |› d|› �«       Œ˜ dj                  |«      S )ah  
    Convert OpenAI messages to a single prompt string for A2A agent.

    Formats each message as "{role}: {content}" and joins with newlines
    to preserve conversation history. Handles both string and list content.

    Args:
        messages: List of OpenAI-format messages

    Returns:
        Formatted prompt string with full conversation context
    )r   ÚroleÚuserz: ú
)r   Ú
isinstancer   Ú
model_dumpÚgetr   ÚappendÚjoin)r   Úconversation_partsÚmsgÚcontent_textr    s        r   Úconvert_messages_to_promptr+       s¦   € ð !#ÐØò Aˆä2¸3Ô?ˆô �cœ9Ô%Ø—>‘>Ó#×'Ñ'¨°Ó7‰DÜ˜œTÔ"Ø—7‘7˜6 6Ó*‰Dä˜“9—=‘= ¨Ó0ˆDâØ×%Ñ%¨¨¨b°°Ð&?Õ@ðAð �9‰9Ð'Ó(Ð(r   r   ÚdepthÚ	max_depthc                 ó(  — | �||k\  ry| j                  dg «      }g }|D ]a  }|j                  d«      dk(  r"|j                  |j                  dd«      «       Œ9d|v sŒ>t        ||dz   |«      }|sŒQ|j                  |«       Œc dj                  |«      S )a=  
    Extract text content from A2A message parts.

    Args:
        message: A2A message dict with 'parts' containing text parts
        depth: Current recursion depth (internal use)
        max_depth: Maximum recursion depth to prevent infinite loops

    Returns:
        Concatenated text from all text parts
    Ú ÚpartsÚkindÚtexté   ú )r%   r&   Úextract_text_from_a2a_messager'   )r   r,   r-   r0   Ú
text_partsÚpartÚnested_texts          r   r5   r5   @   sœ   € ð €˜% 9Ò,Øà—;‘;˜w¨Ó+€EØ#%€Jàò /ˆØ�8‰8�FÓ˜vÒ%Ø×Ñ˜dŸh™h v¨rÓ2Õ3à˜Š_Ü7¸¸eÀa¹iÈÓSˆKÚØ×!Ñ! +Õ.ð/ð �8‰8�JÓÐr   Úresponse_dictc                 ó  — | j                  di «      }t        |t        «      syd|v rt        |d|¬«      S |j                  d«      }|rt        |d|¬«      S |j                  d«      }|rt        |t        «      rt        |d|¬«      S |j                  di «      }t        |t        «      r!|j                  d«      }|rt        |d|¬«      S |j                  d	g «      }|r!t	        |«      dkD  r|d   }t        |d|¬«      S y)
a	  
    Extract text content from A2A response result.

    Args:
        response_dict: A2A response dict with 'result' containing message
        max_depth: Maximum recursion depth to prevent infinite loops

    Returns:
        Text from response message parts
    Úresultr/   r0   r   )r,   r-   r   ÚartifactÚstatusÚ	artifacts)r%   r#   r   r5   Úlen)	r9   r-   r;   r   r<   r=   Ústatus_messager>   Úfirst_artifacts	            r   Úextract_text_from_a2a_responserB   ^   s  € ð "×%Ñ% h°Ó3€FÜ�fœdÔ#Øð �&ÑÜ,¨V¸1È	ÔRÐRð —Z‘Z 	Ó*€GÙÜ,¨W¸AÈÔSÐSð —j‘j Ó,€HÙ”J˜x¬Ô.Ü,¨X¸QÈ)ÔTÐTð —J‘J˜x¨Ó,€FÜ�&œ$ÔØ &§
¡
¨9Ó 5ˆÙÜ0°ÀqÐT]Ô^Ð^ð —z‘z +¨rÓ2€IÙ”S˜“^ aÒ'Ø )¨!¡ˆÜ,¨^À1ÐPYÔZÐZàr   N)r   é
   )rC   )r   Útypingr   r   Úpydanticr   Ú8litellm.litellm_core_utils.prompt_templates.common_utilsr   Ú)litellm.llms.base_llm.chat.transformationr   Úlitellm.types.llms.openair   r
   Úlistr   r+   r   r   r5   rB   © r   r   ú<module>rK      s•   ðñ÷ å õõ GÝ 6ô
Ðô 
ð )¨Ð.>Ñ)?ð )ÀCó )ñ@ ¨4°°S°©>ð  À#ð  ÐVYð  Ðcfó  ñ<1°$°s¸C°x±.ð 1ÈSð 1ÐZ]ô 1r   