o
    Zhf                     @   sh   d dl mZmZ d dlmZmZmZ d dlmZm	Z	 d dl
mZ d dlmZ dZdZG dd	 d	eZd
S )    )AnyDict)convert_to_secret_strget_from_dict_or_envpre_init)Field	SecretStr)
BaseOpenAI)is_openai_v1zhttps://text.octoai.run/v1/zcodellama-7b-instructc                       s   e Zd ZU dZ	 eedZeed< ee	ddZ
e	ed< eedZeed< edefdd	Zedeeef f fd
dZedefddZededefddZ  ZS )OctoAIEndpointa  OctoAI LLM Endpoints - OpenAI compatible.

    OctoAIEndpoint is a class to interact with OctoAI Compute Service large
    language model endpoints.

    To use, you should have the environment variable ``OCTOAI_API_TOKEN`` set
    with your API token, or pass it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.llms.octoai_endpoint  import OctoAIEndpoint

            llm = OctoAIEndpoint(
                model="llama-2-13b-chat-fp16",
                max_tokens=200,
                presence_penalty=0,
                temperature=0.1,
                top_p=0.9,
            )

    defaultoctoai_api_base octoai_api_token
model_namereturnc                 C      dS )NF )clsr   r   _/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/octoai_endpoint.pyis_lc_serializable*   s   z!OctoAIEndpoint.is_lc_serializablec                    s>   d| j i| j}t s|| j | jd i |t jS )z,Get the parameters used to invoke the model.model)api_keyZapi_base)	r   Z_default_paramsr
   updater   get_secret_valuer   super_invocation_params)selfparams	__class__r   r   r   .   s   z!OctoAIEndpoint._invocation_paramsc                 C   r   )zReturn type of llm.Zoctoai_endpointr   )r   r   r   r   	_llm_type@   s   zOctoAIEndpoint._llm_typevaluesc                 C   s   t |ddtd|d< tt |dd|d< t |ddtd|d< zHdd	l}t rR|d  |d d
}|dsA|jdi |j	|d< |dsQ|j
di |j	|d< n|d |d< |d  |d< |j|d< W n tyq   tdw d|d v r|td|S )z?Validate that api key and python package exists in environment.r   ZOCTOAI_API_BASEr   r   ZOCTOAI_API_TOKENr   Z
MODEL_NAMEr   N)r   base_urlclientZasync_clientZopenai_api_baseZopenai_api_keyzTCould not import openai python package. Please install it with `pip install openai`.Zendpoint_urlZmodel_kwargsz<`endpoint_url` was deprecated, please use `octoai_api_base`.r   )r   DEFAULT_BASE_URLr   DEFAULT_MODELopenair
   r   getZOpenAIZcompletionsZAsyncOpenAIZ
CompletionImportError
ValueError)r   r#   r(   Zclient_paramsr   r   r   validate_environmentE   sX   






z#OctoAIEndpoint.validate_environment)__name__
__module____qualname____doc__r   r&   r   str__annotations__r   r   r'   r   classmethodboolr   propertyr   r   r   r"   r   r,   __classcell__r   r   r    r   r      s   
 r   N)typingr   r   Zlangchain_core.utilsr   r   r   Zpydanticr   r   Zlangchain_community.llms.openair	   Z langchain_community.utils.openair
   r&   r'   r   r   r   r   r   <module>   s    