
    ÁjM                       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ee1         Z6 G d dee1         Z7 G d dee1         Z8 G d dee1         Z9	 	 	 	 	 	 d!dZ:dZ;eefZ<e#d	 	 	 	 	 	 	 d"d Z=y)#    )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)NotGiven	not_given)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<   	 	 	 	 	 	 	 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                    || _         | j                         | _        | j                         | _        d | _        || _        y N)_raw_stream__stream_text__r0   
__stream__	_iterator&_MessageStream__final_message_snapshot_MessageStream__output_formatself
raw_streamoutput_formats      H/tmp/pip-target-k_scjv0h/lib/python/anthropic/lib/streaming/_messages.py__init__zMessageStream.__init__,   ;    
 &//1*OS%,    c                .    | j                   j                  S r2   r3   responser:   s    r=   rC   zMessageStream.response7       (((r@   c                L    | j                   j                  j                  d      S Nz
request-idrC   headersgetrD   s    r=   
request_idzMessageStream.request_id;       }}$$((66r@   c                6    | j                   j                         S r2   )r6   __next__rD   s    r=   rN   zMessageStream.__next__?   s    ~~&&((r@   c              #  6   K   | j                   D ]  }|  y wr2   r6   r:   items     r=   __iter__zMessageStream.__iter__B   s     NN 	DJ	s   c                    | S r2    rD   s    r=   	__enter__zMessageStream.__enter__F   s    r@   c                $    | j                          y r2   closer:   exc_typeexcexc_tbs       r=   __exit__zMessageStream.__exit__I   s     	

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

        Automatically called if the response body is read to completion.
        Nr3   rY   rD   s    r=   rY   zMessageStream.closeQ   s     	 r@   c                V    | j                          | j                  J | j                  S )qWaits until the stream has been read to completion and returns
        the accumulated `Message` object.
        )
until_doner7   rD   s    r=   get_final_messagezMessageStream.get_final_messageY   s,     	,,888,,,r@   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 re   contenttypeappendrh   RuntimeErrorjoinr:   messagetext_blocksblockbs        r=   get_final_textzMessageStream.get_final_texta   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    rD   s    r=   rd   zMessageStream.until_donev   s
    d#r@   c                6    | j                   J | j                   S r2   )r7   rD   s    r=   current_message_snapshotz&MessageStream.current_message_snapshot{        ,,888,,,r@   c              #     K   | j                   D ]K  }t        || j                  | j                        | _        t	        || j
                        }|D ]  }|  M y wN)eventcurrent_snapshotr<   )r   message_snapshot)r3   accumulate_eventr7   r8   build_eventsr{   r:   	sse_eventevents_to_firer   s       r=   r5   zMessageStream.__stream__   se     )) 		I,<!%!>!>"22-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ro   deltarh   r:   chunks     r=   r4   zMessageStream.__stream_text__   sC      	'Ezz22u{{7G7G<7Wkk&&&	's   AAAN)r;   zStream[RawMessageStreamEvent]r<   ResponseFormatT | NotGivenreturnNoner   zhttpx.Responser   z
str | Noner   z)ParsedMessageStreamEvent[ResponseFormatT])r   z3Iterator[ParsedMessageStreamEvent[ResponseFormatT]]r   r   r[   ztype[BaseException] | Noner\   zBaseException | Noner]   zTracebackType | Noner   r   r   r   r   ParsedMessage[ResponseFormatT]r   str)r   r/   )__name__
__module____qualname____annotations__r>   propertyrC   rK   rN   rS   rV   r^   rY   re   rx   rd   r{   r5   r4   rU   r@   r=   r.   r.   !   s    	-1	- 2	- 
		- ) ) 7 7), " %	
 
!-$*$
 - -
'r@   r.   c                  D    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 r2   )_MessageStreamManager__stream"_MessageStreamManager__api_request$_MessageStreamManager__output_formatr:   api_requestr<   s      r=   r>   zMessageStreamManager.__init__   s     @D(,r@   c                r    | j                         }t        || j                        | _        | j                  S Nr<   )r   r.   r   r   r:   r;   s     r=   rV   zMessageStreamManager.__enter__   s.    '')
%j@T@TU}}r@   c                R    | j                   | j                   j                          y y r2   )r   rY   rZ   s       r=   r^   zMessageStreamManager.__exit__   s#     ==$MM! %r@   N)r   z+Callable[[], Stream[RawMessageStreamEvent]]r<   r   r   r   )r   zMessageStream[ResponseFormatT]r   )r   r   r   __doc__r>   rV   r^   rU   r@   r=   r   r      sX    -@- 2	-
 
-
"," "" %	"
 
