§
    æ˜ºh¼  ã                   ó  — 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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 G d„ dee¦  «        Zd
S )é    )ÚAnyÚAsyncIteratorÚDictÚIteratorÚListÚOptional)ÚAsyncCallbackManagerForLLMRunÚCallbackManagerForLLMRun)ÚBaseChatModelÚagenerate_from_streamÚgenerate_from_stream)Ú	AIMessageÚAIMessageChunkÚBaseMessageÚChatMessageÚHumanMessageÚSystemMessage)ÚChatGenerationÚChatGenerationChunkÚ
ChatResult)Ú
BaseCohereÚmessageÚreturnc                 óÚ   — t          | t          ¦  «        st          | t          ¦  «        rdS t          | t          ¦  «        rdS t          | t          ¦  «        rdS t          d| › �¦  «        ‚)zÀGet 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    ún/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/chat_models/cohere.pyÚget_roler"      sq   € õ �'�;Ñ'Ô'ð 8­:°g½|Ñ+LÔ+Lð 8ØˆvÝ	�G�YÑ	'Ô	'ð 8ØˆyÝ	�G�]Ñ	+Ô	+ð 8ØˆxåÐ6¨WÐ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œ|¥S )zàGet 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>B   s_   € ð 
ð 
ð 
ñ
 ��3ð Ô+Ø”l×&Ò& tÑ,Ô,Ð?°µs¸1±v´v°°ðð ð
