
    f jJ/                       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rdd	lmZmZ  e
d
          Z G d de	e                   Z G d de	e                   Z  G d d          Z! G d d          Z"e G d de                      Z#ddZ$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                  h    e Zd ZU dZded<   ded<   ddZd dZd!dZd"dZd!dZ	d#dZ
d$dZ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                   || _         || _        || _        |                                | _        |                                 | _        d S Nr   _cast_to_client_make_sse_decoderr   
__stream__	_iteratorselfr   r   r!   s       eC:\Users\Terasoftware\OneDrive\Desktop\faahhh\fyndo\fyndo\venv\Lib\site-packages\openai/_streaming.py__init__zStream.__init__   A     !0022**    r   c                4    | j                                         S r%   )r+   __next__r-   s    r.   r3   zStream.__next__*   s    ~&&(((r1   Iterator[_T]c              #  &   K   | j         D ]}|V  d S r%   r+   r-   items     r.   __iter__zStream.__iter__-   s,      N 	 	DJJJJ	 	r1   Iterator[ServerSentEvent]c              #    K   t          | j        t                    r9| j                            | j                                                  E d {V  d S | j                            | j                                                  E d {V  d S r%   )
isinstancer   SSEBytesDecoder
iter_bytesr   iter
iter_linesr4   s    r.   _iter_eventszStream._iter_events1   s      dm_55 	F}//0H0H0J0JKKKKKKKKKKK}))$-*B*B*D*DEEEEEEEEEEEr1   c              #    K   t          t          | j                  }| j        }| j        j        }|                                 }|D ]}|j                            d          r n|j	        |
                                }t          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    ||||          V  |
                                }|j	        dk    rt          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    |||j	        d||          V  |D ]}	d S Nz[DONE]errormessagez"An error occurred during streaming)rF   requestbody)datar   r   )rI   eventr   r   r'   r   r(   _process_response_datarB   rI   
startswithrJ   jsonr   getr=   strr   rG   
r-   r   r   process_dataiteratorsserI   rF   rE   _sses
             r.   r*   zStream.__stream__7   sP     sDM**=|:$$&& '	p '	pCx""8,, y #pxxzzd## (9(9 "G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F" ' $ 5!']    #lgQQQQQQQ xxzz9' Jt,<,< 'ARAR "G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F" ' $ 5!']    #l	(J(JT[fnooooooo  	 	D	 	r1   r   c                    | S r%    r4   s    r.   	__enter__zStream.__enter__j   s    r1   exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                .    |                                   d S r%   closer-   rY   r[   r]   s       r.   __exit__zStream.__exit__m   s     	

r1   c                8    | j                                          dS z
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r   ra   r4   s    r.   ra   zStream.closeu   s     	r1   N)r   r    r   r   r!   r   r"   r#   r"   r   )r"   r5   )r"   r;   r"   r   rY   rZ   r[   r\   r]   r^   r"   r#   r"   r#   )__name__
__module____qualname____doc____annotations__r/   r3   r:   rB   r*   rX   rc   ra   rW   r1   r.   r   r      s         TT****+ + + +) ) ) )   F F F F1 1 1 1f           r1   r   c                  h    e Zd ZU dZded<   ded<   ddZd dZd!dZd"dZd!dZ	d#dZ
d$dZd%dZdS )&AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   r   r   r   r    r!   r   r"   r#   c                   || _         || _        || _        |                                | _        |                                 | _        d S r%   r&   r,   s       r.   r/   zAsyncStream.__init__   r0   r1   r   c                D   K   | j                                          d {V S r%   )r+   	__anext__r4   s    r.   rs   zAsyncStream.__anext__   s,      ^--/////////r1   AsyncIterator[_T]c               4   K   | j         2 3 d {V }|W V  6 d S r%   r7   r8   s     r.   	__aiter__zAsyncStream.__aiter__   sF      . 	 	 	 	 	 	 	$JJJJJ )..s   AsyncIterator[ServerSentEvent]c               >  K   t          | j        t                    rA| j                            | j                                                  2 3 d {V }|W V  6 d S | j                            | j                                                  2 3 d {V }|W V  6 d S r%   )r=   r   r>   aiter_bytesr   aiteraiter_lines)r-   rT   s     r.   rB   zAsyncStream._iter_events   s      dm_55 	!]66t}7P7P7R7RSS       c					 TSS "]001J1J1L1LMM       c					 NMMs   ABc               &  K   t          t          | j                  }| j        }| j        j        }|                                 }|2 3 d {V }|j                            d          r n|j	        |
                                }t          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    ||||          W V  |
                                }|j	        dk    rt          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    |||j	        d||          W V  6 |2 3 d {V }	6 d S rD   rK   rQ   s
             r.   r*   zAsyncStream.__stream__   s     sDM**=|:$$&&! '	p '	p '	p '	p '	p '	p '	p#x""8,, y #pxxzzd## (9(9 "G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F" ' $ 5!']    #lgQQQQQQQQ xxzz9' Jt,<,< 'ARAR "G HHW--E!%(( 7"'))I"6"6" G*Wc*B*B G"F" ' $ 5!']    #l	(J(JT[fnooooooooO "T # 	 	 	 	 	 	 	$ #((s   HHr   c                
   K   | S r%   rW   r4   s    r.   
