o
    (i3R                     @  s  d dl m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 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 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'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. d
dl/m0Z0m1Z1 d
dl2m3Z3 d
dl4m5Z5 ddl6m7Z7m8Z8 d
dl9m:Z:m;Z; G dd de	e7 Z<G dd de	e7 Z=G dd de	e7 Z>G dd de	e7 Z?d0d$d%Z@d&ZAeeefZBed'd1d.d/ZCdS )2    )annotationsN)TracebackType)TYPE_CHECKINGAnyTypeGenericCallablecast)SelfIterator	AwaitableAsyncIteratorassert_never)	BaseModel)BetaToolUseBlock)BetaMCPToolUseBlock)BetaServerToolUseBlock   )	NOT_GIVENNotGiven)consume_sync_iteratorconsume_async_iterator)buildconstruct_typeconstruct_type_unchecked   )	BetaCitationEventBetaThinkingEventBetaInputJsonEventBetaSignatureEventBetaCompactionEventParsedBetaTextEventParsedBetaMessageStopEventParsedBetaMessageStreamEventParsedBetaContentBlockStopEvent)StreamAsyncStream)BetaRawMessageStreamEvent)is_given   )ResponseFormatT
parse_text)ParsedBetaMessageParsedBetaContentBlockc                   @     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 )>BetaMessageStreamIterator[str]text_stream
raw_stream!Stream[BetaRawMessageStreamEvent]output_formatResponseFormatT | NotGivenreturnNonec                 C  *   || _ |  | _|  | _d | _|| _d S N)_raw_stream__stream_text__r1   
__stream__	_iterator*_BetaMessageStream__final_message_snapshot!_BetaMessageStream__output_formatselfr2   r4    rB   c/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/anthropic/lib/streaming/_beta_messages.py__init__/   
   


zBetaMessageStream.__init__httpx.Responsec                 C     | j jS r9   r:   responserA   rB   rB   rC   rI   :      zBetaMessageStream.response
str | Nonec                 C     | j jdS Nz
request-idrI   headersgetrJ   rB   rB   rC   
request_id>      zBetaMessageStream.request_id-ParsedBetaMessageStreamEvent[ResponseFormatT]c                 C  s
   | j  S r9   )r=   __next__rJ   rB   rB   rC   rU   B   s   
zBetaMessageStream.__next__7Iterator[ParsedBetaMessageStreamEvent[ResponseFormatT]]c                 c  s    | j D ]}|V  qd S r9   r=   rA   itemrB   rB   rC   __iter__E   s   
zBetaMessageStream.__iter__r
   c                 C  s   | S r9   rB   rJ   rB   rB   rC   	__enter__I   s   zBetaMessageStream.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S r9   closerA   r\   r^   r`   rB   rB   rC   __exit__L   s   zBetaMessageStream.__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r:   rc   rJ   rB   rB   rC   rc   T   s   zBetaMessageStream.close"ParsedBetaMessage[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>   rJ   rB   rB   rC   get_final_message\   s   z#BetaMessageStream.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 rB   type.0brB   rB   rC   
<listcomp>t       z4BetaMessageStream.get_final_text.<locals>.<listcomp>Q content block type(s) that you can access by calling get_final_message().content rk   contentrs   appendrn   RuntimeErrorjoinrA   messagetext_blocksblockrB   rB   rC   get_final_textd   s   


z BetaMessageStream.get_final_textc                 C  s   t |  dS )z)Blocks until the stream has been consumedN)r   rJ   rB   rB   rC   rj   y   s   zBetaMessageStream.until_donec                 C     | j d usJ | j S r9   )r>   rJ   rB   rB   rC   current_message_snapshot~      z*BetaMessageStream.current_message_snapshotc                 c  sL    | j D ]}t|| j| jjj| jd| _t|| jd}|D ]}|V  qqd S N)eventcurrent_snapshotrequest_headersr4   )r   message_snapshot)	r:   accumulate_eventr>   rI   requestrP   r?   build_eventsr   rA   	sse_eventevents_to_firer   rB   rB   rC   r<      s   
zBetaMessageStream.__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rs   deltarn   rA   chunkrB   rB   rC   r;      s   
z!BetaMessageStream.__stream_text__N)r2   r3   r4   r5   r6   r7   r6   rF   r6   rL   r6   rT   )r6   rV   r6   r
   r\   r]   r^   r_   r`   ra   r6   r7   r6   r7   r6   rh   r6   rl   )r6   r0   )__name__
