
    Ng7                         d dl Z d dl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mZmZ d dlmZ d dlmZmZmZmZ d dlmZ  e j        e          Z G d	 d
e
          ZdS )    N)AnyDictListMappingOptional)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)
get_fields)
ConfigDictField	SecretStrmodel_validator)enforce_stop_tokensc                   P   e Zd ZU dZdZeed<   	 dZeed<   	 dZe	ed<   	 dZ
eed<   	 d	Zeed
<   	 dZeed<   	 dZee         ed<   	 dZeed<   	 dZee         ed<   	  ee          Zee	ef         ed<   	 dZee         ed<    ed          Z ed          edee	ef         defd                        Zededefd            Z e!dee	ef         fd            Z"e!de#e	ef         fd            Z$e!de	fd            Z%	 	 d$de	d ee&e	                  d!ee'         d"ede	f
d#Z(dS )%Petalsa  Petals Bloom models.

    To use, you should have the ``petals`` python package installed, and the
    environment variable ``HUGGINGFACE_API_KEY`` set with your API key.

    Any parameters that are valid to be passed to the call can be passed
    in, even if not explicitly saved on this class.

    Example:
        .. code-block:: python

            from langchain_community.llms import petals
            petals = Petals()

    Nclient	tokenizerzbigscience/bloom-petals
model_namegffffff?temperature   max_new_tokensg?top_ptop_kT	do_sample
max_length)default_factorymodel_kwargshuggingface_api_keyforbid)extrabefore)modevaluesreturnc           
      d   d t          |                                           D             }|                    di           }t          |          D ]Y}||vrS||v rt	          d| d          t
                              d| d| d| d           |                    |          ||<   Z||d<   |S )	z>Build extra kwargs from additional params that were passed in.c                     h | ]	}|j         
S  )alias).0fields     [/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/petals.py	<setcomp>z%Petals.build_extra.<locals>.<setcomp>J   s    #V#V#VEEK#V#V#V    r    zFound z supplied twice.z	WARNING! z/ is not default parameter.
                    zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)r   r&   getlist
ValueErrorloggerwarningpop)clsr&   all_required_field_namesr#   
field_names        r.   build_extrazPetals.build_extraF   s     $W#VZ__=S=S=U=U#V#V#V 

>2..v,, 		; 		;J!999&&$%Jj%J%J%JKKKN* N NN N)3N N N  
 %+JJz$:$:j!!&~r0   c                 6   t          t          |dd                    }	 ddlm} ddlm} |d         }|                    |          |d<   |                    |          |d<   |                                |d<   n# t          $ r t          d	          w xY w|S )
z?Validate that api key and python package exists in environment.r!   HUGGINGFACE_API_KEYr   )AutoDistributedModelForCausalLM)AutoTokenizerr   r   r   zpCould not import transformers or petals python package.Please install with `pip install -U transformers petals`.)	r
   r   petalsr=   transformersr>   from_pretrainedget_secret_valueImportError)r7   r&   r!   r=   r>   r   s         r.   validate_environmentzPetals.validate_environmentZ   s     4 )>@UVV
 
	>>>>>>222222-J"/"?"?
"K"KF;>NN   F8 -@,P,P,R,RF()) 	 	 	L  	
 s   AA< <Bc                 f    | j         | j        | j        | j        | j        | j        d}i || j        S )z2Get the default parameters for calling Petals API.)r   r   r   r   r   r   )r   r   r   r   r   r   r    )selfnormal_paramss     r.   _default_paramszPetals._default_paramsr   sE      +"1ZZ/
 
 6-54#455r0   c                 &    i d| j         i| j        S )zGet the identifying parameters.r   )r   rH   rF   s    r.   _identifying_paramszPetals._identifying_params   s     K<1JT5IJJr0   c                     dS )zReturn type of llm.r?   r*   rJ   s    r.   	_llm_typezPetals._llm_type   s	     xr0   promptstoprun_managerkwargsc                     | j         }i ||}|                     |d          d         } | j        j        |fi |}| j                            |d                   }|t          ||          }|S )zCall the Petals API.pt)return_tensors	input_idsr   )rH   r   r   generatedecoder   )	rF   rN   rO   rP   rQ   paramsinputsoutputstexts	            r.   _callzPetals._call   s     %%F%f%t<<[I&$+&v8888~$$WQZ00 'tT22Dr0   )NN))__name__
__module____qualname____doc__r   r   __annotations__r   r   strr   floatr   intr   r   r   r   boolr   r   dictr    r   r!   r   r   model_configr   classmethodr:   r   rD   propertyrH   r   rK   rM   r   r   r\   r*   r0   r.   r   r      s           FC.Is1/J///K*NCIE58E8C=$ ItH $J$$$=#(5#>#>#>L$sCx.>>>! 04),333:  L _(###c3h C    [ $#$ $ 4    X. 
6c3h 
6 
6 
6 X
6 KWS#X%6 K K K XK 3    X %):>	  tCy! 67	
  
     r0   r   )loggingtypingr   r   r   r   r   langchain_core.callbacksr   #langchain_core.language_models.llmsr	   langchain_core.utilsr
   r   r   langchain_core.utils.pydanticr   pydanticr   r   r   r   langchain_community.llms.utilsr   	getLoggerr]   r4   r   r*   r0   r.   <module>rs      s    5 5 5 5 5 5 5 5 5 5 5 5 5 5 = = = = = = 3 3 3 3 3 3 V V V V V V V V V V 4 4 4 4 4 4 B B B B B B B B B B B B > > > > > >		8	$	$K K K K KS K K K K Kr0   