
    ie9                        d Z ddlZddlmZmZ ddlZddlmZ ddlm	Z	m
Z
mZmZmZ  G d dee      Z G d d	ee      Ze G d
 d             Ze G d d             Ze G d d             Ze G d d             Zeeee   ee
ee	f      f   Ze G d d             Zdddee   dedefdZdedee   fdZdedefdZy)z>Core message abstractions used across providers and executors.    N)	dataclassfield)Enum)AnyDictListOptionalUnionc                        e Zd ZdZdZdZdZdZy)MessageRolez1Unified message roles for internal conversations.systemuser	assistanttoolN)__name__
__module____qualname____doc__SYSTEMUSER	ASSISTANTTOOL     </Users/bowang/.openclaw/workspace/ChatDev/entity/messages.pyr   r   
   s    ;FDIDr   r   c                   B    e Zd ZdZdZdZdZdZdZdZ	e
ded	d fd
       Zy)MessageBlockTypez5Supported block types for multimodal message content.textimageaudiovideofiledata	mime_typereturnc                    |st         j                  S |j                  d      rt         j                  S |j                  d      rt         j                  S |j                  d      rt         j
                  S t         j                  S )z Guess block type from MIME type.zimage/zaudio/zvideo/)r   FILE
startswithIMAGEAUDIOVIDEO)clsr$   s     r   from_mime_typezMessageBlockType.from_mime_type   sm     #((()#))))#))))#)))$$$r   N)r   r   r   r   TEXTr)   r*   r+   r'   DATAclassmethodstrr-   r   r   r   r   r      sD    ?DEEEDD
%s 
%/A 
% 
%r   r   c                      e Zd ZU dZeed<   dZee   ed<   dZee   ed<   dZ	ee
   ed<   dZee   ed<   dZee   ed<   dZee   ed	<   dZee   ed
<    ee      Zeeef   ed<   ddedeeef   fdZedeeef   dd fd       ZddZy)AttachmentRefz@Metadata for a payload stored locally or uploaded to a provider.attachment_idNr$   namesizesha256
local_pathremote_file_iddata_uridefault_factorymetadatainclude_datar%   c           
         | j                   | j                  | j                  | j                  | j                  | j
                  | j                  t        | j                        d}|r| j                  r| j                  |d<   n| j                  r|sd|d<   |j                         D ci c]  \  }}|	|i k7  s|| c}}S c c}}w )N)r4   r$   r5   r6   r7   r8   r9   r=   r:   z	[omitted])r4   r$   r5   r6   r7   r8   r9   dictr=   r:   items)selfr>   payloadkeyvalues        r   to_dictzAttachmentRef.to_dict9   s    !//IIIIkk//"11T]]+	#
 DMM"&--GJ]]<"-GJ-4]]_b_zsE@QV[_aVaU
_bbbs   )
C4C:Cr#   c                 <    | |j                  dd      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      |j                  d
      xs i 	      S )Nr4    r$   r5   r6   r7   r8   r9   r:   r=   	r4   r$   r5   r6   r7   r8   r9   r:   r=   )get)r,   r#   s     r   	from_dictzAttachmentRef.from_dictK   s    ((?B7hh{+&!&!88H%xx-88$45XXj)XXj)/R

 
	
r   c                     t        | j                  | j                  | j                  | j                  | j
                  | j                  | j                  | j                  t        | j                        	      S )NrI   )r3   r4   r$   r5   r6   r7   r8   r9   r:   r@   r=   rB   s    r   copyzAttachmentRef.copyY   sW    ,,nn;;..]]$--(

 
	
r   T)r%   r3   )r   r   r   r   r1   __annotations__r$   r	   r5   r6   intr7   r8   r9   r:   r   r@   r=   r   r   boolrF   r0   rK   rN   r   r   r   r3   r3   +   s    J#Ix}#D(3-D(3- FHSM  $J$$(NHSM("Hhsm"$T:Hd38n:cD cDcN c$ 
T#s(^ 
 
 

r   r3   c                       e Zd ZU dZeed<   dZee   ed<   dZ	ee
   ed<    ee      Zeeef   ed<   dded	eeef   fd