__module____qualname____annotations__rD   propertyrI   rR   rU   rZ   r[   re   rc   rk   r   rj   r   r<   r;   rB   rB   rB   rC   r/   $   (   
 
	








r/   c                   @  s.   e Zd ZdZddd	ZdddZdddZdS )BetaMessageStreamManagerzWrapper over MessageStream that is returned by `.stream()`.

    ```py
    with client.beta.messages.stream(...) as stream:
        for chunk in stream:
            ...
    ```
    api_request/Callable[[], Stream[BetaRawMessageStreamEvent]]r4   r5   r6   r7   c                C     d | _ || _|| _d S r9   )!_BetaMessageStreamManager__stream&_BetaMessageStreamManager__api_request(_BetaMessageStreamManager__output_formatrA   r   r4   rB   rB   rC   rD         
z!BetaMessageStreamManager.__init__"BetaMessageStream[ResponseFormatT]c                 C  s   |   }t|| jd| _| jS Nr4   )r   r/   r   r   rA   r2   rB   rB   rC   r[      s   z"BetaMessageStreamManager.__enter__r\   r]   r^   r_   r`   ra   c                 C  s   | j d ur| j   d S d S r9   )r   rc   rd   rB   rB   rC   re      s   
z!BetaMessageStreamManager.__exit__N)r   r   r4   r5   r6   r7   )r6   r   r   )r   r   r   __doc__rD   r[   re   rB   rB   rB   rC   r      s
    
	

r   c                   @  r.   )>BetaAsyncMessageStreamAsyncIterator[str]r1   r2   &AsyncStream[BetaRawMessageStreamEvent]r4   r5   r6   r7   c                 C  r8   r9   )r:   r;   r1   r<   r=   /_BetaAsyncMessageStream__final_message_snapshot&_BetaAsyncMessageStream__output_formatr@   rB   rB   rC   rD      rE   zBetaAsyncMessageStream.__init__rF   c                 C  rG   r9   rH   rJ   rB   rB   rC   rI      rK   zBetaAsyncMessageStream.responserL   c                 C  rM   rN   rO   rJ   rB   rB   rC   rR      rS   z!BetaAsyncMessageStream.request_idrT   c                   s   | j  I d H S r9   )r=   	__anext__rJ   rB   rB   rC   r      s   z BetaAsyncMessageStream.__anext__<AsyncIterator[ParsedBetaMessageStreamEvent[ResponseFormatT]]c                 C s"   | j 2 z	3 d H W }|V  q6 d S r9   rW   rX   rB   rB   rC   	__aiter__   s   z BetaAsyncMessageStream.__aiter__r
   c                   s   | S r9   rB   rJ   rB   rB   rC   
__aenter__   s   z!BetaAsyncMessageStream.__aenter__r\   r]   r^   r_   r`   ra   c                   s   |   I d H  d S r9   rb   rd   rB   rB   rC   	__aexit__   s   z BetaAsyncMessageStream.__aexit__c                   s   | j  I dH  dS rf   rg   rJ   rB   rB   rC   rc      s   zBetaAsyncMessageStream.closerh   c                   s$   |   I dH  | jdusJ | jS ri   )rj   r   rJ   rB   rB   rC   rk      s   z(BetaAsyncMessageStream.get_final_messagerl   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 )	rm   Nrn   ro   rp   c                 S  rq   rB   rr   rt   rB   rB   rC   rw   	  rx   z9BetaAsyncMessageStream.get_final_text.<locals>.<listcomp>ry   rz   r{   r   rB   rB   rC   r      s   


z%BetaAsyncMessageStream.get_final_textc                   s   t | I dH  dS )z(Waits until the stream has been consumedN)r   rJ   rB   rB   rC   rj     s   z!BetaAsyncMessageStream.until_donec                 C  r   r9   )r   rJ   rB   rB   rC   r     r   z/BetaAsyncMessageStream.current_message_snapshotc                 C sV   | j 2 z#3 d H W }t|| j| jjj| jd| _t|| jd}|D ]}|V  q!q6 d S r   )	r:   r   r   rI   r   rP   r   r   r   r   rB   rB   rC   r<     s   z!BetaAsyncMessageStream.__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   rB   rB   rC   r;   %  s   
z&BetaAsyncMessageStream.__stream_text__N)r2   r   r4   r5   r6   r7   r   r   r   )r6   r   r   r   r   r   r   )r6   r   )r   r   r   r   rD   r   rI   rR   r   r   r   r   rc   rk   r   rj   r   r<   r;   rB   rB   rB   rC   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 )BetaAsyncMessageStreamManagera+  Wrapper over BetaAsyncMessageStream 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.beta.messages.stream(...) as stream:
        async for chunk in stream:
            ...
    ```
    r   r   1Awaitable[AsyncStream[BetaRawMessageStreamEvent]]r4   r5   r6   r7   c                C  r   r9   )&_BetaAsyncMessageStreamManager__stream+_BetaAsyncMessageStreamManager__api_request-_BetaAsyncMessageStreamManager__output_formatr   rB   rB   rC   rD   7  r   z&BetaAsyncMessageStreamManager.__init__'BetaAsyncMessageStream[ResponseFormatT]c                   s$   | j I d H }t|| jd| _| jS r   )r   r   r   r   r   rB   rB   rC   r   A  s   z(BetaAsyncMessageStreamManager.__aenter__r\   r]   r^   r_   r`   ra   c                   s$   | j d ur| j  I d H  d S d S r9   )r   rc   rd   rB   rB   rC   r   F  s   
