
    piO                       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- d
dl.m/Z/m0Z0 d
dl1m2Z2 d
dl3m4Z4 ddl5m6Z6m7Z7 d
dl8m9Z9m:Z:  G d de	e6         Z; G d de	e6         Z< G d de	e6         Z= G d de	e6         Z>	 	 	 	 	 	 d"dZ?dZ@eeefZAed 	 	 	 	 	 	 	 	 	 d#d!ZBy)$    )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ParsedBetaTextEventParsedBetaMessageStopEventParsedBetaMessageStreamEventParsedBetaContentBlockStopEvent)StreamAsyncStream)BetaRawMessageStreamEvent)is_given   )ResponseFormatT
parse_text)ParsedBetaMessageParsedBetaContentBlockc                      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)BetaMessageStreamIterator[str]text_streamc                    || _         | j                         | _        | j                         | _        d | _        || _        y N)_raw_stream__stream_text__r1   
__stream__	_iterator*_BetaMessageStream__final_message_snapshot!_BetaMessageStream__output_formatself
raw_streamoutput_formats      h/opt/services/ai/voice_agent/venv/lib/python3.12/site-packages/anthropic/lib/streaming/_beta_messages.py__init__zBetaMessageStream.__init__.   ;    
 &//1*SW%,    c                .    | j                   j                  S r3   r4   responser;   s    r>   rD   zBetaMessageStream.response9       (((rA   c                L    | j                   j                  j                  d      S Nz
request-idrD   headersgetrE   s    r>   
request_idzBetaMessageStream.request_id=       }}$$((66rA   c                6    | j                   j                         S r3   )r7   __next__rE   s    r>   rO   zBetaMessageStream.__next__A   s    ~~&&((rA   c              #  6   K   | j                   D ]  }|  y wr3   r7   r;   items     r>   __iter__zBetaMessageStream.__iter__D   s     NN 	DJ	s   c                    | S r3    rE   s    r>   	__enter__zBetaMessageStream.__enter__H   s    rA   c                $    | j                          y r3   closer;   exc_typeexcexc_tbs       r>   __exit__zBetaMessageStream.__exit__K   s     	

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

        Automatically called if the response body is read to completion.
        Nr4   rZ   rE   s    r>   rZ   zBetaMessageStream.closeS   s     	 rA   c                V    | j                          | j                  J | j                  S )qWaits until the stream has been read to completion and returns
        the accumulated `Message` object.
        )
until_doner8   rE   s    r>   get_final_messagez#BetaMessageStream.get_final_message[   s,     	,,888,,,rA   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 rf   contenttypeappendri   RuntimeErrorjoinr;   messagetext_blocksblockbs        r>   get_final_textz BetaMessageStream.get_final_textc   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   rE   s    r>   re   zBetaMessageStream.until_donex   s
    d#rA   c                6    | j                   J | j                   S r3   )r8   rE   s    r>   current_message_snapshotz*BetaMessageStream.current_message_snapshot}        ,,888,,,rA   c              #     K   | j                   D ]j  }t        || j                  | j                  j                  j
                  | j                        | _        t        || j                        }|D ]  }|  l y wN)eventcurrent_snapshotrequest_headersr=   )r   message_snapshot)	r4   accumulate_eventr8   rD   requestrJ   r9   build_eventsr|   r;   	sse_eventevents_to_firer   s       r>   r6   zBetaMessageStream.__stream__   sx     )) 
	I,<!%!>!> $ 5 5 = ="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rp   deltari   r;   chunks     r>   r5   z!BetaMessageStream.__stream_text__   sC      	'Ezz22u{{7G7G<7Wkk&&&	's   AAAN)r<   z!Stream[BetaRawMessageStreamEvent]r=   ResponseFormatT | NotGivenreturnNoner   zhttpx.Responser   z
str | Noner   z-ParsedBetaMessageStreamEvent[ResponseFormatT])r   z7Iterator[ParsedBetaMessageStreamEvent[ResponseFormatT]]r   r   r\   ztype[BaseException] | Noner]   zBaseException | Noner^   zTracebackType | Noner   r   r   r   r   "ParsedBetaMessage[ResponseFormatT]r   str)r   r0   )__name__
__module____qualname____annotations__r?   propertyrD   rL   rO   rT   rW   r_   rZ   rf   ry   re   r|   r6   r5   rV   rA   r>   r/   r/   #   s    	-5	- 2	- 
		- ) ) 7 7), " %	
 
