
    Ng                         d dl mZ d dlZd dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZ d dlmZ d d	lmZmZmZ erd d
lmZ  ej        e          Z G d de          ZdS )    )annotationsN)TYPE_CHECKINGAnyDictIteratorListOptional)CallbackManagerForLLMRun)LLM)GenerationChunk)get_from_dict_or_envpre_init)
get_fields)
ConfigDictFieldmodel_validator)
Predictionc                     e Zd ZU dZded<    eed          Zded<   dZd	ed
<   dZ	d	ed<    edd          Z
ded<   	 dZded<   	  ee          Zded<   	  edd          Zed/d            Zed0d            Zed1d            Z ed          ed2d                         Zed3d"            Zed4d#            Zed5d$            Z	 	 d6d7d*Z	 	 d6d8d,Zd9d.ZdS ):	Replicatea  Replicate models.

    To use, you should have the ``replicate`` python package installed,
    and the environment variable ``REPLICATE_API_TOKEN`` set with your API token.
    You can find your token here: https://replicate.com/account

    The model param is required, but any other model parameters can also
    be passed in with the format model_kwargs={model_param: value, ...}

    Example:
        .. code-block:: python

            from langchain_community.llms import Replicate

            replicate = Replicate(
                model=(
                    "stability-ai/stable-diffusion: "
                    "27b93a2413e7f36cd83da926f3656280b2931564ff050bf9575f1fdf9bcd7478",
                ),
                model_kwargs={"image_dimensions": "512x512"}
            )
    strmodelinput)default_factoryaliasDict[str, Any]model_kwargsNzOptional[str]replicate_api_token
prompt_keyT)defaultexcluder   version_objFbool	streaming)r   	List[str]stopforbid)populate_by_nameextrareturnDict[str, str]c                
    ddiS )Nr   REPLICATE_API_TOKEN selfs    ^/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/replicate.py
lc_secretszReplicate.lc_secrets@   s    %'<==    c                    dS )NTr-   clss    r0   is_lc_serializablezReplicate.is_lc_serializableD   s    tr2   c                
    g dS )z*Get the namespace of the langchain object.)	langchainllms	replicater-   r4   s    r0   get_lc_namespacezReplicate.get_lc_namespaceH   s     2111r2   before)modevaluesc                   d t          |                                           D             }|                    di           }|rt                              d           i |                    di           |}t          |          D ]U}||vrO||v rt          d| d          t                              | d| d           |                    |          ||<   V||d<   |S )	z>Build extra kwargs from additional params that were passed in.c                    h | ]}|S r-   r-   ).0fields     r0   	<setcomp>z(Replicate.build_extra.<locals>.<setcomp>Q   s    #N#N#NeE#N#N#Nr2   r   zDInit param `input` is deprecated, please use `model_kwargs` instead.r   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)r   keyspoploggerwarninglist
ValueError)r5   r>   all_required_field_namesr   r(   
field_names         r0   build_extrazReplicate.build_extraM   s&    $O#Nz#7K7K7M7M#N#N#N 

7B'' 	NNV   <6::nb11;U;v,, 	; 	;J!999&&$%Jj%J%J%JKKK# N N)3N N N   %+JJz$:$:j!!&~r2   r   c                2    t          |dd          }||d<   |S )z?Validate that api key and python package exists in environment.r   r,   )r   )r5   r>   r   s      r0   validate_environmentzReplicate.validate_environmente   s/     3)+@
 
 )<$%r2   c                     | j         | j        dS )zGet the identifying parameters.r   r   rP   r.   s    r0   _identifying_paramszReplicate._identifying_paramsn   s     Z -
 
 	
