
    nϞiI                       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)	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<   	 	 	 	 	 	 	 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      c/var/www/html/jploft-chatbot/venv/lib/python3.12/site-packages/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(  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(  rI|j
                  | j                     }t        t,        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tool_use
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   r   r   inputr   r   	citationsr   r   r   r   r   r   r   )r   r   r   r   event_to_fires        r=   r   r   K  s9   
 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!!Z/%%&)%*[[%=%=!.!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                
   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        |t0              rddlm} t        t6        t9        |t:        d            }|t7        | j,                  j<                  d      z  }|r ||d      |_        tA        |t:        |       |S | j,                  j                  dk(  rk|j                  d
k(  r|jB                  s| j,                  jD                  g|_!        |S |jB                  j!                  | j,                  jD                         |S | j,                  j                  dk(  r:|j                  dk(  r|xjF                  | j,                  jF                  z  c_#        |S | j,                  j                  dk(  r,|j                  dk(  r8| j,                  jH                  |_$        |S tJ        rtM        | j,                         |S | j                  dk(  rP|j                  | j*                     }|j                  d
k(  r&tO        |      rtQ        |j.                  |      |_)        |S | j                  dk(  rG| j,                  jT                  |_*        | j,                  jV                  |_+        | jX                  jZ                  |jX                  _-        | jX                  j\                  %| jX                  j\                  |jX                  _.        | jX                  j^                  %| jX                  j^                  |jX                  _/        | jX                  j`                  %| jX                  j`                  |jX                  _0        | jX                  jb                  %| jX                  jb                  |jX                  _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   rh   r   r   )	from_jsonr@   zutf-8T)partial_moder   r   r   r   r   r   rU   )2
isinstancer
   r   r   r   r$   r   	TypeErrorro   r+   r)   	constructrt   to_dictrq   rn   rp   r#   r,   r   
model_dumpr   r   rh   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   r<   rn   r   json_bufr   s          r=   r   r     sa    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?]?]?_`	
x m 
,	,"**5;;7;;|+||v% 0 00d c [[!33'#45+
  ww8I3'OPE%++":":GDD$-hT$JGM!2H=H G [[!22||v%(().)=)=(>G%@ = %%,,U[[-A-AB< ; [[!11||z)  EKK$8$88 6 5 [[!22||z)$)KK$9$9!0 + U[[)( ' 
+	+(00='H],C*4]5G5G*WM'   
	&',{{'>'>$).)B)B&/4{{/H/H, ;;##/27++2J2J""/;;22>AFAhAh"">;;..:=B[[=`=`"":;;&&25:[[5P5P""2r@   )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:	U U <U .	U
 $Ur@   