
    Ng                        d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZ d dlmZmZmZ d dlmZ ddZddZ G d dee          ZdS )    )annotations)AnyDictIteratorListMappingOptionalcast)CallbackManagerForLLMRun)BaseChatModel)	AIMessageAIMessageChunkBaseMessageFunctionMessageHumanMessageSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)VolcEngineMaasBasemessager   returndictc                *   t          | t                    rd| j        d}nrt          | t                    rd| j        d}nRt          | t                    rd| j        d}n2t          | t
                    rd| j        d}nt          d|            |S )Nsystem)rolecontentuser	assistantfunctionzGot unknown type )
isinstancer   r   r   r   r   
ValueError)r   message_dicts     k/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/volcengine_maas.py_convert_message_to_dictr%      s    '=)) 	8 (W_EE	G\	*	* 8 &7?CC	GY	'	' 8 +HH	G_	-	- 8 *wGG6W66777    _dictMapping[str, Any]r   c                    |                      di                                di                                dd          }t          |          S )zConvert a dict to a message.choicer   r    r   )getr   )r'   r   s     r$   convert_dict_to_messager.   "   sH     ii"%%)))R88<<YKKGW%%%%r&   c                       e Zd ZdZedd            Zedd            Zed fd            ZddZ		 	 dddZ
	 	 dddZ xZS )VolcEngineMaasChata   Volc Engine Maas hosts a plethora of models.

    You can utilize these models through this class.

    To use, you should have the ``volcengine`` python package installed.
    and set access key and secret key by environment variable or direct pass those
    to this class.
    access key, secret key are required parameters which you could get help
    https://www.volcengine.com/docs/6291/65568

    In order to use them, it is necessary to install the 'volcengine' Python package.
    The access key and secret key must be set either via environment variables or
    passed directly to this class.
    access key and secret key are mandatory parameters for which assistance can be
    sought at https://www.volcengine.com/docs/6291/65568.

    The two methods are as follows:
    * Environment Variable
    Set the environment variables 'VOLC_ACCESSKEY' and 'VOLC_SECRETKEY' with your
    access key and secret key.

    * Pass Directly to Class
    Example:
        .. code-block:: python

            from langchain_community.llms import VolcEngineMaasLLM
            model = VolcEngineMaasChat(model="skylark-lite-public",
                                          volc_engine_maas_ak="your_ak",
                                          volc_engine_maas_sk="your_sk")
    r   strc                    dS )zReturn type of chat model.zvolc-engine-maas-chat )selfs    r$   	_llm_typezVolcEngineMaasChat._llm_typeI   s
     '&r&   boolc                    dS )z9Return whether this model can be serialized by Langchain.Fr3   )clss    r$   is_lc_serializablez%VolcEngineMaasChat.is_lc_serializableN   s	     ur&   Dict[str, Any]c                L    i | j         | j        dt                      j        S )N)endpointmodel)r<   r=   super_identifying_params)r4   	__class__s    r$   r?   z&VolcEngineMaasChat._identifying_paramsS   s0    
=4:>>
gg)
 	
r&   messagesList[BaseMessage]kwargsr   c                ~    dd| j         ii}| j        | j        |d         d<   i |d |D             i | j        |dS )Nr=   nameversionc                ,    g | ]}t          |          S r3   )r%   ).0r   s     r$   
<listcomp>zAVolcEngineMaasChat._convert_prompt_msg_params.<locals>.<listcomp>h   s!    SSSw1'::SSSr&   )rA   
parameters)r=   model_version_default_params)r4   rA   rC   	model_reqs       r$   _convert_prompt_msg_paramsz-VolcEngineMaasChat._convert_prompt_msg_paramsZ   sy     

	
 ),0,>Igy)

SS(SSS<T1<V<
 
 
 	
r&   NstopOptional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]Iterator[ChatGenerationChunk]c              +  @  K   |||d<    | j         |fi |}| j                            |          D ]k}|rgt          |          }t	          t          |j                            }|r/|                    t          t          |j                  |           |V  ld S )NrO   r,   r   )chunk)
rN   clientstream_chatr.   r   r   r   on_llm_new_tokenr
   r1   )	r4   rA   rO   rQ   rC   paramsresmsgrV   s	            r$   _streamzVolcEngineMaasChat._streaml   s       !F6N00DDVDD;**622 	 	C -c22+N3;4W4W4WXXX V00c3;1G1Gu0UUU	 	r&   r   c                ^   d}| j         r | j        |||fi |D ]}||j        z  }nX|||d<    | j        |fi |}| j                            |          }t          |          }	t          t          |	j	                  }t          |          }
t          t          |
          g          S )Nr+   rO   r,   rU   )generations)	streamingr]   textrN   rW   chatr.   r
   r1   r   r   r   r   )r4   rA   rO   rQ   rC   
completionrV   rZ   r[   r\   r   s              r$   	_generatezVolcEngineMaasChat._generate~   s     
> 		0%hkLLVLL ) )ej(

) !%v4T4XHHHHF+""6**C)#..Cc3;//JJ///~g'F'F'F&GHHHHr&   )r   r1   )r   r6   )r   r:   )rA   rB   rC   r   r   r:   )NN)
rA   rB   rO   rP   rQ   rR   rC   r   r   rS   )
rA   rB   rO   rP   rQ   rR   rC   r   r   r   )__name__
__module____qualname____doc__propertyr5   classmethodr9   r?   rN   r]   rd   __classcell__)r@   s   @r$   r0   r0   )   s         > ' ' ' X'    [ 
 
 
 
 
 X

 
 
 
* %):>	    * %):>	I I I I I I I I Ir&   r0   N)r   r   r   r   )r'   r(   r   r   )
__future__r   typingr   r   r   r   r   r	   r
   langchain_core.callbacksr   *langchain_core.language_models.chat_modelsr   langchain_core.messagesr   r   r   r   r   r   langchain_core.outputsr   r   r   (langchain_community.llms.volcengine_maasr   r%   r.   r0   r3   r&   r$   <module>rs      sg   " " " " " " E E E E E E E E E E E E E E E E E E = = = = = = D D D D D D                S R R R R R R R R R G G G G G G   & & & &iI iI iI iI iI(: iI iI iI iI iIr&   