§
    ÚŽ’jÁ5  ã                   ó  — d Z ddlZddlmZmZ ddlmZ ddlmZ ddlm	Z	m
Z
mZmZ ddlmZ d	d
lmZ d	dlmZ d	dlmZmZmZmZmZ d	dlmZ  G d„ de¦  «        Ze G d„ de¦  «        ¦   «         Ze G d„ d¦  «        ¦   «         ZdS )zThe model response module.é    N)Ú	dataclassÚfield)Údatetime)ÚStrEnum)ÚAnyÚLiteralÚSelfÚListé   )Ú	ChatUsageé   )Ú_generate_id)Ú	DictMixin)Ú	TextBlockÚToolCallBlockÚThinkingBlockÚ	DataBlockÚBase64Source)ÚJSONSerializableObjectc                   ó   — e Zd ZdZdZ	 dZdS )ÚFinishedReasonz*The finished reason of the model response.ÚinterruptedÚ	completedN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚINTERRUPTEDÚ	COMPLETED© ó    úNC:\Projects\DSCons\.venv\Lib\site-packages\agentscope\model\_model_response.pyr   r      s#   € € € € € Ø4Ð4à€KØJà€IØ*Ð*r!   r   c                   óÞ  — e Zd ZU dZeeez  ez  ez           e	d<   	 e
e	d<   	  ee¬¦  «        Zee	d<   	  ed„ ¬¦  «        Zee	d<   	  ed„ ¬¦  «        Zed	         e	d
<   	  ed„ ¬¦  «        Zedz  e	d<   	  ed„ ¬¦  «        Zee	d<   	  ed„ ¬¦  «        Zeeef         e	d<   	 d dededz  defd„Z	 d dededz  dedefd„Zdededededef
d„Z	 d dededededz  def
d„Zd	edefd„Z dS )!ÚChatResponsezThe response of chat models.ÚcontentÚis_last©Údefault_factoryÚidc                  óL   — t          j        ¦   «                              ¦   «         S ©N©r   ÚnowÚ	isoformatr    r!   r"   ú<lambda>zChatResponse.<lambda>/   ó   € µH´L±N´N×4LÒ4LÑ4NÔ4N€ r!   Ú
created_atc                  ó   — dS )NÚchat_responser    r    r!   r"   r/   zChatResponse.<lambda>3   s   €  € r!   r3   Útypec                  ó   — d S r+   r    r    r!   r"   r/   zChatResponse.<lambda>7   ó   € ¸D€ r!   NÚusagec                  ó   — t           j        S r+   )r   r   r    r!   r"   r/   zChatResponse.<lambda>;   s	   € ¥Ô 8€ r!   Úfinished_reasonc                  ó   — i S r+   r    r    r!   r"   r/   zChatResponse.<lambda>A   ó   €  € r!   ÚmetadataÚtextÚblock_idÚreturnc                 ó,  — | j         D ]8}t          |t          ¦  «        r!|�||j        k    r|xj        |z  c_        | c S Œ9t          | j         t
          ¦  «        sJ ‚| j                              t          ||pt          ¦   «         ¬¦  «        ¦  «         | S )z$Append text to the current response.N)r=   r)   )r%   Ú
isinstancer   r)   r=   ÚlistÚappendr   )Úselfr=   r>   Úblocks       r"   Úappend_textzChatResponse.append_textE   s¥   € à”\ð 	ð 	ˆEÝ˜%¥Ñ+Ô+ð ØÐ  H°´Ò$8Ð$8à�
”
˜dÑ"�
”
Ø���øõ ˜$œ,­Ñ-Ô-Ð-Ð-Ð-ØŒ×ÒÝ˜4 HÐ$>µ±´Ð?Ñ?Ô?ñ	
ô 	
ð 	
ð ˆr!   ÚthinkingÚextra_fieldsc                 óä  — | j         D ]e}t          |t          ¦  «        rN|�||j        k    rA|xj        |z  c_        |                     ¦   «         D ]\  }}|�t          |||¦  «         Œ| c S Œft          | j         t          ¦  «        sJ ‚t          ||pt          ¦   «         ¬¦  «        }|                     ¦   «         D ]\  }}|�t          |||¦  «         Œ| j          	                    |¦  «         | S )a�  Append thinking to the current response.

        Args:
            thinking (`str`):
                The thinking content to append.
            block_id (`str | None`, defaults to `None`):
                The id of the ``ThinkingBlock`` to accumulate into. If no
                matching block exists in ``content``, a new one is
                appended.
            **extra_fields (`Any`):
                Additional provider-specific fields to attach to the
                ``ThinkingBlock`` (e.g. Anthropic's ``signature``, OpenAI
                Responses API's ``reasoning_item_id``). Only non-``None``
                values are applied.
        N)rG   r)   )
