o
    î6Wj]J  ã                   @  sž  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZmZmZmZmZ d dl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mZmZm Z  ddlm!Z! ddlm"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z(m)Z)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5 G dd„ dee1 ƒZ6G dd„ dee1 ƒZ7G dd„ dee1 ƒZ8G dd„ dee1 ƒZ9d-d#d$„Z:d%Z;eefZ<e"d&œd.d+d,„Z=dS )/é    )Úannotations)ÚTracebackType)ÚTYPE_CHECKINGÚAnyÚTypeÚGenericÚCallableÚcast)ÚSelfÚIteratorÚ	AwaitableÚAsyncIteratorÚassert_neverN)Ú	BaseModel)ÚToolUseBlock)ÚServerToolUseBlocké   )Ú	TextEventÚCitationEventÚThinkingEventÚInputJsonEventÚSignatureEventÚParsedMessageStopEventÚParsedMessageStreamEventÚParsedContentBlockStopEventé   )ÚRawMessageStreamEvent)Ú	NOT_GIVENÚNotGiven)Úconsume_sync_iteratorÚconsume_async_iterator)ÚbuildÚconstruct_typeÚconstruct_type_unchecked)ÚStreamÚAsyncStream)Úis_givené   )ÚResponseFormatTÚ
parse_text)ÚParsedMessageÚParsedContentBlockc                   @  ó°   e Zd ZU ded< 	 d3d	d
„Zed4dd„ƒZed5dd„ƒZd6dd„Zd7dd„Z	d8dd„Z
d9d d!„Zd:d"d#„Zd;d%d&„Zd<d(d)„Zd:d*d+„Zed;d,d-„ƒZd7d.d/„Zd=d0d1„Zd2S )>ÚMessageStreamúIterator[str]Útext_streamÚ
raw_streamúStream[RawMessageStreamEvent]Úoutput_formatúResponseFormatT | NotGivenÚreturnÚNonec                 C  ó*   || _ |  ¡ | _|  ¡ | _d | _|| _d S ©N)Ú_raw_streamÚ__stream_text__r/   Ú
__stream__Ú	_iteratorÚ&_MessageStream__final_message_snapshotÚ_MessageStream__output_format©Úselfr0   r2   © r@   úp/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/anthropic/lib/streaming/_messages.pyÚ__init__,   ó
   


zMessageStream.__init__úhttpx.Responsec                 C  ó   | j jS r7   ©r8   Úresponse©r?   r@   r@   rA   rG   7   ó   zMessageStream.responseú
str | Nonec                 C  ó   | j j d¡S ©Nz
request-id©rG   ÚheadersÚgetrH   r@   r@   rA   Ú
request_id;   ó   zMessageStream.request_idú)ParsedMessageStreamEvent[ResponseFormatT]c                 C  s
   | j  ¡ S r7   )r;   Ú__next__rH   r@   r@   rA   rS   ?   s   
zMessageStream.__next__ú3Iterator[ParsedMessageStreamEvent[ResponseFormatT]]c                 c  s   � | j D ]}|V  qd S r7   ©r;   ©r?   Úitemr@   r@   rA   Ú__iter__B   s   €
ÿzMessageStream.__iter__r
   c                 C  s   | S r7   r@   rH   r@   r@   rA   Ú	__enter__F   s   zMessageStream.__enter__Úexc_typeútype[BaseException] | NoneÚexcúBaseException | NoneÚexc_tbúTracebackType | Nonec                 C  s   |   ¡  d S r7   ©Úclose©r?   rZ   r\   r^   r@   r@   rA   Ú__exit__I   s   zMessageStream.__exit__c                 C  s   | j  ¡  dS ©zŠ
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N©r8   ra   rH   r@   r@   rA   ra   Q   s   zMessageStream.closeúParsedMessage[ResponseFormatT]c                 C  s   |   ¡  | jdusJ ‚| jS ©zqWaits until the stream has been read to completion and returns
        the accumulated `Message` object.
        N)Ú
until_doner<   rH   r@   r@   rA   Úget_final_messageY   s   zMessageStream.get_final_messageÚstrc                 C  s^   |   ¡ }g }|jD ]}|jdkr| |j¡ q	|s*tdd dd„ |jD ƒ¡› d�ƒ‚d |¡S )úçReturns all `text` content blocks concatenated together.

        > [!NOTE]
        > Currently the API will only respond with a single content block.

        Will raise an error if no `text` content blocks were returned.
        Útextúc.get_final_text() can only be called when the API returns a `text` content block.
