HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/openai/__pycache__/_streaming.cpython-310.pyc
o

���g.3�@s"ddlmZddlZddlZddlmZddlmZmZm	Z	m
Z
mZmZm
Z
ddlmZmZmZmZmZmZddlZddlmZmZddlmZerRdd	lmZmZe
d
�ZGdd�de	e�ZGd
d�de	e�Z Gdd�d�Z!Gdd�d�Z"eGdd�de��Z#d!dd�Z$dd�d"dd �Z%dS)#�)�annotationsN)�
TracebackType)�
TYPE_CHECKING�Any�Generic�TypeVar�Iterator�
AsyncIterator�cast)�Self�Protocol�	TypeGuard�override�
get_origin�runtime_checkable�)�
is_mapping�extract_type_var_from_base)�APIError)�OpenAI�AsyncOpenAI�_Tc@�reZdZUdZded<ded<d'dd
�Zd(dd�Zd)dd�Zd*dd�Zd)dd�Z	d+dd�Z
d,d"d#�Zd-d$d%�Zd&S).�StreamzJProvides the core interface to iterate over a synchronous stream response.�httpx.Response�response�SSEBytesDecoder�_decoder�cast_to�type[_T]�clientr�return�NonecC�*||_||_||_|��|_|��|_dS�N�r�_cast_to�_client�_make_sse_decoderr�
__stream__�	_iterator��selfrrr �r-�</usr/local/lib/python3.10/dist-packages/openai/_streaming.py�__init__�

zStream.__init__rcCs
|j��Sr$)r*�__next__�r,r-r-r.r1*s
zStream.__next__�Iterator[_T]ccs�|jD]}|VqdSr$�r*�r,�itemr-r-r.�__iter__-s�
�zStream.__iter__�Iterator[ServerSentEvent]ccs�|j�|j���EdHdSr$)r�
iter_bytesrr2r-r-r.�_iter_events1s�zStream._iter_eventsc
csN�tt|j�}|j}|jj}|��}|D]�}|j�d�rn�|j	dur]|�
�}t|�rT|�d�rTd}|�d�}t|�r@|�d�}|rGt
|t�sId}t||jj|dd��||||d�Vq|�
�}|j	dkr�t|�r�|�d�r�d}|�d�}t|�r|�d�}|r�t
|t�s�d}t||jj|dd��|||j	d�||d�Vq|D]}	q�dS�Nz[DONE]�error�messagez"An error occurred during streaming)r=�request�body)�datarr)r@�event�r
rr&rr'�_process_response_datar:r@�
startswithrA�jsonr�get�
isinstance�strrr>�
r,rr�process_data�iterator�sser@r=r<�_sser-r-r.r)4sP�


�

��zStream.__stream__rcCs|Sr$r-r2r-r-r.�	__enter__gszStream.__enter__�exc_type�type[BaseException] | None�exc�BaseException | None�exc_tb�TracebackType | NonecCs|��dSr$��close�r,rOrQrSr-r-r.�__exit__jszStream.__exit__cCs|j��dS�z�
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)rrVr2r-r-r.rVrszStream.closeN)rrrrr rr!r"�r!r)r!r3)r!r8�r!r�rOrPrQrRrSrTr!r"�r!r")
�__name__�
__module__�__qualname__�__doc__�__annotations__r/r1r7r:r)rNrXrVr-r-r-r.rs






3
rc@r).�AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.rrzSSEDecoder | SSEBytesDecoderrrrr rr!r"cCr#r$r%r+r-r-r.r/�r0zAsyncStream.__init__rc�s�|j��IdHSr$)r*�	__anext__r2r-r-r.rd�s�zAsyncStream.__anext__�AsyncIterator[_T]cCs"�|j2z	3dHW}|Vq6dSr$r4r5r-r-r.�	__aiter__�s��zAsyncStream.__aiter__�AsyncIterator[ServerSentEvent]cCs.�|j�|j���2z	3dHW}|Vq
6dSr$)r�aiter_bytesr)r,rLr-r-r.r:�s��zAsyncStream._iter_eventsc
Csb�tt|j�}|j}|jj}|��}|2z�3dHW}|j�d�r"n�|j	dura|�
�}t|�rX|�d�rXd}|�d�}t|�rD|�d�}|rKt
|t�sMd}t||jj|dd��||||d�Vq|�
�}|j	dkr�t|�r�|�d�r�d}|�d�}t|�r�|�d�}|r�t
|t�s�d}t||jj|dd��|||j	d�||d�Vq6|2z3dHW}	q�6dSr;rBrIr-r-r.r)�sR�


�

