
    Ngt                        d dl Z d dlZd dl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 d dlmZmZmZmZ d dlmZmZ d dlmZ d d	lmZ  e j        e          Zd
edefdZ e
dd           G d de                      Z dS )    N)AnyDictListMappingOptional)
deprecated)CallbackManagerForLLMRun)BaseChatModel)	AIMessageBaseMessageChatMessageHumanMessage)ChatGeneration
ChatResultget_from_dict_or_env)model_validatormessagereturnc                     t          | t                    r| j        | j        d}nRt          | t                    rd| j        d}n2t          | t
                    rd| j        d}nt          d|            |S )N)rolecontentuser	assistantzGot unknown type )
isinstancer   r   r   r   r   
ValueError)r   message_dicts     a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/ernie.py_convert_message_to_dictr      s    ';'' 8 'II	G\	*	* 8 &7?CC	GY	'	' 8 +HH6W66777    z0.0.13z3langchain_community.chat_models.QianfanChatEndpoint)sincealternativec                   >   e Zd ZU dZdZee         ed<   	 dZee         ed<   	 dZ	ee         ed<   	 dZ
ee         ed<   	 dZeed<   	 dZee         ed	<   	 d
Zee         ed<   	 dZee         ed<   	 dZee         ed<   dZee         ed<   dZee         ed<    ej                    Z ed          ededefd                        ZdedefdZd$dZ 	 	 d%de!e"         dee!e                  dee#         dede$f
d Z%d!e&eef         de$fd"Z'e(defd#            Z)dS )&ErnieBotChata#  `ERNIE-Bot` large language model.

    ERNIE-Bot is a large language model developed by Baidu,
    covering a huge amount of Chinese data.

    To use, you should have the `ernie_client_id` and `ernie_client_secret` set,
    or set the environment variable `ERNIE_CLIENT_ID` and `ERNIE_CLIENT_SECRET`.

    Note:
    access_token will be automatically generated based on client_id and client_secret,
    and will be regenerated after expiration (30 days).

    Default model is `ERNIE-Bot-turbo`,
    currently supported models are `ERNIE-Bot-turbo`, `ERNIE-Bot`, `ERNIE-Bot-8K`,
    `ERNIE-Bot-4`, `ERNIE-Bot-turbo-AI`.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ErnieBotChat
            chat = ErnieBotChat(model_name='ERNIE-Bot')


    Deprecated Note:
    Please use `QianfanChatEndpoint` instead of this class.
    `QianfanChatEndpoint` is a more suitable choice for production.

    Always test your code after changing to `QianfanChatEndpoint`.

    Example of `QianfanChatEndpoint`:
        .. code-block:: python

            from langchain_community.chat_models import QianfanChatEndpoint
            qianfan_chat = QianfanChatEndpoint(model="ERNIE-Bot",
                endpoint="your_endpoint", qianfan_ak="your_ak", qianfan_sk="your_sk")

    Nernie_api_baseernie_client_idernie_client_secretaccess_tokenERNIE-Bot-turbo
model_namesystem<   request_timeoutF	streamingg?top_pgffffff?temperature   penalty_scorebefore)modevaluesr   c                     t          |ddd          |d<   t          |dd          |d<   t          |dd          |d<   |S )Nr%   ERNIE_API_BASEzhttps://aip.baidubce.comr&   ERNIE_CLIENT_IDr'   ERNIE_CLIENT_SECRETr   )clsr5   s     r   validate_environmentz!ErnieBotChat.validate_environmento   sl     $8$&68R$
 $
  %9%
 %
 !
 )=!!)
 )
$%
 r    payloadc           
      
   | j          d}dddddddd	d
