o
    wqi4                     @  s"  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rRd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Z$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                   @  r   e Zd ZU dZ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,d"d#Zd-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Nonec                C  *   || _ || _|| _| | _|  | _d S Nr   _cast_to_clientZ_make_sse_decoderr   
__stream__	_iteratorselfr   r   r     r,   X/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/openai/_streaming.py__init__   
   
zStream.__init__r   c                 C  s
   | j  S r$   )r)   __next__r+   r,   r,   r-   r0   *   s   
zStream.__next__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   r1   r,   r,   r-   _iter_events1   s   zStream._iter_eventsc           	      c  sT   t t| j}| j}| jj}|  }|D ]}|jdr n|j	rj|j	drj|
 }|j	dkr]t|r]|dr]d }|d}t|rI|d}|rPt|tsRd}t|| jj|d d|||j	d||dV  q|
 }t|r|drd }|d}t|r|d}|rt|tsd}t|| jj|d d||||dV  q|  d S 	Nz[DONE]zthread.errormessagez"An error occurred during streaming)r<   requestbody)dataevent)r?   r   r   )r
   r   r&   r   r'   _process_response_datar9   r?   
startswithr@   jsonr   get
isinstancestrr   r=   close	r+   r   r   Zprocess_dataiteratorsser?   r<   r;   r,   r,   r-   r(   4   sL   



zStream.__stream__r   c                 C  s   | S r$   r,   r1   r,   r,   r-   	__enter__f   s   zStream.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S r$   rG   r+   rL   rN   rP   r,   r,   r-   __exit__i   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   rG   r1   r,   r,   r-   rG   q   s   zStream.closeN)r   r   r   r   r    r   r!   r"   r!   r   )r!   r2   )r!   r7   r!   r   rL   rM   rN   rO   rP   rQ   r!   r"   r!   r"   )__name__
__module____qualname____doc____annotations__r.   r0   r6   r9   r(   rK   rT   rG   r,   r,   r,   r-   r      s   
 





2
r   c                   @  r   ).AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   zSSEDecoder | SSEBytesDecoderr   r   r   r    r   r!   r"   c                C  r#   r$   r%   r*   r,   r,   r-   r.      r/   zAsyncStream.__init__r   c                   s   | j  I d H S r$   )r)   	__anext__r1   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 r$   r3   r4   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+   rJ   r,   r,   r-   r9      s   zAsyncStream._iter_eventsc           	      C sd  t t| j}| j}| jj}|  }|2 z3 d H W }|jdr" n|j	rn|j	drn|
 }|j	dkrat|ra|drad }|d}t|rM|d}|rTt|tsVd}t|| jj|d d|||j	d||dV  q|
 }t|r|drd }|d}t|r|d}|rt|tsd}t|| jj|d d||||dV  q6 | I d H  d S r:   )r
   r   r&   r   r'   rA   r9   r?   rB   r@   rC   r   rD   rE   rF   r   r=   acloserH   r,   r,   r-   r(      sN   



*zAsyncStream.__stream__r   c                   s   | S r$   r,   r1   r,   r,   r-   
__aenter__   s   zAsyncStream.__aenter__rL   rM   rN   rO   rP   rQ   c                   s   |   I d H  d S r$   rR   rS   r,   r,   r-   	__aexit__   s   zAsyncStream.__aexit__c                   s   | j  I dH  dS rU   )r   re   r1   r,   r,   r-   rG      s   zAsyncStream.closeN)r   r   r   r   r    r   r!   r"   rV   )r!   ra   )r!   rc   rW   rX   rY   )rZ   r[   r\   r]   r^   r.   r`   rb   r9   r(   rf   rg   rG   r,   r,   r,   r-   r_   z   s   
 





2
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r@   r?   idretryr@   
str | Noner?   rj   rk   
int | Noner!   r"   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r+   r@   r?   rj   rk   r,   r,   r-   r.      s   

zServerSentEvent.__init__c                 C     | j S r$   )rq   r1   r,   r,   r-   r@         zServerSentEvent.eventc                 C  rs   r$   )ro   r1   r,   r,   r-   rj      rt   zServerSentEvent.idc                 C  rs   r$   )rr   r1   r,   r,   r-   rk      rt   zServerSentEvent.retryrF   c                 C  rs   r$   )rp   r1   r,   r,   r-   r?      rt   zServerSentEvent.datar   c                 C  s   t | jS r$   )rC   loadsr?   r1   r,   r,   r-   rC      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=)ri   r1   r,   r,   r-   __repr__  s   &zServerSentEvent.__repr__)
r@   rl   r?   rl   rj   rl   rk   rm   r!   r"   )r!   rl   )r!   rm   )r!   rF   )r!   r   )rZ   r[   r\   r.   propertyr@   rj   rk   r?   rC   r   rw   r,   r,   r,   r-   rh      s"    
rh   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]rp   rl   rq   rm   rr   _last_event_idr!   r"   c                 C  s   d | _ g | _d | _d | _d S r$   )rq   rp   rz   rr   r1   r,   r,   r-   r.     s   
zSSEDecoder.__init__rI   Iterator[bytes]r7   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+   rI   chunkZraw_linelinerJ   r,   r,   r-   r8     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+   rI   r?   r   r   r,   r,   r-   r~     s   

zSSEDecoder._iter_chunksAsyncIterator[bytes]rc   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-   rd   *  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   4  s   

zSSEDecoder._aiter_chunksr   rF   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
ri   : r   r@   r?   rj    rk   )rq   rp   rz   rr   rh   joinrB   	partitionappendint	TypeError
ValueError)r+   r   rJ   	fieldname_valuer,   r,   r-   r   @  sP   


	zSSEDecoder.decodeNrY   rI   r{   r!   r7   )rI   r{   r!   r{   rI   r   r!   rc   )rI   r   r!   r   )r   rF   r!   r   )
rZ   r[   r\   r^   r.   r8   r~   rd   r   r   r,   r,   r,   r-   ry     s   
 






ry   c                   @  s    e Zd ZdddZdd	d
ZdS )r   rI   r{   r!   r7   c                 C     dS )r|   Nr,   r+   rI   r,   r,   r-   r8   s     zSSEBytesDecoder.iter_bytesr   rc   c                 C  r   )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr,   r   r,   r,   r-   rd   w  r   zSSEBytesDecoder.aiter_bytesNr   r   )rZ   r[   r\   r8   rd   r,   r,   r,   r-   r   q  s    
r   typtyper!   ;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
issubclassr   r_   )r   originr,   r,   r-   is_stream_class_type|  s   r   )failure_message
stream_clsr   rl   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, ...])indexZgeneric_basesr   )Z_base_clientr   r_   r   r
   )r   r   r   r_   r,   r,   r-   extract_stream_chunk_type  s   r   )r   r   r!   r   )r   r   r   rl   r!   r   )&
__future__r   rC   r   typesr   typingr   r   r   r   r   r	   r
   Ztyping_extensionsr   r   r   r   r   r   Zhttpx_utilsr   r   _exceptionsr   r'   r   r   r   r   r_   rh   ry   r   r   r   r,   r,   r,   r-   <module>   s*   $ de)i

	