o
    jJ/                     @  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SSEDecoder | SSEBytesDecoder_decodercast_totype[_T]clientr   returnNonec                C  *   || _ || _|| _| | _|  | _d S Nr   _cast_to_client_make_sse_decoderr   
__stream__	_iteratorselfr   r   r     r-   W/var/www/html/fyndo/pharma/fyndo/venv/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.   r1   *   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  sF    t | jtr| j| j E d H  d S | j| j E d H  d S r$   )
isinstancer   SSEBytesDecoder
iter_bytesr   iter
iter_linesr2   r-   r-   r.   _iter_events1   s   zStream._iter_eventsc           
      c  sN   t t| j}| j}| jj}|  }|D ]}|jdr n|j	d u r]|
 }t|rT|drTd }|d}t|r@|d}|rGt|tsId}t|| jj|d d||||dV  q|
 }|j	dkrt|r|drd }|d}t|r|d}|rt|tsd}t|| jj|d d|||j	d||dV  q|D ]}	qd S Nz[DONE]errormessagez"An error occurred during streaming)rA   requestbody)datar   r   )rD   eventr
   r   r&   r   r'   _process_response_datar>   rD   
startswithrE   jsonr   getr9   strr   rB   
r,   r   r   process_dataiteratorsserD   rA   r@   _sser-   r-   r.   r)   7   sP   




zStream.__stream__r   c                 C  s   | S r$   r-   r2   r-   r-   r.   	__enter__j   s   zStream.__enter__exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                 C  s   |    d S r$   closer,   rR   rT   rV   r-   r-   r.   __exit__m   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   rY   r2   r-   r-   r.   rY   u   s   zStream.closeN)r   r   r   r   r    r   r!   r"   r!   r   )r!   r3   )r!   r8   r!   r   rR   rS   rT   rU   rV   rW   r!   r"   r!   r"   )__name__
__module____qualname____doc____annotations__r/   r1   r7   r>   r)   rQ   r[   rY   r-   r-   r-   r.   r      s   
 





3
r   c                   @  r   ).AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   r   r   r   r   r    r   r!   r"   c                C  r#   r$   r%   r+   r-   r-   r.   r/      r0   zAsyncStream.__init__r   c                   s   | j  I d H S r$   )r*   	__anext__r2   r-   r-   r.   rg      s   zAsyncStream.__anext__AsyncIterator[_T]c                 C s"   | j 2 z	3 d H W }|V  q6 d S r$   r4   r5   r-   r-   r.   	__aiter__   s   zAsyncStream.__aiter__AsyncIterator[ServerSentEvent]c                 C sf   t | jtr| j| j 2 z	3 d H W }|V  q6 d S | j| j 2 z	3 d H W }|V  q&6 d S r$   )r9   r   r:   aiter_bytesr   aiteraiter_lines)r,   rO   r-   r-   r.   r>      s   zAsyncStream._iter_eventsc           
      C sb  t t| j}| j}| jj}|  }|2 z3 d H W }|jdr" n|j	d u ra|
 }t|rX|drXd }|d}t|rD|d}|rKt|tsMd}t|| jj|d d||||dV  q|
 }|j	dkrt|r|drd }|d}t|r|d}|rt|tsd}t|| jj|d d|||j	d||dV  q6 |2 z3 d H W }	q6 d S r?   rF   rL   r-   r-   r.   r)      sR   




*zAsyncStream.__stream__r   c                   s   | S r$   r-   r2   r-   r-   r.   
__aenter__   s   zAsyncStream.__aenter__rR   rS   rT   rU   rV   rW   c                   s   |   I d H  d S r$   rX   rZ   r-   r-   r.   	__aexit__   s   zAsyncStream.__aexit__c                   s   | j  I dH  dS r\   )r   acloser2   r-   r-   r.   rY      s   zAsyncStream.closeN)r   r   r   r   r    r   r!   r"   r]   )r!   rh   )r!   rj   r^   r_   r`   )ra   rb   rc   rd   re   r/   rg   ri   r>   r)   rn   ro   rY   r-   r-   r-   r.   rf   ~   s   
 





3
rf   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rE   rD   idretryrE   
str | NonerD   rs   rt   
int | Noner!   r"   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r,   rE   rD   rs   rt   r-   r-   r.   r/      s   

zServerSentEvent.__init__c                 C     | j S r$   )rz   r2   r-   r-   r.   rE         zServerSentEvent.eventc                 C  r|   r$   )rx   r2   r-   r-   r.   rs      r}   zServerSentEvent.idc                 C  r|   r$   )r{   r2   r-   r-   r.   rt     r}   zServerSentEvent.retryrK   c                 C  r|   r$   )ry   r2   r-   r-   r.   rD     r}   zServerSentEvent.datar   c                 C  s   t | jS r$   )rI   loadsrD   r2   r-   r-   r.   rI   	  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=)rr   r2   r-   r-   r.   __repr__  s   &zServerSentEvent.__repr__)
rE   ru   rD   ru   rs   ru   rt   rv   r!   r"   )r!   ru   )r!   rv   )r!   rK   )r!   r   )ra   rb   rc   r/   propertyrE   rs   rt   rD   rI   r   r   r-   r-   r-   r.   rq      s"    
rq   c                   @  sV   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S )
SSEDecoderz	list[str]ry   ru   rz   rv   r{   _last_event_idr!   r"   c                 C  s   d | _ g | _d | _d | _d S r$   )rz   ry   r   r{   r2   r-   r-   r.   r/     s   
zSSEDecoder.__init__rN   Iterator[str]r8   c                 c  s2    |D ]}| d}| |}|dur|V  qdS )zTGiven an iterator that yields lines, iterate over it & yield every event encountered
Nrstripdecoder,   rN   linerO   r-   r-   r.   r<     s   

zSSEDecoder.iterAsyncIterator[str]rj   c                 C s<   |2 z3 dH W }| d}| |}|dur|V  q6 dS )zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredNr   r   r   r-   r-   r.   rl   %  s   

zSSEDecoder.aiterr   rK   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 )Nr   rr   : r   rE   rD   rs    rt   )rz   ry   r   r{   rq   joinrH   	partitionappendint	TypeError
ValueError)r,   r   rO   	fieldname_valuer-   r-   r.   r   -  sP   


	zSSEDecoder.decodeNr`   )rN   r   r!   r8   )rN   r   r!   rj   )r   rK   r!   r   )ra   rb   rc   re   r/   r<   rl   r   r-   r-   r-   r.   r     s   
 


r   c                   @  s    e Zd ZdddZdd	d
ZdS )r:   rN   Iterator[bytes]r!   r8   c                 C     dS )z^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredNr-   r,   rN   r-   r-   r.   r;   `     zSSEBytesDecoder.iter_bytesAsyncIterator[bytes]rj   c                 C  r   )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr-   r   r-   r-   r.   rk   d  r   zSSEBytesDecoder.aiter_bytesN)rN   r   r!   r8   )rN   r   r!   rj   )ra   rb   rc   r;   rk   r-   r-   r-   r.   r:   ^  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   rf   )r   originr-   r-   r.   is_stream_class_typei  s   r   )failure_message
stream_clsr   ru   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   rf   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   rf   r   r
   )r   r   r   rf   r-   r-   r.   extract_stream_chunk_typeo  s   r   )r   r   r!   r   )r   r   r   ru   r!   r   )&
__future__r   rI   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   rf   rq   r   r:   r   r   r-   r-   r-   r.   <module>   s*   $ hj)M

	