z'BetaAsyncMessageStreamManager.__aexit__N)r   r   r4   r5   r6   r7   )r6   r   r   )r   r   r   r   r   rD   r   r   rB   rB   rB   rC   r   +  s    

r   r   r'   r   rh   r6   3list[ParsedBetaMessageStreamEvent[ResponseFormatT]]c                 C  s6  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st|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 | 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rt|  |S )Nmessage_startmessage_deltamessage_stop)rs   r   content_block_startr   r   rn   )rs   rn   snapshotinput_json_deltatool_usemcp_tool_use
input_json)rs   partial_jsonr   citations_deltacitation)rs   r   r   thinking_deltathinking)rs   r   r   signature_delta	signature)rs   r   compaction_delta
compaction)rs   r|   content_block_stop)rs   indexcontent_block)rs   r}   r   r"   r*   r|   r   r   r!   rn   r   r   inputr   r   	citationsr   r   r   r   r    r   r   r$   )r   r   r   r   event_to_firerB   rB   rC   r   P  s   

\

Z
X

T


MC
9
/



r   
__json_bufr   r   )ParsedBetaMessage[ResponseFormatT] | Noner   httpx.Headersr4   r5   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 rP| j	dkrGtt
t t
jd i tt| j S td| j	 d| j	dkrg|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 }|rz|r|ddnd}d|v r||dd|_ n||dd|_ W n t!y } zt!d| d|"d |d }~ww 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 | jj	dkrS|j	dkrQ| jj|_|S t(r[t)| j |S | j	dkr}|j| j }	|	j	d
kr{t*|r{t+|	j||	_,|S | j	dkr| jj-|_-| jj.|_.| jj/|_/| j0j1|j0_1| j2|_2| j0j3d ur| j0j3|j0_3| j0j4d ur| j0j4|j0_4| j0j5d ur| j0j5|j0_5| j0j6d ur| j0j6|j0_6| j0j7d ur| j0j7|j0_7|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   rn   r   r   )	from_json    zutf-8zanthropic-betarz   z&fine-grained-tool-streaming-2025-05-14ztrailing-strings)partial_modeTzhUnable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: z. JSON: r   r   r   r   r   r   r   r   rB   )8
isinstancer	   r   r   r'   r   r   	TypeErrorbuiltinsrs   r,   r*   	constructr   to_dictr~   r|   r}   r   r-   r   r   r   rn   TRACKS_TOOL_INPUTjiterr   bytesgetattrJSON_BUF_PROPERTYr   rQ   r   
ValueErrordecodesetattrr   r   r   r   r   r   r(   r+   parsed_output	containerstop_reasonstop_sequenceusageoutput_tokenscontext_managementinput_tokenscache_creation_input_tokenscache_read_input_tokensserver_tool_use
iterations)
r   r   r   r4   r|   r   json_bufanthropic_betaer   rB   rB   rC   r     s   
 
M
C
+'%"





r   )r   r'   r   rh   r6   r   )
r   r'   r   r   r   r   r4   r5   r6   rh   )D
__future__r   r   typesr   typingr   r   r   r   r   r	   typing_extensionsr
   r   r   r   r   httpxpydanticr   (anthropic.types.beta.beta_tool_use_blockr   ,anthropic.types.beta.beta_mcp_tool_use_blockr   /anthropic.types.beta.beta_server_tool_use_blockr   _typesr   r   _utilsr   r   _modelsr   r   r   _beta_typesr   r   r   r   r    r!   r"   r#   r$   
_streamingr%   r&   
types.betar'   _utils._utilsr(   _parse._responser*   r+   types.beta.parsed_beta_messager,   r-   r/   r   r   r   r   r   r   r   rB   rB   rB   rC   <module>   s>     ,r#r
%g