
    Ng                        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dS )    )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)BaseFriendlimessager   returnstrc                    t          | t                    st          | t                    rdS t          | t                    rdS t          | t                    rdS 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r   s    d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/friendli.pyget_roler$      sq     ';'' :g|+L+L v'9%% {'=)) x
222
3
33    messagesList[BaseMessage]Dict[str, Any]c                    dd | D             iS )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.
    r&   c                <    g | ]}t          |          |j        d S )rolecontentr$   r-   .0r   s     r#   
<listcomp>z$get_chat_request.<locals>.<listcomp>:   s:     
 
 
 g&&7?CC
 
 
r%    )r&   s    r#   get_chat_requestr3   0   s-     	 
 
#
 
 
 r%   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dS )(ChatFriendlia)  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="llama-2-13b-chat", friendli_token="YOUR FRIENDLI TOKEN"
            )
            chat.invoke("What is generative AI?")
    zllama-2-13b-chatr   modelr   Dict[str, str]c                
    ddiS )Nfriendli_tokenFRIENDLI_TOKENr2   selfs    r#   
lc_secretszChatFriendli.lc_secretsU   s     "233r%   r(   c                P    | 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_pr?   r;   s    r#   _default_paramszChatFriendli._default_paramsY   s4     "&!7 $ 5/I+Z
 
 	
r%   c                "    d| j         i| j        S )zGet the identifying parameters.r6   )r6   rF   r;   s    r#   _identifying_paramsz ChatFriendli._identifying_paramse   s     <t';<<r%   c                    dS )Nzfriendli-chatr2   r;   s    r#   	_llm_typezChatFriendli._llm_typej   s    r%   NrC   Optional[List[str]]kwargsr   c                z    | j         }| j        |t          d          | j        | j        |d<   n||d<   i ||S )z,Get the parameters used to invoke the model.Nz2`stop` found in both the input and default params.rC   )rF   rC   r!   )r<   rC   rL   paramss       r#   _get_invocation_paramsz#ChatFriendli._get_invocation_paramsn   sV     %9 T%5QRRRY"!YF6NN!F6N#&#F##r%   r&   r'   run_manager"Optional[CallbackManagerForLLMRun]Iterator[ChatGenerationChunk]c              +  <  K    | j         dd|i|} | j        j        j        j        di t          |          d| j        d|}|D ]R}|j        d         j        j	        }|r7|r|
                    |           t          t          |                    V  Sd S NrC   T)streamr6   r   r-   r"   r2   )rO   clientchatcompletionscreater3   r6   choicesdeltar-   on_llm_new_tokenr   r   	r<   r&   rC   rP   rL   rN   rU   chunkr\   s	            r#   _streamzChatFriendli._stream{   s       -,AA$A&AA4!-4 
 
x((
15TZ
 
 
KQ
 
  	Q 	QEM!$*2E Q 800777).2O2O2OPPPPPP	Q 	Qr%   'Optional[AsyncCallbackManagerForLLMRun]"AsyncIterator[ChatGenerationChunk]c               b  K    | j         dd|i|} | j        j        j        j        di t          |          d| j        d| d {V }|2 3 d {V }|j        d         j        j	        }|r>|r|
                    |           d {V  t          t          |                    W V  _6 d S rT   )rO   async_clientrX   rY   rZ   r3   r6   r[   r\   r-   r]   r   r   r^   s	            r#   _astreamzChatFriendli._astream   s<      -,AA$A&AA@t(-9@ 
 
x((
15TZ
 
 
KQ
 
 
 
 
 
 
 
 " 	Q 	Q 	Q 	Q 	Q 	Q 	Q%M!$*2E Q >%66u=========).2O2O2OPPPPPPP "66s   B.r   c                T   | j         r  | j        |f||d|}t          |          S  | j        d
d|i|} | j        j        j        j        d
d |D             d| j        d|}t          |j
        d         j        j                  }t          t          |          g	          S )NrC   rP   rC   c                <    g | ]}t          |          |j        d S r+   r.   r/   s     r#   r1   z*ChatFriendli._generate.<locals>.<listcomp>   A       
  %W--&   r%   Fr&   rU   r6   r   rV   r"   generationsr2   )	streamingr`   r   rO   rW   rX   rY   rZ   r6   r   r[   r   r-   r   r   	r<   r&   rC   rP   rL   stream_iterrN   responser   s	            r#   	_generatezChatFriendli._generate   s     > 	5&$,# @F K (444,,AA$A&AA64;#/6 
 
  (   *
 
 
 
 H$4Q$7$?$GHHH~g'F'F'F&GHHHHr%   c                p  K   | j         r& | j        |f||d|}t          |           d {V S  | j        d
d|i|} | j        j        j        j        d
d |D             d| j        d| d {V }t          |j
        d         j        j                  }t          t          |          g	          S )Nrg   rC   c                <    g | ]}t          |          |j        d S r+   r.   r/   s     r#   r1   z+ChatFriendli._agenerate.<locals>.<listcomp>   ri   r%   Frj   r   rV   r"   rk   r2   )rm   re   r   rO   rd   rX   rY   rZ   r6   r   r[   r   r-   r   r   rn   s	            r#   
_ageneratezChatFriendli._agenerate   s4      > 	<'$-# @F K /{;;;;;;;;;,,AA$A&AAB*/;B 
 
  (   *
 
 
 
 
 
 
 
 
 
 H$4Q$7$?$GHHH~g'F'F'F&GHHHHr%   )r   r7   )r   r(   )r   r   )N)rC   rK   rL   r   r   r(   )NN)
r&   r'   rC   rK   rP   rQ   rL   r   r   rR   )
r&   r'   rC   rK   rP   ra   rL   r   r   rb   )
r&   r'   rC   rK   rP   rQ   rL   r   r   r   )
r&   r'   rC   rK   rP   ra   rL   r   r   r   )__name__
__module____qualname____doc__r6   __annotations__propertyr=   rF   rH   rJ   rO   r`   re   rq   rt   r2   r%   r#   r5   r5   A   sj         " $E####4 4 4 X4 	
 	
 	
 X	
 = = = X=    X +/$ $ $ $ $  %):>	Q Q Q Q Q* %)?C	Q Q Q Q Q* %):>	I I I I IB %)?C	I I I I I I Ir%   r5   N)r   r   r   r   )r&   r'   r   r(   ) 
__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$   r3   r5   r2   r%   r#   <module>r      s   " " " " " " E E E E E E E E E E E E E E E E                
                S R R R R R R R R R : : : : : :4 4 4 4*   "XI XI XI XI XI=, XI XI XI XI XIr%   