
    g3                    H   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
mZmZmZmZ d dlZddlmZmZmZ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mZ ddlm Z m!Z! erddl"m#Z#m$Z$  G d d      Z% G d d      Z& G d d      Z' G d d      Z(	 	 	 	 	 	 ddZ)dZ*	 	 	 	 	 	 ddZ+y)    )annotations)TracebackType)TYPE_CHECKINGAnyCallablecast)SelfIterator	AwaitableAsyncIteratorassert_neverN   )	TextEventInputJsonEventMessageStopEventMessageStreamEventContentBlockStopEvent   )MessageContentBlockRawMessageStreamEvent)consume_sync_iteratorconsume_async_iterator)buildconstruct_type)StreamAsyncStream)	AnthropicAsyncAnthropicc                      e Zd ZU ded<   	 ded<   	 	 	 	 	 	 	 	 ddZddZddZddZ	 	 	 	 	 	 	 	 dd	Zdd
Z	ddZ
ddZddZedd       ZddZddZy)MessageStreamIterator[str]text_streamhttpx.Responseresponsec                   || _         || _        || _        | j                         | _        d | _        | j                         | _        t        |||      | _	        y N)cast_tor%   client)
r%   _cast_to_client__stream_text__r#   &_MessageStream__final_message_snapshot
__stream__	_iteratorr   _raw_streamselfr(   r%   r)   s       V/var/www/openai/venv/lib/python3.12/site-packages/anthropic/lib/streaming/_messages.py__init__zMessageStream.__init__&   sS     !//18<%*:@[clr:s    c                6    | j                   j                         S N)r/   __next__r2   s    r3   r8   zMessageStream.__next__7   s    ~~&&((r5   c              #  6   K   | j                   D ]  }|  y wr7   r/   r2   items     r3   __iter__zMessageStream.__iter__:   s     NNDJ #s   c                    | S r7    r9   s    r3   	__enter__zMessageStream.__enter__>   s    r5   c                $    | j                          y r7   closer2   exc_typeexcexc_tbs       r3   __exit__zMessageStream.__exit__A   s     	

r5   c                8    | j                   j                          yz
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r%   rD   r9   s    r3   rD   zMessageStream.closeI   s     	r5   c                V    | j                          | j                  J | j                  S )qWaits until the stream has been read to completion and returns
        the accumulated `Message` object.
        )
until_doner-   r9   s    r3   get_final_messagezMessageStream.get_final_messageQ   s,     	,,888,,,r5   c                    | j                         }g }|j                  D ]-  }|j                  dk(  s|j                  |j                         / |st        d      dj                  |      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/Expected to have received at least 1 text block rO   contenttypeappendrR   RuntimeErrorjoinr2   messagetext_blocksblocks       r3   get_final_textzMessageStream.get_final_textY   sc     ((*!#__EzzV#""5::. % PQQww{##r5   c                    t        |        y)z)Blocks until the stream has been consumedN)r   r9   s    r3   rN   zMessageStream.until_donel   s
    d#r5   c                6    | j                   J | j                   S r7   )r-   r9   s    r3   current_message_snapshotz&MessageStream.current_message_snapshotq        ,,888,,,r5   c              #     K   | j                   D ]@  }t        || j                        | _        t        || j                        }|D ]  }|  B y wN)eventcurrent_snapshot)rf   message_snapshot)r0   accumulate_eventr-   build_eventsrb   r2   	sse_eventevents_to_firerf   s       r3   r.   zMessageStream.__stream__v   sR     ))I,<!%!>!>-D)
 *	DLiLijN' ( *s   AAc              #     K   | D ]D  }|j                   dk(  s|j                  j                   dk(  s-|j                  j                   F y wNcontent_block_delta
text_deltarW   deltarR   r2   chunks     r3   r,   zMessageStream.__stream_text__   s>     Ezz22u{{7G7G<7Wkk&&& s   AAAN)r(   type[RawMessageStreamEvent]r%   r$   r)   r   returnNonerw   r   )rw   zIterator[MessageStreamEvent]rw   r	   rF   ztype[BaseException] | NonerG   zBaseException | NonerH   zTracebackType | Nonerw   rx   rw   rx   rw   r   rw   str)rw   r"   )__name__
__module____qualname____annotations__r4   r8   r>   rA   rI   rD   rO   r_   rN   propertyrb   r.   r,   r@   r5   r3   r!   r!      s     t -t !	t
 t 
t"), " %	
 
-$&$
 - -	'r5   r!   c                  @    e Zd ZdZ	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZy)	MessageStreamManagerzWrapper over MessageStream that is returned by `.stream()`.

    ```py
    with client.messages.stream(...) as stream:
        for chunk in stream:
            ...
    ```
    c                     d | _         || _        y r7   )_MessageStreamManager__stream"_MessageStreamManager__api_requestr2   api_requests     r3   r4   zMessageStreamManager.__init__   s     /3(r5   c                    | j                         }t        |j                  |j                  |j                        | _        | j
                  S r'   )r   r!   r*   r%   r+   r   r2   
raw_streams     r3   rA   zMessageStreamManager.__enter__   sC    '')
%''((%%
 }}r5   c                R    | j                   | j                   j                          y y r7   )r   rD   rE   s       r3   rI   zMessageStreamManager.__exit__   s#     ==$MM! %r5   N)r   z+Callable[[], Stream[RawMessageStreamEvent]]rw   rx   )rw   r!   r{   )r   r   r   __doc__r4   rA   rI   r@   r5   r3   r   r      sN    )@) 
)	"," "" %	"
 
