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+   _/var/www/html/cobodadashboardai.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&   Z_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*   rM   rN   rO   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   rQ   r0   r+   r+   r,   rQ   r   s    zStream.closeN)__name__
__module____qualname____doc____annotations__r-   r/   r4   r7   r'   rH   rS   rQ   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*   rG   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?   rE   r+   r+   r,   r'      sL    


"


zAsyncStream.__stream__r   c                   s   | S r#   r+   r0   r+   r+   r,   
__aenter__   s    zAsyncStream.__aenter__rI   rJ   rK   rL   c                   s   |   I d H  d S r#   rP   rR   r+   r+   r,   	__aexit__   s    zAsyncStream.__aexit__c                   s   | j  I dH  dS rT   )r   acloser0   r+   r+   r,   rQ      s    zAsyncStream.closeN)rU   rV   rW   rX   rY   r-   r[   r\   r7   r'   r_   r`   rQ   r+   r+   r+   r,   rZ   {   s   
3rZ   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=   rd   re   r"   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r*   r>   r=   rd   re   r+   r+   r,   r-      s    
zServerSentEvent.__init__r.   c                 C  s   | j S r#   )rk   r0   r+   r+   r,   r>      s    zServerSentEvent.eventc                 C  s   | j S r#   )ri   r0   r+   r+   r,   rd      s    zServerSentEvent.idc                 C  s   | j S r#   )rl   r0   r+   r+   r,   re      s    zServerSentEvent.retryrD   c                 C  s   | j S r#   )rj   r0   r+   r+   r,   r=      s    zServerSentEvent.datar   c                 C  s   t | jS r#   )rA   loadsr=   r0   r+   r+   r,   rA     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=)rc   r0   r+   r+   r,   __repr__  s    zServerSentEvent.__repr__)rU   rV   rW   r-   propertyr>   rd   re   r=   rA   r   ro   r+   r+   r+   r,   rb      s    rb   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]rj   rf   rk   rg   rl   _last_event_idr   r.   c                 C  s   d | _ g | _d | _d | _d S r#   )rk   rj   rr   rl   r0   r+   r+   r,   r-     s    zSSEDecoder.__init__Iterator[bytes]r5   rF   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*   rF   chunkZraw_linelinerG   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rx   endswithr*   rF   r=   r{   r|   r+   r+   r,   rw      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 )ru   Nrv   )_aiter_chunksrx   ry   rz   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_chunksrD   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
rc   : r   r>   r=   rd    re   )rk   rj   rr   rl   rb   joinr@   	partitionappendint	TypeError
ValueError)r*   r|   rG   	fieldname_valuer+   r+   r,   ry   B  s@    


zSSEDecoder.decodeN)
rU   rV   rW   rY   r-   r6   rw   r^   r   ry   r+   r+   r+   r,   rq   
  s   


rq   c                   @  s,   e Zd ZdddddZddddd	Zd
S )r   rs   r5   rt   c                 C  s   dS )ru   Nr+   r*   rF   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)rU   rV   rW   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   rZ   )r   originr+   r+   r,   is_stream_class_type~  s    r   )failure_messagerf   )
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   rZ   r   ztuple[type, ...])indexZgeneric_basesr   )Z_base_clientr   rZ   r   r
   )r   r   r   rZ   r+   r+   r,   extract_stream_chunk_type  s    r   )&
__future__r   rA   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   rZ   rb   rq   r   r   r   r+   r+   r+   r,   <module>   s(   $ ef)i
	