"r@   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]r0   c                    || _         | j                         | _        | j                         | _        d | _        || _        y r2   )r3   r4   r0   r5   r6   +_AsyncMessageStream__final_message_snapshot"_AsyncMessageStream__output_formatr9   s      r=   r>   zAsyncMessageStream.__init__   r?   r@   c                .    | j                   j                  S r2   rB   rD   s    r=   rC   zAsyncMessageStream.response   rE   r@   c                L    | j                   j                  j                  d      S rG   rH   rD   s    r=   rK   zAsyncMessageStream.request_id   rL   r@   c                R   K   | j                   j                          d {   S 7 wr2   )r6   	__anext__rD   s    r=   r   zAsyncMessageStream.__anext__   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr2   rP   rQ   s     r=   	__aiter__zAsyncMessageStream.__aiter__   s&     .. 	 	$J	.s   "  " "c                   K   | S wr2   rU   rD   s    r=   
__aenter__zAsyncMessageStream.__aenter__   s     s   c                @   K   | j                          d {    y 7 wr2   rX   rZ   s       r=   	__aexit__zAsyncMessageStream.__aexit__   s      jjls   c                T   K   | j                   j                          d{    y7 wr`   ra   rD   s    r=   rY   zAsyncMessageStream.close   s       $$&&&s   (&(c                r   K   | j                          d{    | j                  J | j                  S 7 w)rc   N)rd   r   rD   s    r=   re   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)rg   Nrh   ri   rj   rk   rl   rm   rs   s        r=   rx   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!   rD   s    r=   rd   zAsyncMessageStream.until_done
  s     $T***s   c                6    | j                   J | j                   S r2   )r   rD   s    r=   r{   z+AsyncMessageStream.current_message_snapshot  r|   r@   c                  K   | j                   2 3 d {   }t        || j                  | j                        | _        t	        || j
                        }|D ]  }| 	 T7 O6 y wr~   )r3   r   r   r   r   r{   r   s       r=   r5   zAsyncMessageStream.__stream__  sn     #// 		 		),<!%!>!>"22-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     r=   r4   z"AsyncMessageStream.__stream_text__   sK      	' 	'%zz22u{{7G7G<7Wkk&&&	'4s/   AAAAAAAAAN)r;   z"AsyncStream[RawMessageStreamEvent]r<   r   r   r   r   r   r   )r   z8AsyncIterator[ParsedMessageStreamEvent[ResponseFormatT]]r   r   r   r   r   )r   r   )r   r   r   r   r>   r   rC   rK   r   r   r   r   rY   re   rx   rd   r{   r5   r4   rU   r@   r=   r   r      s    ##	-6	- 2	- 
		- ) ) 7 70, " %	
 
'-$*+
 - -
'r@   r   c                  H    e Zd ZdZed	 	 	 	 	 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:
            ...
    ```
    r   c               .    d | _         || _        || _        y r2   )"_AsyncMessageStreamManager__stream'_AsyncMessageStreamManager__api_request)_AsyncMessageStreamManager__output_formatr   s      r=   r>   z"AsyncMessageStreamManager.__init__2  s     EI(,r@   c                   K   | j                    d {   }t        || j                        | _        | j                  S 7 ,wr   )r   r   r   r   r   s     r=   r   z$AsyncMessageStreamManager.__aenter__<  s7     ---
*:TEYEYZ}} .s   A?-Ac                n   K   | j                   #| j                   j                          d {    y y 7 wr2   )r   rY   rZ   s       r=   r   z#AsyncMessageStreamManager.__aexit__A  s0      ==$--%%''' %'s   *535N)r   z-Awaitable[AsyncStream[RawMessageStreamEvent]]r<   r   r   r   )r   z#AsyncMessageStream[ResponseFormatT]r   )r   r   r   r   r   r>   r   r   rU   r@   r=   r   r   &  s]    	 5>	-B- 2	-
 
-
(,( "( %	(
 
(r@   r   c           	        g }| j                   dk(  r|j                  |        |S | j                   dk(  r|j                  |        |S | j                   dk(  r*|j                  t        t        t           d|             |S | j                   dk(  r|j                  |        |S | j                   dk(  rM|j                  |        |j
                  | j                     }| j                  j                   dk(  rR|j                   dk(  r|j                  t        t        d| j                  j                  |j                  	             |S | j                  j                   d
k(  rSt        |t              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(  rI|j
                  | j                     }t        t0        d| j                  |      }|j                  |       |S t,        rt/        |        |S )Nmessage_startmessage_deltamessage_stop)ro   rt   content_block_startr   r   rh   )ro   rh   snapshotinput_json_delta
input_json)ro   partial_jsonr   citations_deltacitation)ro   r   r   thinking_deltathinking)ro   r   r   signature_delta	signature)ro   r   content_block_stop)ro   indexcontent_block)ro   rp   r"   r   r)   rn   r   r   r   rh   
isinstanceTRACKS_TOOL_INPUTr   r   inputr   r   	citationsr   r   r   r   r   r   r   )r   r   r   r   event_to_fires        r=   r   r   K  s6   
 GINzz_$e$f e 
	&e$b a 