Zedeeef   d	d fd       Zeded	d fd       Zd	efdZddZy)MessageBlockz#Single block of multimodal content.typeNr   
attachmentr;   r#   r>   r%   c                     d| j                   j                  i}| j                  | j                  |d<   | j                  r| j                  j	                  |      |d<   | j
                  r| j
                  |d<   |S )NrU   r   r>   rV   r#   )rU   rE   r   rV   rF   r#   )rB   r>   rC   s      r   rF   zMessageBlock.to_dictp   sk    DIIOO#
 99 "iiGFO??$(OO$;$;$;$VGL!99"iiGFOr   c                 ~   |j                  d      xs t        j                  j                  }	 t        |      }|j                  d      }d }t        |t              rt        j                  |      } | ||j                  d      ||j                  d      xs i       S # t        $ r t        j
                  }Y w xY w)NrU   rV   r   r#   rU   r   rV   r#   )
rJ   r   r.   rE   
ValueErrorr/   
isinstancer@   r3   rK   )r,   r#   raw_type
block_typeattachment_datarV   s         r   rK   zMessageBlock.from_dict|   s    88F#B'7'<'<'B'B	/)(3J ((<0
ot,&00AJ&!!&!'R	
 	
  	/)..J	/s   B   B<;B<c                 2     | t         j                  |      S )N)rU   r   )r   r.   )r,   r   s     r   
text_blockzMessageBlock.text_block   s    (--D99r   c                    | j                   t        j                  u r| j                  r| j                  S | j                  rK| j                  j
                  xs | j                  j                  }d| j                   j                   d| dS | j                  r| j                  S d| j                  v rt        | j                  d         S d| j                   j                   dS )z#Human-friendly summary for logging.[z attachment: ]r   z block])
rU   r   r.   r   rV   r5   r4   rE   r#   r1   )rB   r5   s     r   describezMessageBlock.describe   s    99(---$))99????''H4??+H+HDtyy'}TF!<<9999TYYtyy())499??#7++r   c                     t        | j                  | j                  | j                  r| j                  j	                         nd t        | j                              S )NrZ   )rT   rU   r   rV   rN   r@   r#   rM   s    r   rN   zMessageBlock.copy   s@    15t++-ddii	
 	
r   rO   )r%   rT   )r   r   r   r   r   rP   r   r	   r1   rV   r3   r   r@   r#   r   r   rR   rF   r0   rK   ra   re   rN   r   r   r   rT   rT   g   s    -
D(3-*.J'. 6D$sCx.6
D 
DcN 
 
T#s(^ 
 
 
" :c :n : :,# ,
r   rT   c                   z    e Zd ZU dZeed<   eed<   eed<   dZeed<    ee      Z	e
eef   ed<   d	e
eef   fd
Zy)ToolCallPayloadz.Unified representation of a tool call request.idfunction_name	argumentsfunctionrU   r;   r=   r%   c                 d    | j                   | j                  | j                  | j                  ddS )z$Convert to OpenAI-compatible schema.)r5   rk   )ri   rU   rl   )ri   rU   rj   rk   rM   s    r   to_openai_dictzToolCallPayload.to_openai_dict   s1     ''II**!^^
 	
r   N)r   r   r   r   r1   rP   rU   r   r@   r=   r   r   rn   r   r   r   rh   rh      sJ    8GND#$T:Hd38n:	
S#X 	
r   rh   c                       e Zd ZU dZeed<   dZee   ed<    ee	      Z
ee   ed<   dZee   ed<    ee      Zeeef   ed<   ed	efd
       Zdded	eeef   fdZd	efdZd	efdZy)FunctionCallOutputEventz9Structured event recorded when a tool execution finishes.call_idNrj   r;   output_blocksoutput_textr=   r%   c                      y)Nfunction_call_outputr   rM   s    r   rU   zFunctionCallOutputEvent.type   s    %r   r>   c                 V   | j                   | j                  d}| j                  r| j                  |d<   | j                  r-| j                  D cg c]  }|j	                  |       c}|d<   | j
                  | j
                  |d<   | j                  r| j                  |d<   |S c c}w )N)rU   rq   rj   rX   rr   outputr=   )rU   rq   rj   rr   rF   rs   r=   )rB   r>   rC   blocks       r   rF   zFunctionCallOutputEvent.to_dict   s    II||#
 '+'9'9GO$FJFXFX(FXU<8FX(GO$ ' $ 0 0GH=="&--GJ(s   B&c                 ,    t        | j                        S N)rR   rr   rM   s    r   
