§
    ÚŽ’j5f  ã                   óœ  — d Z ddlZddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddlmZmZmZ ddlmZ dd	lmZmZmZmZmZmZmZmZmZmZmZmZ dd
lmZm Z  ddl!m"Z" e	rddl#m$Z$ ne
Z$dee         ddfd„Z%dee         ddfd„Z&de'e(z  de(fd„Z) G d„ de¦  «        Z* G d„ de¦  «        Z+	 	 	 	 	 d!de'de'e(eez           z  de,dz  de'dz  de'dz  dedz  de'dz  de+fd„Z-	 	 	 	 	 	 	 d"de'de'e(e         z  de,dz  de'dz  de'dz  dedz  de,dz  de'dz  de*dz  de+fd„Z.	 	 	 	 	 d!de'de'e(e         z  de,dz  de'dz  de'dz  dedz  de'dz  de+fd „Z/dS )#z The message class in agentscope.é    N)Údatetime)ÚLiteralÚListÚoverloadÚSequenceÚSelfÚTYPE_CHECKINGÚAny)Ú	BaseModelÚFieldÚmodel_validatoré   )Ú_generate_idé   )Ú	TextBlockÚThinkingBlockÚ	HintBlockÚ	DataBlockÚBase64SourceÚ	URLSourceÚToolCallBlockÚToolCallStateÚToolResultBlockÚToolResultStateÚContentBlockÚContentBlockTypes)ÚReplyFinishedReasonÚ	ErrorInfo)Úlogger)Ú
AgentEventÚcontentÚreturnc                 ó@   — | D ]}|j         dvrt          d¦  «        ‚ŒdS )z9Assert that the content blocks in user message are valid.)ÚtextÚdataz9User message can only contain text blocks or data blocks.N©ÚtypeÚ
ValueError©r!   Úblocks     úFC:\Projects\DSCons\.venv\Lib\site-packages\agentscope\message\_base.pyÚ_assert_user_content_blocksr,   !   sC   € àð ð ˆØŒ:Ð-Ð-Ð-ÝØKñô ð ð .ðð ó    c                 ó@   — | D ]}|j         dvrt          d¦  «        ‚ŒdS )z;Assert that the content blocks in system message are valid.©r$   z,System message can only contain text blocks.Nr&   r)   s     r+   Ú_assert_system_content_blocksr0   *   sB   € ð ð Mð MˆØŒ:˜XÐ%Ð%ÝÐKÑLÔLÐLð &ðMð Mr-   c                 óR   — t          | t          ¦  «        rt          | ¬¦  «        gS | S )z:Convert a plain string to a single-element TextBlock list.r/   )Ú
isinstanceÚstrr   )r!   s    r+   Ú
_to_blocksr4   3   s-   € å�'�3ÑÔð )Ý˜wÐ'Ñ'Ô'Ð(Ð(Ø€Nr-   c                   ó*   — e Zd ZU dZeed<   	 eed<   dS )ÚUsagez)The token usage information of a message.Úinput_tokensÚoutput_tokensN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚ__annotations__© r-   r+   r6   r6   :   s3   € € € € € € Ø3Ð3àÐÐÑØ%ØÐÐÑØ&Ð&r-   r6   c                   óæ  — e Zd ZU dZeed<   	 ee         ed<   	 ed         ed<   	  e	e
¬¦  «        Zeed<   	  e	e¬¦  «        Zeed<   	  e	d	„ ¬¦  «        Zeed
<   	  e	d¬¦  «        Zedz  ed<   	  e	d¬¦  «        Zedz  ed<   	  e	d¬¦  «        Zedz  ed<   	  e	d¬¦  «        Zedz  ed<   	  e	d¬¦  «        Zedz  ed<   	  ed¬¦  «        defd„¦   «         Z	 d-deee         z  dz  defd„Zd.dededz  fd„Zeded         dee         fd„¦   «         Z eded         dee!         fd„¦   «         Z eded         dee"         fd „¦   «         Z eded!         dee#         fd"„¦   «         Z eded#         dee$         fd$„¦   «         Z e	 d-dddee         fd%„¦   «         Z eded&         dee%         fd'„¦   «         Z 	 d-dee&e         z  dz  de'e         fd(„Z ded)ededz  fd*„Z(d+e)defd,„Z*dS )/ÚMsgzqThe message class in AgentScope, responsible for information storage
    and transmission among different agents.Únamer!   )ÚuserÚ	assistantÚsystemÚrole)Údefault_factoryÚidÚmetadatac                  óL   — t          j        ¦   «                              ¦   «         S ©N)r   ÚnowÚ	isoformatr?   r-   r+   ú<lambda>zMsg.<lambda>[   s   € µH´L±N´N×4LÒ4LÑ4NÔ4N€ r-   Ú
created_atN)ÚdefaultÚusageÚfinished_atÚfinished_reasonÚstructured_outputÚerrorÚafter)Úmoder"   c                 óŽ   — | j         xdk    r t          | j        ¦  «         n"xdk    r t          | j        ¦  «         ndk    r	 | S )z.Validate content blocks according to the role.rC   rE   rD   )rF   r,   r!   r0   )Úselfs    r+   Úvalidate_role_contentzMsg.validate_role_contentt   sT   € ð ŒiØ�’��Ý+¨D¬LÑ9Ô9Ð9Ð9Ø�’��Ý-¨d¬lÑ;Ô;Ð;Ð;Ø’�ØØˆr-   Ú
block_typec                 ó¬   ‡— |€t          | j        ¦  «        dk    S t          |t          ¦  «        r|gn|Št	          ˆfd„| j        D ¦   «         ¦  «        S )a  Check if the message has content blocks of the given type.

        Args:
            block_type (`ContentBlockTypes | list[ContentBlockTypes] | None`,             optional):
                The type of the block to be checked. If `None`, all blocks will
                be checked. If a list is provided, it checks if there are
                blocks of any types in the list.

        Returns:
            `bool`:
                `True` if there are content blocks of the given type, `False`
                otherwise.
        Nr   c              3   ó*   •K  — | ]}|j         ‰v V — Œd S rK   ©r'   )Ú.0ÚbÚtypss     €r+   ú	<genexpr>z)Msg.has_content_blocks.<locals>.<genexpr>–   s)   øè è € Ð8Ð8 a�1”6˜T�>Ð8Ð8Ð8Ð8Ð8Ð8r-   )Úlenr!   r2   r3   Úany)rY   r[   ra   s     @r+   Úhas_content_blockszMsg.has_content_blocks€   s_   ø€ ð$ ÐÝ�t”|Ñ$Ô$ qÒ(Ð(å)¨*µcÑ:Ô:ÐJ�
ˆ|ˆ|À
ˆÝÐ8Ð8Ð8Ð8¨4¬<Ð8Ñ8Ô8Ñ8Ô8Ð8r-   ú
Ú	separatorc                 óV   — d„ | j         D ¦   «         }|r|                     |¦  «        ndS )z.Get the concatenated text from all TextBlocks.c                 ó2   — g | ]}|j         d k    ¯|j        ‘ŒS r/   )r'   r$   ©r_   r`   s     r+   ú
<listcomp>z(Msg.get_text_content.<locals>.<listcomp>š   s&   € ÐEÐEÐE˜q°A´F¸fÒ4DÐ4D�A”FÐ4DÐ4DÐ4Dr-   N)r!   Újoin)rY   rg   Úgathereds      r+   Úget_text_contentzMsg.get_text_content˜   s3   € àEÐE D¤LÐEÑEÔEˆØ+3Ð=ˆy�~Š~˜hÑ'Ô'Ð'¸Ð=r-   r$   c                 ó   — d S rK   r?   ©rY   r[   s     r+   Úget_content_blockszMsg.get_content_blocks�   ó	   € ð
 	ˆr-   Úthinkingc                 ó   — d S rK   r?   rp   s     r+   rq   zMsg.get_content_blocks¤   rr   r-   Ú	tool_callc                 ó   — d S rK   r?   rp   s     r+   rq   zMsg.get_content_blocks«   rr   r-   Útool_resultc                 ó   — d S rK   r?   rp   s     r+   rq   zMsg.get_content_blocks²   rr   r-   r%   c                 ó   — d S rK   r?   rp   s     r+   rq   zMsg.get_content_blocks¹   rr   r-   c                 ó   — d S rK   r?   rp   s     r+   rq   zMsg.get_content_blocksÀ   rr   r-   Úhintc                 ó   — d S rK   r?   rp   s     r+   rq   zMsg.get_content_blocksÇ   rr   r-   c                 ó¨   ‡— | j         pg }t          ‰t          ¦  «        rˆfd„|D ¦   «         }n#t          ‰t          ¦  «        rˆfd„|D ¦   «         }|S )at  Get content blocks, optionally filtered by type.

        Args:
            block_type (`ContentBlockTypes | List[ContentBlockTypes] | None`,             optional):
                The type of the block to be extracted. If `None`, all blocks
                will be returned.

        Returns:
            `List[ContentBlock]`:
                The content blocks.
        c                 ó*   •— g | ]}|j         ‰k    ¯|‘ŒS r?   r^   ©r_   r`   r[   s     €r+   rk   z*Msg.get_content_blocks.<locals>.<listcomp>à   s%   ø€ Ð@Ð@Ð@˜A¨1¬6°ZÒ+?Ð+?�aÐ+?Ð+?Ð+?r-   c                 ó&   •— g | ]}|j         ‰v ¯|‘ŒS r?   r^   r   s     €r+   rk   z*Msg.get_content_blocks.<locals>.<listcomp>â   s%   ø€ Ð@Ð@Ð@˜A¨1¬6°ZÐ+?Ð+?�aÐ+?Ð+?Ð+?r-   )r!   r2   r3   Úlist)rY   r[   Úblockss    ` r+   rq   zMsg.get_content_blocksÎ   sp   ø€ ð  &*¤\Ð%7°RˆÝ�j¥#Ñ&Ô&ð 	AØ@Ð@Ð@Ð@ Ð@Ñ@Ô@ˆFˆFÝ˜