r%   rA   r   r)   rG   ÚitemsÚsetattrrB   r   rC   )rD   rG   r>   rH   rE   ÚkeyÚvalues          r"   Úappend_thinkingzChatResponse.append_thinkingU   s  € ð* ”\ð 	ð 	ˆEÝ˜%¥Ñ/Ô/ð ØÐ  H°´Ò$8Ð$8à�” (Ñ*�”Ø".×"4Ò"4Ñ"6Ô"6ð 3ð 3‘J�C˜ØÐ(Ý  s¨EÑ2Ô2Ð2øØ���øå˜$œ,­Ñ-Ô-Ð-Ð-Ð-Ý x°HÐ4NÅÁÄÐOÑOÔOˆØ&×,Ò,Ñ.Ô.ð 	+ð 	+‰JˆC�ØÐ Ý˜˜s EÑ*Ô*Ð*øØŒ×Ò˜EÑ"Ô"Ð"Øˆr!   ÚnameÚinputc                 óÆ  — | j         D ]c}t          |t          ¦  «        rL|j        |k    rA|xj        |z  c_        |                     ¦   «         D ]\  }}|�t          |||¦  «         Œ| c S Œdt          |||¬¦  «        }|                     ¦   «         D ]\  }}|�t          |||¦  «         Œt          | j         t          ¦  «        sJ ‚| j                              |¦  «         | S )a±  Append tool call to the current response by tool call block ID.

        Args:
            block_id (`str`):
                The id of the ``ToolCallBlock`` to accumulate into. If no
                matching block exists in ``content``, a new one is
                appended.
            name (`str`):
                The name of the tool being called.
            input (`str`):
                The incremental JSON string arguments to append.
            **extra_fields (`Any`):
                Additional provider-specific fields to attach to the
                ``ToolCallBlock`` (e.g. OpenAI Responses API's
                ``call_id``). Only non-``None`` values are applied.
        N)r)   rO   rP   )	r%   rA   r   r)   rP   rJ   rK   rB   rC   )rD   r>   rO   rP   rH   rE   rL   rM   s           r"   Úappend_tool_callzChatResponse.append_tool_call|   s  € ð. ”\ð 	ð 	ˆEÝ˜%¥Ñ/Ô/ð °E´HÀÒ4HÐ4HØ�”˜uÑ$�”Ø".×"4Ò"4Ñ"6Ô"6ð 3ð 3‘J�C˜ØÐ(Ý  s¨EÑ2Ô2Ð2øØ���øåØØØð
ñ 
ô 
ˆð
 '×,Ò,Ñ.Ô.ð 	+ð 	+‰JˆC�ØÐ Ý˜˜s EÑ*Ô*Ð*øÝ˜$œ,­Ñ-Ô-Ð-Ð-Ð-ØŒ×Ò˜EÑ"Ô"Ð"Øˆr!   ÚdataÚ
media_typec           
      ó2  — | j         D ]°}t          |t          ¦  «        r™|j        |k    rŽt          |j        t
          ¦  «        rt|j        j        |k    rd|j        j        rt          j	        |j        j        ¦  «        nd}t          j
        ||z   ¦  «                             d¦  «        |j        _        | c S Œ±| j                              t          |t          t          j
        |¦  «                             d¦  «        |¬¦  «        |¬¦  «        ¦  «         | S )u  Append raw media bytes to the ``DataBlock`` with the given id.

        The accumulated bytes are stored base64-encoded in
        ``DataBlock.source.data`` (via a :class:`Base64Source`). Callers must
        pass the *incremental* raw media bytes only â€” the method takes care
        of base64 (de)coding internally, so consumers never have to worry
        about base64 padding (``=``) corrupting concatenation.

        .. note::

            Byte-level delta accumulation only has a well-defined semantics
            for streaming media where chunks can be safely concatenated
            (currently ``audio/*``). For non-streamable media types
            (e.g. ``image/*``, ``video/*``) each ``DataBlock`` should be
            treated as a complete file and passed atomically rather than
            accumulated through this method.

        Args:
            block_id (`str`):
                The id of the ``DataBlock`` to accumulate into. If no
                matching block exists in ``content``, a new one is
                appended.
            data (`bytes`):
                The incremental raw media bytes to append.
            media_type (`str`):
                The IANA media type of the raw bytes (e.g. ``audio/pcm``,
                ``audio/wav``). Used both to tag a newly-created block and
                to guard against accidentally mixing bytes from different
                media types under the same id.
            name (`str | None`, defaults to `None`):
                The optional ``name`` field used when a new ``DataBlock``
                needs to be created. Ignored when an existing block with
                ``block_id`` is found.

        Returns:
            `Self`:
                The current ``ChatResponse`` instance for chaining.
        r!   Úascii)rS   rT   )r)   ÚsourcerO   )r%   rA   r   r)   rW   r   rT   rS   Úbase64Ú	b64decodeÚ	b64encodeÚdecoderC   )rD   r>   rS   rT   rO   rE   Ú	old_bytess          r"   Úappend_data_blockzChatResponse.append_data_block§   s,  € ðZ ”\ð 	ð 	ˆEå˜5¥)Ñ,Ô,ðà”H Ò(Ð(Ý˜uœ|­\Ñ:Ô:ð )à”LÔ+¨zÒ9Ð9ð ”|Ô(ð•FÔ$ U¤\Ô%6Ñ7Ô7Ð7àð õ
 %+Ô$4Ø Ñ$ñ%ô %ç’&˜‘/”/ð ”Ô!ð ���øàŒ×ÒÝØÝ#ÝÔ)¨$Ñ/Ô/×6Ò6°wÑ?Ô?Ø)ðñ ô ð ðñ ô ñ		
ô 		
ð 		
ð ˆr!   c                 ó\  — d„ |j         D ¦   «         }| j         D �]F}|j        |v �r9|                     |j        ¦  «        }t          |t          ¦  «        rJ|xj        |j        z  c_        |j        pi                      ¦   «         D ]\  }}|�t          |||¦  «         ŒŒ†t          |t          ¦  «        r|xj
        |j
        z  c_
        Œ±t          |t          ¦  «        rK|xj        |j        z  c_        |j        pi                      ¦   «         D ]\  }}|�t          |||¦  «         Œ�Œt          |t          ¦  «        �rt          |j        t          ¦  «        r4t          |j        t          ¦  «        r|j        j        |j        j        k    s|j        |_        �Œƒ|j        j                             d¦  «        rŽ|j        j        rt'          j        |j        j        ¦  «        nd}|j        j        rt'          j        |j        j        ¦  «        nd}t'          j        ||z   ¦  «                             d¦  «        |j        _        �Œ0|j        j        |j        _        �ŒH|r6| j                              d„ |                     ¦   «         D ¦   «         ¦  «         |j        r|j        | _        | S )z-Append chat response to the current response.c                 ó   — i | ]
}|j         |“ŒS r    )r)   )Ú.0Ú_s     r"   ú
<dictcomp>z5ChatResponse.append_chat_response.<locals>.<dictcomp>ô   s   € ÐAÐAÐA a˜!œ$ ÐAÐAÐAr!   Nzaudio/r!   rV   c              3   óB   K  — | ]}|                      d ¬¦  «        V — ŒdS )T)ÚdeepN)Ú
model_copy)r`   rE   s     r"   ú	<genexpr>z4ChatResponse.append_chat_response.<locals>.<genexpr>5  sG   è è € ð  ð  àð × Ò  dÐ Ñ+Ô+ð ð  ð  ð  ð  ð  r!   )r%   r)   ÚpoprA   r   rG   Úmodel_extrarJ   rK   r   r=   r   rP   r   rW   r   rT   Ú
startswithrS   rX   rY   rZ   r[   ÚextendÚvaluesr7   )	rD   r3   Únew_block_dictrE   Údelta_blockrL   rM   r\   Údelta_bytess	            r"   Úappend_chat_responsez!ChatResponse.append_chat_responseñ   sâ  € ð BÐA¨=Ô+@ÐAÑAÔAˆØ”\ð <	Dñ <	DˆEØŒx˜>Ð)Ñ)Ø,×0Ò0°´Ñ:Ô:�å˜e¥]Ñ3Ô3ð 8DØ�N”N kÔ&:Ñ:�N”Nð (3Ô'>Ð'DÀ"×&KÒ&KÑ&MÔ&Mð 7ð 7™
˜˜UØ Ð,Ý# E¨3°Ñ6Ô6Ð6øð7õ   ¥yÑ1Ô1ð -DØ�J”J +Ô"2Ñ2�J”J�Jå ¥}Ñ5Ô5ð *DØ�K”K ;Ô#4Ñ4�K”Kð (3Ô'>Ð'DÀ"×&KÒ&KÑ&MÔ&Mð 7ð 7™
˜˜UØ Ð,Ý# E¨3°Ñ6Ô6Ð6øñ7õ   ¥yÑ1Ô1ñ !Dõ # 5¤<µÑ>Ô>ðDå& {Ô'9½<ÑHÔHðDð "œLÔ3Ø&Ô-Ô8ò9ð 9ð
 (3Ô'9˜œ™ØœÔ0×;Ò;¸HÑEÔEð Dð  %œ|Ô0ð%�FÔ,¨U¬\Ô->Ñ?Ô?Ð?à!$ð "ð  +Ô1Ô6ð%�FÔ,¨[Ô-?Ô-DÑEÔEÐEà!$ð $õ
 -3Ô,<Ø%¨Ñ3ñ-ô -ç š& ™/œ/ð œÔ)Ñ)ð
 -8Ô,>Ô,C˜œÔ)ùàð 	àŒL×Òð  ð  à+×2Ò2Ñ4Ô4ð ñ  ô  ñ ô ð ð Ôð 	-Ø&Ô,ˆDŒJàˆr!   r+   )!r   r   r   r   r
   r   r   r   r   Ú__annotations__Úboolr   r   r)   Ústrr1   r4   r   r7   r   r9   r   r<   Údictr   r	   rF   r   rN   rR   Úbytesr]   ro   r    r!   r"   r$   r$       s®  € € € € € € à&Ð&à�)˜mÑ+¨mÑ;¸iÑGÔHÐHÐHÑHð,ð €M€M�MðMð ˆe LÐ1Ñ1Ô1€BˆÐ1Ð1Ñ1Ø à�eÐ,NÐ,NÐOÑOÔO€J�ÐOÐOÑOØ'à%* UØ/Ð/ð&ñ &ô &€Dˆ'�/Ô
"ð ð ñ ð Eà#˜e°L°LÐAÑAÔA€Eˆ9�tÑÐAÐAÑAØCà&+ eØ8Ð8ð'ñ 'ô '€O�^ð ð ñ ðð 38°%Ø"˜
ð3ñ 3ô 3€Hˆd�3Ð.Ð.Ô/ð ð ñ ð ,ðð  ð ¨s°T©zð ÀTð ð ð ð ð&  $ð%ð %àð%ð ˜‘*ð%ð ð	%ð
 
ð%ð %ð %ð %ðN)àð)ð ð)ð ð	)ð
 ð)ð 
ð)ð )ð )ð )ð`  ðHð HàðHð ðHð ð	Hð
 �D‰jðHð 
ðHð Hð Hð HðTM°$ð M¸4ð Mð Mð Mð Mð Mð Mr!   r$   c                   ó*  — e Zd ZU dZeed<   	  ee¬¦  «        Ze	ed<   	  ed„ ¬¦  «        Z
e	ed<   	  ed„ ¬¦  «        Zed         ed	<   	  ed
„ ¬¦  «        Zedz  ed<   	  ed„ ¬¦  «        Zee	ef         ed<   	  eej        ¬¦  «        Zeed<   dS )ÚStructuredResponsez'The structured response of chat models.r%   r'   r)   c                  óL   — t          j        ¦   «                              ¦   «         S r+   r,   r    r!   r"   r/   zStructuredResponse.<lambda>K  r0   r!   r1   c                  ó   — dS )NÚstructured_responser    r    r!   r"   r/   zStructuredResponse.<lambda>O  s   € Ð 5€ r!   ry   r4   c                  ó   — d S r+   r    r    r!   r"   r/   zStructuredResponse.<lambda>S  r6   r!   Nr7   c                  ó   — i S r+   r    r    r!   r"   r/   zStructuredResponse.<lambda>W  r;   r!   r<   )Údefaultr9   )r   r   r   r   rs   rp   r   r   r)   rr   r1   r4   r   r7   r   r<   r   r   r   r9   r    r!   r"   rv   rv   A  s3  € € € € € € à1Ð1à€M€M�MØ-àˆe LÐ1Ñ1Ô1€BˆÐ1Ð1Ñ1Ø à�eÐ,NÐ,NÐOÑOÔO€J�ÐOÐOÑOØ'à+0¨5Ø5Ð5ð,ñ ,ô ,€Dˆ'Ð'Ô
(ð ð ñ ð Kà#˜e°L°LÐAÑAÔA€Eˆ9�tÑÐAÐAÑAØCà27°%Ø"˜
ð3ñ 3ô 3€Hˆd�3Ð.Ð.Ô/ð ð ñ ð ,à&+ eØÔ(ð'ñ 'ô '€O�^ð ð ñ ð :Ð9r!   rv   )r   rX   Údataclassesr   r   r   Úenumr   Útypingr   r   r	   r
   Ú_model_usager   Ú_utils._commonr   Ú_utils._mixinr   Úmessager   r   r   r   r   Útypesr   r   r$   rv   r    r!   r"   ú<module>r…      s«  ðà  Ð  Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à #Ð #Ð #Ð #Ð #Ð #Ø )Ð )Ð )Ð )Ð )Ð )Ø %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *ð+ð +ð +ð +ð +�Wñ +ô +ð +ð ð]ð ]ð ]ð ]ð ]�9ñ ]ô ]ñ „ð]ð@	 ð:ð :ð :ð :ð :ñ :ô :ñ „ð:ð :ð :r!   