o
    ϖi6:                     @   s  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 d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlmZmZ d d	lm Z m!Z! zd d
l"m#Z" W n e$yk   d dl"Z"Y nw erzd dl%m&Z& d dlm'Z' G dd deZ(G dd deZ)G dd deZ*ddddddde+de+de+de+dee+ dee+ dee+ dee+ dee+ dee+ef fdd Z,de+fd!d"Z-de+fd#d$Z.d%d&d'ee+ef de(fd(d)Z/d*ee+ee+e+f df de+fd+d,Z0dS )-    )TYPE_CHECKINGAnyDictLiteralOptionalTupleUnionoverload)NotRequired	TypedDictUnpack
deprecatedReplicateException)async_encode_jsonencode_json)ModelVersionIdentifier)Page)
Prediction_create_prediction_body!_create_prediction_request_params_json_to_prediction)	NamespaceResource)VersionVersions)v1N)Client)Predictionsc                   @   s,  e Zd ZU dZe Zded< eed< 	 eed< 	 eed< 	 e	e ed< 	 e
d ed	< 	 e	e ed
< 	 e	e ed< 	 e	e ed< 	 eed< 	 e	e ed< 	 e	e ed< 	 e	e ed< 	 edefddZeeddefddZejeddeddfddZd ddZedefddZd ddZdS )!Modelz7
    A machine learning model hosted on Replicate.
    r   _clienturlownernamedescriptionpublicprivate
visibility
github_url	paper_urllicense_url	run_countcover_image_urldefault_examplelatest_versionreturnc                 C   s   | j  d| j S )zN
        Return the qualified model name, in the format `owner/name`.
        /)r"   r#   self r4   C/home/ubuntu/.local/lib/python3.10/site-packages/replicate/model.pyid`   s   zModel.idzUse `model.owner` instead.c                 C   s   | j S )z
        The name of the user or organization that owns the model.
        This attribute is deprecated and will be removed in future versions.
        r"   r2   r4   r4   r5   usernameg   s   zModel.usernamevalueNc                 C   s
   || _ d S Nr7   )r3   r9   r4   r4   r5   r8   p   s   
c                 O   s   t d)z<
        DEPRECATED: Use `replicate.run()` instead.
        a   The `model.predict()` method has been removed, because it's unstable: if a new version of the model you're using is pushed and its API has changed, your code may break. Use `replicate.run()` instead. See https://github.com/replicate/replicate-python#readmer   )r3   argskwargsr4   r4   r5   predictu   s   zModel.predictc                 C   s   t | j| dS )z1
        Get the versions of this model.
        )clientmodel)r   r    r2   r4   r4   r5   versions~   s   zModel.versionsc                 C   sB   | j j| j d| j }|  D ]
\}}t| || qdS )z3
        Load this object from the server.
        r1   N)r    modelsgetr"   r#   dictitemssetattr)r3   objr#   r9   r4   r4   r5   reload   s   zModel.reload)r0   N)__name__
__module____qualname____doc__pydanticPrivateAttrr    __annotations__strr   r   intr   r   propertyr6   r   r8   setterr=   r   r@   rG   r4   r4   r4   r5   r      sN   
 
	r   c                   @   s  e Zd ZdZeZed.ddZd/dee	dd	f de
e fd
dZ	d/dee	dd	f de
e fddZde	de
e fddZde	de
e fddZede	defddZede	de	defddZdefddZede	defddZede	de	defddZdefddZede	defddZede	de	defd dZdefd!dZede	defd"d#Zede	de	defd$d#Zdefd%d#ZG d&d' d'eZde	de	d(ed) defd*d+Zde	de	d(ed) defd,d-Zd	S )0Modelsz5
    Namespace for operations related to models.
    r0   ModelsPredictionsc                 C   s   t | jdS )zS
        Get a namespace for operations related to predictions on a model.
        )r>   )rT   r    r2   r4   r4   r5   predictions   s   zModels.predictions.cursorellipsisNc                    s^   |du rt d jd|du rdn|}| } fdd|d D |d< tt d	i |S )
#  
        List all public models.

        Parameters:
            cursor: The cursor to use for pagination. Use the value of `Page.next` or `Page.previous`.
        Returns:
            Page[Model]: A page of of models.
        Raises:
            ValueError: If `cursor` is `None`.
        Ncursor cannot be NoneGET.
