o
    ùT·jÃ=  ã                   @  sj  d dl mZ d dl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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mZ dd	lmZm Z m!Z! erjdd
l"m#Z#m$Z$ ddl%m&Z& edƒZ'G dd„ de
e' ƒZ(G dd„ de
e' ƒZ)G dd„ dƒZ*e +d¡Z,G dd„ dƒZ-G dd„ dƒZ.eG dd„ deƒƒZ/d&dd„Z0dd œd'd$d%„Z1dS )(é    )ÚannotationsN)ÚTracebackType)ÚTYPE_CHECKINGÚAnyÚGenericÚTypeVarÚIteratorÚOptionalÚAsyncIteratorÚcast)ÚSelfÚProtocolÚ	TypeGuardÚoverrideÚ
get_originÚruntime_checkableé   )Ú
is_mappingÚextract_type_var_from_base)Úrequest_exceptionsÚtimeout_exceptions)ÚAPIErrorÚAPITimeoutErrorÚAPIConnectionError)ÚOpenAIÚAsyncOpenAI)ÚFinalRequestOptionsÚ_Tc                   @  s„   e Zd ZU dZded< dZded< ded< d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d0d'd(„Zd1d)d*„ZdS )2ÚStreamzJProvides the core interface to iterate over a synchronous stream response.úhttpx2.ResponseÚresponseNúOptional[FinalRequestOptions]Ú_optionsÚSSEBytesDecoderÚ_decoder©ÚoptionsÚcast_toútype[_T]Úclientr   r&   ÚreturnÚNonec                C  ó0   || _ || _|| _|| _| ¡ | _|  ¡ | _d S ©N©r    Ú_cast_toÚ_clientr"   Ú_make_sse_decoderr$   Ú
__stream__Ú	_iterator©Úselfr'   r    r)   r&   © r6   úT/home/dinkstrade/pdmp-scanner/venv/lib/python3.10/site-packages/openai/_streaming.pyÚ__init__    ó   
zStream.__init__r   c                 C  s
   | j  ¡ S r-   )r3   Ú__next__©r5   r6   r6   r7   r:   /   s   
zStream.__next__úIterator[_T]c                 c  s   � | j D ]}|V  qd S r-   ©r3   ©r5   Úitemr6   r6   r7   Ú__iter__2   s   €
ÿzStream.__iter__úIterator[ServerSentEvent]c              
   c  st   � z| j  | j ¡ ¡E d H  W d S  tƒ y% } zt| jjd�|‚d }~w tƒ y9 } zt| jjd�|‚d }~ww ©N)Úrequest)r$   Ú
iter_bytesr    r   r   rC   r   r   )r5   Úerrr6   r6   r7   Ú_iter_events6   s   €€€ÿzStream._iter_eventsc           	      c  sŽ  � t t| jƒ}| j}| jj}|  ¡ }z¯|D ]ž}|j d¡r nœ|j	rk|j	 d¡rk| 
¡ }|j	dkr^t|ƒr^| d¡r^d }| d¡}t|ƒrJ| d¡}|rQt|tƒsSd}t|| jj|d d�‚|||j	dœ||d�V  q| 
¡ }t|ƒrœ| d¡rœd }| d¡}t|ƒrˆ| d¡}|r�t|tƒs‘d}t|| jj|d d�‚|| jd ur¬| jjr¬||j	dœn|||d�V  qW | ¡  d S W | ¡  d S | ¡  w ©	Nz[DONE]zthread.ÚerrorÚmessagez"An error occurred during streaming)rI   rC   Úbody)ÚdataÚevent)rK   r'   r    )r   r   r/   r    r0   Ú_process_response_datarF   rK   Ú
startswithrL   Újsonr   ÚgetÚ
isinstanceÚstrr   rC   r"   Úsynthesize_event_and_dataÚclose©	r5   r'   r    Úprocess_dataÚiteratorÚsserK   rI   rH   r6   r6   r7   r2   >   s`   €

