
    pi>B                    t   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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 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,  G d d      Z- G d d      Z. G d d      Z/ G d d      Z0	 	 	 	 	 	 ddZ1dZ2eefZ3	 	 	 	 	 	 ddZ4y)    )annotations)TracebackType)TYPE_CHECKINGAnyTypeCallablecast)SelfIterator	AwaitableAsyncIteratorassert_neverN)	BaseModel)ToolUseBlock)ServerToolUseBlock   )	TextEventCitationEventThinkingEventInputJsonEventSignatureEventMessageStopEventMessageStreamEventContentBlockStopEvent   )MessageContentBlockRawMessageStreamEvent)consume_sync_iteratorconsume_async_iterator)buildconstruct_typeconstruct_type_unchecked)StreamAsyncStreamc                      e Zd ZU ded<   	 ddZedd       Ze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_streamc                t    || _         | j                         | _        | j                         | _        d | _        y N)_raw_stream__stream_text__r)   
__stream__	_iterator&_MessageStream__final_message_snapshotself
raw_streams     c/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/anthropic/lib/streaming/_messages.py__init__zMessageStream.__init__(   1    %//1*8<%    c                .    | j                   j                  S r+   r,   responser2   s    r4   r:   zMessageStream.response.       (((r7   c                L    | j                   j                  j                  d      S Nz
request-idr:   headersgetr;   s    r4   
request_idzMessageStream.request_id2       }}$$((66r7   c                6    | j                   j                         S r+   )r/   __next__r;   s    r4   rE   zMessageStream.__next__6   s    ~~&&((r7   c              #  6   K   | j                   D ]  }|  y wr+   r/   r2   items     r4   __iter__zMessageStream.__iter__9   s     NN 	DJ	s   c                    | S r+    r;   s    r4   	__enter__zMessageStream.__enter__=   s    r7   c                $    | j                          y r+   closer2   exc_typeexcexc_tbs       r4   __exit__zMessageStream.__exit__@   s     	

r7   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,   rP   r;   s    r4   rP   zMessageStream.closeH   s     	 r7   c                V    | j                          | j                  J | j                  S )qWaits until the stream has been read to completion and returns
        the accumulated `Message` object.
        )
until_doner0   r;   s    r4   get_final_messagezMessageStream.get_final_messageP   s,     	,,888,,,r7   c           	     N   | j                         }g }|j                  D ]-  }|j                  dk(  s|j                  |j                         / |s@t        ddj                  |j                  D cg c]  }|j                   c}       d      dj                  |      S c c}w )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 ,Q content block type(s) that you can access by calling get_final_message().content r\   contenttypeappendr_   RuntimeErrorjoinr2   messagetext_blocksblockbs        r4   get_final_textzMessageStream.get_final_textX   s     ((*!#__ 	/EzzV#""5::.	/ vwzww  RY  Ra  Ra  Ab  MN  BC  BH  BH  Ab  xc  wd  du  v  ww{## Abs   0B"c                    t        |        y)z)Blocks until the stream has been consumedN)r   r;   s    r4   r[   zMessageStream.until_donem   s
    d#r7   c                6    | j                   J | j                   S r+   )r0   r;   s    r4   current_message_snapshotz&MessageStream.current_message_snapshotr        ,,888,,,r7   c              #     K   | j                   D ]@  }t        || j                        | _        t        || j                        }|D ]  }|  B y wN)eventcurrent_snapshot)rv   message_snapshot)r,   accumulate_eventr0   build_eventsrr   r2   	sse_eventevents_to_firerv   s       r4   r.   zMessageStream.__stream__w   s\     )) 	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rf   deltar_   r2   chunks     r4   r-   zMessageStream.__stream_text__   sC      	'Ezz22u{{7G7G<7Wkk&&&	's   AAAN)r3   zStream[RawMessageStreamEvent]returnNoner   zhttpx.Responser   z
str | Noner   r   )r   zIterator[MessageStreamEvent]r   r
   rR   ztype[BaseException] | NonerS   zBaseException | NonerT   zTracebackType | Noner   r   r   r   r   r   r   str)r   r(   )__name__
__module____qualname____annotations__r5   propertyr:   rB   rE   rJ   rM   rU   rP   r\   ro   r[   rr   r.   r-   rL   r7   r4   r'   r'      s    = ) ) 7 7), " %	
 
!-$*$
 - -	'r7   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 r+   )_MessageStreamManager__stream"_MessageStreamManager__api_requestr2   api_requests     r4   r5   zMessageStreamManager.__init__   s     /3(r7   c                Z    | j                         }t        |      | _        | j                  S r+   )r   r'   r   r1   s     r4   rM   zMessageStreamManager.__enter__   s&    '')
