a
    bg                     @  s   d dl mZ d dlZd dlZd dl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 d dlmZ eeZG d	d
 d
eZdS )    )annotationsN)AnyDictListOptional)CallbackManagerForLLMRun)LLM)convert_to_secret_strget_from_dict_or_envpre_init)Field	SecretStr)enforce_stop_tokensc                   @  s   e Zd ZU dZdZded< dZded< dZded	< d
Zded< e	e
dZded< dZded< dZded< edddddZeddddZdddddZd'dd d!ddd"d#d$Zeddd%d&ZdS )(BaichuanLLMzBaichuan large language models.zBaichuan2-Turbo-192kstrmodelg333333?floattemperaturegffffff?top_p<   inttimeout)default_factoryzDict[str, Any]model_kwargsNzOptional[str]baichuan_api_hostzOptional[SecretStr]baichuan_api_keyr   )valuesreturnc                 C  s,   t t|dd|d< t|dddd|d< |S )Nr   ZBAICHUAN_API_KEYr   ZBAICHUAN_API_HOSTz/https://api.baichuan-ai.com/v1/chat/completions)default)r	   r
   )clsr    r    o/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/baichuan.pyvalidate_environment"   s    

z BaichuanLLM.validate_environment)r   c                 C  s   | j | j| jd| jS )N)r   r   r   )r   r   r   r   selfr    r    r!   _default_params/   s    zBaichuanLLM._default_paramsr   )requestr   c              
   C  s   dd| j   d}zNtj| j||| jd}|jdkrZt|j	}|d d d d	 W S |
  W n2 ty } ztd
| W Y d }~n
d }~0 0 d S )Nzapplication/jsonzBearer )zContent-TypeAuthorization)headersjsonr      choicesr   messagecontentzAn error has occurred: )r   Zget_secret_valuerequestspostr   r   status_coder)   loadstextraise_for_status	Exception
ValueError)r$   r&   r(   responseZparsed_jsoner    r    r!   _post8   s     
zBaichuanLLM._postzOptional[List[str]]z"Optional[CallbackManagerForLLMRun])promptstoprun_managerkwargsr   c                 K  s@   | j }d|dg|d< || | |}|d ur<t||}|S )Nuser)Zroler-   messages)r%   updater8   r   )r$   r9   r:   r;   r<   r&   r2   r    r    r!   _callM   s    


zBaichuanLLM._callc                 C  s   dS )zReturn type of chat_model.zbaichuan-llmr    r#   r    r    r!   	_llm_type\   s    zBaichuanLLM._llm_type)NN)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   dictr   r   r   r   r"   propertyr%   r8   r@   rA   r    r    r    r!   r      s$   
  r   )
__future__r   r)   loggingtypingr   r   r   r   r.   Zlangchain_core.callbacksr   Z#langchain_core.language_models.llmsr   Zlangchain_core.utilsr	   r
   r   Zpydanticr   r   Zlangchain_community.llms.utilsr   	getLoggerrB   loggerr   r    r    r    r!   <module>   s   
