o
    Ag&                     @  s$  d dl mZ d dlZd dlmZmZmZ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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( erld dl)m*Z+ e,e-Z.d ddZ/d!ddZ0d"ddZ1eddddG dd de(eZ2dS )#    )annotationsN)	TYPE_CHECKINGAnyAsyncIteratorDictIteratorListMappingOptionalType)
deprecated)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseChatModelagenerate_from_streamgenerate_from_stream)	AIMessageAIMessageChunkBaseMessageBaseMessageChunkChatMessageChatMessageChunkFunctionMessageFunctionMessageChunkHumanMessageHumanMessageChunkSystemMessageSystemMessageChunk)ChatGenerationChatGenerationChunk
ChatResult)_BaseGigaChatmessagegm.Messagesreturnr   c                 C  s   ddl m}m} i }| j }r$t||rt||d< n	t|tr$||d< | j|jkr0t| j	dS | j|j
kr<t| j	dS | j|jkrIt| j	|dS td| j d|  )Nr   )FunctionCallMessagesRolefunction_callcontentr)   additional_kwargszGot unknown role  )gigachat.modelsr%   r&   r'   
isinstancedictroleSYSTEMr   r)   USERr   	ASSISTANTr   	TypeError)r"   r%   r&   r+   r'    r5   o/var/www/html/development/chatbot/venv/lib/python3.10/site-packages/langchain_community/chat_models/gigachat.py_convert_dict_to_message2   s   


r7   gm.BaseMessagec                 C  s   ddl m}m} t| tr||j| jdS t| tr"||j| jdS t| t	r5||j
| j| jdd dS t| trD||| j| jdS t| trQ||j| jdS td|  )Nr   )Messagesr&   )r0   r)   r'   )r0   r)   r'   zGot unknown type )r-   r9   r&   r.   r   r1   r)   r   r2   r   r3   r+   getr   r0   r   FUNCTIONr4   )r"   r9   r&   r5   r5   r6   _convert_message_to_dictF   s    




r<   _dictMapping[str, Any]default_classType[BaseMessageChunk]r   c                 C  s   |  d}|  dpd}i }|  dr+t| d }d|v r'|d d u r'd|d< ||d< |dks3|tkr8t|dS |dks@|tkrFt||d	S |d
ksN|tkrSt|dS |dks[|tkrct|| d dS |si|tkrot||dS ||dS )Nr0   r)    r'   nameuserr(   	assistantr*   systemfunction)r)   rB   )r)   r0   )r:   r/   r   r   r   r   r   )r=   r?   r0   r)   r+   r'   r5   r5   r6   _convert_delta_to_message_chunk[   s&   




rG   z0.3.5z1.0zlangchain_gigachat.GigaChat)sinceremovalalternative_importc                   @  sh   e Zd ZdZd dd	Zd!ddZ			d"d#ddZ			d"d$ddZ		d%d&ddZ		d%d'ddZ	dS )(GigaChata>  `GigaChat` large language models API.

    To use, you should pass login and password to access GigaChat API or use token.

    Example:
        .. code-block:: python

            from langchain_community.chat_models import GigaChat
            giga = GigaChat(credentials=..., scope=..., verify_ssl_certs=False)
    messagesList[BaseMessage]kwargsr   r$   gm.Chatc                 K  s   ddl m} |dd |D d}|dd |_| j|_| jd ur$| j|_| jd ur-| j|_| jd ur6| j|_| jd ur?| j|_| j	d urH| j	|_	| j
d urQ| j
|_
| jr\td|  |S )Nr   )Chatc                 S  s   g | ]}t |qS r5   )r<   ).0mr5   r5   r6   
<listcomp>   s    z+GigaChat._build_payload.<locals>.<listcomp>)rL   	functionszGiga request: %s)r-   rP   r:   rT   modelprofanity_checktemperaturetop_p
max_tokensrepetition_penaltyupdate_intervalverboseloggerwarningr/   )selfrL   rN   rP   payloadr5   r5   r6   _build_payload   s*   





zGigaChat._build_payloadresponser    c                 C  s|   g }|j D ]+}t|j}|j}t|d|id}|| |dkr&td| | jr0td|j	 q|j
|jd}t||dS )Nfinish_reasonr"   generation_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usage
model_name)generations
llm_output)choicesr7   r"   rc   r   appendr]   r^   r\   r)   usagerU   r    )r_   rb   ri   resr"   rc   genrj   r5   r5   r6   _create_chat_result   s&   


zGigaChat._create_chat_resultNrf   Optional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]streamOptional[bool]c           
      K  s^   |d ur|n| j }|r| j|f||d|}t|S | j|fi |}| j|}	| |	S N)rf   rr   )	streaming_streamr   ra   _clientchatrp   
r_   rL   rf   rr   rt   rN   should_streamstream_iterr`   rb   r5   r5   r6   	_generate   s   
zGigaChat._generate'Optional[AsyncCallbackManagerForLLMRun]c           
        sl   |d ur|n| j }|r| j|f||d|}t|I d H S | j|fi |}| j|I d H }	| |	S rv   )rw   _astreamr   ra   ry   achatrp   r{   r5   r5   r6   
_agenerate   s   
zGigaChat._agenerateIterator[ChatGenerationChunk]c                 k  s    | j |fi |}| j|D ]I}t|ts| }t|d dkr$q|d d }|di di }t|d t}|d}	|	d urIt|	dnd }
|rR|	| t
||
dV  qd S Nrk   r   deltar)   rc   )rc   rd   )ra   ry   rt   r.   r/   lenr:   rG   r   on_llm_new_tokenr   r_   rL   rf   rr   rN   r`   chunkchoicer)   rc   re   r5   r5   r6   rx      s"   


zGigaChat._stream"AsyncIterator[ChatGenerationChunk]c                 K s   | j |fi |}| j|2 zP3 d H W }t|ts| }t|d dkr(q|d d }|di di }t|d t}|d}	|	d urMt|	dnd }
|rY|	|I d H  t
||
dV  q6 d S r   )ra   ry   astreamr.   r/   r   r:   rG   r   r   r   r   r5   r5   r6   r      s"   

zGigaChat._astream)rL   rM   rN   r   r$   rO   )rb   r   r$   r    )NNN)rL   rM   rf   rq   rr   rs   rt   ru   rN   r   r$   r    )rL   rM   rf   rq   rr   r   rt   ru   rN   r   r$   r    )NN)
rL   rM   rf   rq   rr   rs   rN   r   r$   r   )
rL   rM   rf   rq   rr   r   rN   r   r$   r   )
__name__
__module____qualname____doc__ra   rp   r~   r   rx   r   r5   r5   r5   r6   rK   u   s$    

!rK   )r"   r#   r$   r   )r"   r8   r$   r#   )r=   r>   r?   r@   r$   r   )3
__future__r   loggingtypingr   r   r   r   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   r   r   r   r   r   r   langchain_core.outputsr   r   r    !langchain_community.llms.gigachatr!   r-   modelsgm	getLoggerr   r]   r7   r<   rG   rK   r5   r5   r5   r6   <module>   s*    ,8



