
    Ng&                    \   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rd dl)m*Z+  ej,        e-          Z.ddZ/ddZ0ddZ1 eddd           G 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                   ddl m}m} i }| j        x}r=t	          ||          rt          |          |d<   nt	          |t
                    r||d<   | j        |j        k    rt          | j	                  S | j        |j
        k    rt          | j	                  S | j        |j        k    rt          | j	        |          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)   s        d/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/chat_models/gigachat.py_convert_dict_to_messager8   2   s   :::::::: --} ?m\22 	?15m1D1Do..t,, 	?1>o.||***W_5555	*	*	*GO4444	/	/	/DUVVVVDGLDD7DDEEE    gm.BaseMessagec                4   ddl m}m} t          | t                    r ||j        | j                  S t          | t                    r ||j        | j                  S t          | t                    r1 ||j
        | j        | j                            dd                     S t          | t                    r  | || j                  | j                  S t          | t                    r ||j        | j                  S t#          d|            )Nr   )Messagesr(   )r2   r+   r)   )r2   r+   r)   zGot unknown type )r/   r<   r(   r0   r   r3   r+   r   r4   r   r5   r-   getr   r2   r   FUNCTIONr6   )r#   r<   r(   s      r7   _convert_message_to_dictr?   F   s8   66666666'=)) 7x\0'/JJJJ	G\	*	* 7x\.HHHH	GY	'	' 7x'O!377NN
 
 
 	

 