d	}| j        |v r| d|| j                  }nt          d| j                   t          j        || j        ddid| j        i|          }|                                S )Nz)/rpc/2.0/ai_custom/v1/wenxinworkshop/chatz
eb-instantcompletionsernie_bot_8kcompletions_proai_apaas
bloomz_7b1
llama_2_7bllama_2_13bllama_2_70b)	r)   z	ERNIE-BotzERNIE-Bot-8KzERNIE-Bot-4zERNIE-Bot-turbo-AIz	BLOOMZ-7BzLlama-2-7b-chatzLlama-2-13b-chatzLlama-2-70b-chat/zGot unknown model_name Content-Typeapplication/jsonr(   )timeoutheadersparamsjson)r%   r*   r   requestspostr-   r(   rL   )selfr<   base_urlmodel_pathsurlresps         r   _chatzErnieBotChat._chat   s    )TTT+&*,",%+ - -

 

 ?k))>>DO <>>CCHtHHIII}( 2 #D$56
 
 
 yy{{r    c           
      R   | j         5  t                              d           | j         d}t	          j        |ddddd| j        | j        d          }t          |	                                
                    d	                    | _        d d d            d S # 1 swxY w Y   d S )
NzRefreshing access tokenz/oauth/2.0/token
   rH   )rG   Acceptclient_credentials)
grant_type	client_idclient_secret)rI   rJ   rK   r(   )_lockloggerdebugr%   rM   rN   r&   r'   strrL   getr(   )rO   rP   rS   s      r   _refresh_access_token_with_lockz,ErnieBotChat._refresh_access_token_with_lock   s   Z 	E 	ELL2333#2DDDH=$60 
 #7!%!5%)%=   D !$DIIKKOON$C$C D DD!	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	Es   BBB #B messagesstoprun_managerkwargsc                 J   | j         rt          d          | j        s|                                  d |D             | j        | j        | j        | j        d|}t          	                    d|            | 
                    |          }|                    d          ro|                    d          dk    rDt          	                    d           |                                  | 
                    |          }nt          d|           |                     |          S )	Nz)`streaming` option currently unsupported.c                 ,    g | ]}t          |          S  )r   ).0ms     r   
<listcomp>z*ErnieBotChat._generate.<locals>.<listcomp>   s!    GGG1!44GGGr    )rb   r/   r0   r2   r+   zPayload for ernie api is 
error_codeo   z access_token expired, refresh itz#Error from ErnieChat api response: )r.   r   r(   ra   r/   r0   r2   r+   r]   r^   rT   r`   _create_chat_result)rO   rb   rc   rd   re   r<   rS   s          r   	_generatezErnieBotChat._generate   s5    > 	JHIII  	300222GGhGGGZ+!/k
 
 
 	:::;;;zz'""88L!! 	Oxx%%,,?@@@44666zz'** !Mt!M!MNNN''---r    responsec                 (   d|v r&dt          |                    di                     i}ni }t          t          |                    dd          i |                    g}|                    di           }|| j        d}t          ||          S )	Nfunction_callresult )r   additional_kwargs)r   usage)token_usager*   )generations
llm_output)dictr`   r   r   r*   r   )rO   rp   ru   rx   rw   ry   s         r   rn   z ErnieBotChat._create_chat_result   s    h&&hll?B&G&G!H!H! !#!$LL266&;):&;    
 ll7B//%0PP
kjIIIIr    c                     dS )Nzernie-bot-chatrh   )rO   s    r   	_llm_typezErnieBotChat._llm_type   s    r    )r   N)NN)*__name__
__module____qualname____doc__r%   r   r_   __annotations__r&   r'   r(   r*   r+   r-   intr.   boolr/   floatr0   r2   	threadingLockr\   r   classmethodr   r   r;   objectrz   rT   ra   r   r   r	   r   ro   r   rn   propertyr|   rh   r    r   r$   r$   "   sk        
$ $L %)NHSM(((,%)OXc])))%)-#---)"&L(3-&&&7 (J'''< !FHSM   @ &(OXc]'''0 %Ix~%%%, E8E?   #'K%'''%&M8E?&&&INE_(###$ 3    [ $# V     :E E E E, %):>	. .{#. tCy!. 67	.
 . 
. . . .>JGCH,= J* J J J J&  3       X     r    r$   )!loggingr   typingr   r   r   r   r   rM   langchain_core._api.deprecationr   langchain_core.callbacksr	   *langchain_core.language_models.chat_modelsr
   langchain_core.messagesr   r   r   r   langchain_core.outputsr   r   langchain_core.utilsr   pydanticr   	getLoggerr}   r]   rz   r   r$   rh   r    r   <module>r      s        5 5 5 5 5 5 5 5 5 5 5 5 5 5  6 6 6 6 6 6 = = = = = = D D D D D D            > = = = = = = = 5 5 5 5 5 5 $ $ $ $ $ $		8	$	$	k 	d 	 	 	 	 
E           =    	      r    