¥DÑ)Ô)ð 	AØ@Ð@Ð@Ð@ Ð@Ñ@Ô@ˆFØˆr-   Úblock_idc                 óN   — | j         D ]}|j        |k    r|j        |k    r|c S ŒdS )z'Find a block in content by type and id.N)r!   r'   rH   )rY   r[   rƒ   r*   s       r+   Ú_find_blockzMsg._find_blockå   s=   € ð ”\ð 	ð 	ˆEØŒz˜ZÒ'Ð'¨E¬H¸Ò,@Ð,@Ø���øØˆtr-   Úeventc           	      ó   — ddl m} |j        | j        k    r-t	          j        d|j        j        |j        | j        ¦  «         | S |j        x|j	        k    r4 |j
        | _        t          |j        ¦  «        | _        |j        | _        �	nx|j        k    r` | j        €"t#          |j        |j        ¬¦  «        | _        �nÐ| j        xj        |j        z  c_        | j        xj        |j        z  c_        �nšx|j        k    r1 | j                             t/          |j        d¬¦  «        ¦  «         �n^xx|j        k    rnx|j        k    rn np  |                      d|j        ¦  «        }|€t	          j        d	|j        ¦  «         �n|j        |j        k    r|xj        |j        z  c_        �ná|j
        |_        �nÓx|j        k    rE | j                             t?          |j        tA          d|j!        ¬
¦  «        ¬¦  «        ¦  «         �nƒxx|j"        k    rnx|j#        k    rn në  |                      d|j        ¦  «        }|€t	          j        d|j        ¦  «         �n-|j        |j"        k    r‚|j$        r{|j%        j$        rtM          j'        |j%        j$        ¦  «        nd}tM          j'        |j$        ¦  «        }tM          j(        ||z   ¦  «         )                    d¦  «        |j%        _$        �n›|j        |j#        k    r|j
        |_        �n}x|j*        k    r1 | j                             tW          |j        d¬¦  «        ¦  «         �nAxx|j,        k    rnx|j-        k    rn np  |                      d|j        ¦  «        }|€t	          j        d|j        ¦  «         �në|j        |j,        k    r|xj.        |j        z  c_.        �nÄ|j
        |_        �n¶x|j/        k    rJ ta          |j        |j%        |j1        ¬¦  «        }|j
        |_        | j                             |¦  «         �nax|j2        k    r7 | j                             tg          |j4        |j5        d¬¦  «        ¦  «         �nxx|j6        k    rnx|j7        k    rn n‡  |                      d|j4        ¦  «        }|€t	          j        d|j4        ¦  «         �nÉ|j        |j6        k    r.tq          |tf          ¦  «        sJ ‚|xj9        |j        z  c_9        �n‹|j
        |_        �n}x|j:        k    rB | j                             tw          |j4        |j5        g tx          j=        ¬¦  «        ¦  «         �n0xx|j>        k    rnx|j?        k    rnx|j@        k    rn �n]  |                      d|j4        ¦  «        }|€t	          j        d|j4        ¦  «         �nÍ|j        |j>        k    rºtq          |tv          ¦  «        sJ ‚tq          |jA        t„          ¦  «        rt/          |jA        ¬¦  «        g|_A        |jA        r|jA        d         j        dk    r/|jA                             t/          |j        ¬¦  «        ¦  «         �n%|jA        d         xj        |j        z  c_        �n|j        |j?        k    rÆtq          |tv          ¦  «        sJ ‚tq          |jA        t„          ¦  «        rt/          |jA        ¬¦  «        g|_A        |j$        �tA          |j$        |j!        ¬
¦  «        n't‡          t…          |jD        ¦  «        |j!        ¬¦  «        }|jA                             t?          |j        |¬¦  «        ¦  «         �n-tq          |tv          ¦  «        sJ ‚|jE        |_E        |jF        |_F        |j
        |_        |                      d|j4        ¦  «        }|�(tq          |tf          ¦  «        sJ ‚tŽ          jH        |_E        �n«x|jI        k    r^ |jJ        D ]S}	|                      d|	j        ¦  «        }
|
�4tq          |
tf          ¦  «        sJ ‚tŽ          jK        |
_E        |	jL        |
_L        ŒT�nBx|jM        k    r~ |jN        D ]t}|                      d|jO        j        ¦  «        }
|
�P|
jE        tŽ          jK        k    r;tq          |
tf          ¦  «        sJ ‚|jP        rtŽ          jQ        ntŽ          jH        |
_E        Œun¹x|jR        k    rQ |jJ        D ]G}	|                      d|	j        ¦  «        }
|
�(tq          |
tf          ¦  «        sJ ‚tŽ          jS        |
_E        ŒHn]|jT        k    rSd„ | j        D ¦   «         }|jU        D ]9}|j        |v rŒ|j        €|j
        |_        | j                             |¦  «         Œ:	 | S )at  Update the message by applying a streaming event.

        Mutates ``self.content``, ``self.finished_at``, and ``self.usage``:
        content blocks are appended/updated by block-level events,
        ``finished_at`` is stamped by ``REPLY_END``, and ``usage`` is
        initialized then accumulated across each ``MODEL_CALL_END``.
        Events whose ``reply_id`` does not match ``self.id`` are skipped with
        a warning. Block-level delta/end events whose target block cannot be
        found are also skipped with a warning.

        Args:
            event (`AgentEvent`):
                The event to apply.
        r   )Ú	EventTypezAEvent %s with reply_id %r does not match message id %r, skipping.N)r7   r8   Ú )rH   r$   r$   z!TextBlock %r not found, skipping.)r%   Ú
media_type)rH   Úsourcer%   z!DataBlock %s not found, skipping.r-   Úascii)rH   rs   rs   z%ThinkingBlock %r not found, skipping.)rH   r‹   r{   )rH   rB   Úinputru   z%ToolCallBlock %r not found, skipping.)rH   rB   ÚoutputÚstaterw   z'ToolResultBlock %r not found, skipping.r/   éÿÿÿÿ)ÚurlrŠ   c                 óF   — h | ]}t          |t          ¦  «        ¯|j        ’ŒS r?   )r2   r   rH   rj   s     r+   ú	<setcomp>z#Msg.append_event.<locals>.<setcomp>ê  s:   € ð  ð  ð  àÝ! !¥_Ñ5Ô5ð Ø”Dð ð  ð  r-   )Vr†   rˆ   Úreply_idrH   r   ÚwarningÚ	__class__r9   r'   Ú	REPLY_ENDrO   rR   r   rS   rU   ÚMODEL_CALL_ENDrQ   r6   r7   r8   ÚTEXT_BLOCK_STARTr!   Úappendr   rƒ   ÚTEXT_BLOCK_DELTAÚTEXT_BLOCK_ENDr…   r$   ÚdeltaÚDATA_BLOCK_STARTr   r   rŠ   ÚDATA_BLOCK_DELTAÚDATA_BLOCK_ENDr%   r‹   Úbase64Ú	b64decodeÚ	b64encodeÚdecodeÚTHINKING_BLOCK_STARTr   ÚTHINKING_BLOCK_DELTAÚTHINKING_BLOCK_ENDrs   Ú
HINT_BLOCKr   r{   ÚTOOL_CALL_STARTr   Útool_call_idÚtool_call_nameÚTOOL_CALL_DELTAÚTOOL_CALL_ENDr2   r�   ÚTOOL_RESULT_STARTr   r   ÚRUNNINGÚTOOL_RESULT_TEXT_DELTAÚTOOL_RESULT_DATA_DELTAÚTOOL_RESULT_ENDrŽ   r3   r   r‘   r�   rI   r   ÚFINISHEDÚREQUIRE_USER_CONFIRMÚ
tool_callsÚASKINGÚsuggested_rulesÚUSER_CONFIRM_RESULTÚconfirm_resultsru   Ú	confirmedÚALLOWEDÚREQUIRE_EXTERNAL_EXECUTIONÚ	SUBMITTEDÚEXTERNAL_EXECUTION_RESULTÚexecution_results)rY   r†   rˆ   r*   ÚexistingÚincomingÚ
hint_blockÚsrcÚ
call_blockru   r`   ÚresultÚexisting_idss                r+   Úappend_eventzMsg.append_eventð   s 
  € ð$ 	&Ð%Ð%Ð%Ð%Ð%àŒ>˜TœWÒ$Ð$ÝŒNðà”Ô(Ø”Ø”ñô ð ð ˆKàŒjØ$�Ô$Ò$Ð$Ð$Ø#(Ô#3�Ô õ (;ØÔ)ñ(ô (�Ô$ð #œ[�”
‘
à)�Ô)Ò)Ð)Ð)Ø”:Ð%Ý!&Ø%*Ô%7Ø&+Ô&9ð"ñ "ô "�D”J‘Jð
 ”JÐ+Ô+¨uÔ/AÑAÐ+Ô+Ø”JÐ,Ô,°Ô0CÑCÐ,Ô,Ñ,à+�Ô+Ò+Ð+Ð+Ø”×#Ò#¥I°´ÀbÐ$IÑ$IÔ$IÑJÔJÐJÑJàFÐ+�Ô+Ò+Ð+Ð+Ð.F¨iÔ.FÒ.FÐ.FÐ.FÐ.FÐ.FÐ.FÐ.FØ×(Ò(¨°´Ñ@Ô@�Ø�=Ý”NØ;Øœñô ð ñ ð ”Z 9Ô#=Ò=Ð=Ø�J”J %¤+Ñ-�J”J‘Jà(-Ô(8�EÔ%Ñ%à+�Ô+Ò+Ð+Ð+Ø”×#Ò#ÝØ œ>Ý+Ø!#Ø',Ô'7ð ñ  ô  ðñ ô ñô ð ñ ð GÐ+�Ô+Ò+Ð+Ð+Ð.F¨iÔ.FÒ.FÐ.FÐ.FÐ.FÐ.FÐ.FÐ.FØ×(Ò(¨°´Ñ@Ô@�Ø�=Ý”NØ;Øœñô ð ñ ð ”Z 9Ô#=Ò=Ð=À%Ä*Ð=ð !œ<Ô,ð!�Ô(¨¬Ô):Ñ;Ô;Ð;à ð õ
  &Ô/°´
