
    D]i9                    h   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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 dd
l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(y)    )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)APIError)OpenAIAsyncOpenAI)FinalRequestOptions_Tc                      e Zd ZU dZded<   dZded<   ded<   d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y)StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseNOptional[FinalRequestOptions]_optionsSSEBytesDecoder_decoderoptionsc                   || _         || _        || _        || _        |j	                         | _        | j                         | _        y Nr   _cast_to_clientr    _make_sse_decoderr"   
__stream__	_iteratorselfcast_tor   clientr$   s        A/opt/ngrok/venv/lib/python3.12/site-packages/openai/_streaming.py__init__zStream.__init__   >     !002*    c                6    | j                   j                         S r&   )r,   __next__r.   s    r1   r6   zStream.__next__-   s    ~~&&((r4   c              #  6   K   | j                   D ]  }|  y wr&   r,   r.   items     r1   __iter__zStream.__iter__0   s     NN 	DJ	s   c              #     K   | j                   j                  | j                  j                               E d {    y 7 wr&   )r"   
iter_bytesr   r7   s    r1   _iter_eventszStream._iter_events4   s+     ==++DMM,D,D,FGGGs   7A?Ac              #    K   t        t        | j                        }| j                  }| j                  j
                  }| j                         }	 |D ]  }|j                  j                  d      r n|j                  r|j                  j                  d      r|j                         }|j                  dk(  rt        |      ry|j                  d      rhd }|j                  d      }t        |      r|j                  d      }|rt        |t              sd}t        || j                  j                   |d          |||j                  d||       |j                         }t        |      ry|j                  d      rhd }|j                  d      }t        |      r|j                  d      }|rt        |t              sd}t        || j                  j                   |d          || j"                  %| j"                  j$                  r||j                  dn|||        |j'                          y # |j'                          w xY ww	Nz[DONE]zthread.errormessagez"An error occurred during streaming)rC   requestbody)dataevent)rF   r/   r   )r   r   r(   r   r)   _process_response_datar?   rF   
startswithrG   jsonr   get
isinstancestrr   rD   r    synthesize_event_and_dataclose	r.   r/   r   process_dataiteratorsserF   rC   rB   s	            r1   r+   zStream.__stream__7   s    sDMM*==||::$$&1	 -88&&x0 99!5!5i!@88:DyyG+
40@TXXgEV"& $ 1%e,&+ii	&:G&j#.F&JG&$+$(MM$9$9!%g  'TCII,NX_jrss88:D!$'DHHW,="& $ 1%e,&+ii	&:G&j#.F&JG&$+$(MM$9$9!%g  '==49`9` '+SYY?! '!) O-` NNHNNs   AIGI  /I IIc                    | S r&    r7   s    r1   	__enter__zStream.__enter__p   s    r4   c                $    | j                          y r&   rO   r.   exc_typeexcexc_tbs       r1   __exit__zStream.__exit__s   s     	

r4   c                8    | j                   j                          yz
        Close the response and release the connection.

        Automatically called if the response body is read to completion.
        N)r   rO   r7   s    r1   rO   zStream.close{   s     	r4   )
r/   type[_T]r   r   r0   r   r$   r   returnNonera   r   )ra   zIterator[_T])ra   Iterator[ServerSentEvent]ra   r   rZ   ztype[BaseException] | Noner[   zBaseException | Noner\   zTracebackType | Nonera   rb   ra   rb   )__name__
__module____qualname____doc____annotations__r    r2   r6   r<   r?   r+   rV   r]   rO   rU   r4   r1   r   r      s    T.2H+2 26+ + !	+
 + /+ 
+)H7r, " %	
 