"r5   r   c                      e Zd ZU ded<   	 ded<   	 	 	 	 	 	 	 	 ddZddZddZddZ	 	 	 	 	 	 	 	 dd	Zdd
Z	ddZ
ddZddZedd       ZddZddZy)AsyncMessageStreamAsyncIterator[str]r#   r$   r%   c                   || _         || _        || _        | j                         | _        d | _        | j                         | _        t        |||      | _	        y r'   )
r%   r*   r+   r,   r#   +_AsyncMessageStream__final_message_snapshotr.   r/   r   r0   r1   s       r3   r4   zAsyncMessageStream.__init__   sU     !//18<%*?Jhv@
r5   c                R   K   | j                   j                          d {   S 7 wr7   )r/   	__anext__r9   s    r3   r   zAsyncMessageStream.__anext__   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr7   r;   r<   s     r3   	__aiter__zAsyncMessageStream.__aiter__   s!     .. 	$J	.s   "  " "c                   K   | S wr7   r@   r9   s    r3   
__aenter__zAsyncMessageStream.__aenter__   s     s   c                @   K   | j                          d {    y 7 wr7   rC   rE   s       r3   	__aexit__zAsyncMessageStream.__aexit__   s      jjls   c                T   K   | j                   j                          d{    y7 wrK   )r%   acloser9   s    r3   rD   zAsyncMessageStream.close   s      mm""$$$s   (&(c                r   K   | j                          d{    | j                  J | j                  S 7 w)rM   N)rN   r   r9   s    r3   rO   z$AsyncMessageStream.get_final_message   s;      oo,,888,,, 	 s   757c                   K   | j                          d{   }g }|j                  D ]-  }|j                  dk(  s|j                  |j                         / |st        d      dj                  |      S 7 `w)rQ   NrR   rS   rT   rU   r[   s       r3   r_   z!AsyncMessageStream.get_final_text   so      ..00!#__EzzV#""5::. % PQQww{## 1s   A9A7$A9<A9c                6   K   t        |        d{    y7 w)z(Waits until the stream has been consumedN)r   r9   s    r3   rN   zAsyncMessageStream.until_done  s     $T***s   c                6    | j                   J | j                   S r7   )r   r9   s    r3   rb   z+AsyncMessageStream.current_message_snapshot  rc   r5   c                  K   | j                   2 3 d {   }t        || j                        | _        t        || j                        }|D ]  }| 	 I7 D6 y wre   )r0   ri   r   rj   rb   rk   s       r3   r.   zAsyncMessageStream.__stream__  s[     #// 	),<!%!>!>-D)
 *	DLiLijN' (	/s&   AAAAAAAAc                  K   | 2 3 d {   }|j                   dk(  s|j                  j                   dk(  s3|j                  j                   M7 H6 y wro   rr   rt   s     r3   r,   z"AsyncMessageStream.__stream_text__  sF      	'%zz22u{{7G7G<7Wkk&&&	'4s/   AAAAAAAAAN)r(   rv   r%   r$   r)   r   rw   rx   ry   )rw   z!AsyncIterator[MessageStreamEvent]rz   r{   r|   r}   r~   )rw   r   )r   r   r   r   r4   r   r   r   r   rD   rO   r_   rN   r   rb   r.   r,   r@   r5   r3   r   r      s    ## 
 -
 !	

 
 

&0, " %	
 
%-$&+
 - -	'r5   r   c                  @    e Zd ZdZ	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZy)	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:
            ...
    ```
    c                     d | _         || _        y r7   )"_AsyncMessageStreamManager__stream'_AsyncMessageStreamManager__api_requestr   s     r3   r4   z"AsyncMessageStreamManager.__init__)  s     48(r5   c                   K   | j                    d {   }t        |j                  |j                  |j                        | _        | j
                  S 7 Awr'   )r   r   r*   r%   r+   r   r   s     r3   r   z$AsyncMessageStreamManager.__aenter__0  sL     ---
*''((%%
 }} .s   AAAAc                n   K   | j                   #| j                   j                          d {    y y 7 wr7   )r   rD   rE   s       r3   r   z#AsyncMessageStreamManager.__aexit__;  s0      ==$--%%''' %'s   *535N)r   z-Awaitable[AsyncStream[RawMessageStreamEvent]]rw   rx   )rw   r   r{   )r   r   r   r   r4   r   r   r@   r5   r3   r   r     sN    	)B) 
)	(,( "( %	(
 
(r5   r   c                "   g }| j                   dk(  r|j                  |        |S | j                   dk(  r|j                  |        |S | j                   dk(  r#|j                  t        t        d|             |S | j                   dk(  r|j                  |        |S | j                   dk(  r|j                  |        |j                  | j
                     }| j                  j                   dk(  rQ|j                   dk(  rB|j                  t        t        d| j                  j                  |j                  	             |S | j                  j                   d
k(  rO|j                   dk(  r@|j                  t        t        d| j                  j                  |j                               |S | j                   dk(  rG|j                  | j
                     }|j                  t        t        d| j
                  |             |S t        rt        |        |S )Nmessage_startmessage_deltamessage_stop)rW   r\   content_block_startrp   rq   rR   )rW   rR   snapshotinput_json_deltatool_use
input_json)rW   partial_jsonr   content_block_stop)rW   indexcontent_block)rW   rX   r   r   rV   r   rs   r   rR   r   r   inputr   r   r   )rf   rh   rm   r   s       r3   rj   rj   E  s   
 02Nzz_$e$P O 
	&e$L K 
