o
    ^۷ia9                     @  sb  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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 dd	lm Z  ed
Z!G dd dej"Z#G dd dee! e#dZ$G dd dej"Z%G dd dee! e%dZ&G dd dZ'G dd dZ(eG dd deZ)d&ddZ*dd d'd$d%Z+dS )(    )annotationsN)TracebackType)TYPE_CHECKINGAnyGenericTypeVarIteratorOptionalAsyncIteratorcast)SelfProtocol	TypeGuardoverride
get_originruntime_checkable   )is_dictextract_type_var_from_base)	AnthropicAsyncAnthropic)FinalRequestOptions_Tc                   @     e Zd ZedddZdS )	_SyncStreamMetainstancer   returnboolc                 C  .   ddl m} t||rtjdtdd dS dS )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)selfr   r    r)   J/home/ubuntu/vllm_env/lib/python3.10/site-packages/anthropic/_streaming.py__instancecheck__      
z!_SyncStreamMeta.__instancecheck__Nr   r   r   r   __name__
__module____qualname__r   r+   r)   r)   r)   r*   r          r   c                   @     e Zd ZU dZded< dZded< ded< dd	d+ddZd,ddZd-ddZd.ddZ	d-ddZ
d/dd Zd0d'd(Zd1d)d*ZdS )2StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseNOptional[FinalRequestOptions]_optionsSSEBytesDecoder_decoderoptionscast_totype[_T]clientr   r<   r   Nonec                C  0   || _ || _|| _|| _| | _|  | _d S Nr6   _cast_to_clientr8   _make_sse_decoderr:   
__stream__	_iteratorr(   r=   r6   r?   r<   r)   r)   r*   __init__4      
zStream.__init__r   c                 C  s
   | j  S rB   )rH   __next__r(   r)   r)   r*   rL   C   s   
zStream.__next__Iterator[_T]c                 c  s    | j D ]}|V  qd S rB   rH   r(   itemr)   r)   r*   __iter__F   s   
zStream.__iter__Iterator[ServerSentEvent]c                 c  s    | j | j E d H  d S rB   )r:   
iter_bytesr6   rM   r)   r)   r*   _iter_eventsJ   s   zStream._iter_eventsc           	   	   c  s<   t t| j}| j}| jj}|  }z|D ]|}|jdkr&|| ||dV  |jdksD|jdksD|jdksD|jdksD|jdksD|jdkr]| }t	|rUd	|vrU|j|d	< ||||dV  |jd
krcq|jdkr|j
}z	| }| }W n ty   |j
pd|j }Y nw | jj||| jdqW |  d S |  w N
completion)datar=   r6   message_startmessage_deltamessage_stopcontent_block_startcontent_block_deltacontent_block_stoptypepingerrorzError code: )bodyr6   )r   r   rD   r6   rE   _process_response_datarU   eventjsonr   rX   	Exceptionstatus_code_make_status_errorclose	r(   r=   r6   process_dataiteratorsserX   rb   err_msgr)   r)   r*   rG   M   sJ   










%zStream.__stream__r   c                 C  s   | S rB   r)   rM   r)   r)   r*   	__enter__{   s   zStream.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S rB   ri   r(   rp   rr   rt   r)   r)   r*   __exit__~   s   zStream.__exit__c                 C  s   | j   dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r6   ri   rM   r)   r)   r*   ri      s   zStream.close)
r=   r>   r6   r5   r?   r   r<   r7   r   r@   r   r   )r   rN   )r   rS   r   r   rp   rq   rr   rs   rt   ru   r   r@   r   r@   )r/   r0   r1   __doc____annotations__r8   rJ   rL   rR   rU   rG   ro   rx   ri   r)   r)   r)   r*   r4   -   s   
 




.
r4   )	metaclassc                   @  r   )	_AsyncStreamMetar   r   r   r   c                 C  r   )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   r)   r)   r*   r+      r,   z"_AsyncStreamMeta.__instancecheck__Nr-   r.   r)   r)   r)   r*   r      r2   r   c                   @  r3   )2AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r5   r6   Nr7   r8   zSSEDecoder | SSEBytesDecoderr:   r;   r=   r>   r?   r   r<   r   r@   c                C  rA   rB   rC   rI   r)   r)   r*   rJ      rK   zAsyncStream.__init__r   c                   s   | j  I d H S rB   )rH   	__anext__rM   r)   r)   r*   r      s   zAsyncStream.__anext__AsyncIterator[_T]c                 C s"   | j 2 z	3 d H W }|V  q6 d S rB   rO   rP   r)   r)   r*   	__aiter__   s   zAsyncStream.__aiter__AsyncIterator[ServerSentEvent]c                 C s.   | j | j 2 z	3 d H W }|V  q
6 d S rB   )r:   aiter_bytesr6   )r(   rm   r)   r)   r*   rU      s   zAsyncStream._iter_eventsc           	   	   C sR  t t| j}| j}| jj}|  }z|2 z3 d H W }|jdkr*|| ||dV  |jdksH|jdksH|jdksH|jdksH|jdksH|jdkra| }t	|rYd	|vrY|j|d	< ||||dV  |jd
krgq|jdkr|j
}z	| }| }W n ty   |j
pd|j }Y nw | jj||| jdq6 W | I d H  d S | I d H  w rV   )r   r   rD   r6   rE   rc   rU   rd   re   r   rX   rf   rg   rh   acloserj   r)   r)   r*   rG      sJ   