!-$*$
 - -'rA   r/   c                  D    e Zd ZdZ	 	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 ddZy)	BetaMessageStreamManagerzWrapper over MessageStream that is returned by `.stream()`.

    ```py
    with client.beta.messages.stream(...) as stream:
        for chunk in stream:
            ...
    ```
    c               .    d | _         || _        || _        y r3   )!_BetaMessageStreamManager__stream&_BetaMessageStreamManager__api_request(_BetaMessageStreamManager__output_formatr;   api_requestr=   s      r>   r?   z!BetaMessageStreamManager.__init__   s     DH(,rA   c                r    | j                         }t        || j                        | _        | j                  S Nr=   )r   r/   r   r   r;   r<   s     r>   rW   z"BetaMessageStreamManager.__enter__   s.    '')
)*DDXDXY}}rA   c                R    | j                   | j                   j                          y y r3   )r   rZ   r[   s       r>   r_   z!BetaMessageStreamManager.__exit__   s#     ==$MM! %rA   N)r   z/Callable[[], Stream[BetaRawMessageStreamEvent]]r=   r   r   r   )r   z"BetaMessageStream[ResponseFormatT]r   )r   r   r   __doc__r?   rW   r_   rV   rA   r>   r   r      sX    -D- 2	-
 
-
"," "" %	"
 
"rA   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)BetaAsyncMessageStreamAsyncIterator[str]r1   c                    || _         | j                         | _        | j                         | _        d | _        || _        y r3   )r4   r5   r1   r6   r7   /_BetaAsyncMessageStream__final_message_snapshot&_BetaAsyncMessageStream__output_formatr:   s      r>   r?   zBetaAsyncMessageStream.__init__   r@   rA   c                .    | j                   j                  S r3   rC   rE   s    r>   rD   zBetaAsyncMessageStream.response   rF   rA   c                L    | j                   j                  j                  d      S rH   rI   rE   s    r>   rL   z!BetaAsyncMessageStream.request_id   rM   rA   c                R   K   | j                   j                          d {   S 7 wr3   )r7   	__anext__rE   s    r>   r   z BetaAsyncMessageStream.__anext__   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr3   rQ   rR   s     r>   	__aiter__z BetaAsyncMessageStream.__aiter__   s&     .. 	 	$J	.s   "  " "c                   K   | S wr3   rV   rE   s    r>   
__aenter__z!BetaAsyncMessageStream.__aenter__   s     s   c                @   K   | j                          d {    y 7 wr3   rY   r[   s       r>   	__aexit__z BetaAsyncMessageStream.__aexit__   s      jjls   c                T   K   | j                   j                          d{    y7 wra   rb   rE   s    r>   rZ   zBetaAsyncMessageStream.close   s       $$&&&s   (&(c                r   K   | j                          d{    | j                  J | j                  S 7 w)rd   N)re   r   rE   s    r>   rf   z(BetaAsyncMessageStream.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)rh   Nri   rj   rk   rl   rm   rn   rt   s        r>   ry   z%BetaAsyncMessageStream.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   rE   s    r>   re   z!BetaAsyncMessageStream.until_done  s     $T***s   c                6    | j                   J | j                   S r3   )r   rE   s    r>   r|   z/BetaAsyncMessageStream.current_message_snapshot  r}   rA   c                 K   | j                   2 3 d {   }t        || j                  | j                  j                  j
                  | j                        | _        t        || j                        }|D ]  }| 	 s7 n6 y wr   )	r4   r   r   rD   r   rJ   r   r   r|   r   s       r>   r6   z!BetaAsyncMessageStream.__stream__  s     #// 
	 
	),<!%!>!> $ 5 5 = ="22	-D) *	DLiLijN' 
	/s&   BBBBA+BBB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>   r5   z&BetaAsyncMessageStream.__stream_text__$  sK      	' 	'%zz22u{{7G7G<7Wkk&&&	'4s/   AAAAAAAAAN)r<   z&AsyncStream[BetaRawMessageStreamEvent]r=   r   r   r   r   r   r   )r   z<AsyncIterator[ParsedBetaMessageStreamEvent[ResponseFormatT]]r   r   r   r   r   )r   r   )r   r   r   r   r?   r   rD   rL   r   r   r   r   rZ   rf   ry   re   r|   r6   r5   rV   rA   r>   r   r      s    ##	-:	- 2	- 
		- ) ) 7 70, " %	
 
'-$*+
 - -'rA   r   c                  H    e Zd ZdZed	 	 	 	 	 ddZddZ	 	 	 	 	 	 	 	 d	dZy)
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   c               .    d | _         || _        || _        y r3   )&_BetaAsyncMessageStreamManager__stream+_BetaAsyncMessageStreamManager__api_request-_BetaAsyncMessageStreamManager__output_formatr   s      r>   r?   z&BetaAsyncMessageStreamManager.__init__6  s     IM(,rA   c                   K   | j                    d {   }t        || j                        | _        | j                  S 7 ,wr   )r   r   r   r   r   s     r>   r   z(BetaAsyncMessageStreamManager.__aenter__@  s7     ---
.zI]I]^}} .s   A?-Ac                n   K   | j                   #| j                   j                          d {    y y 7 wr3   )r   rZ   r[   s       r>   r   z'BetaAsyncMessageStreamManager.__aexit__E  s0      ==$--%%''' %'s   *535N)r   z1Awaitable[AsyncStream[BetaRawMessageStreamEvent]]r=   r   r   r   )r   z'BetaAsyncMessageStream[ResponseFormatT]r   )r   r   r   r   r   r?   r   r   rV   rA   r>   r   r   *  s]    	 5>	-F- 2	-
 