Ñ;Ô;�HÝ(.Ô(8Ø  8Ñ+ñ)ô )ç’f˜W‘o”oð ”LÔ%Ñ%ð ”Z 9Ô#;Ò;Ð;Ø(-Ô(8�EÔ%ùà/�Ô/Ò/Ð/Ð/Ø”×#Ò#Ý! U¤^¸bÐAÑAÔAñô ð ñ ð OÐ/�Ô/Ò/Ð/Ð/Ð2N°)Ô2NÒ2NÐ2NÐ2NÐ2NÐ2NÐ2NÐ2NØ×(Ò(¨°U´^ÑDÔD�Ø�=Ý”NØ?Øœñô ð ñ ð ”Z 9Ô#AÒAÐAØ�N”N e¤kÑ1�N”N‘Nà(-Ô(8�EÔ%Ñ%à%�Ô%Ò%Ð%Ð%õ 'Ø”~Ø œ<Øœðñ ô �
ð
 *4Ô)>�
Ô&Ø”×#Ò# JÑ/Ô/Ð/Ñ/à*�Ô*Ò*Ð*Ð*Ø”×#Ò#Ý!Ø Ô-Ø"Ô1Ø ðñ ô ñô ð ñ ð EÐ*�Ô*Ò*Ð*Ð*Ð-D¨YÔ-DÒ-DÐ-DÐ-DÐ-DÐ-DÐ-DÐ-DØ×(Ò(¨°eÔ6HÑIÔI�Ø�=Ý”NØ?ØÔ*ñô ð ñ ð ”Z 9Ô#<Ò<Ð<Ý% e­]Ñ;Ô;Ð;Ð;Ð;Ø�K”K 5¤;Ñ.�K”K‘Kà(-Ô(8�EÔ%Ñ%à,�Ô,Ò,Ð,Ð,Ø”×#Ò#Ý#Ø Ô-Ø"Ô1Ø!Ý-Ô5ð	ñ ô ñô ð ñ ð,Ð0�	Ô0Ò0Ð0Ð0Ø2�)Ô2Ò2Ð2Ð2Ø+�)Ô+Ò+Ð+Ð+Ð+Ñ+Ð+Ð+à×(Ò(¨¸Ô8JÑKÔK�Ø�=Ý”NØAØÔ*ñô ð ñ ð ”Z 9Ô#CÒCÐCÝ% e­_Ñ=Ô=Ð=Ð=Ð=Ý! %¤,µÑ4Ô4ð FÝ(1°u´|Ð(DÑ(DÔ(DÐ'E˜œà œ<ð =¨5¬<¸Ô+;Ô+@ÀFÒ+JÐ+JØœ×+Ò+­I¸5¼;Ð,GÑ,GÔ,GÑHÔHÐHÑHàœ RÔ(Ð-Ô-°´Ñ<Ð-Ô-Ñ-Ø”Z 9Ô#CÒCÐCÝ% e­_Ñ=Ô=Ð=Ð=Ð=Ý! %¤,µÑ4Ô4ð FÝ(1°u´|Ð(DÑ(DÔ(DÐ'E˜œð !œ:Ð1õ	 %Ø!&¤Ø',Ô'7ðñ ô ð õ
 'Ý # E¤I¡¤Ø',Ô'7ðñ ô ð ð ”L×'Ò'Ý! U¤^¸CÐ@Ñ@Ô@ñô ð ñ õ & e­_Ñ=Ô=Ð=Ð=Ð=Ø"'¤+�E”KØ%*¤^�E”NØ(-Ô(8�EÔ%ð
 "&×!1Ò!1Ø#ØÔ*ñ"ô "�Jð "Ð-Ý)¨*µmÑDÔDÐDÐDÐDÝ+8Ô+A˜
Ô(ùà/�Ô/Ò/Ð/Ð/Ø!&Ô!1ð Fð F�IØ×(Ò(¨°i´lÑCÔC�AØ�}Ý)¨!­]Ñ;Ô;Ð;Ð;Ð;å"/Ô"6˜œà,5Ô,E˜Ô)øñFð /�Ô.Ò.Ð.Ð.Ø#Ô3ð ð �FØ×(Ò(¨°fÔ6FÔ6IÑJÔJ�Að �}¨¬µMÔ4HÒ)HÐ)HÝ)¨!­]Ñ;Ô;Ð;Ð;Ð;ð  &Ô/ð8�MÔ1Ð1å!.Ô!7ð œøðð 6�Ô5Ò5Ð5Ð5Ø!&Ô!1ð :ð :�IØ×(Ò(¨°i´lÑCÔC�AØ�}Ý)¨!­]Ñ;Ô;Ð;Ð;Ð;Ý"/Ô"9˜œøð	:ð Ô4Ò4Ð4ð ð  à!œ\ð ñ  ô  �ð
 $Ô5ð 0ð 0�FØ”y LÐ0Ð0Ø ØÔ)Ð1Ø-2Ô-=˜Ô*Ø”L×'Ò'¨Ñ/Ô/Ð/Ð/ð0ð ˆr-   rK   )rf   )+r9   r:   r;   r<   r3   r>   r�   r   r   r   r   rH   ÚdictrI   rO   rQ   r6   rR   rS   r   rT   rU   r   r   r   rZ   r   Úboolre   rn   r   r   rq   r   r   r   r   r   r   r   r…   r    rÇ   r?   r-   r+   rA   rA   C   so  € € € € € € ð0ð 0ð €I€I�IØ!Ø�,ÔÐÐÑØ:Ø