/v1/modelsc                       g | ]}t  j|qS r4   _json_to_modelr    .0resultr2   r4   r5   
<listcomp>       zModels.list.<locals>.<listcomp>resultsr4   )
ValueErrorr    _requestjsonr   r   r3   rV   resprF   r4   r2   r5   list   s   

zModels.listc                    sf   |du r	t d jd|du rdn|I dH }| } fdd|d D |d< tt d	i |S )
rX   NrY   rZ   .r[   c                    r\   r4   r]   r_   r2   r4   r5   rb      rc   z%Models.async_list.<locals>.<listcomp>rd   r4   )re   r    _async_requestrg   r   r   rh   r4   r2   r5   
async_list   s   


zModels.async_listqueryc                    sL    j jdd|ddid}| } fdd|d D |d< tt d
i |S )z
        Search for public models.

        Parameters:
            query: The search query.
        Returns:
            Page[Model]: A page of models matching the search query.
        QUERYr[   Content-Type
text/plaincontentheadersc                    r\   r4   r]   r_   r2   r4   r5   rb      rc   z!Models.search.<locals>.<listcomp>rd   Nr4   )r    rf   rg   r   r   r3   rm   ri   rF   r4   r2   r5   search   s   	

zModels.searchc                    sT    j jdd|ddidI dH }| } fdd|d	 D |d	< tt d
i |S )z
        Asynchronously search for public models.

        Parameters:
            query: The search query.
        Returns:
            Page[Model]: A page of models matching the search query.
        rn   r[   ro   rp   rq   Nc                    r\   r4   r]   r_   r2   r4   r5   rb      rc   z'Models.async_search.<locals>.<listcomp>rd   r4   )r    rk   rg   r   r   rt   r4   r2   r5   async_search   s   	

zModels.async_searchkeyc                 C      d S r:   r4   r3   rw   r4   r4   r5   rB         z
Models.getr"   r#   c                 C   rx   r:   r4   r3   r"   r#   r4   r4   r5   rB      rz   c                 O   s,   t |i |}| jd|}t| j| S )z&
        Get a model by name.
        rZ   )_get_model_urlr    rf   r^   rg   r3   r;   r<   r!   ri   r4   r4   r5   rB     s   c                       d S r:   r4   ry   r4   r4   r5   	async_get     zModels.async_getc                    r~   r:   r4   r{   r4   r4   r5   r     r   c                    s4   t |i |}| jd|I dH }t| j| S )z
        Get a model by name.

        Args:
            key: The qualified name of the model, in the format `owner/name`.
        Returns:
            The model.
        rZ   N)r|   r    rk   r^   rg   r}   r4   r4   r5   r     s   
c                 C   rx   r:   r4   ry   r4   r4   r5   delete!  rz   zModels.deletec                 C   rx   r:   r4   r{   r4   r4   r5   r   $  rz   c                 O   s&   t |i |}| jd|}|jdkS )z}
        Delete a model by name.

        Returns:
            `True` if deletion was successful, otherwise `False`.
        DELETE   )_delete_model_urlr    rf   status_coder}   r4   r4   r5   r   '  s   
c                    r~   r:   r4   ry   r4   r4   r5   async_delete2  r   zModels.async_deletec                    r~   r:   r4   r{   r4   r4   r5   r   5  r   c                    s.   t |i |}| jd|I dH }|jdkS )z
        Asynchronously delete a model by name.

        Returns:
            `True` if deletion was successful, otherwise `False`.
        r   Nr   )r   r    rk   r   r}   r4   r4   r5   r   8  s   
c                   @   sn   e Zd ZU dZeed< 	 ed ed< 	 ee ed< 	 ee ed< 	 ee ed< 	 ee ed< 	 ee ed	< d
S )Models.CreateModelParamsz Parameters for creating a model.hardwarer%   r(   r$   r)   r*   r+   r-   N)rH   rI   rJ   rK   rO   rN   r   r
   r4   r4   r4   r5   CreateModelParamsC  s    
 r   paramsr   c                 K   s4   t ||fi |}| jjdd|d}t| j| S )!
        Create a model.
        POSTr[   rg   )_create_model_bodyr    rf   r^   rg   r3   r"   r#   r   bodyri   r4   r4   r5   create]  s   
