
    7|h                        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 d dlmZmZ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y)    )annotations)AnyAsyncIteratorDictIteratorListOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModelagenerate_from_streamgenerate_from_stream)	AIMessageAIMessageChunkBaseMessageChatMessageHumanMessageSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)BaseFriendlic                    t        | t              st        | t              ryt        | t              ryt        | t              ryt        d|        )zGet role of the message.

    Args:
        message (BaseMessage): The message object.

    Raises:
        ValueError: Raised when the message is of an unknown type.

    Returns:
        str: The role of the message.
    user	assistantsystemzGot unknown type )
isinstancer   r   r   r   
ValueErrormessages    g/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/chat_models/friendli.pyget_roler"      sG     ';':g|+L'9%'=)
(	2
33    c                \    d| D cg c]  }t        |      |j                  d c}iS c c}w )zGet a request of the Friendli chat API.

    Args:
        messages (List[BaseMessage]): Messages comprising the conversation so far.

    Returns:
        Dict[str, Any]: The request for the Friendli chat API.
    messagesrolecontent)r"   r(   )r%   r    s     r!   get_chat_requestr)   0   s:     	#
 g&7??C
 
s   )c                      e Zd ZU dZdZded<   edd       Zedd       Zedd       Z	edd       Z
	 d	 	 	 	 	 dd
Z	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 ddZ	 	 d	 	 	 	 	 	 	 	 	 ddZy	)ChatFriendlia3  Friendli LLM for chat.

    ``friendli-client`` package should be installed with `pip install friendli-client`.
    You must set ``FRIENDLI_TOKEN`` environment variable or provide the value of your
    personal access token for the ``friendli_token`` argument.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import FriendliChat

            chat = Friendli(
                model="meta-llama-3.1-8b-instruct", friendli_token="YOUR FRIENDLI TOKEN"
            )
            chat.invoke("What is generative AI?")
    zmeta-llama-3.1-8b-instructstrmodelc                
    ddiS )Nfriendli_tokenFRIENDLI_TOKEN selfs    r!   
lc_secretszChatFriendli.lc_secretsU   s     "233r#   c                    | j                   | j                  | j                  | j                  | j                  | j
                  dS )z@Get the default parameters for calling Friendli completions API.frequency_penaltypresence_penalty
max_tokensstoptemperaturetop_pr6   r2   s    r!   _default_paramszChatFriendli._default_paramsY   s>     "&!7!7 $ 5 5//II++ZZ
 	
r#   c                6    d| j                   i| j                  S )zGet the identifying parameters.r-   )r-   r=   r2   s    r!   _identifying_paramsz ChatFriendli._identifying_paramse   s     <t';';<<r#   c                     y)Nzfriendli-chatr1   r2   s    r!   	_llm_typezChatFriendli._llm_typej   s    r#   Nc                    | j                   }| j                  |t        d      | j                  | j                  |d<   n||d<   i ||S )z,Get the parameters used to invoke the model.z2`stop` found in both the input and default params.r:   )r=   r:   r   )r3   r:   kwargsparamss       r!   _get_invocation_paramsz#ChatFriendli._get_invocation_paramsn   sZ     %%99 T%5QRRYY"!YYF6N!F6N#&#F##r#   c              +  x  K    | j                   dd|i|} | j                  j                  j                  j                  di t        |      d| j                  d|}|D ]S  }|j                  d   j                  j                  }|s)|r|j                  |       t        t        |             U y wNr:   T)streamr-   r   r(   r   r1   )rE   clientchatcompletionscreater)   r-   choicesdeltar(   on_llm_new_tokenr   r   	r3   r%   r:   run_managerrC   rD   rH   chunkrO   s	            r!   _streamzChatFriendli._stream{   s      -,,A$A&A4!!--44 
x(
15TZZ
KQ
  	QEMM!$**22E007).2OPP	Qs   B	B:.B:c                 K    | j                   dd|i|} | j                  j                  j                  j                  di t        |      d| j                  d| d {   }|2 3 d {   }|j                  d   j                  j                  }|s/|r|j                  |       d {    t        t        |             d7 j7 a7 "6 y wrG   )rE   async_clientrK   rL   rM   r)   r-   rN   rO   r(   rP   r   r   rQ   s	            r!   _astreamzChatFriendli._astream   s      -,,A$A&A@t((--99@@ 
x(
15TZZ
KQ
 
 " 	Q 	Q%MM!$**22E%66u===).2OPP
	Q >	 "sN   A"C$C%C+C/C0C3&CC0C1CCCCc           	        | j                   r! | j                  |f||d|}t        |      S  | j                  d
d|i|} | j                  j
                  j                  j                  d
|D cg c]  }t        |      |j                  d c}d| j                  d|}t        |j                  d   j                  j                        }t        t        |      g	      S c c}w N)r:   rR   r:   r&   F)r%   rH   r-   r   rI   r   )generationsr1   )	streamingrT   r   rE   rJ   rK   rL   rM   r"   r(   r-   r   rN   r    r   r   	r3   r%   r:   rR   rC   stream_iterrD   r    responses	            r!   	_generatezChatFriendli._generate   s     >>&$,,#@FK (44,,,A$A&A64;;##//66 
  (
  %W-& **
 
 H$4$4Q$7$?$?$G$GH~g'F&GHHs   1C(
c           	     
  K   | j                   r) | j                  |f||d|}t        |       d {   S  | j                  d
d|i|} | j                  j
                  j                  j                  d
|D cg c]  }t        |      |j                  d c}d| j                  d| d {   }t        |j                  d   j                  j                        }t        t        |      g	      S 7 c c}w 7 OwrY   )r[   rW   r   rE   rV   rK   rL   rM   r"   r(   r-   r   rN   r    r   r   r\   s	            r!   
_ageneratezChatFriendli._agenerate   s     >>'$--#@FK /{;;;,,,A$A&AB**//;;BB 
  (
  %W-& **
 
 
 H$4$4Q$7$?$?$G$GH~g'F&GHH# <
s/   1DC:AD;C<
D1D2A	D<D)returnzDict[str, str])rb   Dict[str, Any])rb   r,   )N)r:   Optional[List[str]]rC   r   rb   rc   )NN)
r%   List[BaseMessage]r:   rd   rR   "Optional[CallbackManagerForLLMRun]rC   r   rb   zIterator[ChatGenerationChunk])
r%   re   r:   rd   rR   'Optional[AsyncCallbackManagerForLLMRun]rC   r   rb   z"AsyncIterator[ChatGenerationChunk])
r%   re   r:   rd   rR   rf   rC   r   rb   r   )
r%   re   r:   rd   rR   rg   rC   r   rb   r   )__name__
__module____qualname____doc__r-   __annotations__propertyr4   r=   r?   rA   rE   rT   rW   r_   ra   r1   r#   r!   r+   r+   A   s   " .E3-4 4 	
 	
 = =   +/$'$:=$	$  %):>	Q#Q "Q 8	Q
 Q 
'Q* %)?C	Q#Q "Q =	Q
 Q 
,Q* %):>	I#I "I 8	I
 I 
IB %)?C	I#I "I =	I
 I 
Ir#   r+   N)r    r   rb   r,   )r%   re   rb   rc   ) 
__future__r   typingr   r   r   r   r   r	   langchain_core.callbacksr
   r   *langchain_core.language_models.chat_modelsr   r   r   langchain_core.messagesr   r   r   r   r   r   langchain_core.outputsr   r   r   !langchain_community.llms.friendlir   r"   r)   r+   r1   r#   r!   <module>ru      sO    " E E 
  S R :4*"XI=, XIr#   