a
    bg                     @   s   d dl Z d dlmZmZmZmZmZmZ d dl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mZmZmZ d dlmZ e eZG dd	 d	eZdS )
    N)AnyDictListMappingOptionalcast)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)
ConfigDictField	SecretStrmodel_validator)enforce_stop_tokensc                   @   s   e Zd ZU dZdZeed< eedZ	e
eef ed< dZee ed< edd	Zed
dee
eef edddZee
e
dddZeeeef dddZeedddZdeeee  ee eedddZdS )CerebriumAIaH  CerebriumAI large language models.

    To use, you should have the ``cerebrium`` python package installed.
    You should also have the environment variable ``CEREBRIUMAI_API_KEY``
    set with your API key or pass it as a named argument in the constructor.

    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 CerebriumAI
            cerebrium = CerebriumAI(endpoint_url="", cerebriumai_api_key="my-api-key")

     endpoint_url)default_factorymodel_kwargsNcerebriumai_api_keyZforbid)extrabefore)mode)valuesreturnc                 C   s|   t t| j }|di }t|D ]H}||vr&||v rJtd| dt| d| d ||||< q&||d< |S )z>Build extra kwargs from additional params that were passed in.r   zFound z supplied twice.zJ was transferred to model_kwargs.
                    Please confirm that z is what you intended.)	setlistZmodel_fieldskeysget
ValueErrorloggerwarningpop)clsr   Zall_required_field_namesr   
field_name r'   r/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/cerebriumai.pybuild_extra.   s    zCerebriumAI.build_extrac                 C   s   t t|dd}||d< |S )z?Validate that api key and python package exists in environment.r   ZCEREBRIUMAI_API_KEY)r
   r   )r%   r   r   r'   r'   r(   validate_environmentA   s
    
z CerebriumAI.validate_environment)r   c                 C   s   i d| j id| jiS )zGet the identifying parameters.r   r   )r   r   selfr'   r'   r(   _identifying_paramsJ   s
    zCerebriumAI._identifying_paramsc                 C   s   dS )zReturn type of llm.Zcerebriumair'   r+   r'   r'   r(   	_llm_typeR   s    zCerebriumAI._llm_type)promptstoprun_managerkwargsr   c                 K   s~   t t| j dd}| jpi }d|i||}tj| j||d}|jdkrr|	 }	|	d }
|d urnt
|
|}
|
S |  dS )Nzapplication/json)AuthorizationzContent-Typer/   )jsonheaders   resultr   )r   r   r   Zget_secret_valuer   requestspostr   status_coder4   r   raise_for_status)r,   r/   r0   r1   r2   r5   paramspayloadresponsedatatextr'   r'   r(   _callW   s     


zCerebriumAI._call)NN)__name__
__module____qualname____doc__r   str__annotations__r   dictr   r   r   r   r   r   r   Zmodel_configr   classmethodr)   r   r*   propertyr   r-   r.   r   r   rA   r'   r'   r'   r(   r      s2   
  
r   )loggingtypingr   r   r   r   r   r   r8   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr	   Zlangchain_core.utilsr
   r   r   Zpydanticr   r   r   r   Zlangchain_community.llms.utilsr   	getLoggerrB   r"   r   r'   r'   r'   r(   <module>   s    
