a
    ~g.3                     @  s0  d dl m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 ddlmZ erdd	lmZmZ e
d
ZG dd de	e ZG dd de	e Z G dd dZ!G dd dZ"eG dd deZ#dddddZ$ddddddddZ%dS )    )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                   @  s   e Zd ZU dZded< ded< ddddd	d
dZddddZddddZddddZddddZ	ddddZ
ddddddd Zddd!d"Zd#S )$StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseSSEBytesDecoder_decodertype[_T]r   Nonecast_tor   clientreturnc                C  s*   || _ || _|| _| | _|  | _d S Nr   _cast_to_clientZ_make_sse_decoderr   
__stream__	_iteratorselfr    r   r!    r+   V/var/www/html/emsaiapi.evdpl.com/venv/lib/python3.9/site-packages/openai/_streaming.py__init__   s
    
zStream.__init__r   r"   c                 C  s
   | j  S r#   )r(   __next__r*   r+   r+   r,   r/   *   s    zStream.__next__zIterator[_T]c                 c  s   | j D ]
}|V  qd S r#   r(   r*   itemr+   r+   r,   __iter__-   s    
zStream.__iter__Iterator[ServerSentEvent]c                 c  s   | j | j E d H  d S r#   )r   
iter_bytesr   r0   r+   r+   r,   _iter_events1   s    zStream._iter_eventsc           
      c  s^  t t| j}| j}| jj}|  }|D ]$}|jdr> qN|j	d u r|
 }t|r|drd }|d}t|r|d}|rt|tsd}t|| jj|d d||||dV  q&|
 }|j	dkr4t|r4|dr4d }|d}t|r|d}|rt|tsd}t|| jj|d d|||j	d||dV  q&|D ]}	qRd S Nz[DONE]errormessagez"An error occurred during streaming)r:   requestbody)datar    r   )r=   eventr
   r   r%   r   r&   _process_response_datar7   r=   
startswithr>   jsonr   get
isinstancestrr   r;   
r*   r    r   Zprocess_dataiteratorsser=   r:   r9   Z_sser+   r+   r,   r'   4   sL    



"


zStream.__stream__r   c                 C  s   | S r#   r+   r0   r+   r+   r,   	__enter__g   s    zStream.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbr"   c                 C  s   |    d S r#   closer*   rN   rO   rP   r+   r+   r,   __exit__j   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)r   rR   r0   r+   r+   r,   rR   r   s    zStream.closeN)__name__
__module____qualname____doc____annotations__r-   r/   r4   r7   r'   rI   rT   rR   r+   r+   r+   r,   r      s   
3r   c                   @  s   e Zd ZU dZded< ded< ddddd	d
dZddddZddddZddddZddddZ	ddddZ
ddddddd Zddd!d"Zd#S )$AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   zSSEDecoder | SSEBytesDecoderr   r   r   r   r   c                C  s*   || _ || _|| _| | _|  | _d S r#   r$   r)   r+   r+   r,   r-      s
    
zAsyncStream.__init__r   r.   c                   s   | j  I d H S r#   )r(   	__anext__r0   r+   r+   r,   r\      s    zAsyncStream.__anext__zAsyncIterator[_T]c                 C s    | j 2 z3 d H W }|V  q6 d S r#   r1   r2   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 r#   )r   aiter_bytesr   )r*   rH   r+   r+   r,   r7      s    zAsyncStream._iter_eventsc           
      C sr  t t| j}| j}| jj}|  }|2 z,3 d H W }|jdrF qX|j	d u r|
 }t|r|drd }|d}t|r|d}|rt|tsd}t|| jj|d d||||dV  q&|
 }|j	dkr<t|r<|dr<d }|d}t|r|d}|r"t|ts&d}t|| jj|d d|||j	d||dV  q&6 |2 z3 d H W }	q\6 d S r8   r?   rF   r+   r+   r,   r'      sL    


"


