U
    	fd$                     @  s   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 erddlmZmZ e
d	ZG d
d de	e ZG dd de	e ZG dd dZG dd dZeG dd deZ dddddZ!dddd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   )extract_type_var_from_base)Groq	AsyncGroq_Tc                   @  s   e Zd ZU dZded< ded< ddddd	d
dZddddZddddZddddZddddZ	ddddZ
ddddddd Zddd!d"Zd#S )$StreamzJProvides the core interface to iterate over a synchronous stream response.httpx.ResponseresponseSSEDecoder | SSEBytesDecoder_decodertype[_T]r   Nonecast_tor   clientreturnc                C  s*   || _ || _|| _| | _|  | _d S Nr   _cast_to_clientZ_make_sse_decoderr   
__stream__	_iteratorselfr   r   r    r)   R/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/groq/_streaming.py__init__   s
    
zStream.__init__r   r    c                 C  s
   | j  S r!   )r&   __next__r(   r)   r)   r*   r-   )   s    zStream.__next__zIterator[_T]c                 c  s   | j D ]
}|V  qd S r!   r&   r(   itemr)   r)   r*   __iter__,   s    
zStream.__iter__Iterator[ServerSentEvent]c                 c  sB   t | jtr&| j| j E d H  n| j| j E d H  d S r!   )
isinstancer   SSEBytesDecoder
iter_bytesr   iter
iter_linesr.   r)   r)   r*   _iter_events0   s    zStream._iter_eventsc                 c  s^   t t| j}| j}| jj}|  }|D ](}|jdr: qP||	 ||dV  q&|D ]}qTd S )N[DONE]datar   r   )
r
   r   r#   r   r$   _process_response_datar9   r<   
startswithjsonr(   r   r   Zprocess_dataiteratorsseZ_sser)   r)   r*   r%   6   s    zStream.__stream__r   c                 C  s   | S r!   r)   r.   r)   r)   r*   	__enter__E   s    zStream.__enter__type[BaseException] | NoneBaseException | NoneTracebackType | Noneexc_typeexcexc_tbr    c                 C  s   |    d S r!   closer(   rH   rI   rJ   r)   r)   r*   __exit__H   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   rL   r.   r)   r)   r*   rL   P   s    zStream.closeN)__name__
__module____qualname____doc____annotations__r+   r-   r2   r9   r%   rC   rN   rL   r)   r)   r)   r*   r      s   
r   c                   @  s   e Zd ZU dZded< ded< ddddd	d
dZddddZddddZddddZddddZ	ddddZ
ddddddd Zddd!d"Zd#S )$AsyncStreamzLProvides the core interface to iterate over an asynchronous stream response.r   r   r   r   r   r   r   r   c                C  s*   || _ || _|| _| | _|  | _d S r!   r"   r'   r)   r)   r*   r+   `   s
    
zAsyncStream.__init__r   r,   c                   s   | j  I d H S r!   )r&   	__anext__r.   r)   r)   r*   rV   m   s    zAsyncStream.__anext__zAsyncIterator[_T]c                 C s    | j 2 z3 d H W }|V  q6 d S r!   r/   r0   r)   r)   r*   	__aiter__p   s    zAsyncStream.__aiter__AsyncIterator[ServerSentEvent]c                 C s   t | jtrF| j| j 2 z"3 d H W }|jdr: q~|V  q6 n8| j| j 2 z"3 d H W }|jdrt q~|V  qX6 d S )Nr:   )	r4   r   r5   aiter_bytesr   r<   r>   aiteraiter_lines)r(   rB   r)   r)   r*   r9   t   s    zAsyncStream._iter_eventsc                 C sb   t t| j}| j}| jj}|  }|2 z 3 d H W }|| ||dV  q&6 |2 z3 d H W }qN6 d S )Nr;   )r
   r   r#   r   r$   r=   r9   r?   r@   r)   r)   r*   r%      s    zAsyncStream.__stream__r   c                   s   | S r!   r)   r.   r)   r)   r*   