Ð/Ô
0Ð0Ð0Ñ0Ø!Øˆe LÐ1Ñ1Ô1€BˆÐ1Ð1Ñ1Ø!ð �U¨4Ð0Ñ0Ô0€HˆdÐ0Ð0Ñ0Ø%Ø�eÐ,NÐ,NÐOÑOÔO€J�ÐOÐOÑOØ*Ø˜%¨Ð-Ñ-Ô-€Eˆ5�4‰<Ð-Ð-Ñ-Ø4ð $˜e¨DÐ1Ñ1Ô1€K��t‘Ð1Ð1Ñ1Ø*Ø27°%ÀÐ2EÑ2EÔ2E€OÐ(¨4Ñ/ÐEÐEÑEðKà%* U°4Ð%8Ñ%8Ô%8Ð�t˜d‘{Ð8Ð8Ñ8ðð
 $˜e¨DÐ1Ñ1Ô1€Eˆ9�tÑÐ1Ð1Ñ1ð9ð €_˜'Ð"Ñ"Ô"ð	 tð 	ð 	ð 	ñ #Ô"ð	ð JNð9ð 9à%¨Ð->Ô(?Ñ?À$ÑFð9ð 
ð9ð 9ð 9ð 9ð0>ð >¨#ð >¸¸t¹ð >ð >ð >ð >ð
 ðà˜F”Oðð 
ˆiŒðð ð ñ „Xðð ðà˜JÔ'ðð 
ˆmÔ	ðð ð ñ „Xðð ðà˜KÔ(ðð 
ˆmÔ	ðð ð ñ „Xðð ðà˜MÔ*ðð 
ˆoÔ	ðð ð ñ „Xðð ðà˜F”Oðð 
ˆiŒðð ð ñ „Xðð ð  ðð àðð 
ˆlÔ	ðð ð ñ „Xðð ðà˜F”Oðð 
ˆiŒðð ð ñ „Xðð JNðð à%¨Ð->Ô(?Ñ?À$ÑFðð 
�,Ô	ðð ð ð ð.	àð	ð ð	ð 
˜Ñ	ð		ð 	ð 	ð 	ðFàðFð 
ðFð Fð Fð Fð Fð Fr-   rA   rB   rI   rO   rR   rS   rH   c                 óÀ   — |p$t          j        ¦   «                              ¦   «         }|€|}t          | t	          |¦  «        d|pi ||||pt          ¦   «         ¬¦  «        S )a#  Create a user message with role ``"user"``.

    Args:
        name (`str`):
            The name of the sender.
        content (`str | list[TextBlock | DataBlock]`):
            The message content. A plain string will be automatically wrapped
            in a :class:`TextBlock`. Only :class:`TextBlock` and
            :class:`DataBlock` are allowed for user messages.
        metadata (`dict | None`, optional):
            Arbitrary key-value metadata attached to the message. Defaults to
            an empty dict when not provided.
        created_at (`str | None`, optional):
            ISO-format timestamp for when the message was created. Defaults to
            the current time when not provided.
        finished_at (`str | None`, optional):
            ISO-format timestamp for when the message was finished. Defaults to
            the same value as ``created_at`` when not provided.
        finished_reason (`ReplyFinishedReason | None`, optional):
            The reason the message was finished. Defaults to ``None`` when not
            provided.
        id (`str | None`, optional):
            A unique identifier for the message. A random UUID hex string is
            generated when not provided.

    Returns:
        `Msg`:
            A :class:`Msg` instance with ``role="user"``.
    NrC   ©rB   r!   rF   rI   rO   rR   rS   rH   ©r   rL   rM   rA   r4   r   ©rB   r!   rI   rO   rR   rS   rH   s          r+   ÚUserMsgrÎ   ù  sp   € ðL Ð9�xœ|™~œ~×7Ò7Ñ9Ô9€JØÐØ ˆÝØÝ˜7Ñ#Ô#ØØ�˜RØØØ'ØÐ•‘”ð	ñ 	ô 	ð 	r-   rT   rQ   c	                 ó¸   — t          | t          |¦  «        d|pi |p$t          j        ¦   «                              ¦   «         ||||pt          ¦   «         |¬¦
  «
        S )a¿  Create an assistant message with role ``"assistant"``.

    Args:
        name (`str`):
            The name of the sender.
        content (`str | list[ContentBlock]`):
            The message content. A plain string will be automatically wrapped
            in a :class:`TextBlock`. Any :class:`ContentBlock` subtype is
            permitted for assistant messages.
        metadata (`dict | None`, optional):
            Arbitrary key-value metadata attached to the message. Defaults to
            an empty dict when not provided.
        created_at (`str | None`, optional):
            ISO-format timestamp for when the message was created. Defaults to
            the current time when not provided.
        finished_at (`str | None`, optional):
            ISO-format timestamp for when the message was finished. Not set by
            default for assistant messages.
        structured_output (`dict | None`, optional):
            The structured output carried by the assistant message.
        finished_reason (`ReplyFinishedReason | None`, optional):
            The finished reason for the assistant message.
        id (`str | None`, optional):
            A unique identifier for the message. A random UUID hex string is
            generated when not provided.
        usage (`Usage | None`, optional):
            The token usage information of the message.

    Returns:
        `Msg`:
            A :class:`Msg` instance with ``role="assistant"``.
    rD   )
