
    Ng                     Z   d dl mZmZmZmZmZmZ d dl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lmZ d	ed
efdZ dddee         deeeeef                           ded
eeef         fdZ! eddd           G d dee                      Z"dS )    )AnyAsyncIteratorDictIteratorListOptional)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModelagenerate_from_streamgenerate_from_stream)	AIMessageAIMessageChunkBaseMessageChatMessageHumanMessageSystemMessage)ChatGenerationChatGenerationChunk
ChatResult)
ConfigDict)
BaseCoheremessagereturnc                     t          | t                    st          | t                    rdS t          | t                    rdS t          | t                    rdS t          d|            )zGet the role of the message.

    Args:
        message: The message.

    Returns:
        The role of the message.

    Raises:
        ValueError: If the message is of an unknown type.
    UserChatbotSystemzGot unknown type )
isinstancer   r   r   r   
ValueErrorr   s    b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/cohere.pyget_roler$      sq     ';'' 8:g|+L+L 8v	GY	'	' 8y	G]	+	+ 8x6W66777    N)
connectorsmessagesr&   kwargsc                   d|vrdnd t          |d                   D             }|                    dd           ||nd}||dnd}| d         j        d | dd         D             |||d|}d |                                D             S )	zGet the request for the Cohere chat API.

    Args:
        messages: The messages.
        connectors: The connectors.
        **kwargs: The keyword arguments.

    Returns:
        The request for the Cohere chat API.
    source_documentsNc                 |    g | ]9\  }}|j         |j                            d           pdt          |           d:S )idzdoc-)snippetr,   )page_contentmetadatagetstr).0idocs      r#   
<listcomp>z+get_cohere_chat_request.<locals>.<listcomp>D   s_     
 
 

 3 +l&&t,,?s1vv 
 
 
r%   AUTOc                 <    g | ]}t          |          |j        d S ))roler   )r$   content)r2   xs     r#   r5   z+get_cohere_chat_request.<locals>.<listcomp>W   s5     
 
 
<=Xa[[QY77
 
 
r%   )r   chat_history	documentsr&   prompt_truncationc                     i | ]
\  }}|||S )N )r2   kvs      r#   
<dictcomp>z+get_cohere_chat_request.<locals>.<dictcomp>`   s    :::TQAMAqMMMr%   )	enumeratepopr:   items)r'   r&   r(   r=   maybe_connectorsr>   reqs          r#   get_cohere_chat_requestrI   1   s    $ V++ 	
 

 $F+=$>??
 
 
  JJ!4(((%.%6zzD
 ':+At 
 B<'
 
AI#2#
 
 
 &.	 	 	C ;:SYY[[::::r%   z0.0.30z1.0zlangchain_cohere.ChatCohere)sinceremovalalternative_importc                   0   e Zd ZdZ edd          Zedefd            Zede	ee
f         fd            Zede	ee
f         fd            Z	 	 dd	ee         d
eee                  dee         de
dee         f
dZ	 	 dd	ee         d
eee                  dee         de
dee         f
dZde
de	ee
f         fdZ	 	 dd	ee         d
eee                  dee         de
def
dZ	 	 dd	ee         d
eee                  dee         de
def
dZdedefdZdS )
ChatCohereaA  `Cohere` chat large language models.

    To use, you should have the ``cohere`` python package installed, and the
    environment variable ``COHERE_API_KEY`` set with your API key, or pass
    it as a named parameter to the constructor.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import ChatCohere
            from langchain_core.messages import HumanMessage

            chat = ChatCohere(max_tokens=256, temperature=0.75)

            messages = [HumanMessage(content="knock knock")]
            chat.invoke(messages)
    T)populate_by_namearbitrary_types_allowedr   c                     dS )zReturn type of chat model.zcohere-chatr@   selfs    r#   	_llm_typezChatCohere._llm_type~   s	     }r%   c                     d| j         iS )z2Get the default parameters for calling Cohere API.temperature)rV   rR   s    r#   _default_paramszChatCohere._default_params   s     4+
 	
r%   c                 &    i d| j         i| j        S )zGet the identifying parameters.model)rY   rW   rR   s    r#   _identifying_paramszChatCohere._identifying_params   s     A7DJ'@4+?@@r%   Nr'   stoprun_managerr(   c              +   R  K   t          |fi | j        |}t          | j        d          r | j        j        di |}n | j        j        di |ddi}|D ]O}|j        dk    rB|j        }t          t          |                    }	|r|
                    ||	           |	V  Pd S 	Nchat_streamstreamTztext-generationr:   r"   )chunkr@   )rI   rW   hasattrclientr_   chat
event_typetextr   r   on_llm_new_token
rS   r'   r[   r\   r(   requestr`   datadeltarb   s
             r#   _streamzChatCohere._stream   s       *(UUd6JUfUU4;.. 	>,T[,77w77FF%T[%=======F 	 	D"333	+N54Q4Q4QRRR E00e0DDD	 	r%   c                  K   t          |fi | j        |}t          | j        d          r | j        j        di | d {V }n | j        j        di |ddi d {V }|2 3 d {V }|j        dk    rI|j        }t          t          |                    }	|r|
                    ||	           d {V  |	W V  \6 d S r^   )rI   rW   rc   async_clientr_   re   rf   rg   r   r   rh   ri   s
             r#   _astreamzChatCohere._astream   sC      *(UUd6JUfUU4$m44 	J84,8CC7CCCCCCCCFF14,1IIGIIDIIIIIIIIIF  	 	 	 	 	 	 	$"333	+N54Q4Q4QRRR K%66uE6JJJJJJJJJ !&&s   #B?responsec                 D    |j         |j        |j        |j        |j        dS )z1Get the generation info from cohere API response.r=   	citationssearch_resultssearch_queriestoken_countrs   )rS   rq   s     r#   _get_generation_infozChatCohere._get_generation_info   s1     "+!+&5&5#/
 
 	