ý

ýÿ
ûÙ0Ò.zStream.__stream__r   c                 C  s   | S r-   r6   r;   r6   r6   r7   Ú	__enter__w   s   zStream.__enter__Úexc_typeútype[BaseException] | NoneÚexcúBaseException | NoneÚexc_tbúTracebackType | Nonec                 C  ó   |   ¡  d S r-   ©rT   ©r5   rZ   r\   r^   r6   r6   r7   Ú__exit__z   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    rT   r;   r6   r6   r7   rT   ‚   s   zStream.close)
r'   r(   r    r   r)   r   r&   r!   r*   r+   ©r*   r   )r*   r<   )r*   rA   ©r*   r   ©rZ   r[   r\   r]   r^   r_   r*   r+   ©r*   r+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r"   r8   r:   r@   rF   r2   rY   rc   rT   r6   r6   r6   r7   r      s   
 ú




9
r   c                   @  sŽ   e Zd ZU dZded< dZded< ded< dd	œd-dd„Zd.dd„Zd/dd„Zd0dd„Z	d/dd„Z
d1dd „Zd2d'd(„Zd3d)d*„Zd3d+d,„ZdS )4ÚAsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r    Nr!   r"   zSSEDecoder | SSEBytesDecoderr$   r%   r'   r(   r)   r   r&   r*   r+   c                C  r,   r-   r.   r4   r6   r6   r7   r8   ’   r9   zAsyncStream.__init__r   c                 Ã  s   �| j  ¡ I d H S r-   )r3   Ú	__anext__r;   r6   r6   r7   ro   ¡   s   €zAsyncStream.__anext__úAsyncIterator[_T]c                 C s"   �| j 2 z	3 d H W }|V  q6 d S r-   r=   r>   r6   r6   r7   Ú	__aiter__¤   s   €ÿzAsyncStream.__aiter__úAsyncIterator[ServerSentEvent]c              
   C s„   �z| j  | j ¡ ¡2 z	3 d H W }|V  q6 W d S  tƒ y- } zt| jjd�|‚d }~w tƒ yA } zt| jjd�|‚d }~ww rB   )r$   Úaiter_bytesr    r   r   rC   r   r   )r5   rX   rE   r6   r6   r7   rF   ¨   s   €ÿ€€ÿzAsyncStream._iter_eventsc           	      C sª  �t t| jƒ}| j}| jj}|  ¡ }zº|2 z¢3 d H W }|j d¡r# n |j	ro|j	 d¡ro| 
¡ }|j	dkrbt|ƒrb| d¡rbd }| d¡}t|ƒrN| d¡}|rUt|tƒsWd}t|| jj|d d�‚|||j	dœ||d�V  q| 
¡ }t|ƒr | d¡r d }| d¡}t|ƒrŒ| d¡}|r“t|tƒs•d}t|| jj|d d�‚|| jd ur°| jjr°||j	dœn|||d�V  q6 W | ¡ I d H  d S W | ¡ I d H  d S | ¡ I d H  w rG   )r   r   r/   r    r0   rM   rF   rK   rN   rL   rO   r   rP   rQ   rR   r   rC   r"   rS   ÚacloserU   r6   r6   r7   r2   ±   s`   €

ý

ýÿ
ûÙ0Ò".zAsyncStream.__stream__r   c                 Ã  s   �| S r-   r6   r;   r6   r6   r7   Ú
__aenter__ê   s   €zAsyncStream.__aenter__rZ   r[   r\   r]   r^   r_   c                 Ã  s   �|   ¡ I d H  d S r-   ra   rb   r6   r6   r7   Ú	__aexit__í   s   €zAsyncStream.__aexit__c                 Ã  s   �| j  ¡ I dH  dS rd   )r    rt   r;   r6   r6   r7   rT   õ   s   €zAsyncStream.closec                 Ã  s   �|   ¡ I dH  dS )zCClose the response and release the connection. Alias for `close()`.Nra   r;   r6   r6   r7   rt   ý   s   €zAsyncStream.aclose)
r'   r(   r    r   r)   r   r&   r!   r*   r+   re   )r*   rp   )r*   rr   rf   rg   rh   )ri   rj   rk   rl   rm   r"   r8   ro   rq   rF   r2   ru   rv   rT   rt   r6   r6   r6   r7   rn   ‹   s   
 ú



	