The API returned ú,c                 S  ó   g | ]}|j ‘qS r@   ©Útype©Ú.0Úbr@   r@   rA   Ú
<listcomp>q   ó    z0MessageStream.get_final_text.<locals>.<listcomp>úQ content block type(s) that you can access by calling get_final_message().contentÚ ©ri   Úcontentrq   Úappendrl   ÚRuntimeErrorÚjoin©r?   ÚmessageÚtext_blocksÚblockr@   r@   rA   Úget_final_texta   s   

€ÿ
zMessageStream.get_final_textc                 C  s   t | ƒ dS )z)Blocks until the stream has been consumedN)r   rH   r@   r@   rA   rh   v   s   zMessageStream.until_donec                 C  ó   | j d usJ ‚| j S r7   )r<   rH   r@   r@   rA   Úcurrent_message_snapshot{   ó   z&MessageStream.current_message_snapshotc                 c  sD   � | j D ]}t|| j| jd�| _t|| jd�}|D ]}|V  qqd S ©N)ÚeventÚcurrent_snapshotr2   )r‡   Úmessage_snapshot)r8   Úaccumulate_eventr<   r=   Úbuild_eventsr„   ©r?   Ú	sse_eventÚevents_to_firer‡   r@   r@   rA   r:   €   s   €
ýÿøzMessageStream.__stream__c                 c  s0   � | D ]}|j dkr|jj dkr|jjV  qd S ©NÚcontent_block_deltaÚ
text_delta©rq   Údeltarl   ©r?   Úchunkr@   r@   rA   r9   Œ   s   €
€þzMessageStream.__stream_text__N)r0   r1   r2   r3   r4   r5   ©r4   rD   ©r4   rJ   ©r4   rR   )r4   rT   ©r4   r
   ©rZ   r[   r\   r]   r^   r_   r4   r5   ©r4   r5   ©r4   rf   ©r4   rj   )r4   r.   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__rB   ÚpropertyrG   rP   rS   rX   rY   rc   ra   ri   r‚   rh   r„   r:   r9   r@   r@   r@   rA   r-   !   ó(   
 
	








r-   c                   @  s.   e Zd ZdZddd	„Zddd„Zddd„ZdS )ÚMessageStreamManagerz°Wrapper over MessageStream that is returned by `.stream()`.

    ```py
    with client.messages.stream(...) as stream:
        for chunk in stream:
            ...
    ```
    Úapi_requestú+Callable[[], Stream[RawMessageStreamEvent]]r2   r3   r4   r5   c                C  ó   d | _ || _|| _d S r7   )Ú_MessageStreamManager__streamÚ"_MessageStreamManager__api_requestÚ$_MessageStreamManager__output_format©r?   r¥   r2   r@   r@   rA   rB   œ   ó   
zMessageStreamManager.__init__úMessageStream[ResponseFormatT]c                 C  s   |   ¡ }t|| jd�| _| jS ©N©r2   )r©   r-   rª   r¨   ©r?   r0   r@   r@   rA   rY   ¦   s   zMessageStreamManager.__enter__rZ   r[   r\   r]   r^   r_   c                 C  s   | j d ur| j  ¡  d S d S r7   )r¨   ra   rb   r@   r@   rA   rc   «   s   
ÿzMessageStreamManager.__exit__N)r¥   r¦   r2   r3   r4   r5   )r4   r­   rš   )rž   rŸ   r    Ú__doc__rB   rY   rc   r@   r@   r@   rA   r¤   ’   s
    
	

r¤   c                   @  r,   )>ÚAsyncMessageStreamúAsyncIterator[str]r/   r0   ú"AsyncStream[RawMessageStreamEvent]r2   r3   r4   r5   c                 C  r6   r7   )r8   r9   r/   r:   r;   Ú+_AsyncMessageStream__final_message_snapshotÚ"_AsyncMessageStream__output_formatr>   r@   r@   rA   rB   À   rC   zAsyncMessageStream.__init__rD   c                 C  rE   r7   rF   rH   r@   r@   rA   rG   Ë   rI   zAsyncMessageStream.responserJ   c                 C  rK   rL   rM   rH   r@   r@   rA   rP   Ï   rQ   zAsyncMessageStream.request_idrR   c                 Ã  s   �| j  ¡ I d H S r7   )r;   Ú	__anext__rH   r@   r@   rA   r·   Ó   s   €zAsyncMessageStream.__anext__ú8AsyncIterator[ParsedMessageStreamEvent[ResponseFormatT]]c                 C s"   �| j 2 z	3 d H W }|V  q6 d S r7   rU   rV   r@   r@   rA   Ú	__aiter__Ö   s   €ÿzAsyncMessageStream.__aiter__r
   c                 Ã  s   �| S r7   r@   rH   r@   r@   rA   Ú
