
    g6                       d dl mZ d dlZd dlZd dl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mZ d dlmZmZmZmZmZmZ d dlZddlmZmZ e	rddlmZmZ  ed	      Z G d
 dej>                        Z  G d dee   e       Z! G d dej>                        Z" G d dee   e"      Z# G d d      Z$ G d d      Z%e G d de             Z&ddZ'dd	 	 	 	 	 ddZ(y)    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericTypeVarIteratorAsyncIteratorcast)SelfProtocol	TypeGuardoverride
get_originruntime_checkable   )is_dictextract_type_var_from_base)	AnthropicAsyncAnthropic_Tc                      e Zd Zedd       Zy)_SyncStreamMetac                b    ddl m} t        ||      rt        j                  dt
        d       yy)Nr   )MessageStreamzUsing `isinstance()` to check if a `MessageStream` object is an instance of `Stream` is deprecated & will be removed in the next major version   
stacklevelTF)lib.streamingr   
isinstancewarningswarnDeprecationWarning)selfinstancer   s      I/var/www/openai/venv/lib/python3.12/site-packages/anthropic/_streaming.py__instancecheck__z!_SyncStreamMeta.__instancecheck__   s1     	1h.MM a"
     Nr%   r   returnbool__name__
__module____qualname__r   r'    r(   r&   r   r           r(   r   c                      e Zd ZU dZ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y)StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseSSEBytesDecoder_decoderc                   || _         || _        || _        |j                         | _        | j                         | _        y Nr5   _cast_to_client_make_sse_decoderr7   
__stream__	_iteratorr$   cast_tor5   clients       r&   __init__zStream.__init__3   7     !002*r(   c                6    | j                   j                         S r9   )r?   __next__r$   s    r&   rF   zStream.__next__@   s    ~~&&((r(   c              #  6   K   | j                   D ]  }|  y wr9   r?   r$   items     r&   __iter__zStream.__iter__C   s     NNDJ #s   c              #     K   | j                   j                  | j                  j                               E d {    y 7 wr9   )r7   
iter_bytesr5   rG   s    r&   _iter_eventszStream._iter_eventsG   s+     ==++DMM,D,D,FGGGs   7A?Ac              #  f  K   t        t        | j                        }| j                  }| j                  j
                  }| j                         }|D ](  }|j                  dk(  r ||j                         ||       |j                  dk(  sK|j                  dk(  s<|j                  dk(  s-|j                  dk(  s|j                  dk(  s|j                  dk(  r;|j                         }t        |      rd	|vr|j                  |d	<    ||||       |j                  d
k(  r|j                  dk(  s|j                  }	 |j                         }| }| j                  j                  ||| j                         |D ]  }	 y # t        $ r  |j                  xs d|j                   }Y Yw xY wwN
completion)datarA   r5   message_startmessage_deltamessage_stopcontent_block_startcontent_block_deltacontent_block_stoptypepingerrorzError code: )bodyr5   r   r   r;   r5   r<   _process_response_datarO   eventjsonr   rS   	Exceptionstatus_code_make_status_error
r$   rA   r5   process_dataiteratorsserS   r]   err_msg_sses
             r&   r>   zStream.__stream__J   s    sDMM*==||::$$&CyyL("
GhWW 		_,99/99.99 5599 5599 44xxz4=V4%7#&99DL"gQQyyF"yyG#xxP88:D!%G ll55!]] 6  = J D  ! P!hhOL9M9M8N*OGPs0   D1F14F1F1F1&F.+F1-F..F1c                    | S r9   r0   rG   s    r&   	__enter__zStream.__enter__x   s    r(   c                $    | j                          y r9   closer$   exc_typeexcexc_tbs       r&   __exit__zStream.__exit__{   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)r5   ro   rG   s    r&   ro   zStream.close   s     	r(   N)rA   type[_T]r5   r4   rB   r   r*   Noner*   r   )r*   zIterator[_T])r*   Iterator[ServerSentEvent]r*   r   rq   ztype[BaseException] | Nonerr   zBaseException | Noners   zTracebackType | Noner*   rx   r*   rx   )r-   r.   r/   __doc____annotations__rC   rF   rL   rO   r>   rl   rt   ro   r0   r(   r&   r3   r3   ,   s    T+ + !	+
 + 
+)H,\, " %	
 