%j1}}r7   c                R    | j                   | j                   j                          y y r+   )r   rP   rQ   s       r4   rU   zMessageStreamManager.__exit__   s#     ==$MM! %r7   N)r   z+Callable[[], Stream[RawMessageStreamEvent]]r   r   )r   r'   r   )r   r   r   __doc__r5   rM   rU   rL   r7   r4   r   r      sN    )@) 
)
"," "" %	"
 
"r7   r   c                      e Zd ZU ded<   	 ddZedd       Ze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)   c                t    || _         | j                         | _        | j                         | _        d | _        y r+   )r,   r-   r)   r.   r/   +_AsyncMessageStream__final_message_snapshotr1   s     r4   r5   zAsyncMessageStream.__init__   r6   r7   c                .    | j                   j                  S r+   r9   r;   s    r4   r:   zAsyncMessageStream.response   r<   r7   c                L    | j                   j                  j                  d      S r>   r?   r;   s    r4   rB   zAsyncMessageStream.request_id   rC   r7   c                R   K   | j                   j                          d {   S 7 wr+   )r/   	__anext__r;   s    r4   r   zAsyncMessageStream.__anext__   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr+   rG   rH   s     r4   	__aiter__zAsyncMessageStream.__aiter__   s&     .. 	 	$J	.s   "  " "c                   K   | S wr+   rL   r;   s    r4   
__aenter__zAsyncMessageStream.__aenter__   s     s   c                @   K   | j                          d {    y 7 wr+   rO   rQ   s       r4   	__aexit__zAsyncMessageStream.__aexit__   s      jjls   c                T   K   | j                   j                          d{    y7 wrW   rX   r;   s    r4   rP   zAsyncMessageStream.close   s       $$&&&s   (&(c                r   K   | j                          d{    | j                  J | j                  S 7 w)rZ   N)r[   r   r;   s    r4   r\   z$AsyncMessageStream.get_final_message   s;      oo,,888,,, 	 s   757c           	     j  K   | j                          d{   }g }|j                  D ]-  }|j                  dk(  s|j                  |j                         / |s@t        ddj                  |j                  D cg c]  }|j                   c}       d      dj                  |      S 7 c c}w w)r^   Nr_   r`   ra   rb   rc   rd   rj   s        r4   ro   z!AsyncMessageStream.get_final_text   s      ..00!#__ 	/EzzV#""5::.	/ vwzww  RY  Ra  Ra  Ab  MN  BC  BH  BH  Ab  xc  wd  du  v  ww{## 1 Abs&   B3B,$B3>B3:B. B3.B3c                6   K   t        |        d{    y7 w)z(Waits until the stream has been consumedN)r    r;   s    r4   r[   zAsyncMessageStream.until_done   s     $T***s   c                6    | j                   J | j                   S r+   )r   r;   s    r4   rr   z+AsyncMessageStream.current_message_snapshot   rs   r7   c                  K   | j                   2 3 d {   }t        || j                        | _        t        || j                        }|D ]  }| 	 I7 D6 y wru   )r,   ry   r   rz   rr   r{   s       r4   r.   zAsyncMessageStream.__stream__  se     #// 	 	),<!%!>!>-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r   r   r   s     r4   r-   z"AsyncMessageStream.__stream_text__  sK      	' 	'%zz22u{{7G7G<7Wkk&&&	'4s/   AAAAAAAAAN)r3   z"AsyncStream[RawMessageStreamEvent]r   r   r   r   r   )r   z!AsyncIterator[MessageStreamEvent]r   r   r   r   r   )r   r   )r   r   r   r   r5   r   r:   rB   r   r   r   r   rP   r\   ro   r[   rr   r.   r-   rL   r7   r4   r   r      s    ##= ) ) 7 70, " %	
 
'-$*+
 - -	'r7   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 r+   )"_AsyncMessageStreamManager__stream'_AsyncMessageStreamManager__api_requestr   s     r4   r5   z"AsyncMessageStreamManager.__init__  s     48(r7   c                n   K   | j                    d {   }t        |      | _        | j                  S 7  wr+   )r   r   r   r1   s     r4   r   z$AsyncMessageStreamManager.__aenter__&  s/     ---
*:6}} .s   53!5c                n   K   | j                   #| j                   j                          d {    y y 7 wr+   )r   rP   rQ   s       r4   r   z#AsyncMessageStreamManager.__aexit__+  s0      ==$--%%''' %'s   *535N)r   z-Awaitable[AsyncStream[RawMessageStreamEvent]]r   r   )r   r   r   )r   r   r   r   r5   r   r   rL   r7   r4   r   r     sN    	)B) 
)
(,( "( %	(
 
(r7   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(  rL|j                  |        |j                  | j
                     }| j                  j                   dk(  rR|j                   dk(  r|j                  t        t        d| j                  j                  |j                  	             |S | j                  j                   d
k(  rR|j                   dk(  r|j                  t        t        d| j                  j                  |j                               |S | j                  j                   dk(  rV|j                   dk(  r!|j                  t        t        d| j                  j                  |j                  xs g              |S | j                  j                   dk(  rQ|j                   dk(  r|j                  t        t        d| j                  j                   |j                                |S | j                  j                   dk(  r=|j                   dk(  r+|j                  t        t"        d|j$                               	 |S t&        rt)        | 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)rf   rk   content_block_startr   r   r_   )rf   r_   snapshotinput_json_deltatool_use
input_json)rf   partial_jsonr   citations_deltacitation)rf   r   r   thinking_deltathinking)rf   r   r   signature_delta	signature)rf   r   content_block_stop)rf   indexcontent_block)rf   rg   r!   r   re   r   r   r   r_   r   r   inputr   r   	citationsr   r   r   r   r   r   r   )rv   rx   r}   r   s       r4   rz   rz   5  s(   
 02Nzz_$e$X W 
	&e$T S 
~	%e$4>ScdeP O 
,	,e$L K 
,	,e$(00=;;|+!!V+%%!#"[[--!.!3!3	~ o [[!33!!Z/%%&)%*[[%=%=!.!4!4	j [ [[!22!!V+%%%'!&!5!5!.!8!8!>B	V G [[!11!!Z/%%%'!&!5!5!.!7!7	B 3 [[!22!!Z/%%&("/"9"9    U[[)  
+	+(00='.B%++ers	
  r7   
__json_bufc           
     	   t        t        t        |       t              slt        t        t        t        t        t           t              |             } t        t        t        |       t              st        d|  dt        |              |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*                  j                  d	k(  r;|j                  d
k(  r|xj,                  | j*                  j,                  z  c_        |S | j*                  j                  dk(  r}t        |t.              rddlm} t        t4        t7        |t8        d            }|t5        | j*                  j:                  d      z  }|r ||d      |_        t?        |t8        |       |S | j*                  j                  dk(  rk|j                  d
k(  r|j@                  s| j*                  jB                  g|_         |S |j@                  j                  | j*                  jB                         |S | j*                  j                  dk(  r:|j                  dk(  r|xjD                  | j*                  jD                  z  c_"        |S | j*                  j                  dk(  r,|j                  dk(  r8| j*                  jF                  |_#        |S tH        rtK        | j*                         |S | j                  dk(  rG| j*                  jL                  |_&        | j*                  jN                  |_'        | jP                  jR                  |jP                  _)        | jP                  jT                  %| jP                  jT                  |jP                  _*        | jP                  jV                  %| jP                  jV                  |jP                  _+        | jP                  jX                  %| jP                  jX                  |jP                  _,        | jP                  jZ                  %| jP                  jZ                  |jP                  _-        |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   r_   r   r   )	from_jsonr7   zutf-8T)partial_moder   r   r   r   r   rL   ).
isinstancer	   r   r   r   r#   r   	TypeErrorrf   r   	constructrk   to_dictrh   re   rg   r   r"   r   
model_dumpr   r   r_   TRACKS_TOOL_INPUTjiterr   bytesgetattrJSON_BUF_PROPERTYr   r   setattrr   r   r   r   r   r   stop_reasonstop_sequenceusageoutput_tokensinput_tokenscache_creation_input_tokenscache_read_input_tokensserver_tool_use)rv   rw   re   r   json_bufs        r4   ry   ry     s   
 d3&	2!$4 568MN
 $sE*I6YZ_Y``cdhindocpqrr::($$JtC1F1F1H'IJJ9%**E\]^^zz**  ''\9L9L9W9W9YZ	
p e 
,	,"**5;;7;;|+||v% 0 00\ [ [[!33'#45+
  ww8I3'OPE%++":":GDD$-hT$JGM!2H=@ ? [[!22||v%(().)=)=(>G%8 5 %%,,U[[-A-AB4 3 [[!11||z)  EKK$8$88 . - [[!22||z)$)KK$9$9!( # U[[)   
	&',{{'>'>$).)B)B&/4{{/H/H, ;;##/27++2J2J""/;;22>AFAhAh"">;;..:=B[[=`=`"":;;&&25:[[5P5P""2r7   )rv   r   rx   r   r   zlist[MessageStreamEvent])rv   r   rw   zMessage | Noner   r   )5
__future__r   typesr   typingr   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%   r'   r   r   r   rz   r   r   ry   rL   r7   r4   <module>r      s    "  ; ; T T   7 D	 	 	 B A C F F -h' h'V" "@h' h'V( (DT T T 	Tn !   P P %P 	Pr7   