zModels.createc                    s@   t ||fi | }}| jjdd|dI dH }t| j| S )r   r   r[   r   N)r   r    rk   r^   rg   r   r4   r4   r5   async_createl  s   zModels.async_create)r0   rT   ).)rH   rI   rJ   rK   r   r?   rQ   rU   r   rO   r   rj   rl   ru   rv   r	   rB   r   boolr   r   r   r   r   r   r   r4   r4   r4   r5   rS      sj    "


rS   c                   @   s   e Zd ZdZdeeeeef df deeef de	d de
fdd	Zdeeeeef df deeef de	d de
fd
dZdS )rT   zJ
    Namespace for operations related to predictions in a deployment.
    r?   r   inputr   z"Predictions.CreatePredictionParamsr0   c           
      K   s   | dd}| dd}t|}|durt|| j|d}td	d|d|}t|d}| jjd|fd|i|}	t| j|	 S 
z>
        Create a new prediction with the deployment.
        waitNfile_encoding_strategy)r>   r   )versionr   )r   r   rg   r4   )	pop"_create_prediction_path_from_modelr   r    r   r   rf   r   rg   
r3   r?   r   r   r   r   pathr   extrasri   r4   r4   r5   r   ~  s   

zModelsPredictions.createc           
         s   | dd}| dd}t|}|dur t|| j|dI dH }td	d|d|}t|d}| jjd|fd|i|I dH }	t| j|	 S r   )	r   r   r   r    r   r   rk   r   rg   r   r4   r4   r5   r     s   

 zModelsPredictions.async_createN)rH   rI   rJ   rK   r   rO   r   r   r   r   r   r   r   r4   r4   r4   r5   rT   y  s(    


rT   )r$   r)   r*   r+   r-   r"   r#   r(   r   r$   r)   r*   r+   r-   r0   c          
      C   sb   | |||d}	|d ur||	d< |d ur||	d< |d ur||	d< |d ur'||	d< |d ur/||	d< |	S )N)r"   r#   r(   r   r$   r)   r*   r+   r-   r4   )
r"   r#   r(   r   r$   r)   r*   r+   r-   r   r4   r4   r5   r     s    r   c                  O   s   t | dkrt |dkrtd|dd }|dd }|dd }|r,|s(|r,td| rHt | dkr9| d }nt | dkrD| \}}ntd	|sY|rN|sRtd
| d| }d| S )Nr   z+Cannot mix positional and keyword argumentsr"   r#   rw   zYMust specify exactly one of 'owner' and 'name' or single 'key' in the format 'owner/name'      zInvalid number of argumentszCBoth 'owner' and 'name' must be provided if 'key' is not specified.r1   /v1/models/)lenre   rB   )r;   r<   r"   r#   rw   r4   r4   r5   r|     s,   


r|   c                  O   s   t | i |S r:   )r|   )r;   r<   r4   r4   r5   r     s   r   r>   r   rg   c                 C   s*   t di |}| |_|jd ur| |j_|S )Nr4   )r   r    r.   )r>   rg   r?   r4   r4   r5   r^     s
   
r^   r?   c                 C   s   d\}}t | tr| j| j}}n(t | tr | d | d }}nt | tr9t| \}}}|d ur9td|  d|d u sA|d u rEtdd| d| d	S )
N)NNr   r   z$Invalid reference to model version: z6. Expected model or reference in the format owner/namezWmodel must be a Model, a tuple of (owner, name), or a string in the format 'owner/name'r   r1   z/predictions)	
isinstancer   r"   r#   tuplerO   r   parsere   )r?   r"   r#   
version_idr4   r4   r5   r     s    



r   )1typingr   r   r   r   r   r   r   r	   typing_extensionsr
   r   r   r   replicate.exceptionsr   replicate.helpersr   r   replicate.identifierr   replicate.paginationr   replicate.predictionr   r   r   r   replicate.resourcer   r   replicate.versionr   r   rL   r   ImportErrorreplicate.clientr   r   r   rS   rT   rO   r   r|   r   r^   r   r4   r4   r4   r5   <module>   sn   ( s jC	


%