r(   r3   )	metaclassc                      e Zd Zedd       Zy)_AsyncStreamMetac                b    ddl m} t        ||      rt        j                  dt
        d       yy)Nr   )AsyncMessageStreamzUsing `isinstance()` to check if a `AsyncMessageStream` object is an instance of `AsyncStream` is deprecated & will be removed in the next major versionr   r   TF)r   r   r    r!   r"   r#   )r$   r%   r   s      r&   r'   z"_AsyncStreamMeta.__instancecheck__   s2     	6h 23MM k"
 r(   Nr)   r,   r0   r(   r&   r   r      r1   r(   r   c                      e Zd ZU dZ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y)AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r4   r5   zSSEDecoder | SSEBytesDecoderr7   c                   || _         || _        || _        |j                         | _        | j                         | _        y r9   r:   r@   s       r&   rC   zAsyncStream.__init__   rD   r(   c                R   K   | j                   j                          d {   S 7 wr9   )r?   	__anext__rG   s    r&   r   zAsyncStream.__anext__   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr9   rI   rJ   s     r&   	__aiter__zAsyncStream.__aiter__   s!     .. 	$J	.s   "  " "c                  K   | j                   j                  | j                  j                               2 3 d {   }| 7 
6 y wr9   )r7   aiter_bytesr5   )r$   rh   s     r&   rO   zAsyncStream._iter_events   s:     224==3L3L3NO 	#I	Os%   4A	AAAA	AA	c                 K   t        t        | j                        }| j                  }| j                  j
                  }| j                         }|2 3 d {   }|j                  dk(  r ||j                         ||       |j                  dk(  sK|j                  dk(  s<|j                  dk(  s-|j                  dk(  s|j                  dk(  s|j                  dk(  r<|j                         }t        |      rd	|vr|j                  |d	<    ||||       |j                  d
k(  r|j                  dk(  s|j                  }	 |j                         }| }| j                  j                  ||| j                        7 .# t        $ r  |j                  xs d|j                   }Y Sw xY w6 |2 3 d {  7  }	6 y wrQ   r^   re   s
             r&   r>   zAsyncStream.__stream__   s    sDMM*==||::$$&! "	#yyL("
GhWW 		_,99/99.99 5599 5599 44xxz4=V4%7#&99DL"gQQyyF"yyG#xxP88:D!%G ll55!]] 6  ="	6 ! P!hhOL9M9M8N*OGP7 "J # 	 	$ #sg   AGF2FF2C!G;GF(GF2&F/,G.F//G5G 9F<:G >Gc                   K   | S wr9   r0   rG   s    r&   
__aenter__zAsyncStream.__aenter__   s     s   c                @   K   | j                          d {    y 7 wr9   rn   rp   s       r&   	__aexit__zAsyncStream.__aexit__   s      jjls   c                T   K   | j                   j                          d{    y7 wrv   )r5   acloserG   s    r&   ro   zAsyncStream.close   s      mm""$$$s   (&(N)rA   rw   r5   r4   rB   r   r*   rx   ry   )r*   zAsyncIterator[_T])r*   AsyncIterator[ServerSentEvent]r{   r|   r}   )r-   r.   r/   r~   r   rC   r   r   rO   r>   r   r   ro   r0   r(   r&   r   r      s    V**+ + !	+
 + 
+0,\, " %	
 
%r(   r   c                      e Zd Zddddd	 	 	 	 	 	 	 	 	 d
dZedd       Zedd       Zedd       Zedd       ZddZ	e
dd	       Zy)ServerSentEventNr`   rS   idretryc               L    |d}|| _         || _        |xs d | _        || _        y )N )_id_data_event_retry)r$   r`   rS   r   r   s        r&   rC   zServerSentEvent.__init__  s.     <D
mtr(   c                    | j                   S r9   )r   rG   s    r&   r`   zServerSentEvent.event      {{r(   c                    | j                   S r9   )r   rG   s    r&   r   zServerSentEvent.id  s    xxr(   c                    | j                   S r9   )r   rG   s    r&   r   zServerSentEvent.retry  r   r(   c                    | j                   S r9   )r   rG   s    r&   rS   zServerSentEvent.data  s    zzr(   c                @    t        j                  | j                        S r9   )ra   loadsrS   rG   s    r&   ra   zServerSentEvent.json#  s    zz$))$$r(   c           	     p    d| j                    d| j                   d| j                   d| j                   d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r   rG   s    r&   __repr__zServerSentEvent.__repr__&  s9    '

|7499+U477)S[\`\f\f[gghiir(   )
r`   
str | NonerS   r   r   r   r   
int | Noner*   rx   )r*   r   )r*   r   )r*   str)r*   r   )r-   r.   r/   rC   propertyr`   r   r   rS   ra   r   r   r0   r(   r&   r   r     s     !   	
   
         % j jr(   r   c                  f    e Zd ZU ded<   ded<   ded<   ded<   ddZdd	Zdd
ZddZddZddZ	y)
SSEDecoderz	list[str]r   r   r   r   r   _last_event_idc                <    d | _         g | _        d | _        d | _        y r9   )r   r   r   r   rG   s    r&   rC   zSSEDecoder.__init__1  s    
"r(   c              #     K   | j                  |      D ]@  }|j                         D ]+  }|j                  d      }| j                  |      }|s(| - B yw)^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder$   rg   chunkraw_linelinerh   s         r&   rN   zSSEDecoder.iter_bytes7  sR     &&x0E!,,.w/kk$'I	 / 1s   AA	Ac              #     K   d}|D ]6  }|j                  d      D ]  }||z  }|j                  d      s| d}! 8 |r| yyw)^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunksr(   Tkeependss   s   

s   

Nr   endswithr$   rg   rS   r   r   s        r&   r   zSSEDecoder._iter_chunksA  s\     E(($(7==!@AJD	 8  J s
   3AAc                  K   | j                  |      2 3 d{   }|j                         D ],  }|j                  d      }| j                  |      }|s(| . I7 D6 yw)r   Nr   )_aiter_chunksr   r   r   s         r&   r   zSSEDecoder.aiter_bytesM  s[     --h7 	%!,,.w/kk$'I	 /	7s+   A!AAA8A!A!AA!c                  K   d}|2 3 d{   }|j                  d      D ]   }||z  }|j                  d      s| d}" ?7 :6 |r| yyw)r   r(   NTr   r   r   r   s        r&   r   zSSEDecoder._aiter_chunksW  sd     # 	%(($(7==!@AJD	 8	8 J s*   AAAA,A
AA
Ac                z   |s| j                   s%| j                  s| j                  s| j                  y t	        | j                   dj                  | j                        | j                  | j                        }d | _         g | _        d | _        |S |j                  d      ry |j                  d      \  }}}|j                  d      r|dd  }|dk(  r|| _         y |dk(  r| j                  j                  |       y |dk(  rd	|v r	 y || _        y |d
k(  r	 t        |      | _        y 	 y # t        t        f$ r Y y w xY w)N
r   : r   r`   rS   r    r   )r   r   r   r   r   join
startswith	partitionappendint	TypeError
ValueError)r$   r   rh   	fieldname_values         r&   r   zSSEDecoder.decodec  sW    ;;tzz$:M:MRVR]R]Re!kkYYtzz*&&kk	C DKDJDKJ??3"nnS1	1eC !"IEDK   & JJe$  $u}  ',#  '!!%j   z*  s   D( (D:9D:Nr}   rg   Iterator[bytes]r*   rz   )rg   r   r*   r   rg   AsyncIterator[bytes]r*   r   )rg   r   r*   r   )r   r   r*   zServerSentEvent | None)
r-   r.   r/   r   rC   rN   r   r   r   r   r0   r(   r&   r   r   +  s8    

.r(   r   c                      e Zd ZddZddZy)r6   c                     y)r   Nr0   r$   rg   s     r&   rN   zSSEBytesDecoder.iter_bytes      r(   c                     y)zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr0   r   s     r&   r   zSSEBytesDecoder.aiter_bytes  r   r(   Nr   r   )r-   r.   r/   rN   r   r0   r(   r&   r6   r6     s    r(   r6   c                z    t        |       xs | }t        j                  |      xr t        |t        t
        f      S )zaTypeGuard for determining whether or not the given type is a subclass of `Stream` / `AsyncStream`)r   inspectisclass
issubclassr3   r   )typorigins     r&   is_stream_class_typer     s0    _#F??6"Pz&6;:O'PPr(   )failure_messagec          	     H    ddl m}m} t        | dt	        d||f      |      S )a  Given a type like `Stream[T]`, returns the generic type variable `T`.

    This also handles the case where a concrete subclass is given, e.g.
    ```py
    class MyStream(Stream[bytes]):
        ...

    extract_stream_chunk_type(MyStream) -> bytes
    ```
    r   )r3   r   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr3   r   r   r   )
stream_clsr   r3   r   s       r&   extract_stream_chunk_typer     s-     2%-/DE'	 r(   )r   rZ   r*   z;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]])r   rZ   r   r   r*   rZ   ))
__future__r   abcra   r   r!   typesr   typingr   r   r   r   r	   r
   r   typing_extensionsr   r   r   r   r   r   httpx_utilsr   r   r<   r   r   r   ABCMetar   r3   r   r   r   r   r6   r   r   r0   r(   r&   <module>r      s    " 
     V V V ` `  72 T]ckk *]WR[O ]@s{{ *^%'"+)9 ^%B&j &jRf fR h  Q #'   
	r(   