9

rn   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©rL   rK   ÚidÚretryrL   ú
str | NonerK   ry   rz   ú
int | Noner*   r+   c                C  s,   |d u rd}|| _ || _|pd | _|| _d S )NÚ )Ú_idÚ_dataÚ_eventÚ_retry)r5   rL   rK   ry   rz   r6   r6   r7   r8     s   

zServerSentEvent.__init__c                 C  ó   | j S r-   )r€   r;   r6   r6   r7   rL     ó   zServerSentEvent.eventc                 C  r‚   r-   )r~   r;   r6   r6   r7   ry     rƒ   zServerSentEvent.idc                 C  r‚   r-   )r�   r;   r6   r6   r7   rz     rƒ   zServerSentEvent.retryrR   c                 C  r‚   r-   )r   r;   r6   r6   r7   rK     rƒ   zServerSentEvent.datar   c                 C  s   t  | j¡S r-   )rO   ÚloadsrK   r;   r6   r6   r7   rO   #  ó   zServerSentEvent.jsonc              	   C  s&   d| j › d| j› d| j› d| j› d�	S )NzServerSentEvent(event=z, data=z, id=z, retry=ú)rx   r;   r6   r6   r7   Ú__repr__&  s   &zServerSentEvent.__repr__)
rL   r{   rK   r{   ry   r{   rz   r|   r*   r+   )r*   r{   )r*   r|   )r*   rR   )r*   r   )ri   rj   rk   r8   ÚpropertyrL   ry   rz   rK   rO   r   r‡   r6   r6   r6   r7   rw     s"    ú
rw   s   [\r\n]c                   @  s8   e Zd ZdZddd„Zddd„Zddd„Zddd„ZdS )Ú_SSELineDecoderzFIncrementally split CR, LF, and CRLF without copying growing prefixes.r*   r+   c                 C  s   t ƒ | _d| _d S )NF)Ú	bytearrayÚ_bufferÚ_skip_lfr;   r6   r6   r7   r8   1  s   
z_SSELineDecoder.__init__ÚchunkÚbytesÚstartÚintÚendc                 C  s   | j  t|ƒ||… ¡ d S r-   )r‹   ÚextendÚ
memoryview)r5   r�   r�   r‘   r6   r6   r7   Ú_append5  s   z_SSELineDecoder._appendúIterator[bytes]c                 c  s¸   � d}t  |¡D ]=}| ¡ }| jr#||kr#|| dkr#d| _|d }qd| _|  |||¡ t| jƒ}| j ¡  || dk| _|d }|V  q|t|ƒk rZd| _|  ||t|ƒ¡ d S d S )Nr   é
   Fr   é   )	Ú_SSE_LINE_ENDÚfinditerr�   rŒ   r”   rŽ   r‹   ÚclearÚlen)r5   r�   r�   Úmatchr‘   Úliner6   r6   r7   Úfeed8  s&   €

þz_SSELineDecoder.feedc                 c  s*   � | j rt| j ƒ}| j  ¡  |V  d S d S r-   )r‹   rŽ   rš   )r5   r�   r6   r6   r7   ÚfinishK  s   €


ýz_SSELineDecoder.finishNrh   )r�   rŽ   r�   r�   r‘   r�   r*   r+   )r�   rŽ   r*   r•   )r*   r•   )ri   rj   rk   rl   r8   r”   rž   rŸ   r6   r6   r6   r7   r‰   .  s    