~	%(9Xhi	
^ Y 
,	,e$V U 
,	,e$(00=;;|+!!V+%%!#"[[--!.!3!3	H y [[!33-):;%%&)%*[[%=%=!.!4!4	t e [[!22!!V+%%%'!&!5!5!.!8!8!>B	` Q [[!11!!Z/%%%'!&!5!5!.!7!7	L = [[!22!!Z/%%&("/"9"9 * % U[[)" ! 
+	+(00='%++'	
 	m,  r@   
__json_bufr   c                H   t        t        t        |       t              slt        t        t        t        t        t           t              |             } t        t        t        |       t              st        d|  dt        |              |x| j                  dk(  rPt        t        t           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      |_        tC        |t8        |       |S | j*                  j                  dk(  rk|j                  d
k(  r|jD                  s| j*                  jF                  g|_"        |S |jD                  j!                  | j*                  jF                         |S | j*                  j                  dk(  r:|j                  dk(  r|xjH                  | j*                  jH                  z  c_$        |S | j*                  j                  dk(  r,|j                  dk(  r8| j*                  jJ                  |_%        |S tL        rtO        | j*                         |S | j                  dk(  rP|j                  | j(                     }|j                  d
k(  r&tQ        |      rtS        |j,                  |      |_*        |S | j                  dk(  r| j*                  jV                  |_+        | j*                  jX                  |_,        | j*                  jZ                  |_-        | j*                  j\                  | j*                  j\                  |_.        | j^                  j`                  |j^                  _0        | j^                  jb                  %| j^                  jb                  |j^                  _1        | j^                  jd                  %| j^                  jd                  |j^                  _2        | j^                  jf                  %| j^                  jf                  |j^                  _3        | j^                  jh                  %| j^                  jh                  |j^                  _4        | j^                  jj                  %| j^                  jj                  |j^                  _5        |S # t>        $ r&}t?        d| d|jA                  d             |d }~ww xY w)N)type_valuez;Unexpected event runtime type, after deserialising twice - z - r   zUnexpected event order, got z before "message_start"r   r   r   rh   r   r   )	from_jsonr@   zutf-8T)partial_modezhUnable to parse tool parameter JSON from model. Please retry your request or adjust your prompt. Error: z. JSON: r   r   r   r   r   r   rU   )6r   r
   r   r   r   r$   r   	TypeErrorro   r+   r)   	constructrt   to_dictrq   rn   rp   r#   r,   r   r   r   rh   r   jiterr   bytesgetattrJSON_BUF_PROPERTYr   r   
ValueErrordecodesetattrr   r   r   r   r   r   r'   r*   parsed_outputstop_reasonstop_sequencestop_details	containerusageoutput_tokensinput_tokenscache_creation_input_tokenscache_read_input_tokensserver_tool_useoutput_tokens_details)r   r   r<   rn   r   json_bufer   s           r=   r   r     s:    d3&	2!$4 568MN
 $sE*I6YZ_Y``cdhindocpqrr::(o68O8O8uRVWZ\a\i\i\q\q\sRt8uvv9%**E\]^^zz**  ''%7u?R?R?Z?Z?\]	
P E 
,	,"**5;;7;;|+||v% 0 00| { [[!33'#45+
  ww8I3'OPE%++":":GDD!(1((N !2H=V U [[!22||v%(().)=)=(>G%N K %%,,U[[-A-ABJ I [[!11||z)  EKK$8$88 D C [[!22||z)$)KK$9$9!> 9 U[[)6 5 
+	+(00='H],C*4]5G5G*WM'. - 
	&',{{'>'>$).)B)B&(-(@(@%;;  ,).)>)>&/4{{/H/H,
 ;;##/27++2J2J""/;;22>AFAhAh"">;;..:=B[[=`=`"":;;&&25:[[5P5P""2;;,,8;@;;;\;\""8a & !( G  HI  GJ  JR  S[  Sb  Sb  cj  Sk  Rl  m !!s   W2 2	X!;!XX!)r   r   r   r   r   z/list[ParsedMessageStreamEvent[ResponseFormatT]])r   r   r   z%ParsedMessage[ResponseFormatT] | Noner<   r   r   r   )>
__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   rU   r@   r=   <module>r     s   "  D D T T   7 D	 	 	 + ) C F F - % : En'GO, n'b "7?3  "Fn'1 n'b"( 8 "(J[ [ 5[ 5	[| !    1:	a a <a .	a
 $ar@   