__aenter__Ú   s   €zAsyncMessageStream.__aenter__rZ   r[   r\   r]   r^   r_   c                 Ã  s   �|   ¡ I d H  d S r7   r`   rb   r@   r@   rA   Ú	__aexit__Ý   s   €zAsyncMessageStream.__aexit__c                 Ã  s   �| j  ¡ I dH  dS rd   re   rH   r@   r@   rA   ra   å   s   €zAsyncMessageStream.closerf   c                 Ã  s$   �|   ¡ I dH  | jdusJ ‚| jS rg   )rh   rµ   rH   r@   r@   rA   ri   í   s   €z$AsyncMessageStream.get_final_messagerj   c                 Ã  sf   �|   ¡ I dH }g }|jD ]}|jdkr| |j¡ q|s.tdd dd„ |jD ƒ¡› d�ƒ‚d |¡S )	rk   Nrl   rm   rn   c                 S  ro   r@   rp   rr   r@   r@   rA   ru     rv   z5AsyncMessageStream.get_final_text.<locals>.<listcomp>rw   rx   ry   r~   r@   r@   rA   r‚   õ   s   €

€ÿ
z!AsyncMessageStream.get_final_textc                 Ã  s   �t | ƒI dH  dS )z(Waits until the stream has been consumedN)r    rH   r@   r@   rA   rh   
  s   €zAsyncMessageStream.until_donec                 C  rƒ   r7   )rµ   rH   r@   r@   rA   r„     r…   z+AsyncMessageStream.current_message_snapshotc                 C sN   �| j 2 z3 d H W }t|| j| jd�| _t|| jd�}|D ]}|V  qq6 d S r†   )r8   rŠ   rµ   r¶   r‹   r„   rŒ   r@   r@   rA   r:     s   €ýÿøzAsyncMessageStream.__stream__c                 C s:   �| 2 z3 d H W }|j dkr|jj dkr|jjV  q6 d S r�   r’   r”   r@   r@   rA   r9      s   €
€þz"AsyncMessageStream.__stream_text__N)r0   r´   r2   r3   r4   r5   r–   r—   r˜   )r4   r¸   r™   rš   r›   rœ   r�   )r4   r³   )rž   rŸ   r    r¡   rB   r¢   rG   rP   r·   r¹   rº   r»   ra   ri   r‚   rh   r„   r:   r9   r@   r@   r@   rA   r²   µ   r£   r²   c                   @  s4   e Zd ZdZedœdd	d
„Zddd„Zddd„ZdS )ÚAsyncMessageStreamManagera"  Wrapper over AsyncMessageStream that is returned by `.stream()`
    so that an async context manager can be used without `await`ing the
    original client call.

    ```py
    async with client.messages.stream(...) as stream:
        async for chunk in stream:
            ...
    ```
    r¯   r¥   ú-Awaitable[AsyncStream[RawMessageStreamEvent]]r2   r3   r4   r5   c                C  r§   r7   )Ú"_AsyncMessageStreamManager__streamÚ'_AsyncMessageStreamManager__api_requestÚ)_AsyncMessageStreamManager__output_formatr«   r@   r@   rA   rB   2  r¬   z"AsyncMessageStreamManager.__init__ú#AsyncMessageStream[ResponseFormatT]c                 Ã  s$   �| j I d H }t|| jd�| _| jS r®   )r¿   r²   rÀ   r¾   r°   r@   r@   rA   rº   <  s   €z$AsyncMessageStreamManager.__aenter__rZ   r[   r\   r]   r^   r_   c                 Ã  s$   �| j d ur| j  ¡ I d H  d S d S r7   )r¾   ra   rb   r@   r@   rA   r»   A  s   €
ÿz#AsyncMessageStreamManager.__aexit__N)r¥   r½   r2   r3   r4   r5   )r4   rÁ   rš   )rž   rŸ   r    r±   r   rB   rº   r»   r@   r@   r@   rA   r¼   &  s    ü

r¼   r‡   r   r‰   rf   r4   ú/list[ParsedMessageStreamEvent[ResponseFormatT]]c                 C  sø  g }| j dkr| | ¡ |S | j dkr| | ¡ |S | j dkr-| ttt d|d�¡ |S | j dkr9| | ¡ |S | j dkrÙ| | ¡ |j| j }| jj dkrd|j dkrb| ttd| jj	|j	d	�¡ |S | jj d
kr|j dkr}| tt
d| jj|jd�¡ |S | jj dkrœ|j dkrš| ttd| jj|jp–g d�¡ |S | jj dkr·|j dkrµ| ttd| jj|jd�¡ |S | jj dkrÐ|j dkrÍ| ttd|jd�¡ 	 |S tr×t| jƒ |S | j dkrô|j| j }ttd| j|d�}| |¡ |S trút| ƒ |S )NÚmessage_startÚmessage_deltaÚmessage_stop)rq   r   Úcontent_block_startr�   r‘   rl   )rq   rl   ÚsnapshotÚinput_json_deltaÚtool_useÚ
input_json)rq   Úpartial_jsonrÇ   Úcitations_deltaÚcitation)rq   rÍ   rÇ   Úthinking_deltaÚthinking)rq   rÏ   rÇ   Úsignature_deltaÚ	signature)rq   rÑ   Úcontent_block_stop)rq   ÚindexÚcontent_block)rq   r{   r!   r   r(   rz   rÓ   r“   r   rl   r   rË   Úinputr   rÍ   Ú	citationsr   rÏ   r   rÑ   r   r   r   )r‡   r‰   rŽ   rÔ   Úevent_to_firer@   r@   rA   r‹   K  s²   

S
®
Q
°ÿO
´
K
¶

üÿDÄ
üÿ:Î
üÿ0Ø
üÿ&â
ýÿî

ðü
ýr‹   Ú
__json_bufr¯   rˆ   ú%ParsedMessage[ResponseFormatT] | Noner2   r3   c              	   C  s  t tt| ƒtƒs*tttttt tƒ| d�ƒ} t tt| ƒtƒs*td| › dt| ƒ› �ƒ‚|d u rO| jdkrFtt	t
 t	jdi tt| j ¡ ƒ¤ŽƒS td| j› d�ƒ‚| jdkrf|j tttt| j ¡ d�ƒ¡ |S | jdk�r|j| j }| jjd	krˆ|jd
kr†| j| jj7  _|S | jjdkr¼t |tƒrºddlm} ttt|tdƒƒ}|t| jjdƒ7 }|r´||dd�|_t |t|ƒ |S | jjdkrÜ|jd
krÚ|j!sÒ| jj"g|_!|S |j! | jj"¡ |S | jjdkrò|jdkrð| j#| jj#7  _#|S | jjdk�r|jdk�r| jj$|_$|S t%�rt&| jƒ |S | jdk�r0|j| j }|jd
k�r.t'|ƒ�r.t(|j|ƒ|_)|S | jdk�r†| jj*|_*| jj+|_+| jj,d u�rL| jj,|_,| j-j.|j-_.| j-j/d u�r_| j-j/|j-_/| j-j0d u�rl| j-j0|j-_0| j-j1d u�ry| j-j1|j-_1| j-j2d u�r†| j-j2|j-_2|S )N)Útype_Úvaluez;Unexpected event runtime type, after deserialising twice - z - rÃ   zUnexpected event order, got z before "message_start"rÆ   r�   r‘   rl   rÈ   r   )Ú	from_jsonó    zutf-8T)Úpartial_moderÌ   rÎ   rÏ   rÐ   rÒ   rÄ   r@   )3Ú
isinstancer	   r   r   r   r#   r   Ú	TypeErrorrq   r*   r(   Ú	constructr   Úto_dictr|   rz   r{   r"   r+   rÔ   Ú
model_dumprÓ   r“   rl   ÚTRACKS_TOOL_INPUTÚjiterrÜ   ÚbytesÚgetattrÚJSON_BUF_PROPERTYrË   rÕ   ÚsetattrrÖ   rÍ   rÏ   rÑ   r   r   r&   r)   Úparsed_outputÚstop_reasonÚstop_sequenceÚstop_detailsÚusageÚoutput_tokensÚinput_tokensÚcache_creation_input_tokensÚcache_read_input_tokensÚserver_tool_use)r‡   rˆ   r2   rz   rÜ   Újson_bufrÔ   r@   r@   rA   rŠ   ±  s–   þþ
&
þÿ>È
4Í
&Û
"à á
ä
é
ëï


rŠ   )r‡   r   r‰   rf   r4   rÂ   )r‡   r   rˆ   rÙ   r2   r3   r4   rf   )>Ú
__future__r   Útypesr   Útypingr   r   r   r   r   r	   Útyping_extensionsr
   r   r   r   r   ÚhttpxÚpydanticr   Úanthropic.types.tool_use_blockr   Ú%anthropic.types.server_tool_use_blockr   Ú_typesr   r   r   r   r   r   r   r   r   r   r   Ú_utilsr   r    Ú_modelsr!   r"   r#   Ú
_streamingr$   r%   Ú_utils._utilsr&   Ú_parse._responser(   r)   Útypes.parsed_messager*   r+   r-   r¤   r²   r¼   r‹   rè   rä   rŠ   r@   r@   r@   rA   Ú<module>   s8     (
q#q
%^þ
ü