r‰   c                   @  sn   e Zd ZU dZ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 )&Ú
SSEDecoderzEDecode SSE incrementally without imposing a line or event size limit.z	list[str]r   r{   r€   r|   r�   Ú_last_event_idr*   r+   c                 C  r`   r-   )Ú_resetr;   r6   r6   r7   r8   Z  r…   zSSEDecoder.__init__c                 C  s   d | _ g | _d | _d | _d S r-   )r€   r   r¡   r�   r;   r6   r6   r7   r¢   ]  s   
zSSEDecoder._resetÚlinesr•   rA   c                 c  s*   � |D ]}|   |  d¡¡}|r|V  qd S )Nzutf-8)Údecode)r5   r£   Úraw_linerX   r6   r6   r7   Ú_decode_linesc  s   €€ýzSSEDecoder._decode_linesrW   c                 c  sV   � t ƒ }z!|D ]}|  | |¡¡E dH  q|  | ¡ ¡E dH  W |  ¡  dS |  ¡  w )z5Given raw binary data, yield every event encountered.N©r‰   r¦   rž   rŸ   r¢   )r5   rW   Údecoderr�   r6   r6   r7   rD   i  s   €zSSEDecoder.iter_bytesúAsyncIterator[bytes]rr   c                 C sl   �t ƒ }z,|2 z3 dH W }|  | |¡¡D ]}|V  qq6 |  | ¡ ¡D ]}|V  q$W |  ¡  dS |  ¡  w )z;Given async raw binary data, yield every event encountered.Nr§   )r5   rW   r¨   r�   rX   r6   r6   r7   rs   s  s   €ÿÿÿzSSEDecoder.aiter_bytesr�   rR   ú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r„zt	|ƒ| _W d S  t
tfyƒ   Y d S w 	 d S )NÚ
rx   ú:ú r   rL   rK   ry   ú rz   )r€   r   r¡   r�   rw   ÚjoinrN   Ú	partitionÚappendr�   Ú	TypeErrorÚ
ValueError)r5   r�   rX   Ú	fieldnameÚ_Úvaluer6   r6   r7   r¤     sP   
ü

ñó÷	øûûzSSEDecoder.decodeNrh   )r£   r•   r*   rA   ©rW   r•   r*   rA   ©rW   r©   r*   rr   )r�   rR   r*   rª   )ri   rj   rk   rl   rm   r8   r¢   r¦   rD   rs   r¤   r6   r6   r6   r7   r    R  s   
 





r    c                   @  s    e Zd Zddd„Zdd	d
„ZdS )r#   rW   r•   r*   rA   c                 C  ó   dS )z^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredNr6   ©r5   rW   r6   r6   r7   rD   ²  ó   zSSEBytesDecoder.iter_bytesr©   rr   c                 C  r¹   )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr6   rº   r6   r6   r7   rs   ¶  r»   zSSEBytesDecoder.aiter_bytesNr·   r¸   )ri   rj   rk   rD   rs   r6   r6   r6   r7   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   rn   )r¼   Úoriginr6   r6   r7   Úis_stream_class_type»  s   rÃ   )Úfailure_messageÚ
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   rn   r   ztuple[type, ...])ÚindexÚgeneric_basesrÄ   )Ú_base_clientr   rn   r   r   )rÅ   rÄ   r   rn   r6   r6   r7   Úextract_stream_chunk_typeÁ  s   ürÉ   )r¼   r½   r*   r¾   )rÅ   r½   rÄ   r{   r*   r½   )2Ú
__future__r   ÚrerO   r¿   Útypesr   Útypingr   r   r   r   r   r	   r
   r   Útyping_extensionsr   r   r   r   r   r   Úhttpx2Ú_utilsr   r   Ú_httpx2r   r   Ú_exceptionsr   r   r   r0   r   r   Ú_modelsr   r   r   rn   rw   Úcompiler˜   r‰   r    r#   rÃ   rÉ   r6   r6   r6   r7   Ú<module>   s4   ( rw
)$^

	ý