o
    Zh&                     @  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   _/var/www/html/lang_env/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   Z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(   Z	assistantr*   systemfunction)r)   rA   )r)   r0   )r:   r/   r   r   r   r   r   )r<   r>   r0   r)   r+   r'   r5   r5   r6   _convert_delta_to_message_chunk[   s&   




rE   z0.3.5z1.0zlangchain_gigachat.GigaChat)ZsinceZremovalZ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>)rG   	functionszGiga request: %s)r-   rK   r:   rO   modelZprofanity_checkZtemperatureZtop_pZ
max_tokensZrepetition_penaltyZupdate_intervalverboseloggerwarningr/   )selfrG   rI   rK   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)Ztoken_usageZ
model_name)generations
llm_output)choicesr7   r"   rX   r   appendrR   rS   rQ   r)   usagerP   r    )rT   rW   r\   resr"   rX   genr]   r5   r5   r6   _create_chat_result   s&   


zGigaChat._create_chat_resultNr[   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)r[   re   )	streaming_streamr   rV   _clientZchatrc   
rT   rG   r[   re   rg   rI   Zshould_streamZstream_iterrU   rW   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 ri   )rj   _astreamr   rV   rl   Zachatrc   rm   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 Nr^   r   deltar)   rX   )rX   rY   )rV   rl   rg   r.   r/   lenr:   rE   r   on_llm_new_tokenr   rT   rG   r[   re   rI   rU   chunkchoicer)   rX   rZ   r5   r5   r6   rk      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 rs   )rV   rl   Zastreamr.   r/   ru   r:   rE   r   rv   r   rw   r5   r5   r6   rp      s"   

zGigaChat._astream)rG   rH   rI   r   r$   rJ   )rW   r   r$   r    )NNN)rG   rH   r[   rd   re   rf   rg   rh   rI   r   r$   r    )rG   rH   r[   rd   re   ro   rg   rh   rI   r   r$   r    )NN)
rG   rH   r[   rd   re   rf   rI   r   r$   rr   )
rG   rH   r[   rd   re   ro   rI   r   r$   rz   )
__name__
__module____qualname____doc__rV   rc   rn   rq   rk   rp   r5   r5   r5   r6   rF   u   s$    

!rF   )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   Zlangchain_core._api.deprecationr   Zlangchain_core.callbacksr   r   Z*langchain_core.language_models.chat_modelsr   r   r   Zlangchain_core.messagesr   r   r   r   r   r   r   r   r   r   r   r   Zlangchain_core.outputsr   r   r    Z!langchain_community.llms.gigachatr!   r-   modelsZgm	getLoggerr{   rR   r7   r;   rE   rF   r5   r5   r5   r6   <module>   s*    ,8



