o
    Zh                     @  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Zed+ddZd,ddZ		d-d.d&d'Zed/d(d)ZdS )0BaichuanLLMzBaichuan large language models.zBaichuan2-Turbo-192kstrmodelg333333?floattemperaturegffffff?top_p<   inttimeout)default_factoryDict[str, Any]model_kwargsNzOptional[str]baichuan_api_hostzOptional[SecretStr]baichuan_api_keyvaluesr   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!   X/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/baichuan.pyvalidate_environment"   s   

z BaichuanLLM.validate_environmentc                 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_paramsrequestr   c              
   C  s   dd| j   d}z(tj| j||| jd}|jdkr-t|j	}|d d d d	 W S |
  W d S  tyF } ztd
| d }~ww )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._postpromptstopOptional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]kwargsc                 K  s@   | j }d|dg|d< || | |}|d urt||}|S )Nuser)Zroler.   messages)r&   updater9   r   )r%   r:   r;   r=   r?   r'   r3   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)r   r   r   r   )r   r   )r'   r   r   r   )NN)
r:   r   r;   r<   r=   r>   r?   r   r   r   )r   r   )__name__
__module____qualname____doc__r   __annotations__r   r   r   r   dictr   r   r   r   r#   propertyr&   r9   rC   rD   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   	getLoggerrE   loggerr   r!   r!   r!   r"   <module>   s    