r2   c                    dS )zReturn type of model.r:   r-   r.   s    r0   	_llm_typezReplicate._llm_typev   s	     {r2   promptOptional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]kwargsc                   | j         r+d} | j        |f||d|D ]}||j        }||j        z  }n} | j        |fi |}|                                 |j        dk    rt          |j                  t          |j	        t                    r|j	        }nd                    |j	                  }|J |p| j        }|D ]#}	|	|v r|d|                    |	                   }$|S )zCall to replicate endpoint.N)r%   rV   failed )r#   _streamtext_create_predictionwaitstatusRuntimeErrorerror
isinstanceoutputr   joinr%   find)
r/   rT   r%   rV   rX   
completionchunk
predictionstop_conditionsss
             r0   _callzReplicate._call{   s?    > 	8(,J%!{ >D  - - %!&JJ%*,JJ- 10BB6BBJOO H,,":#3444*+S11 8'.

WWZ%677
%%%+$)  	> 	>AJ'(<*//!*<*<(<=
r2   Iterator[GenerationChunk]c              +    K    | j         |fi |}|p| j        }d}d}|                                D ]}	||	z  }|D ]M}
|
|v rG|                                 d}t	          |	                    |
          d          }|	d |         }	|	s nN|	r0|r|                    |	| j                   t          |	          V  |r d S d S )NFr[   Tr   )verbose)r]   )	r^   r%   output_iteratorcancelmaxrf   on_llm_new_tokenro   r   )r/   rT   r%   rV   rX   ri   rj   stop_condition_reachedcurrent_completionrd   rk   
stop_indexs               r0   r\   zReplicate._stream   s6      -T,V>>v>>
+$)!&"$ 0022 	 	F&($ 	 	***%%'''-1* "%V[[^^Q!7!7J#KZK0F!  3 00 $ 1    &6222222% )	 	r2   r   c                   	 dd l }n# t          $ r t          d          w xY w| j        d| j        v rW| j                            d          \  }}|j                            |          }|j                            |          | _        n+|j                            | j                  }|j        | _        | j	        Yt          | j        j        d         d         d         d                                         d 	          }|d         d         | _	        | j	        |i| j        |}d| j        vr&|j        j                            | j        |
          S |j                            | j        |          S )Nr   zZCould not import replicate python package. Please install it with `pip install replicate`.:
componentsschemasInput
propertiesc                :    | d                              dd          S )N   zx-orderr   )get)items    r0   <lambda>z.Replicate._create_prediction.<locals>.<lambda>   s    aY!:!: r2   )key)r   )versionr   )r:   ImportErrorr!   r   splitmodelsr   versionslatest_versionr   sortedopenapi_schemaitemsr   predictionscreate)	r/   rT   rX   replicate_python	model_strversion_strr   input_propertiesinput_s	            r0   r^   zReplicate._create_prediction   s   	00000 	 	 	B  	 #dj  )-)9)9#)>)>&	;(/33I>>#(>#5#5k#B#B  (/33DJ??#(#7 ?"% /=iHQ %''::	      /q1!4DO OV

 
 dj  #*6==djPV=WWW#/66( 7   s    !)r)   r*   )r)   r"   )r)   r$   )r>   r   r)   r   )r>   r   r)   r   )r)   r   )r)   r   )NN)
rT   r   r%   rU   rV   rW   rX   r   r)   r   )
rT   r   r%   rU   rV   rW   rX   r   r)   rm   )rT   r   rX   r   r)   r   )__name__
__module____qualname____doc____annotations__r   dictr   r   r   r!   r#   rH   r%   r   model_configpropertyr1   classmethodr6   r;   r   rL   r   rN   rQ   rS   rl   r\   r^   r-   r2   r0   r   r      s6         . JJJ#(5W#M#M#MLMMMM)----- $J$$$$uT4888K8888
 I(eD111D11117:  L
 > > > X>    [ 2 2 2 [2 _(###   [ $#,    X 
 
 
 X
    X %):>	    H %):>	         D* * * * * *r2   r   )
__future__r   loggingtypingr   r   r   r   r   r	   langchain_core.callbacksr
   #langchain_core.language_models.llmsr   langchain_core.outputsr   langchain_core.utilsr   r   langchain_core.utils.pydanticr   pydanticr   r   r   replicate.predictionr   	getLoggerr   rF   r   r-   r2   r0   <module>r      s8   " " " " " "  E E E E E E E E E E E E E E E E = = = = = = 3 3 3 3 3 3 2 2 2 2 2 2 ? ? ? ? ? ? ? ? 4 4 4 4 4 4 7 7 7 7 7 7 7 7 7 7 0//////		8	$	$U U U U U U U U U Ur2   