has_blocksz"FunctionCallOutputEvent.has_blocks   s    D&&''r   c                     | j                   r| j                   S | j                  rB| j                  D cg c]  }|j                          }}dj                  t	        d |            S yc c}w )N
rH   )rs   rr   re   joinfilter)rB   rx   descriptionss      r   re   z FunctionCallOutputEvent.describe   sb    ###:>:L:LM:LENN,:LLM99VD,788 Ns   A(rO   )r   r   r   r   r1   rP   rj   r	   r   listrr   r   rT   rs   r@   r=   r   r   propertyrU   rR   rF   r{   re   r   r   r   rp   rp      s    CL#'M8C='(-d(CM4%C!%K#%$T:Hd38n:&c & &D DcN "(D (# r   rp   c                   8   e Zd ZU dZeed<   eed<   dZee	   ed<   dZ
ee	   ed<    ee      Zee	ef   ed<    ee      Zee   ed	<   d
Zeed<   d
Zeed<   dedd fdZdedd fdZde	fdZdee   fdZddZddedee	ef   fdZedee	ef   dd fd       Zy)Messagez<Unified message structure shared by executors and providers.rolecontentNr5   tool_call_idr;   r=   
tool_callsFkeeppreserve_roler%   c           
          t        | j                  || j                  | j                  t	        | j
                        t        | j                        | j                  | j                        S )z+Return a shallow copy with updated content.r   r   r5   r   r=   r   r   r   )
r   r   r5   r   r@   r=   r   r   r   r   )rB   r   s     r   with_contentzMessage.with_content   sQ    **$--(DOO,,,	
 		
r   c           
          t        || j                  | j                  | j                  t	        | j
                        t        | j                        | j                  | j                        S )z(Return a shallow copy with updated role.r   )
