o
    (iI                     @  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@   ^/home/ubuntu/veenaModal/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.
        textc.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 )MessageStreamManagerzWrapper 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pg 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rt| j |S | j dkr|j| j }ttd| j|d}|| |S trt|  |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rt |trd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rz| jj*|_*| jj+|_+| j,j-|j,_-| j,j.d urS| j,j.|j,_.| j,j/d ur`| j,j/|j,_/| j,j0d urm| j,j0|j,_0| j,j1d urz| j,j1|j,_1|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@   )2
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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   
&
<
2
$
 




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
%^