r4   r   c                      e Zd ZU dZded<   dZded<   ded<   d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y)AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   Nr   r    zSSEDecoder | SSEBytesDecoderr"   r#   c                   || _         || _        || _        || _        |j	                         | _        | j                         | _        y r&   r'   r-   s        r1   r2   zAsyncStream.__init__   r3   r4   c                R   K   | j                   j                          d {   S 7 wr&   )r,   	__anext__r7   s    r1   rq   zAsyncStream.__anext__   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr&   r9   r:   s     r1   	__aiter__zAsyncStream.__aiter__   s&     .. 	 	$J	.s   "  " "c                  K   | j                   j                  | j                  j                               2 3 d {   }| 7 
6 y wr&   )r"   aiter_bytesr   )r.   rS   s     r1   r?   zAsyncStream._iter_events   s?     224==3L3L3NO 	 	#I	Os%   4A	AAAA	AA	c                 K   t        t        | j                        }| j                  }| j                  j
                  }| j                         }	 |2 3 d {   }|j                  j                  d      r n|j                  r|j                  j                  d      r|j                         }|j                  dk(  rt        |      ry|j                  d      rhd }|j                  d      }t        |      r|j                  d      }|rt        |t              sd}t        || j                  j                   |d          |||j                  d||       |j                         }t        |      ry|j                  d      rhd }|j                  d      }t        |      r|j                  d      }|rt        |t              sd}t        || j                  j                   |d          || j"                  %| j"                  j$                  r||j                  dn|||       |j'                          d {    y 7 6 7 