zAsyncStream.__stream__r   c                   s   | S r#   r+   r0   r+   r+   r,   
__aenter__   s    zAsyncStream.__aenter__rJ   rK   rL   rM   c                   s   |   I d H  d S r#   rQ   rS   r+   r+   r,   	__aexit__   s    zAsyncStream.__aexit__c                   s   | j  I dH  dS rU   )r   acloser0   r+   r+   r,   rR      s    zAsyncStream.closeN)rV   rW   rX   rY   rZ   r-   r\   r]   r7   r'   r`   ra   rR   r+   r+   r+   r,   r[   {   s   
3r[   c                   @  s   e Zd ZdddddddddddddZedd	d
dZedd	ddZedd	ddZedd	ddZdd	ddZ	e
dd	ddZdS )ServerSentEventNr>   r=   idretry
str | None
int | Noner   )r>   r=   re   rf   r"   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r*   r>   r=   re   rf   r+   r+   r,   r-      s    
zServerSentEvent.__init__r.   c                 C  s   | j S r#   )rl   r0   r+   r+   r,   r>      s    zServerSentEvent.eventc                 C  s   | j S r#   )rj   r0   r+   r+   r,   re      s    zServerSentEvent.idc                 C  s   | j S r#   )rm   r0   r+   r+   r,   rf      s    zServerSentEvent.retryrE   c                 C  s   | j S r#   )rk   r0   r+   r+   r,   r=      s    zServerSentEvent.datar   c                 C  s   t | jS r#   )rB   loadsr=   r0   r+   r+   r,   rB     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=)rd   r0   r+   r+   r,   __repr__  s    zServerSentEvent.__repr__)rV   rW   rX   r-   propertyr>   re   rf   r=   rB   r   rp   r+   r+   r+   r,   rc      s    rc   c                   @  s   e Zd ZU ded< ded< ded< ded< dd	d
dZdddddZdddddZdddddZdddddZdddddZ	dS )
SSEDecoderz	list[str]rk   rg   rl   rh   rm   _last_event_idr   r.   c                 C  s   d | _ g | _d | _d | _d S r#   )rl   rk   rs   rm   r0   r+   r+   r,   r-     s    zSSEDecoder.__init__Iterator[bytes]r5   rG   r"   c                 c  s@   |  |D ]0}| 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*   rG   chunkZraw_linelinerH   r+   r+   r,   r6     s    

zSSEDecoder.iter_bytesc                 c  sJ   d}|D ]2}|j ddD ] }||7 }|dr|V  d}qq|rF|V  dS )^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunks    Tkeependss   s   

s   

Nry   endswithr*   rG   r=   r|   r}   r+   r+   r,   rx      s    
zSSEDecoder._iter_chunksAsyncIterator[bytes]r^   c                 C sJ   |  |2 z83 dH W }| D ]"}|d}| |}|r|V  qq
6 dS )rv   Nrw   )_aiter_chunksry   rz   r{   r+   r+   r,   r_   ,  s    

zSSEDecoder.aiter_bytesc                 C sT   d}|2 z:3 dH W }|j ddD ] }||7 }|dr |V  d}q q6 |rP|V  dS )r~   r   NTr   r   r   r   r+   r+   r,   r   6  s    

zSSEDecoder._aiter_chunksrE   zServerSentEvent | None)r}   r"   c              	   C  s   |sX| j s$| js$| js$| jd u r$d S t| j d| j| j| jd}d | _ g | _d | _|S |drfd S |d\}}}|dr|dd  }|dkr|| _ n`|dkr| j| nJ|dkrd	|v rq|| _n0|d
krzt	|| _W q t
tfy   Y q0 n d S )N
rd   : r   r>   r=   re    rf   )rl   rk   rs   rm   rc   joinrA   	partitionappendint	TypeError
ValueError)r*   r}   rH   	fieldname_valuer+   r+   r,   rz   B  s@    


zSSEDecoder.decodeN)
rV   rW   rX   rZ   r-   r6   rx   r_   r   rz   r+   r+   r+   r,   rr   
  s   


rr   c                   @  s,   e Zd ZdddddZddddd	Zd
S )r   rt   r5   ru   c                 C  s   dS )rv   Nr+   r*   rG   r+   r+   r,   r6   u  s    zSSEBytesDecoder.iter_bytesr   r^   c                 C  s   dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr+   r   r+   r+   r,   r_   y  s    zSSEBytesDecoder.aiter_bytesN)rV   rW   rX   r6   r_   r+   r+   r+   r,   r   s  s   r   typez;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]])typr"   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
issubclassr   r[   )r   originr+   r+   r,   is_stream_class_type~  s    r   )failure_messagerg   )
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   )r   r[   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   r[   r   r
   )r   r   r   r[   r+   r+   r,   extract_stream_chunk_type  s    r   )&
__future__r   rB   r   typesr   typingr   r   r   r   r   r	   r
   typing_extensionsr   r   r   r   r   r   httpx_utilsr   r   _exceptionsr   r&   r   r   r   r   r[   rc   rr   r   r   r   r+   r+   r+   r,   <module>   s(   $ ef)i
	