~	%e$4>ScdeH G 
,	,e$D C 
,	,e$(00=;;|+0B0Bf0L!!))*//	8 ) [[!338J8Jj8X!!"%!&!9!9*00	&  
+	+(00='.B%++ers	
  r5   
__json_bufc           
        |c| j                   dk(  r;t        j                  di t        t        | j
                  j                               S t        d| j                    d      | j                   dk(  rR|j                  j                  t        t        t        t        | j                  j                                            |S | j                   dk(  r |j                  | j                     }|j                   dk(  rD| j                  j                   dk(  r+|xj                   | j                  j                   z  c_        |S |j                   d	k(  r| j                  j                   d
k(  rjddlm} t        t&        t)        |t*        d            }|t'        | j                  j,                  d      z  }|r ||d      |_        t1        |t*        |       |S | j                   dk(  r[| j                  j2                  |_        | j                  j4                  |_        | j6                  j8                  |j6                  _        |S )Nr   zUnexpected event order, got z before "message_start"r   )type_valuerp   rR   rq   r   r   r   )	from_jsonr5   zutf-8T)partial_moder   r@   )rW   r   	constructr   r   r\   to_dictrY   rV   rX   r   r   r   
model_dumpr   rs   rR   jiterr   bytesgetattrJSON_BUF_PROPERTYr   r   setattrstop_reasonstop_sequenceusageoutput_tokens)rf   rg   rV   r   json_bufs        r3   ri   ri   {  s   
 ::($$JtC1F1F1H'IJJ9%**E\]^^zz**  ''\9L9L9W9W9YZ	
8 - 
,	,"**5;;7<<6!ekk&6&6,&FLLEKK,,,L& % \\Z'EKK,<,<@R,R'
 E774Es#KLHekk66@@H )( FG.9  
	&',{{'>'>$).)B)B&/4{{/H/H,r5   )rf   r   rh   r   rw   zlist[MessageStreamEvent])rf   r   rg   zMessage | Nonerw   r   ),
__future__r   typesr   typingr   r   r   r   typing_extensionsr	   r
   r   r   r   httpx_typesr   r   r   r   r   r   r   r   _utilsr   r   _modelsr   r   
_streamingr   r   r+   r   r   r!   r   r   r   rj   r   ri   r@   r5   r3   <module>r      s    "  5 5 T T   B A C , -4k' k'\#" #"Lm' m'`%( %(P0 0 0 	0f ! ) ) %) 	)r5   