G[	)	) 7x\\',77QQQQ	G_	-	- 7x\2GOLLLL5G55666r9   _dictMapping[str, Any]default_classType[BaseMessageChunk]r   c                J   |                      d          }|                      d          pd}i }|                      d          r+t          | d                   }d|v r|d         d|d<   ||d<   |dk    s|t          k    rt          |          S |dk    s|t          k    rt          ||	          S |d
k    s|t          k    rt	          |          S |dk    s|t
          k    rt          || d                   S |s|t          k    rt          ||          S  ||          S )Nr2   r+    r)   nameuserr*   	assistantr,   systemfunction)r+   rF   )r+   r2   )r=   r1   r   r   r   r   r   )r@   rB   r2   r+   r-   r)   s         r7   _convert_delta_to_message_chunkrK   [   s\    99VDii	""(bG yy!! ;U?344]""}V'<'D$&M&!-:/*v~~*;;; 1111			 ? ?gARSSSS			].@@@!'2222			}0DDD#G%-HHHH	 ."222d;;;;}W----r9   z0.3.5z1.0zlangchain_gigachat.GigaChat)sinceremovalalternative_importc                  ^    e Zd ZdZddZddZ	 	 	 dddZ	 	 	 dddZ	 	 dd dZ	 	 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                   ddl m}  |d |D                       }|                    dd           |_        | j        |_        | j        | j        |_        | j        | j        |_        | j        | j        |_        | j        | j        |_        | j	        | j	        |_	        | j
        | j
        |_
        | j        r-t                              d|                                           |S )Nr   )Chatc                ,    g | ]}t          |          S  )r?   ).0ms     r7   
<listcomp>z+GigaChat._build_payload.<locals>.<listcomp>   s!    DDDa.q11DDDr9   )rQ   	functionszGiga request: %s)r/   rV   r=   r\   modelprofanity_checktemperaturetop_p
max_tokensrepetition_penaltyupdate_intervalverboseloggerwarningr1   )selfrQ   rS   rV   payloads        r7   _build_payloadzGigaChat._build_payload   s    (((((($DD8DDD
 
 
 #JJ{D99
+&*&:G#'"&"2G:! JGM?&!%G".)-)@G&+&*&:G#< 	?NN-w||~~>>>r9   responser!   c                p   g }|j         D ]}t          |j                  }|j        }t	          |d|i          }|                    |           |dk    rt                              d|           | j        r t                              d|j	                   |j
        |j        d}t          ||          S )Nfinish_reasonr#   generation_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usage
model_name)generations
llm_output)choicesr8   r#   rl   r   appendre   rf   rd   r+   usager]   r!   )rg   rj   rr   resr#   rl   genrs   s           r7   _create_chat_resultzGigaChat._create_chat_result   s    # 	E 	EC.s{;;G-M !0- @  C s###&&=!   | E2GODDD%-^8>RR
kjIIIIr9   Nro   Optional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]streamOptional[bool]c                    ||n| j         }|r  | j        |f||d|}t          |          S  | j        |fi |}| j                            |          }	|                     |	          S N)ro   r{   )	streaming_streamr   ri   _clientchatry   
rg   rQ   ro   r{   r}   rS   should_streamstream_iterrh   rj   s
             r7   	_generatezGigaChat._generate   s     #)"4$. 	5&$,# @F K (444%$%h99&99<$$W--''111r9   'Optional[AsyncCallbackManagerForLLMRun]c                   K   ||n| j         }|r& | j        |f||d|}t          |           d {V S  | j        |fi |}| j                            |           d {V }	|                     |	          S r   )r   _astreamr   ri   r   achatry   r   s
             r7   
_ageneratezGigaChat._agenerate   s       #)"4$. 	<'$-# @F K /{;;;;;;;;;%$%h99&99++G44444444''111r9   Iterator[ChatGenerationChunk]c              +  2  K    | j         |fi |}| j                            |          D ]}t          |t                    s|                                }t          |d                   dk    rE|d         d         }|                    di                               di           }t          |d         t                    }|                    d          }	|	t	          |	          nd }
|r|	                    |           t          ||
          V  d S Nrt   r   deltar+   rl   )rl   rm   )ri   r   r}   r0   r1   lenr=   rK   r   on_llm_new_tokenr    rg   rQ   ro   r{   rS   rh   chunkchoicer+   rl   rn   s              r7   r   zGigaChat._stream   s:      &$%h99&99\((11 	V 	VEeT** %

5#$$))9%a(Fjj"--11)R@@G3F7O^TTE"JJ77M 6C5N=1111TX   6,,W555%e_UUUUUUU'	V 	Vr9   "AsyncIterator[ChatGenerationChunk]c               L  K    | j         |fi |}| j                            |          2 3 d {V }t          |t                    s|                                }t          |d                   dk    rJ|d         d         }|                    di                               di           }t          |d         t                    }|                    d          }	|	t	          |	          nd }
|r|	                    |           d {V  t          ||
          W V  6 d S r   )ri   r   astreamr0   r1   r   r=   rK   r   r   r    r   s              r7   r   zGigaChat._astream   sl      &$%h99&99<//88 	V 	V 	V 	V 	V 	V 	V%eT** %

5#$$))9%a(Fjj"--11)R@@G3F7O^TTE"JJ77M 6C5N=1111TX   <!227;;;;;;;;;%e_UUUUUUUU' 988s   D#)rQ   rR   rS   r   r%   rT   )rj   r   r%   r!   )NNN)rQ   rR   ro   rz   r{   r|   r}   r~   rS   r   r%   r!   )rQ   rR   ro   rz   r{   r   r}   r~   rS   r   r%   r!   )NN)
rQ   rR   ro   rz   r{   r|   rS   r   r%   r   )
rQ   rR   ro   rz   r{   r   rS   r   r%   r   )
__name__
__module____qualname____doc__ri   ry   r   r   r   r   rX   r9   r7   rP   rP   u   s        	 	   8J J J J. %):>!%2 2 2 2 2. %)?C!%2 2 2 2 2. %):>	V V V V VB %)?C	V V V V V V Vr9   rP   )r#   r$   r%   r   )r#   r:   r%   r$   )r@   rA   rB   rC   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   re   r8   r?   rK   rP   rX   r9   r7   <module>r      s   " " " " " " 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7 6 6 6 6 6                
                            S R R R R R R R R R ; ; ; ; ; ; !      		8	$	$F F F F(7 7 7 7*. . . .4 
4  
^V ^V ^V ^V ^V}m ^V ^V 
^V ^V ^Vr9   