
    bi                    `    d Z ddlmZ ddlZddlZddlmZ ddZddZddZ	ddZ
dd	Zdd
Zy)z%Message serialization for Google ADK.    )annotationsN)Anyc                    | g S t        | d      r| j                  }nt        | t              r| }nt	        |       gS |D cg c]  }|t	        |       c}S c c}w )z8Convert ADK Content/Part objects to serializable format.parts)hasattrr   
isinstancelist_serialize_part)contentr   parts      u/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/langsmith/integrations/google_adk/_messages.py convert_adk_content_to_langsmithr   
   sZ    	w 	GT	"()).3Hdt7GOD!HHHs   A	Ac           	        t        | t              r| S t        | d      r| j                  rut	        | j                  dd      }t	        | j                  dd      }|Et        |t
              r$t        j                  |      j                  d      n
t        |      }d||dS t        | d	      r<| j                  r0d
t	        | j                  dd      t	        | j                  dd      dS t        | d      rA| j                  r5| j                  }dt	        |dd      t        t	        |dd      xs i       dS t        | d      r=| j                  r1| j                  }dt	        |dd      t        t	        |dd            dS t        | d      r$| j                  dt        | j                        dS t        | d      r4| j                  r(| j                  }dt	        |dd      t	        |dd      dS t        | d      r4| j                   r(| j                   }dt	        |d d      t	        |d!d      d"S t        | d#      r$| j"                  d$t        | j"                        d%S t        |       S )&zSerialize a single Part.inline_datadataN	mime_typezapplication/octet-streamutf-8image)typer   r   	file_datafilefile_uri)r   r   r   function_calltool_usenameunknownargs)r   r   inputfunction_responsetool_resultresponse)r   r   r   text)r   r"   executable_codelanguagepythoncode )r   r$   r&   code_execution_resultoutcomeoutput)r   r)   r*   thoughtthinking)r   r,   )r   dictr   r   getattrbytesbase64	b64encodedecodestrr   r   r   _safe_serializer"   r#   r(   r+   )r   r   r   encodedfcfrr&   results           r   r
   r
      sM   $t]#(8(8t''6D,,k;UV	 dE*   &--g6Y 
 $W9MMt[!dnn
DA dC
 	
 t_%$*<*<B	2'"fd39r:
 	
 t()d.D.D##!B	2&wr:t'DE
 	
 tV!6DII77t&'D,@,@##%j(;D&"-
 	
 t,-$2L2L+++vy)<fh3
 	
 tYDLL$<"DLL0ABB4      c                   |  t        | t        t        t        t        f      r| S t        | t
              r$t        j                  |       j                  d      S t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t        t        f      r| D cg c]  }t        |       c}S t        | d      r	 | j                         S t        | d      r8	 | j"                  j                         D ci c]  \  }}|t        |       c}}S t        |       S c c}}w c c}w # t         $ r Y ew xY wc c}}w # t         $ r Y t        |       S w xY w)z5Safely serialize an object to JSON-compatible format.r   
model_dump__dict__)r   r3   intfloatboolr/   r0   r1   r2   r-   itemsr4   r	   tupler   r;   	Exceptionr<   )objkvitems       r   r4   r4   W   s7   
{jsC&=>
#u$++G44#t25))+>$!Q?1%%>>#e}%256$%66sL!	>>## sJ	69ll6H6H6JKdaAq))KK s8O ?6  		 L 	s8O	sB   <D10D7D< /E E"E <	EEE 	E'&E'c                   g }t        | dd      }|s|S |D ]  }t        |dd      }|dk(  rd}t        |      }g g g }}}|D ]  }	|	j                  d      }
|
dk(  r"|j                  |	j                  dd	             ;|
d
k(  r|j                  |	       R|
dk(  r|j                  |	       i|j                  t	        |	              |r|dk(  r|j                  d|rdj                  |      ndt        |      D cg c]D  \  }}d| d|j                  dd	      t        j                  |j                  di             ddF c}}d       :|rq|D ]j  }|j                  d      }|j                  d|j                  dd	      t        |t              rt        j                  |      nt	        |xs d	      d       l |j                  ||rdj                  |      nd	d        |S c c}}w )z7Convert LlmRequest to OpenAI-compatible message format.contentsNroleusermodel	assistantr   r"   r'   r   r     call_functionr   r   )r   	arguments)idr   rO   )rI   r   
tool_callsr   tool)rI   r   r   )rI   r   )r.   r   getappendr3   join	enumeratejsondumpsr   r-   )llm_requestmessagesrH   r   rI   r   
text_partsrR   tool_resultsr   titctrcs                  r   convert_llm_request_to_messagesrc   n   s   %'H{J5H 7w/7?D09/12rJ
 		-D AF{!!$((62"67j!!$'m###D)!!#d),		- $+-OO'7Asxx
3t &/z%:
# "Ar %*!+$.(*vr(:-1ZZw8K-L)
#" " 
FF9% & "vr 2%a. $(::a= b\
 OO 7Asxx
3re7r OC
#s   ;A	G/c                \    t        | dd      }|syt        |      }t        d |D              S )z-Check if LlmResponse contains function calls.r   NFc              3  D   K   | ]  }|j                  d       dk(    yw)r   r   NrT   .0ps     r   	<genexpr>z%has_function_calls.<locals>.<genexpr>   s     :qquuV}
*:    r.   r   any)llm_responser   r   s      r   has_function_callsro      s1    lIt4G,W5E:E:::r9   c                n    t        | dd      xs g D ]!  }t        |      }t        d |D              s! y y)z?Check if LlmRequest contains function responses (tool results).rH   Nc              3  D   K   | ]  }|j                  d       dk(    yw)r   r    Nrf   rg   s     r   rj   z3has_function_response_in_request.<locals>.<genexpr>   s     =!quuV}-=rk   TFrl   )rZ   r   r   s      r    has_function_response_in_requestrr      s?    ;
D9?R 09=u== r9   )r   r   returnlist[dict[str, Any]])r   r   rs   zdict[str, Any])rC   r   rs   r   )rZ   r   rs   rt   )rn   r   rs   r?   )rZ   r   rs   r?   )__doc__
__future__r   r0   rX   typingr   r   r
   r4   rc   ro   rr    r9   r   <module>ry      s6    + "   
I=!@.@F;r9   