
    +h                        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ee         Z G d dee         Z G d d      Z G d d      Zy)    )annotationsN)TYPE_CHECKINGAnyGenericIteratorAsyncIterator)override   )	ResponseT)
is_mapping)APIError)SyncAPIClientAsyncAPIClientc                  T    e Zd ZU dZded<   	 	 	 	 	 	 	 	 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responsec               v    || _         || _        || _        t               | _        | j                         | _        y Nr   _cast_to_client
SSEDecoder_decoder
__stream__	_iteratorselfcast_tor   clients       D/var/www/html/venv/lib/python3.12/site-packages/openai/_streaming.py__init__zStream.__init__   0     !"*    c                6    | j                   j                         S r   )r   __next__r   s    r!   r&   zStream.__next__$   s    ~~&&((r$   c              #  6   K   | j                   D ]  }|  y wr   r   r   items     r!   __iter__zStream.__iter__'   s     NN 	DJ	s   c              #     K   | j                   j                  | j                  j                               E d {    y 7 wr   )r   iterr   
iter_linesr'   s    r!   _iter_eventszStream._iter_events+   s+     ==%%dmm&>&>&@AAAs   7A?Ac              #    K   | j                   }| j                  }| j                  j                  }| j	                         }|D ]  }|j
                  j                  d      r nm|j                  -|j                         }t        |      r6|j                  d      r%t        d| j                  j                  |d          ||||        |D ]  } y wNz[DONE]errorz!An error ocurred during streaming)messagerequestbody)datar   r   r   r   r   _process_response_datar0   r7   
startswitheventjsonr   getr   r5   r   r   r   process_dataiteratorsser7   s          r!   r   zStream.__stream__.   s     --==||::$$& 	RCxx""8,yy xxzd#(9" C $ 5 5!']  #gQQ	R   	C	s   A-C0A(CN)r   type[ResponseT]r   r   r    r   returnNonerC   r   )rC   zIterator[ResponseT])rC   Iterator[ServerSentEvent])
__name__
__module____qualname____doc____annotations__r"   r&   r,   r0   r    r$   r!   r   r      sM    T+ !+ !	+
 + 
+)Br$   r   c                  T    e Zd ZU dZded<   	 	 	 	 	 	 	 	 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   c               v    || _         || _        || _        t               | _        | j                         | _        y r   r   r   s       r!   r"   zAsyncStream.__init__M   r#   r$   c                R   K   | j                   j                          d {   S 7 wr   )r   	__anext__r'   s    r!   rQ   zAsyncStream.__anext__Z   s     ^^--////s   '%'c               H   K   | j                   2 3 d {   }| 7 
6 y wr   r)   r*   s     r!   	__aiter__zAsyncStream.__aiter__]   s&     .. 	 	$J	.s   "  " "c                  K   | j                   j                  | j                  j                               2 3 d {   }| 7 
6 y wr   )r   aiterr   aiter_lines)r   rA   s     r!   r0   zAsyncStream._iter_eventsa   s?     ,,T]]-F-F-HI 	 	#I	Is%   4A	AAAA	AA	c                 K   | j                   }| j                  }| j                  j                  }| j	                         }|2 3 d {   }|j
                  j                  d      r nm|j                  3|j                         }t        |      r6|j                  d      r%t        d| j                  j                  |d          ||||       |2 3 d {   }
7 6 7 	6 y wr2   r8   r>   s          r!   r   zAsyncStream.__stream__e   s     --==||::$$&! 	R 	R#xx""8,yy xxzd#(9" C $ 5 5!']  #gQQ " 	 	##	R 	sU   AC*C$C"C$*C*6A"C*C(C&C( C*"C$$C*&C((C*N)r   rB   r   r   r    r   rC   rD   rE   )rC   zAsyncIterator[ResponseT])rC   AsyncIterator[ServerSentEvent])
rG   rH   rI   rJ   rK   r"   rQ   rS   r0   r   rL   r$   r!   rN   rN   H   sL    V+ !+ !	+
 + 
+0r$   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r;   r7   idretryc               L    |d}|| _         || _        |xs d | _        || _        y )N )_id_data_event_retry)r   r;   r7   r\   r]   s        r!   r"   zServerSentEvent.__init__   s.     <D
mtr$   c                    | j                   S r   )rb   r'   s    r!   r;   zServerSentEvent.event       {{r$   c                    | j                   S r   )r`   r'   s    r!   r\   zServerSentEvent.id   s    xxr$   c                    | j                   S r   )rc   r'   s    r!   r]   zServerSentEvent.retry   re   r$   c                    | j                   S r   )ra   r'   s    r!   r7   zServerSentEvent.data   s    zzr$   c                @    t        j                  | j                        S r   )r<   loadsr7   r'   s    r!   r<   zServerSentEvent.json   s    zz$))$$r$   c           	     p    d| j                    d| j                   d| j                   d| j                   d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r[   r'   s    r!   __repr__zServerSentEvent.__repr__   s9    '

|7499+U477)S[\`\f\f[gghiir$   )
r;   
str | Noner7   rn   r\   rn   r]   
int | NonerC   rD   )rC   rn   )rC   ro   )rC   str)rC   r   )rG   rH   rI   r"   propertyr;   r\   r]   r7   r<   r	   rm   rL   r$   r!   rZ   rZ      s     !   	
   
         % j jr$   rZ   c                  V    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y)r   z	list[str]ra   rn   rb   ro   rc   _last_event_idc                <    d | _         g | _        d | _        d | _        y r   )rb   ra   rs   rc   r'   s    r!   r"   zSSEDecoder.__init__   s    
"r$   c              #  l   K   |D ]+  }|j                  d      }| j                  |      }|(| - yw)zTGiven an iterator that yields lines, iterate over it & yield every event encountered
Nrstripdecoder   r@   linerA   s       r!   r.   zSSEDecoder.iter   s;      	D;;t$D++d#C			s   *44c               ~   K   |2 3 d{   }|j                  d      }| j                  |      }|.| 47 /6 yw)zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredNrv   rw   rz   s       r!   rU   zSSEDecoder.aiter   sC     " 	 	$;;t$D++d#C			(s    =;9;%==;=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)Nrv   r[   : r
   r;   r7   r\    r]   )rb   ra   rs   rc   rZ   joinr:   	partitionappendint	TypeError
ValueError)r   r{   rA   	fieldname_values         r!   ry   zSSEDecoder.decode   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:N)rC   rD   )r@   zIterator[str]rC   rF   )r@   zAsyncIterator[str]rC   rX   )r{   rp   rC   zServerSentEvent | None)rG   rH   rI   rK   r"   r.   rU   ry   rL   r$   r!   r   r      s.    .r$   r   )
__future__r   r<   typingr   r   r   r   r   typing_extensionsr	   httpx_typesr   _utilsr   _exceptionsr   _base_clientr   r   r   rN   rZ   r   rL   r$   r!   <module>r      sc    "  G G &    !;3WY 3l4')$ 4n&j &jRJ Jr$   