rB   r!   rF   rI   rO   rR   rS   rT   rH   rQ   )rA   r4   r   rL   rM   r   )	rB   r!   rI   rO   rR   rS   rT   rH   rQ   s	            r+   ÚAssistantMsgrÐ   .  sf   € õV ØÝ˜7Ñ#Ô#ØØ�˜RØÐ;¥¤¡¤×!9Ò!9Ñ!;Ô!;ØØ'Ø+ØÐ•‘”Øðñ ô ð r-   c                 óÀ   — |p$t          j        ¦   «                              ¦   «         }|€|}t          | t	          |¦  «        d|pi ||||pt          ¦   «         ¬¦  «        S )aÚ  Create a system message with role ``"system"``.

    Args:
        name (`str`):
            The name of the sender.
        content (`str | list[TextBlock]`):
            The message content. A plain string will be automatically wrapped
            in a :class:`TextBlock`. Only :class:`TextBlock` is allowed for
            system messages.
        metadata (`dict | None`, optional):
            Arbitrary key-value metadata attached to the message. Defaults to
            an empty dict when not provided.
        created_at (`str | None`, optional):
            ISO-format timestamp for when the message was created. Defaults to
            the current time when not provided.
        finished_at (`str | None`, optional):
            ISO-format timestamp for when the message was finished. Defaults to
            the same value as ``created_at`` when not provided.
        finished_reason (`ReplyFinishedReason | None`, optional):
            The finished reason for the system message.
        id (`str | None`, optional):
            A unique identifier for the message. A random UUID hex string is
            generated when not provided.

    Returns:
        `Msg`:
            A :class:`Msg` instance with ``role="system"``.
    NrE   rË   rÌ   rÍ   s          r+   Ú	SystemMsgrÒ   g  sp   € ðJ Ð9�xœ|™~œ~×7Ò7Ñ9Ô9€JØÐØ ˆÝØÝ˜7Ñ#Ô#ØØ�˜RØØØ'ØÐ•‘”ð	ñ 	ô 	ð 	r-   )NNNNN)NNNNNNN)0r<   r¡   r   Útypingr   r   r   r   r   r	   r
   Úpydanticr   r   r   Ú_utils._commonr   Ú_blockr   r   r   r   r   r   r   r   r   r   r   r   Útypesr   r   Ú_loggingr   r†   r    r,   r0   r3   r�   r4   r6   rA   rÈ   rÎ   rÐ   rÒ   r?   r-   r+   ú<module>rÙ      s0  ðà &Ð &Ø €€€Ø Ð Ð Ð Ð Ð Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ Nà 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6à )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 3Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø Ð Ð Ð Ð Ð àð Ø"Ð"Ð"Ð"Ð"Ð"Ð"à€Jð¨°,Ô)?ð ÀDð ð ð ð ðMØ�lÔ#ðMà	ðMð Mð Mð Mð˜˜d™
ð  tð ð ð ð ð'ð 'ð 'ð 'ð 'ˆIñ 'ô 'ð 'ðsð sð sð sð sˆ)ñ sô sð sðr !Ø!Ø"Ø26Øð2ð 2Ø
ð2à�4˜	 IÑ-Ô.Ñ.ð2ð �T‰kð2ð �d‘
ð	2ð
 �t‘ð2ð )¨4Ñ/ð2ð 	ˆd‰
ð2ð 	ð2ð 2ð 2ð 2ðp !Ø!Ø"Ø26Ø%)ØØð6ð 6Ø
ð6à�4˜Ô%Ñ%ð6ð �T‰kð6ð �d‘
ð	6ð
 �t‘ð6ð )¨4Ñ/ð6ð ˜d‘{ð6ð 	ˆd‰
ð6ð �4‰<ð6ð 	ð6ð 6ð 6ð 6ðx !Ø!Ø"Ø26Øð1ð 1Ø
ð1à�4˜	”?Ñ"ð1ð �T‰kð1ð �d‘
ð	1ð
 �t‘ð1ð )¨4Ñ/ð1ð 	ˆd‰
ð1ð 	ð1ð 1ð 1ð 1ð 1ð 1r-   