
    7|h                         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j6                  e      Z G d de      Zy)    )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d%d       Zed&d       Z ed      ed'd              Zed(d       Zed)d       Zed*d        Z	 	 d+	 	 	 	 	 	 	 	 	 d,d!Z	 	 d+	 	 	 	 	 	 	 	 	 d-d"Zd.d#Zy)/	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extrac                
    ddiS )Nr   REPLICATE_API_TOKEN selfs    a/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/replicate.py
lc_secretszReplicate.lc_secrets@   s    %'<==    c                     y)NTr+   clss    r.   is_lc_serializablezReplicate.is_lc_serializableD   s    r0   c                
    g dS )z*Get the namespace of the langchain object.)	langchainllms	replicater+   r2   s    r.   get_lc_namespacezReplicate.get_lc_namespaceH   s
     21r0   before)modec                   t        |       j                         D ch c]  }| }}|j                  di       }|rt        j	                  d       i |j                  di       |}t        |      D ]I  }||vs||v rt        d| d      t        j	                  | d| d       |j                  |      ||<   K ||d<   |S c c}w )z>Build extra kwargs from additional params that were passed in.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)r3   valuesfieldall_required_field_namesr   r(   
field_names          r.   build_extrazReplicate.build_extraM   s     8B#7K7K7M#NeE#N #N

7B'NNV <6::nb1;U;v, 	;J!99&$vj\9I%JKK# %))34JN %+JJz$:j!	; "'~% $Os   	Cc                *    t        |dd      }||d<   |S )z?Validate that api key and python package exists in environment.r   r*   )r   )r3   rC   r   s      r.   validate_environmentzReplicate.validate_environmente   s*     3)+@
 )<$%r0   c                4    | j                   | j                  dS )zGet the identifying parameters.r   r   rK   r,   s    r.   _identifying_paramszReplicate._identifying_paramsn   s     ZZ --
 	
r0   c                     y)zReturn type of model.r8   r+   r,   s    r.   	_llm_typezReplicate._llm_typev   s     r0   c                   | j                   r<d} | j                  |f||d|D ]   }||j                  }||j                  z  }" n | j                  |fi |}|j	                          |j
                  dk(  rt        |j                        t        |j                  t              r|j                  }ndj                  |j                        }|J |xs | j                  }|D ]  }	|	|v s|d|j                  |	       } |S )zCall to replicate endpoint.N)r%   run_managerfailed )r#   _streamtext_create_predictionwaitstatusRuntimeErrorerror
isinstanceoutputr   joinr%   find)
r-   promptr%   rP   kwargs
completionchunk
predictionstop_conditionsss
             r.   _callzReplicate._call{   s    >>(,J%!{>D - %!&J%**,J- 100B6BJOO  H,":#3#344*++S1'..
WWZ%6%67
%%%+$))  	>AJ'(<*//!*<=
	> r0   c              +  x  K    | j                   |fi |}|xs | j                  }d}d}|j                         D ]|  }	||	z  }|D ]=  }
|
|v s|j                          d}t	        |	j                  |
      d      }|	d | }	|	r= n |	r-|r|j                  |	| j                         t        |	       |s| y  y w)NFrR   Tr   )verbose)rT   )	rU   r%   output_iteratorcancelmaxr]   on_llm_new_tokenrg   r   )r-   r^   r%   rP   r_   rb   rc   stop_condition_reachedcurrent_completionr[   rd   
stop_indexs               r.   rS   zReplicate._stream   s      -T,,V>v>
+$))!&"$ 002 	F&($ 	**%%'-1* "%V[[^Q!7J#KZ0F!	 00 $ 1  &622%+	s   A	B:4B:4B:6B:c                >   	 dd l }| j                  d| j                  v rZ| j                  j	                  d      \  }}|j
                  j                  |      }|j                  j                  |      | _        n6|j
                  j                  | j                        }|j                  | _        | j                  It        | j                  j                  d   d   d   d   j                         d 	      }|d   d   | _	        | j                  |i| j                  |}d| j                  vr1|j
                  j                  j                  | j                  |
      S |j                  j                  | j                  |      S # t        $ r t        d      w xY w)Nr   zZCould not import replicate python package. Please install it with `pip install replicate`.:
componentsschemasInput
propertiesc                ,    | d   j                  dd      S )N   zx-orderr   )get)items    r.   <lambda>z.Replicate._create_prediction.<locals>.<lambda>   s    aY!: r0   )key)r   )versionr   )r8   ImportErrorr!   r   splitmodelsrw   versionslatest_versionr   sortedopenapi_schemaitemsr   predictionscreate)	r-   r^   r_   replicate_python	model_strversion_strr   input_propertiesinput_s	            r.   rU   zReplicate._create_prediction   s   	0 #djj )-)9)9#)>&	;(//33I>#(>>#5#5k#B (//33DJJ?#(#7#7 ??"%  //=iHQ %':	  /q1!4DO OOV

 
 djj #**66==djjPV=WW#//66(( 7  K  	B 	s   F F)returnzDict[str, str])r   r"   )r   r$   )rC   r   r   r   )rC   r   r   r   )r   r   )r   r   )NN)
r^   r   r%   Optional[List[str]]rP   "Optional[CallbackManagerForLLMRun]r_   r   r   r   )
r^   r   r%   r   rP   r   r_   r   r   zIterator[GenerationChunk])r^   r   r_   r   r   r   )__name__
__module____qualname____doc____annotations__r   dictr   r   r   r!   r#   rA   r%   r   model_configpropertyr/   classmethodr4   r9   r   rG   r   rI   rL   rN   re   rS   rU   r+   r0   r.   r   r      s   . J#(W#ML.M)-- $J$T48K8
 It(D1D)17L
 > >   2 2 (#  $,   
 
   %):>	 " 8	
  
H %):>	   "  8	 
   
# D*r0   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   r?   r   r+   r0   r.   <module>r      sL    "  E E = 3 2 ? 4 7 7/			8	$U Ur0   