
    ih&                    X   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jX                  e-      Z.dd
Z/ddZ0	 	 	 	 	 	 ddZ1 eddd       G d de(e             Z2y)    )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)_BaseGigaChatc                   ddl m}m} i }| j                  x}r0t	        ||      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)messager$   r%   r*   r&   s        f/var/www/html/dev/engine/venv/lib/python3.12/site-packages/langchain_community/chat_models/gigachat.py_convert_dict_to_messager6   2   s    : ---}-m\215m1Do.t,1>o.|||***W__55	**	*GOO44	//	/DUVV+GLL>7)DEE    c                <   ddl m}m} t        | t              r ||j
                  | j                        S t        | t              r ||j                  | j                        S t        | t              r9 ||j                  | j                  | j                  j                  dd             S t        | t              r$ | || j                        | j                        S t        | t              r ||j                   | j                        S t#        d|        )Nr   )Messagesr%   )r/   r(   r&   )r/   r(   r&   zGot unknown type )r,   r9   r%   r-   r   r0   r(   r   r1   r   r2   r*   getr   r/   r   FUNCTIONr3   )r4   r9   r%   s      r5   _convert_message_to_dictr<   F   s    6'=)\00'//JJ	G\	*\..HH	GY	'''OO!3377N
 	

 
G[	)\',,7QQ	G_	-\22GOOLL+G9566r7   c                   | j                  d      }| j                  d      xs d}i }| j                  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 )Nr/   r(    r&   nameuserr'   	assistantr)   systemfunction)r(   r?   )r(   r/   )r:   r.   r   r   r   r   r   )_dictdefault_classr/   r(   r*   r&   s         r5   _convert_delta_to_message_chunkrF   [   s    99VDii	"(bG yy!U?34]"}V'<'D$&M&!-:/*v~*;; 11		 ?gARSS		].@@!'22		}0DD#G%-HH	"22d;;W--r7   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	y)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)
    c                h   ddl m}  ||D cg c]  }t        |       c}      }|j                  dd       |_        | j
                  |_        | j                  | j                  |_        | j                  | j                  |_        | j                  | j                  |_        | j                  | j                  |_	        | j                  | j                  |_
        | j                  | j                  |_        | j                  r$t        j                  d|j                                |S c c}w )Nr   )Chat)messages	functionszGiga request: %s)r,   rM   r<   r:   rO   modelprofanity_checktemperaturetop_p
max_tokensrepetition_penaltyupdate_intervalverboseloggerwarningr.   )selfrN   kwargsrM   mpayloads         r5   _build_payloadzGigaChat._build_payload   s    (;CDa.q1D
 #JJ{D9

+&*&:&:G#'"&"2"2G::! JJGM??&!%G"".)-)@)@G&+&*&:&:G#<<NN-w||~>- Es   D/c                   g }|j                   D ]  }t        |j                        }|j                  }t	        |d|i      }|j                  |       |dk7  rt        j                  d|       | j                  slt        j                  d|j                          |j                  |j                  d}t        ||      S )Nfinish_reasonr4   generation_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usage
model_name)generations
llm_output)choicesr6   r4   r`   r   appendrX   rY   rW   r(   usagerP   r!   )rZ   responserf   resr4   r`   genrg   s           r5   _create_chat_resultzGigaChat._create_chat_result   s    ## 	EC.s{{;G--M !0- @C s#&=! ||2GOOD	E &.^^8>>R
kjIIr7   Nc                    ||n| j                   }|r! | j                  |f||d|}t        |      S  | j                  |fi |}| j                  j                  |      }	| j                  |	      S N)rc   run_manager)	streaming_streamr   r^   _clientchatrn   
rZ   rN   rc   rq   streamr[   should_streamstream_iterr]   rk   s
             r5   	_generatezGigaChat._generate   s     #)"4$..&$,,#@FK (44%$%%h9&9<<$$W-''11r7   c                  K   ||n| j                   }|r) | j                  |f||d|}t        |       d {   S  | j                  |fi |}| j                  j                  |       d {   }	| j                  |	      S 7 K7 wrp   )rr   _astreamr   r^   rt   achatrn   rv   s
             r5   
_ageneratezGigaChat._agenerate   s      #)"4$..'$--#@FK /{;;;%$%%h9&9++G44''11 < 5s!   7B	B5B	/B0B	B	c              +    K    | j                   |fi |}| j                  j                  |      D ]  }t        |t              s|j	                         }t        |d         dk(  r5|d   d   }|j                  di       j                  di       }t        |d   t              }|j                  d      }	|	t	        |	      nd }
|r|j                  |       t        ||
        y wNrh   r   deltar(   r`   )r`   ra   )r^   rt   rw   r-   r.   lenr:   rF   r   on_llm_new_tokenr    rZ   rN   rc   rq   r[   r]   chunkchoicer(   r`   rb   s              r5   rs   zGigaChat._stream   s      &$%%h9&9\\((1 	VEeT*

5#$)9%a(Fjj"-11)R@G3F7O^TE"JJ7M 6C5N=1TX  ,,W5%e_UU'	Vs   C'C)c                 K    | j                   |fi |}| j                  j                  |      2 3 d {   }t        |t              s|j	                         }t        |d         dk(  r;|d   d   }|j                  di       j                  di       }t        |d   t              }|j                  d      }	|	t	        |	      nd }
|r|j                  |       d {    t        ||
       7 7 6 y wr   )r^   rt   astreamr-   r.   r   r:   rF   r   r   r    r   s              r5   r|   zGigaChat._astream   s     &$%%h9&9<<//8 	V 	V%eT*

5#$)9%a(Fjj"-11)R@G3F7O^TE"JJ7M 6C5N=1TX  !227;;;%e_UU'	V" <# 9s8   /C<C:C6C:B'C< C8!C<6C:8C<:C<)rN   List[BaseMessage]r[   r   returnzgm.Chat)rk   r   r   r!   )NNN)rN   r   rc   Optional[List[str]]rq   "Optional[CallbackManagerForLLMRun]rw   Optional[bool]r[   r   r   r!   )rN   r   rc   r   rq   'Optional[AsyncCallbackManagerForLLMRun]rw   r   r[   r   r   r!   )NN)
rN   r   rc   r   rq   r   r[   r   r   zIterator[ChatGenerationChunk])
rN   r   rc   r   rq   r   r[   r   r   z"AsyncIterator[ChatGenerationChunk])
__name__
__module____qualname____doc__r^   rn   rz   r~   rs   r|    r7   r5   rK   rK   u   s-   	8J. %):>!%2#2 "2 8	2
 2 2 
2. %)?C!%2#2 "2 =	2
 2 2 
2. %):>	V#V "V 8	V
 V 
'VB %)?C	V#V "V =	V
 V 
,Vr7   rK   )r4   gm.Messagesr   r   )r4   zgm.BaseMessager   r   )rD   zMapping[str, Any]rE   zType[BaseMessageChunk]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   rX   r6   r<   rF   rK   r   r7   r5   <module>r      s    " 
 
 
 7 
    S R ; 			8	$F(7*..-C..4 
4
^V}m ^V
^Vr7   