ð 
ð 
r#   ÚAUTOéÿÿÿÿc                 ó<   — g | ]}t          |¦  «        |j        d œ‘ŒS ))Úroler   )r"   Úcontent)r0   Úxs     r!   r3   z+get_cohere_chat_request.<locals>.<listcomp>U   s5   € ð 
ð 
ð 
Ø<=•X˜a‘[”[¨Q¬YÐ7Ð7ð
ð 
ð 
r#   )r   Úchat_historyÚ	documentsr$   Úprompt_truncation)Ú	enumerateÚpopr8   )r%   r$   r&   r;   Úmaybe_connectorsr<   s         r!   Úget_cohere_chat_requestr@   /   sÙ   € ð$  VÐ+Ð+ð 	ˆð
ð 
õ
 $ FÐ+=Ô$>Ñ?Ô?ð
ñ 
ô 
ð ð ‡J‚JÐ! 4Ñ(Ô(Ð(Ø%.Ð%6�z�z¸DÐð
 Ð'¨:Ð+AˆˆÀtð ð
 ˜B”<Ô'ð
ð 
ØAIÈ#È2È#Äð
ñ 
ô 
ð Ø&Ø.ð	ð 	ð ð	ð 	r#   c                   ó0  — e Zd ZdZ G 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 )Ú
ChatCohereaR  `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(model="command", max_tokens=256, temperature=0.75)

            messages = [HumanMessage(content="knock knock")]
            chat.invoke(messages)
    c                   ó   — e Zd ZdZdZdZdS )úChatCohere.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úallow_population_by_field_nameÚarbitrary_types_allowed© r#   r!   ÚConfigrD   r   s"   € € € € € Ø5Ð5à)-Ð&Ø"&ÐÐÐr#   rL   r   c                 ó   — dS )zReturn type of chat model.zcohere-chatrK   ©Úselfs    r!   Ú	_llm_typezChatCohere._llm_typex   s	   € ð ˆ}r#   c                 ó   — d| j         iS )z2Get the default parameters for calling Cohere API.Útemperature)rR   rN   s    r!   Ú_default_paramszChatCohere._default_params}   s   € ð ˜4Ô+ð
ð 	
r#   c                 ó&   — i d| j         i¥| j        ¥S )zGet the identifying parameters.Úmodel)rU   rS   rN   s    r!   Ú_identifying_paramszChatCohere._identifying_params„   s   € ð A�7˜DœJÐ'Ð@¨4Ô+?Ð@Ð@r#   Nr%   ÚstopÚrun_managerr&   c              +   óú   K  — t          |fi | j        ¤|¤Ž} | j        j        di |¤ddi¤Ž}|D ]K}|j        dk    r>|j        }t          t          |¬¦  «        ¬¦  «        V — |r|                     |¦  «         ŒLd S ©NÚstreamTztext-generation©r8   r    rK   )	r@   rS   ÚclientÚchatÚ
event_typeÚtextr   r   Úon_llm_new_token©	rO   r%   rW   rX   r&   Úrequestr[   ÚdataÚdeltas	            r!   Ú_streamzChatCohere._stream‰   s·   è è € õ *¨(ÐUÐU°dÔ6JÐUÈfÐUÐUˆØ!�”Ô!Ð9Ð9 GÐ9Ð9°DÐ9Ð9Ð9ˆàð 	8ð 	8ˆDØŒÐ"3Ò3Ð3Øœ	�Ý)µ.ÈÐ2OÑ2OÔ2OÐPÑPÔPÐPÐPÐPØð 8Ø×0Ò0°Ñ7Ô7Ð7øð	8ð 	8r#   c                ó   K  — t          |fi | j        ¤|¤Ž} | j        j        di |¤ddi¤Žƒ d {V —†}|2 3 d {V —†}|j        dk    rE|j        }t          t          |¬¦  «        ¬¦  «        W V — |r|                     |¦  «        ƒ d {V —† ŒX6 d S rZ   )	r@   rS   Úasync_clientr^   r_   r`   r   r   ra   rb   s	            r!   Ú_astreamzChatCohere._astreamš   s÷   è è € õ *¨(ÐUÐU°dÔ6JÐUÈfÐUÐUˆØ-�tÔ(Ô-ÐEÐE°ÐEÐEÀÐEÐEÐEÐEÐEÐEÐEÐEÐEˆà ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>�$ØŒÐ"3Ò3Ð3Øœ	�Ý)µ.ÈÐ2OÑ2OÔ2OÐPÑPÔPÐPÐPÐPÐPØð >Ø%×6Ò6°uÑ=Ô=Ð=Ð=Ð=Ð=Ð=Ð=Ð=øð !˜&˜&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_countrl   )rO   rj   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©rW   rX   r\   r;   ©r   Úgeneration_info©ÚgenerationsrK   )Ú	streamingrf   r   r@   rS   r]   r^   r   r`   Úhasattrrq   r   r   ©
rO   r%   rW   rX   r&   Ústream_iterrc   rj   r   ru   s
             r!   Ú	_generatezChatCohere._generateµ   së   € ð Œ>ð 	5Ø&˜$œ,ØðØ#°ðð Ø@Fðð ˆKõ (¨Ñ4Ô4Ð4å)¨(ÐUÐU°dÔ6JÐUÈfÐUÐUˆØ#�4”;Ô#Ð.Ð. gÐ.Ð.ˆå H¤MÐ2Ñ2Ô2ˆØˆÝ�8˜[Ñ)Ô)ð 	BØ"×7Ò7¸ÑAÔAˆOÝå wÀÐPÑPÔPðð
ñ 
ô 
ð 	
r#   c              ‹   ól  K  — | j         r& | j        |f||dœ|¤Ž}t          |¦  «        ƒ d {V —†S t          |fi | j        ¤|¤Ž} | j        j        di |¤ddi¤Ž}t          |j        ¬¦  «        }d }	t          |d¦  «        r|  
                    |¦  «        }	t          t          ||	¬¦  «        g¬¦  «        S )	Nrs   r[   Fr\   r;   rt   rv   rK   )rx   ri   r   r@   rS   r]   r^   r   r`   ry   rq   r   r   rz   s
             r!   Ú
_ageneratezChatCohere._agenerateÏ   s  è è € ð Œ>ð 	<Ø'˜$œ-ØðØ#°ðð Ø@Fðð ˆKõ /¨{Ñ;Ô;Ð;Ð;Ð;Ð;Ð;Ð;Ð;å)¨(ÐUÐU°dÔ6JÐUÈfÐUÐUˆØ#�4”;Ô#Ð<Ð< gÐ<Ð<°eÐ<Ð<Ð<ˆå H¤MÐ2Ñ2Ô2ˆØˆÝ�8˜[Ñ)Ô)ð 	BØ"×7Ò7¸ÑAÔAˆOÝå wÀÐPÑPÔPðð
ñ 
ô 
ð 	
r#   r`   c                 óZ   — t          | j                             |¦  «        j        ¦  «        S )zCalculate number of tokens.)Úlenr]   ÚtokenizeÚtokens)rO   r`   s     r!   Úget_num_tokenszChatCohere.get_num_tokensé   s#   € å�4”;×'Ò'¨Ñ-Ô-Ô4Ñ5Ô5Ð5r#   )NN)rE   rF   rG   rH   rL   Úpropertyr/   rP   r   r   rS   rV   r   r   r   r
   r   r   rf   r	   r   ri   rq   r   r|   r~   Úintrƒ   rK   r#   r!   rB   rB   _   s¼  € € € € € ðð ð$'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð ð˜3ð ð ð ñ „Xðð ð
  c¨3 h¤ð 
ð 
ð 
ñ „Xð
ð ðA T¨#¨s¨(¤^ð Að Að Añ „XðAð %)Ø:>ð	8ð 8à�{Ô#ð8ð �t˜C”yÔ!ð8ð Ð6Ô7ð	8ð
 ð8ð 
Ð%Ô	&ð8ð 8ð 8ð 8ð( %)Ø?Cð	>ð >à�{Ô#ð>ð �t˜C”yÔ!ð>ð Ð;Ô<ð	>ð
 ð>ð 
Ð*Ô	+ð>ð >ð >ð >ð"
¨Sð 
°T¸#¸s¸(´^ð 
ð 
ð 
ð 
ð %)Ø:>ð	
ð 
à�{Ô#ð
ð �t˜C”yÔ!ð
ð Ð6Ô7ð	
ð
 ð
ð 
ð
ð 
ð 
ð 
ð: %)Ø?Cð	
ð 
à�{Ô#ð
ð �t˜C”yÔ!ð
ð Ð;Ô<ð	
ð
 ð
ð 
ð
ð 
ð 
ð 
ð46 3ð 6¨3ð 6ð 6ð 6ð 6ð 6ð 6r#   rB   )Ú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.coherer   r/   r"   r@   rB   rK   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à 6Ð 6Ð 6Ð 6Ð 6Ð 6ð8�kð 8 cð 8ð 8ð 8ð 8ð2 26ð-ð -ð -Ø�;Ôð-ð ˜˜d 3¨ 8œnÔ-Ô.ð-ð ð	-ð
 
ˆ#ˆsˆ(„^ð-ð -ð -ð -ð`L6ð L6ð L6ð L6ð L6� 
ñ L6ô L6ð L6ð L6ð L6r#   