
    7|h7                         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 j0                  e      Z G d	 d
e
      Zy)    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                      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(y)%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           
      T   t        |       j                         D ch c]  }|j                   }}|j                  di       }t	        |      D ]M  }||vs||v rt        d| d      t        j                  d| d| d| d       |j                  |      ||<   O ||d<   |S c c}w )z>Build extra kwargs from additional params that were passed in.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&   aliasgetlist
ValueErrorloggerwarningpop)clsr&   fieldall_required_field_namesr#   
field_names         ^/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/petals.pybuild_extrazPetals.build_extraF   s     >H_=S=S=U#VEEKK#V #V

>2.v, 		;J!99&$vj\9I%JKK!* .L !))34JN
 %+JJz$:j!		; "'~ $Ws   B%c                     t        t        |dd            }	 ddlm} ddlm} |d   }|j                  |      |d<   |j                  |      |d<   |j                         |d<   |S # t        $ r t        d	      w xY w)
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   petalsr8   transformersr9   from_pretrainedget_secret_valueImportError)r0   r&   r!   r8   r9   r   s         r4   validate_environmentzPetals.validate_environmentZ   s     4 )>@UV
	>2-J"/"?"?
"KF;>NN F8 -@,P,P,RF()   	L 	s   AA& &A;c                     | 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     r4   _default_paramszPetals._default_paramsr   sQ      ++"11ZZZZ//
 6-54#4#455    c                 :    i d| j                   i| j                  S )zGet the identifying parameters.r   )r   rC   rA   s    r4   _identifying_paramszPetals._identifying_params   s$     K<1JT5I5IJJrD   c                      y)zReturn type of llm.r:    rF   s    r4   	_llm_typezPetals._llm_type   s     rD   promptstoprun_managerkwargsc                     | j                   }i ||}| j                  |d      d   } | j                  j                  |fi |}| j                  j	                  |d         }|t        ||      }|S )zCall the Petals API.pt)return_tensors	input_idsr   )rC   r   r   generatedecoder   )	rA   rK   rL   rM   rN   paramsinputsoutputstexts	            r4   _callzPetals._call   s     %%%F%f%t<[I&$++&&v88~~$$WQZ0 'tT2DrD   )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   classmethodr5   r   r?   propertyrC   r   rG   rJ   r   r   rY   rI   rD   r4   r   r      s     FC.Is1/J/K*NCIE58E8C=$ ItH $J$=#(#>L$sCx.>! 04),3L (#c3h C   $$ $ 4  . 
6c3h 
6 
6 KWS#X%6 K K 3   %):>	 tCy! 67	
  
rD   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   	getLoggerrZ   r-   r   rI   rD   r4   <module>rp      sF     5 5 = 3 V V 4 B B >			8	$KS KrD   