
    dh                        S SK Jr  S SKJrJrJrJrJrJr  S SK	J
r
Jr  S SKJrJrJr  S SKJrJrJrJrJrJr  S SKJrJrJr  S SKJr  SS jrSS	 jr " S
 S\\5      rg)    )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                    [        U [        5      (       d  [        U [        5      (       a  g[        U [        5      (       a  g[        U [        5      (       a  g[        SU  35      e)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    `/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/chat_models/friendli.pyget_roler"      sS     ';'':g|+L+L'9%%'=))
(	2
33    c                `    SU  Vs/ sH  n[        U5      UR                  S.PM     sn0$ s  snf )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                  "   \ rS rSr% SrSrS\S'   \SS j5       r\SS j5       r	\SS j5       r
\SS	 j5       r S     SS jjr  S         SS jjr  S         SS jjr  S         SS jjr  S         SS jjrSrg
)ChatFriendliA   a  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                
    SS0$ )Nfriendli_tokenFRIENDLI_TOKEN selfs    r!   
lc_secretsChatFriendli.lc_secretsU   s     "233r#   c                    U R                   U R                  U R                  U R                  U R                  U R
                  S.$ )z@Get the default parameters for calling Friendli completions API.frequency_penaltypresence_penalty
max_tokensstoptemperaturetop_pr8   r3   s    r!   _default_paramsChatFriendli._default_paramsY   s>     "&!7!7 $ 5 5//II++ZZ
 	
r#   c                6    SU R                   0U R                  E$ )zGet the identifying parameters.r.   )r.   r?   r3   s    r!   _identifying_params ChatFriendli._identifying_paramse   s     <t';';<<r#   c                    g)Nzfriendli-chatr2   r3   s    r!   	_llm_typeChatFriendli._llm_typej   s    r#   Nc                    U R                   nU R                  b  Ub  [        S5      eU R                  b  U R                  US'   OXS'   0 UEUE$ )z,Get the parameters used to invoke the model.z2`stop` found in both the input and default params.r<   )r?   r<   r   )r4   r<   kwargsparamss       r!   _get_invocation_params#ChatFriendli._get_invocation_paramsn   sX     %%99 T%5QRRYY"!YYF6N!6N#&#F##r#   c              +    #    U R                   " SSU0UD6nU R                  R                  R                  R                  " S0 [        U5      DSU R                  S.DUD6nU HY  nUR                  S   R                  R                  nU(       d  M/  U(       a  UR                  U5        [        [        US9S9v   M[     g 7fNr<   T)streamr.   r   r(   r   r2   )rJ   clientchatcompletionscreater)   r.   choicesdeltar(   on_llm_new_tokenr   r   	r4   r%   r<   run_managerrH   rI   rN   chunkrU   s	            r!   _streamChatFriendli._stream{   s      ,,A$A&A!!--44 
x(
15TZZ
KQ
 EMM!$**22Eu007).2OPP s   BC/Cc                 #    U R                   " SSU0UD6nU R                  R                  R                  R                  " S0 [        U5      DSU R                  S.DUD6I S h  vN nU  S h  vN nUR                  S   R                  R                  nU(       d  M5  U(       a  UR                  U5      I S h  vN   [        [        US9S97v   Mj   Np Ng N
 g 7frM   )rJ   async_clientrQ   rR   rS   r)   r.   rT   rU   r(   rV   r   r   rW   s	            r!   _astreamChatFriendli._astream   s      ,,A$A&A((--99@@ 
x(
15TZZ
KQ
 
 " 	Q%MM!$**22Eu%66u===).2OPP
	Q >	 "sN   A"C$C%C+C/C0C3)C C;C<CCCCc           	        U R                   (       a   U R                  " U4X#S.UD6n[        U5      $ U R                  " S
SU0UD6nU R                  R
                  R                  R                  " S
U Vs/ sH  n[        U5      UR                  S.PM     snSU R                  S.UD6n[        UR                  S   R                  R                  S9n[        [        US9/S	9$ s  snf N)r<   rX   r<   r&   F)r%   rN   r.   r   rO   r   )generationsr2   )	streamingrZ   r   rJ   rP   rQ   rR   rS   r"   r(   r.   r   rT   r    r   r   	r4   r%   r<   rX   rH   stream_iterrI   r    responses	            r!   	_generateChatFriendli._generate   s     >>,,#@FK (44,,A$A&A;;##//66 
  (
  (G %W-&  ( **
 
 H$4$4Q$7$?$?$G$GH~g'F&GHHs   5!C%
c           	       #    U R                   (       a(  U R                  " U4X#S.UD6n[        U5      I S h  vN $ U R                  " S
SU0UD6nU R                  R
                  R                  R                  " S
U Vs/ sH  n[        U5      UR                  S.PM     snSU R                  S.UD6I S h  vN n[        UR                  S   R                  R                  S9n[        [        US9/S	9$  Ns  snf  NF7fra   )rc   r^   r   rJ   r]   rQ   rR   rS   r"   r(   r.   r   rT   r    r   r   rd   s	            r!   
_agenerateChatFriendli._agenerate   s     >>--#@FK /{;;;,,A$A&A**//;;BB 
  (
  (G %W-&  ( **
 
 
 H$4$4Q$7$?$?$G$GH~g'F&GHH# <
s/   5D C7AD ?!C9
 D 7C>8A D 9D r2   )returnzDict[str, str])rl   Dict[str, Any])rl   r-   )N)r<   Optional[List[str]]rH   r   rl   rm   )NN)
r%   List[BaseMessage]r<   rn   rX   "Optional[CallbackManagerForLLMRun]rH   r   rl   zIterator[ChatGenerationChunk])
r%   ro   r<   rn   rX   'Optional[AsyncCallbackManagerForLLMRun]rH   r   rl   z"AsyncIterator[ChatGenerationChunk])
r%   ro   r<   rn   rX   rp   rH   r   rl   r   )
r%   ro   r<   rn   rX   rq   rH   r   rl   r   )__name__
__module____qualname____firstlineno____doc__r.   __annotations__propertyr5   r?   rB   rE   rJ   rZ   r^   rg   rj   __static_attributes__r2   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 Ir#   r+   N)r    r   rl   r-   )r%   ro   rl   rm   ) 
__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+   r2   r#   r!   <module>r      sO    " E E 
  S R :4*"XI=, XIr#   