"%zAsyncStream.__stream__r   c                   s   | S rB   r)   rM   r)   r)   r*   
__aenter__   s   zAsyncStream.__aenter__rp   rq   rr   rs   rt   ru   c                   s   |   I d H  d S rB   rv   rw   r)   r)   r*   	__aexit__   s   zAsyncStream.__aexit__c                   s   | j  I dH  dS ry   )r6   r   rM   r)   r)   r*   ri      s   zAsyncStream.close)
r=   r>   r6   r5   r?   r   r<   r7   r   r@   rz   )r   r   )r   r   r{   r|   r}   )r/   r0   r1   r~   r   r8   rJ   r   r   rU   rG   r   r   ri   r)   r)   r)   r*   r      s   
 




.
r   c                   @  sr   e Zd ZddddddddZedddZedddZedddZedddZdddZ	e
dddZdS ) ServerSentEventNrd   rX   idretryrd   
str | NonerX   r   r   
int | Noner   r@   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r(   rd   rX   r   r   r)   r)   r*   rJ     s   

zServerSentEvent.__init__c                 C     | j S rB   )r   rM   r)   r)   r*   rd        zServerSentEvent.eventc                 C  r   rB   )r   rM   r)   r)   r*   r     r   zServerSentEvent.idc                 C  r   rB   )r   rM   r)   r)   r*   r      r   zServerSentEvent.retrystrc                 C  r   rB   )r   rM   r)   r)   r*   rX   $  r   zServerSentEvent.datar   c                 C  s   t | jS rB   )re   loadsrX   rM   r)   r)   r*   re   (  s   zServerSentEvent.jsonc              	   C  s&   d| j  d| j d| j d| j d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r   rM   r)   r)   r*   __repr__+  s   &zServerSentEvent.__repr__)
rd   r   rX   r   r   r   r   r   r   r@   )r   r   )r   r   )r   r   )r   r   )r/   r0   r1   rJ   propertyrd   r   r   rX   re   r   r   r)   r)   r)   r*   r     s"    
r   c                   @  sj   e Zd ZU ded< ded< ded< ded< dd
dZd ddZd!ddZd"ddZd#ddZd$ddZ	dS )%
SSEDecoderz	list[str]r   r   r   r   r   _last_event_idr   r@   c                 C  s   d | _ g | _d | _d | _d S rB   )r   r   r   r   rM   r)   r)   r*   rJ   6  s   
zSSEDecoder.__init__rl   Iterator[bytes]rS   c                 c  sB    |  |D ]}| D ]}|d}| |}|r|V  qqdS )^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder(   rl   chunkraw_linelinerm   r)   r)   r*   rT   <  s   

zSSEDecoder.iter_bytesc                 c  sP    d}|D ]}|j ddD ]}||7 }|dr|V  d}qq|r&|V  dS dS )^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunks    Tkeependss   s   

s   

Nr   endswithr(   rl   rX   r   r   r)   r)   r*   r   F  s   

zSSEDecoder._iter_chunksAsyncIterator[bytes]r   c                 C sL   |  |2 z3 dH W }| D ]}|d}| |}|r!|V  qq6 dS )r   Nr   )_aiter_chunksr   r   r   r)   r)   r*   r   R  s   

zSSEDecoder.aiter_bytesc                 C sZ   d}|2 z3 dH W }|j ddD ]}||7 }|dr!|V  d}qq6 |r+|V  dS dS )r   r   NTr   r   r   r   r)   r)   r*   r   \  s   

zSSEDecoder._aiter_chunksr   r   ServerSentEvent | Nonec              	   C  s  |s,| j s| js| js| jd u rd S t| j d| j| j| jd}d | _ g | _d | _|S |dr3d S |d\}}}|drF|dd  }|dkrO|| _ d S |dkr[| j| d S |dkrkd	|v rf	 d S || _d S |d
krzt	|| _W d S  t
tfy   Y d S w 	 d S )N
r   : r   rd   rX   r    r   )r   r   r   r   r   join
startswith	partitionappendint	TypeError
ValueError)r(   r   rm   	fieldname_valuer)   r)   r*   r   h  sP   


	zSSEDecoder.decodeNr}   rl   r   r   rS   )rl   r   r   r   rl   r   r   r   )rl   r   r   r   )r   r   r   r   )
r/   r0   r1   r   rJ   rT   r   r   r   r   r)   r)   r)   r*   r   0  s   
 






r   c                   @  s    e Zd ZdddZdd	d
ZdS )r9   rl   r   r   rS   c                 C     dS )r   Nr)   r(   rl   r)   r)   r*   rT        zSSEBytesDecoder.iter_bytesr   r   c                 C  r   )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr)   r   r)   r)   r*   r     r   zSSEBytesDecoder.aiter_bytesNr   r   )r/   r0   r1   rT   r   r)   r)   r)   r*   r9     s    
r9   typr_   r   ;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]]c                 C  s$   t | p| }t|ot|ttfS )zaTypeGuard for determining whether or not the given type is a subclass of `Stream` / `AsyncStream`)r   inspectisclass
issubclassr4   r   )r   originr)   r)   r*   is_stream_class_type  s   r   )failure_message
stream_clsr   r   c                C  s*   ddl m}m} t| dtd||f|d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   )r4   r   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr4   r   r   r   )r   r   r4   r   r)   r)   r*   extract_stream_chunk_type  s   r   )r   r_   r   r   )r   r_   r   r   r   r_   ),
__future__r   abcre   r   r%   typesr   typingr   r   r   r   r   r	   r
   r   typing_extensionsr   r   r   r   r   r   httpx_utilsr   r   rE   r   r   _modelsr   r   ABCMetar   r4   r   r   r   r   r9   r   r   r)   r)   r)   r*   <module>   s2   ( bc)i

	