-
(,( "( %	(
 
(rA   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(  r[|j                  |        |j
                  | j                     }| j                  j                   dk(  rR|j                   dk(  r|j                  t        t        d| j                  j                  |j                  	             |S | j                  j                   d
k(  ra|j                   dk(  s|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)rp   ru   content_block_startr   r   ri   )rp   ri   snapshotinput_json_deltatool_usemcp_tool_use
input_json)rp   partial_jsonr   citations_deltacitation)rp   r   r   thinking_deltathinking)rp   r   r   signature_delta	signature)rp   r   content_block_stop)rp   indexcontent_block)rp   rq   r   r"   r*   ro   r   r   r!   ri   r   r   inputr   r   	citationsr   r   r    r   r   r   r$   )r   r   r   r   event_to_fires        r>   r   r   O  sF   
 KMNzz_$e$f e 
	&e$b a 
~	%,_=N\lm	
^ Y 
,	,e$V U 
,	,e$(00=;;|+!!V+%%+#"[[--!.!3!3	H y [[!33!!Z/=3E3E3W%%*)%*[[%=%=!.!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,  rA   
__json_bufr   c                   t        t        t        |       t              svt        t        t        t        t        t           t              |             } t        t        t        |       t              s$t        d|  dt        j                  |              |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(  rg|j                   | j*                     }| j,                  j                  d	k(  r;|j                  d
k(  r#|xj.                  | j,                  j.                  z  c_        |S | j,                  j                  dk(  rt        |t0              rddlm} t        t6        t9        |t:        d            }|t7        | j,                  j<                  d      z  }|r:	 |r|j?                  dd      nd}d|v r ||d      |_         n ||d      |_         tG        |t:        |       |S | j,                  j                  dk(  rk|j                  d
k(  r|jH                  s| j,                  jJ                  g|_$        |S |jH                  j#                  | j,                  jJ                         |S | j,                  j                  dk(  r:|j                  dk(  r|xjL                  | j,                  jL                  z  c_&        |S | j,                  j                  dk(  r,|j                  dk(  r8| j,                  jN                  |_'        |S tP        rtS        | j,                         |S | j                  dk(  rP|j                   | j*                     }	|	j                  d
k(  r&tU        |      rtW        |	j.                  |      |	_,        |S | j                  dk(  rs| j,                  jZ                  |_-        | j,                  j\                  |_.        | j,                  j^                  |_/        | j`                  jb                  |j`                  _1        | jd                  |_2        | j`                  jf                  %| j`                  jf                  |j`                  _3        | j`                  jh                  %| j`                  jh                  |j`                  _4        | j`                  jj                  %| j`                  jj                  |j`                  _5        | j`                  jl                  %| j`                  jl                  |j`                  _6        |S # tB        $ r&}tC        d| d|jE                  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   ri   r   r   )	from_jsonrA   zutf-8zanthropic-betarm   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   rV   )7
isinstancer
   r   r   r'   r   r   	TypeErrorbuiltinsrp   r,   r*   	constructru   to_dictrr   ro   rq   r   r-   r   r   r   ri   TRACKS_TOOL_INPUTjiterr   bytesgetattrJSON_BUF_PROPERTYr   rK   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)
r   r   r   r=   ro   r   json_bufanthropic_betaer   s
             r>   r   r     s;    d3&	2%$4 9:<UV
 $sE*I6MeWTWX`XeXefkXlWmn  ::(!/24E4O4O4uRVWZ\a\i\i\q\q\sRt4u  9%**E\]^^zz**  ''%;5CVCVC^C^C`a	
P E 
,	,"**5;;7;;|+||v% 0 00| { [[!33'#45+
  ww8I3'OPE%++":":GDD
!Ve)<)<=Mr)RkmC~U,5hM_,`GM,5hT,RGM !2H=L K [[!22||v%(().)=)=(>G%D A %%,,U[[-A-AB@ ? [[!11||z)  EKK$8$88 : 9 [[!22||z)$)KK$9$9!4 / U[[), + 
+	+(00='H],C*4]5G5G*WM'$ # 
	&%*[[%:%:"',{{'>'>$).)B)B&/4{{/H/H,.3.F.F+ ;;##/27++2J2J""/;;22>AFAhAh"">;;..:=B[[=`=`"":;;&&25:[[5P5P""2W & !( G  HI  GJ  JR  S[  Sb  Sb  cj  Sk  Rl  m !!s   "9W 	W:!W55W:)r   r'   r   r   r   z3list[ParsedBetaMessageStreamEvent[ResponseFormatT]])
r   r'   r   z)ParsedBetaMessage[ResponseFormatT] | Noner   zhttpx.Headersr=   r   r   r   )C
__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$   
_streamingr%   r&   
types.betar'   _utils._utilsr(   _parse._responser*   r+   types.beta.parsed_beta_messager,   r-   r/   r   r   r   r   r   r   r   rV   rA   r>   <module>r     s#   "   D D T T   E L R ) C F F	 	 	 . 3 % : Wo'0 o'd "w7  "Fo'W_5 o'd"(GO$< "(J[$[ 9[ 9	[| !    1:f$f @f #	f
 .f (frA   