a
    !f                     @  s   d dl mZ d dlZd dlmZmZmZmZmZ d dl	m
Z
 d dlZddlmZ ddlmZ ddlmZ er|dd	lmZm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dS )    )annotationsN)TYPE_CHECKINGAnyGenericIteratorAsyncIterator)override   )	ResponseT)
is_mapping)APIError)SyncAPIClientAsyncAPIClientc                   @  sf   e Zd ZU dZ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S )StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.Responseresponsetype[ResponseT]r   Nonecast_tor   clientreturnc                C  s(   || _ || _|| _t | _|  | _d S Nr   _cast_to_client
SSEDecoder_decoder
__stream__	_iteratorselfr   r   r    r"   R/var/www/html/python-backend/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[ResponseT]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   iterr   
iter_linesr'   r"   r"   r#   _iter_events+   s    zStream._iter_eventsc                 c  s   | j }| j}| jj}|  }|D ]^}|jdr4 q|jd u r | }t	|rn|
drntd| jj|d d||||dV  q |D ]}qd S Nz[DONE]errorz!An error ocurred during streaming)messagerequestbody)datar   r   r   r   r   Z_process_response_datar/   r5   
startswitheventjsonr   getr   r3   r!   r   r   Zprocess_dataiteratorsser5   r"   r"   r#   r   .   s$    
zStream.__stream__N)
__name__
__module____qualname____doc____annotations__r$   r&   r+   r/   r   r"   r"   r"   r#   r      s   
r   c                   @  sf   e Zd ZU dZ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S )AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   r   r   r   r   c                C  s(   || _ || _|| _t | _|  | _d S r   r   r    r"   r"   r#   r$   M   s
    zAsyncStream.__init__r
   r%   c                   s   | j  I d H S r   )r   	__anext__r'   r"   r"   r#   rD   Z   s    zAsyncStream.__anext__zAsyncIterator[ResponseT]c                 C s    | j 2 z3 d H W }|V  q6 d S r   r(   r)   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   aiterr   Zaiter_lines)r!   r=   r"   r"   r#   r/   a   s    zAsyncStream._iter_eventsc                 C s   | j }| j}| jj}|  }|2 zf3 d H W }|jdr< q|jd u r | }t	|rv|
drvtd| jj|d d||||dV  q 6 |2 z3 d H W }q6 d S r0   r6   r;   r"   r"   r#   r   e   s$    
zAsyncStream.__stream__N)
r>   r?   r@   rA   rB   r$   rD   rE   r/   r   r"   r"   r"   r#   rC   H   s   
rC   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r8   r5   idretry
str | None
int | Noner   )r8   r5   rJ   rK   r   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r!   r8   r5   rJ   rK   r"   r"   r#   r$      s    
zServerSentEvent.__init__r%   c                 C  s   | j S r   )rQ   r'   r"   r"   r#   r8      s    zServerSentEvent.eventc                 C  s   | j S r   )rO   r'   r"   r"   r#   rJ      s    zServerSentEvent.idc                 C  s   | j S r   )rR   r'   r"   r"   r#   rK      s    zServerSentEvent.retrystrc                 C  s   | j S r   )rP   r'   r"   r"   r#   r5      s    zServerSentEvent.datar   c                 C  s   t | jS r   )r9   loadsr5   r'   r"   r"   r#   r9      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   r'   r"   r"   r#   __repr__   s    zServerSentEvent.__repr__)r>   r?   r@   r$   propertyr8   rJ   rK   r5   r9   r   rV   r"   r"   r"   r#   rH      s    rH   c                   @  sl   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S )r   z	list[str]rP   rL   rQ   rM   rR   _last_event_idr   r%   c                 C  s   d | _ g | _d | _d | _d S r   )rQ   rP   rX   rR   r'   r"   r"   r#   r$      s    zSSEDecoder.__init__zIterator[str]r,   )r<   r   c                 c  s0   |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!   r<   liner=   r"   r"   r#   r-      s
    

zSSEDecoder.iterzAsyncIterator[str]rF   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 encounteredNrY   rZ   r]   r"   r"   r#   rG      s
    

zSSEDecoder.aiterrS   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 )NrY   rI   : r	   r8   r5   rJ    rK   )rQ   rP   rX   rR   rH   joinr7   	partitionappendint	TypeError
ValueError)r!   r^   r=   	fieldname_valuer"   r"   r#   r\      s@    


zSSEDecoder.decodeN)r>   r?   r@   rB   r$   r-   rG   r\   r"   r"   r"   r#   r      s   
r   )
__future__r   r9   typingr   r   r   r   r   Ztyping_extensionsr   Zhttpx_typesr
   _utilsr   _exceptionsr   Z_base_clientr   r   r   rC   rH   r   r"   r"   r"   r#   <module>   s   67)