__aenter__   s    zAsyncStream.__aenter__rD   rE   rF   rG   c                   s   |   I d H  d S r!   rK   rM   r)   r)   r*   	__aexit__   s    zAsyncStream.__aexit__c                   s   | j  I dH  dS rO   )r   acloser.   r)   r)   r*   rL      s    zAsyncStream.closeN)rP   rQ   rR   rS   rT   r+   rV   rW   r9   r%   r\   r]   rL   r)   r)   r)   r*   rU   Y   s   
rU   c                   @  s   e Zd ZdddddddddddddZedd	d
dZedd	ddZedd	ddZedd	ddZdd	ddZ	e
dd	ddZdS )ServerSentEventNeventr<   idretry
str | None
int | Noner   )ra   r<   rb   rc   r    c                C  s,   |d krd}|| _ || _|pd | _|| _d S )N )_id_data_event_retry)r(   ra   r<   rb   rc   r)   r)   r*   r+      s    
zServerSentEvent.__init__r,   c                 C  s   | j S r!   )ri   r.   r)   r)   r*   ra      s    zServerSentEvent.eventc                 C  s   | j S r!   )rg   r.   r)   r)   r*   rb      s    zServerSentEvent.idc                 C  s   | j S r!   )rj   r.   r)   r)   r*   rc      s    zServerSentEvent.retrystrc                 C  s   | j S r!   )rh   r.   r)   r)   r*   r<      s    zServerSentEvent.datar   c                 C  s   t | jS r!   )r?   loadsr<   r.   r)   r)   r*   r?      s    zServerSentEvent.jsonc              	   C  s&   d| j  d| j d| j d| j d	S )NzServerSentEvent(event=z, data=z, id=z, retry=)r`   r.   r)   r)   r*   __repr__   s    zServerSentEvent.__repr__)rP   rQ   rR   r+   propertyra   rb   rc   r<   r?   r   rn   r)   r)   r)   r*   r_      s    r_   c                   @  sl   e Zd ZU ded< ded< ded< ded< dd	d
dZdddddZdddddZdddddZdS )
SSEDecoderz	list[str]rh   rd   ri   re   rj   _last_event_idr   r,   c                 C  s   d | _ g | _d | _d | _d S r!   )ri   rh   rq   rj   r.   r)   r)   r*   r+      s    zSSEDecoder.__init__zIterator[str]r3   rA   r    c                 c  s0   |D ]&}| d}| |}|dk	r|V  qdS )zTGiven an iterator that yields lines, iterate over it & yield every event encountered
Nrstripdecoder(   rA   linerB   r)   r)   r*   r7      s
    

zSSEDecoder.iterzAsyncIterator[str]rX   c                 C s:   |2 z.3 dH W }| d}| |}|dk	r|V  q6 dS )zZGiven an async iterator that yields lines, iterate over it & yield every event encounteredNrs   rt   rw   r)   r)   r*   rZ      s
    

zSSEDecoder.aiterrk   zServerSentEvent | None)rx   r    c              	   C  s  |sX| j s$| js$| js$| jd kr$d S t| j d| j| j| jd}d | _ g | _d | _|S |drfd S |d\}}}|dr|dd  }|dkr|| _ nb|dkr| j| nL|dkrd	|krq|| _n2|d
krzt	|| _W q t
tfk
r   Y qX n d S )Nrs   r`   : r   ra   r<   rb    rc   )ri   rh   rq   rj   r_   joinr>   	partitionappendint	TypeError
ValueError)r(   rx   rB   	fieldname_valuer)   r)   r*   rv      s@    


zSSEDecoder.decodeN)rP   rQ   rR   rT   r+   r7   rZ   rv   r)   r)   r)   r*   rp      s   
rp   c                   @  s,   e Zd ZdddddZddddd	Zd
S )r5   zIterator[bytes]r3   rr   c                 C  s   dS )z^Given an iterator that yields raw binary data, iterate over it & yield every event encounteredNr)   r(   rA   r)   r)   r*   r6     s    zSSEBytesDecoder.iter_byteszAsyncIterator[bytes]rX   c                 C  s   dS )zdGiven an async iterator that yields raw binary data, iterate over it & yield every event encounteredNr)   r   r)   r)   r*   rY     s    zSSEBytesDecoder.aiter_bytesN)rP   rQ   rR   r6   rY   r)   r)   r)   r*   r5     s   r5   typez;TypeGuard[type[Stream[object]] | type[AsyncStream[object]]])typr    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   rU   )r   originr)   r)   r*   is_stream_class_type"  s    r   )failure_messagerd   )
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   rU   r   ztuple[type, ...])indexgeneric_basesr   )_base_clientr   rU   r   r
   )r   r   r   rU   r)   r)   r*   extract_stream_chunk_type(  s    r   )#
__future__r   r?   r   typesr   typingr   r   r   r   r   r	   r
   typing_extensionsr   r   r   r   r   r   httpx_utilsr   r$   r   r   r   r   rU   r_   rp   r5   r   r   r)   r)   r)   r*   <module>   s&   $ DH)M
	