__aenter__zAsyncStream.__aenter__   s      r1   rY   rZ   r[   r\   r]   r^   c                >   K   |                                   d {V  d S r%   r`   rb   s       r.   	__aexit__zAsyncStream.__aexit__   s.       jjllr1   c                H   K   | j                                          d{V  dS re   )r   acloser4   s    r.   ra   zAsyncStream.close   s4       m""$$$$$$$$$$$r1   N)r   r    r   r   r!   r   r"   r#   rf   )r"   rt   )r"   rw   rg   rh   ri   )rj   rk   rl   rm   rn   r/   rs   rv   rB   r*   r~   r   ra   rW   r1   r.   rp   rp   ~   s         VV****+ + + +0 0 0 0      1 1 1 1f      % % % % % %r1   rp   c                      e Zd ZdddddddZedd            Zedd            Zedd            Zedd            ZddZ	e
dd            ZdS )ServerSentEventNrJ   rI   idretryrJ   
str | NonerI   r   r   
int | Noner"   r#   c               J    |d}|| _         || _        |pd | _        || _        d S )N )_id_data_event_retry)r-   rJ   rI   r   r   s        r.   r/   zServerSentEvent.__init__   s5      	D
mtr1   c                    | j         S r%   )r   r4   s    r.   rJ   zServerSentEvent.event   
    {r1   c                    | j         S r%   )r   r4   s    r.   r   zServerSentEvent.id   s	    xr1   c                    | j         S r%   )r   r4   s    r.   r   zServerSentEvent.retry  r   r1   rP   c                    | j         S r%   )r   r4   s    r.   rI   zServerSentEvent.data  s
    zr1   r   c                4    t          j        | j                  S r%   )rN   loadsrI   r4   s    r.   rN   zServerSentEvent.json	  s    z$)$$$r1   c           	     H    d| j          d| j         d| j         d| j         d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r   r4   s    r.   __repr__zServerSentEvent.__repr__  s5    i
ii49ii47ii\`\fiiiir1   )
rJ   r   rI   r   r   r   r   r   r"   r#   )r"   r   )r"   r   )r"   rP   )r"   r   )rj   rk   rl   r/   propertyrJ   r   r   rI   rN   r   r   rW   r1   r.   r   r      s         !           X    X    X    X% % % % j j j Xj j jr1   r   c                  X    e Zd ZU ded<   ded<   ded<   ded<   dd
ZddZddZddZdS )
SSEDecoderz	list[str]r   r   r   r   r   _last_event_idr"   r#   c                >    d | _         g | _        d | _        d | _        d S r%   )r   r   r   r   r4   s    r.   r/   zSSEDecoder.__init__  s#    
"r1   rS   Iterator[str]r;   c              #  t   K   |D ]2}|                     d          }|                     |          }||V  3dS )zTGiven an iterator that yields lines, iterate over it & yield every event encountered
Nrstripdecoder-   rS   linerT   s       r.   r@   zSSEDecoder.iter  sS       	 	D;;t$$D++d##C 					 	r1   AsyncIterator[str]rw   c                  K   |2 3 d{V }|                     d          }|                     |          }||W V  96 dS )zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredNr   r   r   s       r.   rz   zSSEDecoder.aiter%  sm      " 	 	 	 	 	 	 	$;;t$$D++d##C 					 #((s   >r   rP   ServerSentEvent | Nonec                r   |so| j         s| j        s| j        s	| j        d S t	          | j         d                    | j                  | j        | j                  }d | _         g | _        d | _        |S |                    d          rd S |                    d          \  }}}|                    d          r
|dd          }|dk    r|| _         nh|dk    r| j                            |           nG|dk    rd	|v rn<|| _        n4|d
k    r-	 t          |          | _        n# t          t          f$ r Y nw xY w	 d S )Nr   r   : r   rJ   rI   r    r   )r   r   r   r   r   joinrM   	partitionappendint	TypeError
ValueError)r-   r   rT   	fieldname_values         r.   r   zSSEDecoder.decode-  s     	; tz $:M RVR] t!kYYtz**&k	  C DKDJDKJ??3 	4"nnS11	1eC   	!""IE 	DKK&  	Je$$$$$ 	u} ,&+##'! 	!%jjz*    ts   
D D32D3Nri   )rS   r   r"   r;   )rS   r   r"   rw   )r   rP   r"   r   )rj   rk   rl   rn   r/   r@   rz   r   rW   r1   r.   r   r     s                  . . . . . .r1   r   c                      e Zd Zd
dZddZd	S )r>   rS   Iterator[bytes]r"   r;   c                    dS )z^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredNrW   r-   rS   s     r.   r?   zSSEBytesDecoder.iter_bytes`      r1   AsyncIterator[bytes]rw   c                    dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNrW   r   s     r.   ry   zSSEBytesDecoder.aiter_bytesd  r   r1   N)rS   r   r"   r;   )rS   r   r"   rw   )rj   rk   rl   r?   ry   rW   r1   r.   r>   r>   ^  s<                r1   r>   typtyper"   ;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]]c                    t          |           p| }t          j        |          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   rp   )r   origins     r.   is_stream_class_typer   i  s6    __#F?6""Pz&6;:O'P'PPr1   )failure_message
stream_clsr   r   c          	     X    ddl m}m} t          | dt	          d||f          |          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   rp   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   rp   r   r   )r   r   r   rp   s       r.   extract_stream_chunk_typer   o  sO     21111111%-/DEE'	   r1   )r   r   r"   r   )r   r   r   r   r"   r   )&
__future__r   rN   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   rp   r   r   r>   r   r   rW   r1   r.   <module>r      sO   " " " " " "         V V V V V V V V V V V V V V V V V V ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `  : : : : : : : : ! ! ! ! ! ! -,,,,,,,, WT]]e e e e eWR[ e e ePg% g% g% g% g%'"+ g% g% g%T&j &j &j &j &j &j &j &jRJ J J J J J J JZ     h   Q Q Q Q #'       r1   