
    2i9                       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(d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)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dS )*StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseNOptional[FinalRequestOptions]_optionsSSEBytesDecoder_decoderoptionscast_totype[_T]clientr   r$   returnNonec                   || _         || _        || _        || _        |                                | _        |                                 | _        d S Nr   _cast_to_clientr    _make_sse_decoderr"   
__stream__	_iteratorselfr%   r   r'   r$   s        X/root/.openclaw/workspace/.venv-openai/lib/python3.11/site-packages/openai/_streaming.py__init__zStream.__init__   H     !0022**    r   c                4    | j                                         S r+   )r1   __next__r3   s    r4   r9   zStream.__next__-   s    ~&&(((r7   Iterator[_T]c              #  &   K   | j         D ]}|V  d S r+   r1   r3   items     r4   __iter__zStream.__iter__0   s,      N 	 	DJJJJ	 	r7   Iterator[ServerSentEvent]c              #  x   K   | j                             | j                                                  E d {V  d S r+   )r"   
iter_bytesr   r:   s    r4   _iter_eventszStream._iter_events4   sB      =++DM,D,D,F,FGGGGGGGGGGGr7   c              #    K   t          t          | j                  }| j        }| j        j        }|                                 }	 |D ]}|j                            d          r n|j	        r|j	                            d          r|
                                }|j	        dk    rt          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    |||j	        d||          V  |
                                }t          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    || j        | j        j        r
||j	        dn|||          V  |                                 d S # |                                 w xY w	Nz[DONE]zthread.errormessagez"An error occurred during streaming)rH   requestbody)dataevent)rK   r%   r   )r   r   r-   r   r.   _process_response_datarD   rK   
startswithrL   jsonr   get
isinstancestrr   rI   r    synthesize_event_and_dataclose	r3   r%   r   process_dataiteratorsserK   rH   rG   s	            r4   r0   zStream.__stream__7   s     sDM**=|:$$&&1	 - -8&&x00 E 9 (!5!5i!@!@ (88::DyG++
40@0@+TXXgEVEV+"& $ 1 1%e,, ;&+ii	&:&:G& Kj#.F.F K&JG&$+$(M$9!%g    ',TCI,N,NX_jrsssssss88::D!$'' DHHW,=,= "& $ 1 1%e,, ;&+ii	&:&:G& Kj#.F.F K&JG&$+$(M$9!%g    ',=49`4 '+SY???! '!)       NNHNNs   G3I I$r   c                    | S r+    r:   s    r4   	__enter__zStream.__enter__p   s    r7   exc_typetype[BaseException] | NoneexcBaseException | Noneexc_tbTracebackType | Nonec                .    |                                   d S r+   rT   r3   r\   r^   r`   s       r4   __exit__zStream.__exit__s   s     	

r7   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   rT   r:   s    r4   rT   zStream.close{   s     	r7   )
r%   r&   r   r   r'   r   r$   r   r(   r)   r(   r   )r(   r;   )r(   rA   r(   r   r\   r]   r^   r_   r`   ra   r(   r)   r(   r)   )__name__
__module____qualname____doc____annotations__r    r5   r9   r@   rD   r0   r[   re   rT   rZ   r7   r4   r   r      s         TT.2H2222 26+ + + + + +) ) ) )   H H H H7 7 7 7r           r7   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dS )*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                   || _         || _        || _        || _        |                                | _        |                                 | _        d S r+   r,   r2   s        r4   r5   zAsyncStream.__init__   r6   r7   r   c                D   K   | j                                          d {V S r+   )r1   	__anext__r:   s    r4   ru   zAsyncStream.__anext__   s,      ^--/////////r7   AsyncIterator[_T]c               4   K   | j         2 3 d {V }|W V  6 d S r+   r=   r>   s     r4   	__aiter__zAsyncStream.__aiter__   sF      . 	 	 	 	 	 	 	$JJJJJ )..s   AsyncIterator[ServerSentEvent]c                  K   | j                             | j                                                  2 3 d {V }|W V  6 d S r+   )r"   aiter_bytesr   )r3   rX   s     r4   rD   zAsyncStream._iter_events   se      224=3L3L3N3NOO 	 	 	 	 	 	 	#IIIII POOs   Ac                 K   t          t          | j                  }| j        }| j        j        }|                                 }	 |2 3 d {V }|j                            d          r n|j	        r|j	                            d          r|
                                }|j	        dk    rt          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    |||j	        d||          W V  |
                                }t          |          r|                    d          rvd }|                    d          }t          |          r|                    d          }|rt          |t                    sd}t          || j        j        |d                    || j        | j        j        r