r   r   r5   r   r@   r=   r   r   r   r   )rB   r   s     r   	with_rolezMessage.with_role  sQ    LL**$--(DOO,,,	
 		
r   c                     | j                   yt        | j                   t              r| j                   S g }| j                         D ]&  }|j	                         }|s|j                  |       ( dj                  |      S )z1Best-effort string representation of the content.rH   r}   )r   r\   r1   blocksre   appendr~   )rB   partsrx   descriptions       r   text_contentzMessage.text_content  sh    <<dllC(<<[[]E..*K[) # yyr   c                 J   | j                   g S t        | j                   t              r t        j	                  | j                         gS g }| j                   D ]Z  }t        |t              r|j                  |       %t        |t              s6	 |j                  t        j                  |             \ |S # t        $ rc t        |t              r|j                  d      nd}|j                  t        t        j                  |t        |t              r|ni              Y w xY w)z/Return content as a list of MessageBlock items.Nr   )r   r#   )r   r\   r1   rT   ra   r   r@   rK   	ExceptionrJ   r   r/   )rB   r   rx   
text_values       r   r   zMessage.blocks!  s    <<IdllC( ++DLL9::%'\\E%.e$E4(GMM,"8"8"?@ " 	 ! G6@6M6!2SWJMM,/?/D/D:eopuw{e|\a  CE  #F  GGs   $B66A)D"!D"c           
          t        | j                  t        | j                        | j                  | j
                  t        | j                        t        | j                        | j                  | j                        S )z4Deep copy of the message, preserving content blocks.r   )r   r   _copy_contentr   r5   r   r@   r=   r   r   r   r   rM   s    r   clonezMessage.clone4  sZ    !$,,/**$--(DOO,,,	
 		
r   r>   c                    d| j                   j                  i}t        | j                  t              r@| j                  D cg c]&  }t        |t
              r|j                  |      n|( c}|d<   n| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r| j                  |d<   | j                  r+| j                  D cg c]  }|j                          c}|d<   | j                  r| j                  |d<   | j                  r| j                  |d	<   |S c c}w c c}w )
z*Return a JSON-serializable representation.r   rX   r   r5   r   r=   r   r   r   )r   rE   r\   r   r   rT   rF   r5   r   r=   r   rn   r   r   )rB   r>   rC   rx   calls        r   rF   zMessage.to_dictA  s4    DIIOO
 dllD)tx  uA  uA" uAkpJul<[<8aff  uA"GI "&GI99"iiGFO&*&7&7GN#=="&--GJ??GK$WtT%8%8%:$WGL!99"iiGFO'+'9'9GO$#" %Xs   +E-Er#   c                 <   |j                  d      }|st        d      t        |      }|j                  d      }t        |t              rcg }|D ]Z  }t        |t
              r|j                  |       %t        |t              s6	 |j                  t
        j                  |             \ |}|j                  d      xs g }g }|D ]  }	t        |	t              s|	j                  di       xs i }
|	j                  d      xs i }|j                  t        |	j                  dd	      |
j                  d
d	      |
j                  dd	      |	j                  dd      |               | |||j                  d
      |j                  d      |j                  d      xs i |t        |j                  dd            t        |j                  dd                  S # t        $ r8 |j                  t        t        j                  t        |      |             Y w xY w)Nr   zmessage dict missing roler   )rU   r   r#   r   rl   r=   ri   rH   r5   rk   rU   )ri   rj   rk   rU   r=   r   r   Fr   r   )rJ   r[   r   r\   r   rT   r   r@   rK   r   r   r/   r1   rh   rR   )r,   r#   
role_valuer   r   	convertedrx   tool_calls_datar   itemfnr=   s               r   rK   zMessage.from_dictZ  s   XXf%
899:&((9%gt$,.I e\2$$U+t,
!(()?)?)FG !  G((<06B,.
#DdD)*b)/RBxx
+1rHxxb)"$&&"4 ff["5&*5% $ &!.1XXj)/R!dhhvu-.txx?@	
 		
5 % !(((%5%:%:%(Z%*s   $G=HH)r%   r   rO   ) r   r   r   r   r   rP   MessageContentr5   r	   r1   r   r   r@   r=   r   r   r   r   r   rh   r   rR   r   r   r   r   rT   r   r   rF   r0   rK   r   r   r   r   r      s    F
D(3-"&L(3-&$T:Hd38n:(-d(CJ_%CD$M4
N 
y 

k 
i 
 c  \* &
D DcN 2 1
T#s(^ 1
	 1
 1
r   r   TrX   messagesr>   r%   c                v    t        j                  | D cg c]  }|j                  |       c}d      S c c}w )z(Serialize message list into JSON string.rX   F)ensure_ascii)jsondumpsrF   )r   r>   msgs      r   serialize_messagesr     s1    ::R#s{{{=RafggRs   6rC   c                     | sg S t        j                  |       }t        |t              st	        d      |D cg c](  }t        |t
              st        j                  |      * c}S c c}w )z)Deserialize JSON string back to messages.zmessage payload must be a list)r   loadsr\   r   r[   r@   r   rK   )rC   rawr   s      r   deserialize_messagesr     sZ    	
**W
Cc4 9::03Nz$7MGd#NNNs   A)A)r   c                     | y t        | t              r| S g }| D ]V  }t        |t              r |j                  |j	                                3|j                  t	        j
                  |             X |S rz   )r\   r1   rT   r   rN   deepcopy)r   copiedrx   s      r   r   r     s`    '3Fe\*MM%**,'MM$--./	 
 Mr   )r   rN   dataclassesr   r   r   enumr   typingr   r   r   r	   r
   r1   r   r   r3   rT   rh   rp   r   r   rR   r   r   r   r   r   r   <module>r      s6   D  (   3 3#t %sD %0 8
 8
 8
v =
 =
 =
@ 
 
 
* ' ' 'T sD.T#s(^0DDE _
 _
 _
D IM hg h hQT h
O# O$w- O> n r   