# |j'                          d {  7   w xY wwrA   )r   r   r(   r   r)   rH   r?   rF   rI   rG   rJ   r   rK   rL   rM   r   rD   r    rN   acloserP   s	            r1   r+   zAsyncStream.__stream__   s    sDMM*==||::$$&1	$% - -c88&&x0 99!5!5i!@88:DyyG+
40@TXXgEV"& $ 1%e,&+ii	&:G&j#.F&JG&$+$(MM$9$9!%g  'TCII,NX_jrss88:D!$'DHHW,="& $ 1%e,&+ii	&:G&j#.F&JG&$+$(MM$9$9!%g  '==49`9` '+SYY?! '!)  //###a-X` $(//###sa   AI3I IIIGI 5I3I	I3II I3I0)I,*I00I3c                   K   | S wr&   rU   r7   s    r1   
__aenter__zAsyncStream.__aenter__   s     s   c                @   K   | j                          d {    y 7 wr&   rX   rY   s       r1   	__aexit__zAsyncStream.__aexit__   s      jjls   c                T   K   | j                   j                          d{    y7 wr_   )r   rw   r7   s    r1   rO   zAsyncStream.close   s      mm""$$$s   (&()
r/   r`   r   r   r0   r   r$   r   ra   rb   rc   )ra   zAsyncIterator[_T])ra   AsyncIterator[ServerSentEvent]re   rf   rg   )rh   ri   rj   rk   rl   r    r2   rq   rs   r?   r+   ry   r{   rO   rU   r4   r1   rn   rn      s    V.2H+2** 26+ + !	+
 + /+ 
+07$r, " %	
 
%r4   rn   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y)ServerSentEventNrG   rF   idretryc               L    |d}|| _         || _        |xs d | _        || _        y )N )_id_data_event_retry)r.   rG   rF   r   r   s        r1   r2   zServerSentEvent.__init__   s.     <D
mtr4   c                    | j                   S r&   )r   r7   s    r1   rG   zServerSentEvent.event      {{r4   c                    | j                   S r&   )r   r7   s    r1   r   zServerSentEvent.id  s    xxr4   c                    | j                   S r&   )r   r7   s    r1   r   zServerSentEvent.retry  r   r4   c                    | j                   S r&   )r   r7   s    r1   rF   zServerSentEvent.data  s    zzr4   c                @    t        j                  | j                        S r&   )rJ   loadsrF   r7   s    r1   rJ   zServerSentEvent.json  s    zz$))$$r4   c           	     p    d| j                    d| j                   d| j                   d| j                   d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r   r7   s    r1   __repr__zServerSentEvent.__repr__  s9    '

|7499+U477)S[\`\f\f[gghiir4   )
rG   
str | NonerF   r   r   r   r   
int | Nonera   rb   )ra   r   )ra   r   )ra   rM   )ra   r   )rh   ri   rj   r2   propertyrG   r   r   rF   rJ   r   r   rU   r4   r1   r   r      s     !   	
   
         % j jr4   r   c                  f    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dZddZ	y)
SSEDecoderz	list[str]r   r   r   r   r   _last_event_idc                <    d | _         g | _        d | _        d | _        y r&   )r   r   r   r   r7   s    r1   r2   zSSEDecoder.__init__!  s    
"r4   c              #     K   | j                  |      D ]@  }|j                         D ]+  }|j                  d      }| j                  |      }|s(| - B yw)^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder.   rR   chunkraw_linelinerS   s         r1   r>   zSSEDecoder.iter_bytes'  s\     &&x0 	E!,,. w/kk$'I		s   AA	Ac              #     K   d}|D ]6  }|j                  d      D ]  }||z  }|j                  d      s| d}! 8 |r| yyw)^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunksr4   Tkeependss   s   

s   

Nr   endswithr.   rR   rF   r   r   s        r1   r   zSSEDecoder._iter_chunks1  sf      	E(($(7 ==!@AJD		 J s
   3AAc                  K   | j                  |      2 3 d{   }|j                         D ],  }|j                  d      }| j                  |      }|s(| . I7 D6 yw)r   Nr   )_aiter_chunksr   r   r   s         r1   ru   zSSEDecoder.aiter_bytes=  se     --h7 	 	%!,,. w/kk$'I		7s+   A!AAA8A!A!AA!c                  K   d}|2 3 d{   }|j                  d      D ]   }||z  }|j                  d      s| d}" ?7 :6 |r| yyw)r   r4   NTr   r   r   r   s        r1   r   zSSEDecoder._aiter_chunksG  sn     # 	 	%(($(7 ==!@AJD		8 J s*   AAAA,A
AA
Ac                z   |s| j                   s%| j                  s| j                  s| j                  y t	        | j                   dj                  | j                        | j                  | j                        }d | _         g | _        d | _        |S |j                  d      ry |j                  d      \  }}}|j                  d      r|dd  }|dk(  r|| _         y |dk(  r| j                  j                  |       y |dk(  rd	|v r	 y || _        y |d
k(  r	 t        |      | _        y 	 y # t        t        f$ r Y y w xY w)N
r   : r   rG   rF   r    r   )r   r   r   r   r   joinrI   	partitionappendint	TypeError
ValueError)r.   r   rS   	fieldname_values         r1   r   zSSEDecoder.decodeS  sW    ;;tzz$:M:MRVR]R]Re!kkYYtzz*&&kk	C DKDJDKJ??3"nnS1	1eC !"IEDK   & JJe$  $u}  ',#  '!!%j   z*  s   D( (D:9D:Nrg   rR   Iterator[bytes]ra   rd   )rR   r   ra   r   rR   AsyncIterator[bytes]ra   r}   )rR   r   ra   r   )r   rM   ra   zServerSentEvent | None)
rh   ri   rj   rl   r2   r>   r   ru   r   r   rU   r4   r1   r   r     s8    

.r4   r   c                      e Zd ZddZddZy)r!   c                     y)r   NrU   r.   rR   s     r1   r>   zSSEBytesDecoder.iter_bytes      r4   c                     y)zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNrU   r   s     r1   ru   zSSEBytesDecoder.aiter_bytes  r   r4   Nr   r   )rh   ri   rj   r>   ru   rU   r4   r1   r!   r!     s    r4   r!   c                z    t        |       xs | }t        j                  |      xr 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   )typorigins     r1   is_stream_class_typer     s0    _#F??6"Pz&6;:O'PPr4   )failure_messagec          	     H    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   rn   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   rn   r   r   )
stream_clsr   r   rn   s       r1   extract_stream_chunk_typer     s-     2%-/DE'	 r4   )r   typera   z;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]])r   r   r   r   ra   r   ))
__future__r   rJ   r   typesr   typingr   r   r   r   r	   r
   r   r   typing_extensionsr   r   r   r   r   r   httpx_utilsr   r   _exceptionsr   r)   r   r   _modelsr   r   r   rn   r   r   r!   r   r   rU   r4   r1   <module>r      s    "    ` ` ` ` `  : !,, T]jWR[ jZk%'"+ k%\&j &jRf fR h  Q #'   
	r4   