||j	        dn|||          W V  6 |                                 d {V  d S # |                                 d {V  w xY wrF   )r   r   r-   r   r.   rM   rD   rK   rN   rL   rO   r   rP   rQ   rR   r   rI   r    rS   acloserU   s	            r4   r0   zAsyncStream.__stream__   s     sDM**=|:$$&&1	$% - - - - - - -c8&&x00 E 9 (!5!5i!@!@ (88::DyG++
40@0@+TXXgEVEV+"& $ 1 1%e,, ;&+ii	&:&:G& Kj#.F.F K&JG&$+$(M$9!%g    ',TCI,N,NX_jrssssssss88::D!$'' DHHW,=,= "& $ 1 1%e,, ;&+ii	&:&:G& Kj#.F.F K&JG&$+$(M$9!%g    ',=49`4 '+SY???! '!)       O &` //###########(//##########s   I H>G2I I7r   c                
   K   | S r+   rZ   r:   s    r4   
__aenter__zAsyncStream.__aenter__   s      r7   r\   r]   r^   r_   r`   ra   c                >   K   |                                   d {V  d S r+   rc   rd   s       r4   	__aexit__zAsyncStream.__aexit__   s.       jjllr7   c                H   K   | j                                          d{V  dS rg   )r   r}   r:   s    r4   rT   zAsyncStream.close   s4       m""$$$$$$$$$$$r7   )
r%   r&   r   r   r'   r   r$   r   r(   r)   rh   )r(   rv   )r(   ry   ri   rj   rk   )rl   rm   rn   ro   rp   r    r5   ru   rx   rD   r0   r   r   rT   rZ   r7   r4   rr   rr      s         VV.2H2222**** 26+ + + + + +0 0 0 0      7$ 7$ 7$ 7$r      % % % % % %r7   rr   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rL   rK   idretryrL   
str | NonerK   r   r   
int | Noner(   r)   c               J    |d}|| _         || _        |pd | _        || _        d S )N )_id_data_event_retry)r3   rL   rK   r   r   s        r4   r5   zServerSentEvent.__init__   s2     <D
mtr7   c                    | j         S r+   )r   r:   s    r4   rL   zServerSentEvent.event  
    {r7   c                    | j         S r+   )r   r:   s    r4   r   zServerSentEvent.id  s	    xr7   c                    | j         S r+   )r   r:   s    r4   r   zServerSentEvent.retry  r   r7   rR   c                    | j         S r+   )r   r:   s    r4   rK   zServerSentEvent.data  s
    zr7   r   c                4    t          j        | j                  S r+   )rO   loadsrK   r:   s    r4   rO   zServerSentEvent.json  s    z$)$$$r7   c           	     H    d| j          d| j         d| j         d| j         d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r   r:   s    r4   __repr__zServerSentEvent.__repr__  s5    i
ii49ii47ii\`\fiiiir7   )
rL   r   rK   r   r   r   r   r   r(   r)   )r(   r   )r(   r   )r(   rR   )r(   r   )rl   rm   rn   r5   propertyrL   r   r   rK   rO   r   r   rZ   r7   r4   r   r      s         !           X    X    X    X% % % % j j j Xj j jr7   r   c                  h    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	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   r:   s    r4   r5   zSSEDecoder.__init__!  s#    
"r7   rW   Iterator[bytes]rA   c              #     K   |                      |          D ]I}|                                D ]2}|                    d          }|                     |          }|r|V  3JdS )^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredutf-8N)_iter_chunks
splitlinesdecoder3   rW   chunkraw_linelinerX   s         r4   rC   zSSEDecoder.iter_bytes'  s      &&x00 	 	E!,,..  w//kk$'' III		 	r7   c              #     K   d}|D ];}|                     d          D ]"}||z  }|                    d          r|V  d}#<|r|V  dS dS )^Given an iterator that yields raw binary data, iterate over it and yield individual SSE chunksr7   Tkeependss   s   

s   

Nr   endswithr3   rW   rK   r   r   s        r4   r   zSSEDecoder._iter_chunks1  s       	 	E(($(77  ==!@AA JJJD	
  	JJJJJ	 	r7   AsyncIterator[bytes]ry   c                  K   |                      |          2 3 d{V }|                                D ]3}|                    d          }|                     |          }|r|W V  4P6 dS )r   Nr   )_aiter_chunksr   r   r   s         r4   r{   zSSEDecoder.aiter_bytes=  s      --h77 	 	 	 	 	 	 	%!,,..  w//kk$'' IIII	 877s   A(c                  K   d}|2 3 d{V }|                     d          D ]#}||z  }|                    d          r|W V  d}$B6 |r|W V  dS dS )r   r7   NTr   r   r   r   s        r4   r   zSSEDecoder._aiter_chunksG  s      # 	 	 	 	 	 	 	%(($(77  ==!@AA JJJJD	 $  	JJJJJJ	 	s   A	r   rR   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 )N
r   : r   rL   rK   r    r   )r   r   r   r   r   joinrN   	partitionappendint	TypeError
ValueError)r3   r   rX   	fieldname_values         r4   r   zSSEDecoder.decodeS  s     	; tz $:M RVR]Re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Nrk   rW   r   r(   rA   )rW   r   r(   r   rW   r   r(   ry   )rW   r   r(   r   )r   rR   r(   r   )
rl   rm   rn   rp   r5   rC   r   r{   r   r   rZ   r7   r4   r   r     s               
 
 
 
   
 
 
 
. . . . . .r7   r   c                      e Zd Zd
dZddZd	S )r!   rW   r   r(   rA   c                    dS )r   NrZ   r3   rW   s     r4   rC   zSSEBytesDecoder.iter_bytes      r7   r   ry   c                    dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNrZ   r   s     r4   r{   zSSEBytesDecoder.aiter_bytes  r   r7   Nr   r   )rl   rm   rn   rC   r{   rZ   r7   r4   r!   r!     s<                r7   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   rr   )r   origins     r4   is_stream_class_typer     s6    __#F?6""Pz&6;:O'P'PPr7   )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   rr   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   rr   r   r   )r   r   r   rr   s       r4   extract_stream_chunk_typer     sO     21111111%-/DEE'	   r7   )r   r   r(   r   )r   r   r   r   r(   r   ))
__future__r   rO   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   rr   r   r   r!   r   r   rZ   r7   r4   <module>r      sg   " " " " " "         ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `  : : : : : : : : ! ! ! ! ! ! -,,,,,,,,,,,,,, WT]]j j j j jWR[ j j jZk% k% k% k% k%'"+ k% k% k%\&j &j &j &j &j &j &j &jRf f f f f f f fR     h   Q Q Q Q #'       r7   