r%   c                 T   | j         r  | j        |f||d|}t          |          S t          |fi | j        |} | j        j        di |}t          |j                  }d }	t          |d          r| 
                    |          }	t          t          ||	          g          S N)r[   r\   ra   r=   )r   generation_info)generationsr@   )	streamingrm   r   rI   rW   rd   re   r   rg   rc   rx   r   r   
rS   r'   r[   r\   r(   stream_iterrj   rq   r   r{   s
             r#   	_generatezChatCohere._generate   s     > 	5&$,# @F K (444)(UUd6JUfUU#4;#..g..HM2228[)) 	B"77AAOwPPP
 
 
 	
r%   c                 d  K   | j         r& | j        |f||d|}t          |           d {V S t          |fi | j        |} | j        j        di |}t          |j                  }d }	t          |d          r| 
                    |          }	t          t          ||	          g          S rz   )r}   rp   r   rI   rW   rd   re   r   rg   rc   rx   r   r   r~   s
             r#   
_ageneratezChatCohere._agenerate   s      > 	<'$-# @F K /{;;;;;;;;;)(UUd6JUfUU#4;#..g..HM2228[)) 	B"77AAOwPPP
 
 
 	
r%   rg   c                 \    t          | j                            |          j                  S )zCalculate number of tokens.)rg   )lenrd   tokenizetokens)rS   rg   s     r#   get_num_tokenszChatCohere.get_num_tokens   s&    4;''T'229:::r%   )NN)__name__
__module____qualname____doc__r   model_configpropertyr1   rT   r   r   rW   rZ   r   r   r   r   r   r   rm   r
   r   rp   rx   r   r   r   intr   r@   r%   r#   rN   rN   c   s        $ : $  L
 3    X 
c3h 
 
 
 X
 AT#s(^ A A A XA %):>	 {# tCy! 67	
  
%	&   2 %)?C	 {# tCy! ;<	
  
*	+   ,
S 
T#s(^ 
 
 
 
 %):>	
 
{#
 tCy!
 67	

 
 

 
 
 
: %)?C	
 
{#
 tCy!
 ;<	

 
 

 
 
 
4;3 ;3 ; ; ; ; ; ;r%   rN   )#typingr   r   r   r   r   r   langchain_core._api.deprecationr	   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   pydanticr   langchain_community.llms.coherer   r1   r$   rI   rN   r@   r%   r#   <module>r      s)   E E E E E E E E E E E E E E E E 6 6 6 6 6 6                
                S R R R R R R R R R       6 6 6 6 6 68k 8c 8 8 8 82 26/; /; /;;/; d38n-./; 	/;
 
#s(^/; /; /; /;d 
E6S  U; U; U; U; U;
 U; U; U; U; U;r%   