
    7|h                         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 j0                  e      Z G d d	e      Zy)
    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                   0   e Zd ZU dZdZ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fd       Z	 	 ddedeee      dee   dedef
dZy)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_keyforbid)extrabefore)modevaluesreturnc                 :   t        t        | j                  j                                     }|j	                  di       }t        |      D ]I  }||vs||v rt        d| d      t        j                  | d| d       |j                  |      ||<   K ||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listmodel_fieldskeysget
ValueErrorloggerwarningpop)clsr   all_required_field_namesr   
field_names        c/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/cerebriumai.pybuild_extrazCerebriumAI.build_extra.   s     $'tC,<,<,A,A,C'D#E 

>2.v, 	;J!99&$vj\9I%JKK# %))34JN %+JJz$:j!	; "'~    c                 <    t        t        |dd            }||d<   |S )z?Validate that api key and python package exists in environment.r   CEREBRIUMAI_API_KEY)r   r   )r*   r   r   s      r-   validate_environmentz CerebriumAI.validate_environmentA   s/     4 )>@UV
 )<$%r/   c                 >    i d| j                   id| j                  iS )zGet the identifying parameters.r   r   )r   r   selfs    r-   _identifying_paramszCerebriumAI._identifying_paramsJ   s2    
t001
t001
 	
r/   c                      y)zReturn type of llm.cerebriumai r4   s    r-   	_llm_typezCerebriumAI._llm_typeR   s     r/   promptstoprun_managerkwargsc                 V   t        t        | j                        j                         dd}| j                  xs i }d|i||}t        j                  | j                  ||      }|j                  dk(  r%|j                         }	|	d   }
|t        |
|      }
|
S |j                          y)Nzapplication/json)AuthorizationzContent-Typer;   )jsonheaders   resultr   )r   r   r   get_secret_valuer   requestspostr   status_coderA   r   raise_for_status)r5   r;   r<   r=   r>   rB   paramspayloadresponsedatatexts              r-   _callzCerebriumAI._callW   s     "433 .	
 ""(bV8v88==!2!2'R3&==?D>D +46K%%'r/   )NN)__name__
__module____qualname____doc__r   str__annotations__r   dictr   r   r   r   r   r   r   model_configr   classmethodr.   r   r2   propertyr   r6   r:   r   r	   rO   r9   r/   r-   r   r      s5   " L##(#>L$sCx.> 04),3L (#c3h C   $" $ 4   
WS#X%6 
 
 3   %):>	 tCy! 67	
  
r/   r   )loggingtypingr   r   r   r   r   r   rF   langchain_core.callbacksr	   #langchain_core.language_models.llmsr
   langchain_core.utilsr   r   r   pydanticr   r   r   r   langchain_community.llms.utilsr   	getLoggerrP   r'   r   r9   r/   r-   <module>rb      sF     ; ;  = 3 V V B B >			8	$b# br/   