o
    ϖi                      @   s  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Zd dlmZ d dlmZ d dlmZ d dlmZ zd dlmZ W n eyK   d dlZY nw erld d	lmZ d d
lmZ d dlmZ d dlmZ d dlm Z  G dd dej!Z"G dd dZ#	d#ddddde
ddde$f de	ee$ef  de	e% ded dee" fdd Z&	d#ddddde
ddde$f de	ee$ef  de	e% ded dee" fd!d"Z'dgZ(dS )$    )Enum)TYPE_CHECKINGAnyAsyncIteratorDictIteratorListOptionalUnionN)Unpack)
identifier)ReplicateError)transform_output)v1)Client)ModelVersionIdentifier)Model)Predictions)Versionc                   @   sT   e Zd ZU dZG dd deZeed< eed< eed< ee	 ed< defd	d
Z
dS )ServerSentEventz
    A server-sent event.
    c                   @   s    e Zd ZdZdZdZdZdZdS )ServerSentEvent.EventTypez+
        A server-sent event type.
        outputlogserrordoneN)__name__
__module____qualname____doc__OUTPUTLOGSERRORDONE r#   r#   D/home/ubuntu/.local/lib/python3.10/site-packages/replicate/stream.py	EventType'   s    r%   eventdataidretryreturnc                 C   s   | j tjjkr
| jS dS )N )r&   r   r%   r   r'   selfr#   r#   r$   __str__6   s   zServerSentEvent.__str__N)r   r   r   r   r   r%   __annotations__strr	   intr.   r#   r#   r#   r$   r   "   s   
 
r   c                	   @   s   e Zd ZU dZded< ded< eed< dddddddee d	d
fddZG dd dZd	e	e
 fddZd	ee
 fddZd
S )EventSourcez%
    A server-sent event source.
    r   clientzhttpx.Responseresponseuse_file_outputTr5   r*   Nc                C   sF   || _ || _|p	d| _|jd d\}}}|dkr!td|d S )NTzcontent-type;text/event-streamz>Expected response Content-Type to be 'text/event-stream', got )r3   r4   r5   headers	partition
ValueError)r-   r3   r4   r5   content_type_r#   r#   r$   __init__F   s   
zEventSource.__init__c                   @   sb   e Zd ZU dZed ed< ee ed< ee ed< ee ed< dd	d
Z	dedee
 fddZdS )zEventSource.Decoderz3
        A decoder for server-sent events.
        r   r&   r'   last_event_idr)   r*   Nc                 C   s   d | _ g | _d | _d | _d S N)r&   r'   r?   r)   r,   r#   r#   r$   r>   a   s   
zEventSource.Decoder.__init__linec              	   C   s(  |s4t | j| j| j| jgr| jdu s| jdu rdS t| jd| j| j| jd}d| _g | _d| _|S |dr;dS |d\}}}|drN|dd n|}|dkr`t	| }r^|| _dS |dkrl| j
| dS |d	kryd
|vrw|| _dS |dkrzt|| _W dS  ttfy   Y dS w dS )zU
            Decode a line and return a server-sent event if applicable.
            N
)r&   r'   r(   r)   :    r&   r'   r(    r)   )anyr&   r'   r?   r)   r   join
startswithr:   r%   appendr1   	TypeErrorr;   )r-   rA   sse	fieldnamer=   valuer&   r#   r#   r$   decodeg   sP   




zEventSource.Decoder.decode)r*   N)r   r   r   r   r	   r/   r   r0   r1   r>   r   rO   r#   r#   r#   r$   DecoderW   s   
 
rP   c                 c   s    t  }| j D ]<}|d}||}|d urF|jtjj	kr&t
|j| jr9|jtjjkr9t|j| jd|_|V  |jtjjkrF d S q
d S NrB   )r3   )r2   rP   r4   
iter_linesrstriprO   r&   r   r%   r!   RuntimeErrorr'   r5   r   r   r3   r"   r-   decoderrA   rL   r#   r#   r$   __iter__   s"   


zEventSource.__iter__c                 C  s   t  }| j 2 z@3 d H W }|d}||}|d urJ|jtjj	kr*t
|j| jr=|jtjjkr=t|j| jd|_|V  |jtjjkrJ d S q
6 d S rQ   )r2   rP   r4   aiter_linesrS   rO   r&   r   r%   r!   rT   r'   r5   r   r   r3   r"   rU   r#   r#   r$   	__aiter__   s"   


zEventSource.__aiter__)r   r   r   r   r/   boolr	   r>   rP   r   r   rW   r   rY   r#   r#   r#   r$   r2   =   s$   
 
@r2   Tr6   r3   r   refr   r   r   inputr5   paramsz"Predictions.CreatePredictionParamsr*   c                k   s   |pi }d|d< t |\}}}}|s|r'| jjd|p||p i d|}	n|r=|r=| jjjd||f|p6i d|}	ntd| d|	joN|	jdd}
|
rVt|
t	sZt
di }d	|d
< d|d< | jjd|
|d}t| ||dE dH  W d   dS 1 sw   Y  dS )z,
    Run a model and stream its output.
    Tstreamversionr\   modelr\   Invalid argument: V. Expected model, version, or reference in the format owner/name or owner/name:versionN Model does not support streamingr8   Acceptno-storeCache-ControlGETr9   r6   r#   )r   _resolvepredictionscreatemodelsr;   urlsget
isinstancer0   r   _clientr^   r2   )r3   r[   r\   r5   r]   r`   ownername
version_id
predictionurlr9   r4   r#   r#   r$   r^      s8   

"r^   c             	   K  sD  |pi }d|d< t |\}}}}|s|r*| jjd|p||p i d|I dH }	n!|rC|rC| jjjd||f|p9i d|I dH }	ntd| d|	joT|	jdd}
|
r\t|
t	s`t
di }d	|d
< d|d< | jjd|
|d4 I dH }t| ||d2 z	3 dH W }|V  q6 W d  I dH  dS 1 I dH sw   Y  dS )z;
    Run a model and stream its output asynchronously.
    Tr^   r_   Nra   rc   rd   re   r8   rf   rg   rh   ri   rj   r6   r#   )r   rk   rl   async_creatern   r;   ro   rp   rq   r0   r   _async_clientr^   r2   )r3   r[   r\   r5   r]   r`   rs   rt   ru   rv   rw   r9   r4   r&   r#   r#   r$   async_stream   s@   

.rz   r@   ))enumr   typingr   r   r   r   r   r   r	   r
   httpxtyping_extensionsr   	replicater   replicate.exceptionsr   replicate.helpersr   pydanticr   ImportErrorreplicate.clientr   replicate.identifierr   replicate.modelr   replicate.predictionr   replicate.versionr   	BaseModelr   r2   r0   rZ   r^   rz   __all__r#   r#   r#   r$   <module>   sl    ( 
-

-