��*�zAsyncStream.__stream__rc�s�|Sr$r-r2r-r-r.�
__aenter__�s�zAsyncStream.__aenter__rOrPrQrRrSrTc�s�|��IdHdSr$rUrWr-r-r.�	__aexit__�s�zAsyncStream.__aexit__c�s�|j��IdHdSrY)r�acloser2r-r-r.rV�s�zAsyncStream.closeN)rrrrr rr!r"rZ)r!re)r!rgr[r\r])
r^r_r`rarbr/rdrfr:r)rirjrVr-r-r-r.rc{s






3
rcc@sreZdZddddd�ddd�Zedd
d��Zeddd��Zeddd��Zeddd��Zddd�Z	e
ddd��ZdS) �ServerSentEventN�rAr@�id�retryrA�
str | Noner@rnro�
int | Noner!r"cCs,|durd}||_||_|pd|_||_dS)N�)�_id�_data�_event�_retry)r,rAr@rnror-r-r.r/�s

zServerSentEvent.__init__cC�|jSr$)rur2r-r-r.rA��zServerSentEvent.eventcCrwr$)rsr2r-r-r.rn�rxzServerSentEvent.idcCrwr$)rvr2r-r-r.ro�rxzServerSentEvent.retryrHcCrwr$)rtr2r-r-r.r@�rxzServerSentEvent.datarcCst�|j�Sr$)rE�loadsr@r2r-r-r.rEszServerSentEvent.jsonc	Cs&d|j�d|j�d|j�d|j�d�	S)NzServerSentEvent(event=z, data=z, id=z, retry=�)rmr2r-r-r.�__repr__s&zServerSentEvent.__repr__)
rArpr@rprnrprorqr!r")r!rp)r!rq)r!rH)r!r)r^r_r`r/�propertyrArnror@rErr{r-r-r-r.rl�s"�
rlc@sjeZdZUded<ded<ded<ded<dd
d�Zd dd�Zd!dd�Zd"dd�Zd#dd�Zd$dd�Z	dS)%�
SSEDecoderz	list[str]rtrprurqrv�_last_event_idr!r"cCsd|_g|_d|_d|_dSr$)rurtr~rvr2r-r-r.r/s
zSSEDecoder.__init__rK�Iterator[bytes]r8ccsB�|�|�D]}|��D]}|�d�}|�|�}|r|VqqdS)�^Given an iterator that yields raw binary data, iterate over it & yield every event encountered�utf-8N)�_iter_chunks�
splitlines�decode�r,rK�chunk�raw_line�linerLr-r-r.r9s�

���zSSEDecoder.iter_bytesccsP�d}|D]}|jdd�D]}||7}|�d�r|Vd}q
q|r&|VdSdS)�^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,rKr@r�r�r-r-r.r� s�
��
�zSSEDecoder._iter_chunks�AsyncIterator[bytes]rgcCsL�|�|�2z3dHW}|��D]}|�d�}|�|�}|r!|Vqq6dS)r�Nr�)�
_aiter_chunksr�r�r�r-r-r.rh,s�

���zSSEDecoder.aiter_bytescCsZ�d}|2z3dHW}|jdd�D]}||7}|�d�r!|Vd}qq6|r+|VdSdS)r�r�NTr�r�r�r�r-r-r.r�6s�
���
�zSSEDecoder._aiter_chunksr�rH�ServerSentEvent | Nonec	Cs|s,|js|js|js|jdurdSt|jd�|j�|j|jd�}d|_g|_d|_|S|�d�r3dS|�d�\}}}|�d�rF|dd�}|dkrO||_dS|dkr[|j�|�dS|dkrkd	|vrf	dS||_dS|d
kr�zt	|�|_WdSt
tfy�YdSw	dS)N�
rm�:� rrAr@rn�ro)rurtr~rvrl�joinrD�	partition�append�int�	TypeError�
ValueError)r,r�rL�	fieldname�_�valuer-r-r.r�BsP
�

���	���zSSEDecoder.decodeNr]�rKrr!r8)rKrr!r�rKr�r!rg)rKr�r!r�)r�rHr!r�)
r^r_r`rbr/r9r�rhr�r�r-r-r-r.r}
s







r}c@s eZdZddd�Zd
d	d
�ZdS)rrKrr!r8cC�dS)r�Nr-�r,rKr-r-r.r9u�zSSEBytesDecoder.iter_bytesr�rgcCr�)zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr-r�r-r-r.rhyr�zSSEBytesDecoder.aiter_bytesNr�r�)r^r_r`r9rhr-r-r-r.rss
r�typ�typer!�;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]]cCs$t|�p|}t�|�ot|ttf�S)zaTypeGuard for determining whether or not the given type is a subclass of `Stream` / `AsyncStream`)r�inspect�isclass�
issubclassrrc)r��originr-r-r.�is_stream_class_type~sr�)�failure_message�
stream_clsr�rpcCs*ddlm}m}t|dtd||f�|d�S)aGiven 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)rrcrztuple[type, ...])�index�
generic_basesr�)�_base_clientrrcrr
)r�r�rrcr-r-r.�extract_stream_chunk_type�s�r�)r�r�r!r�)r�r�r�rpr!r�)&�
__future__rrEr��typesr�typingrrrrrr	r
�typing_extensionsrrr
rrr�httpx�_utilsrr�_exceptionsrr'rrrrrcrlr}rr�r�r-r-r-r.�<module>s*$ ef)i

	