
    Ng-                       d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZ d dlmZmZ d dlmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ er
d dlZd dlm Z!  ej"        e#          Z$ G d de          Z% G d de%e          Z&dS )    )annotationsN)cached_property)TYPE_CHECKINGAnyAsyncIteratorDictIteratorListOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLM)Serializable)
GenerationGenerationChunk	LLMResult)pre_init)
get_fields)
ConfigDictc                  X   e Zd ZU dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZ	ded<   	 dZ
ded	<   	 dZded
<   	 dZded<   	 dZded<   	 dZded<   dZded<   dZded<   dZded<   dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded<   	 dZded <   	 ed<d#            Zed=d%            Zed>d&            Ze d?d(            Z!e"d@d+            Z#edAd-            Z$	 dBdCd1Z%	 dBdCd2Z&dDd4Z'dDd5Z(dEd7Z)dEd8Z*dFd;Z+dS )G_BaseGigaChatNOptional[str]base_urlauth_urlcredentialsscopeaccess_tokenmodeluserpasswordzOptional[float]timeoutOptional[bool]verify_ssl_certsca_bundle_file	cert_filekey_filekey_file_passwordTbool	profanityprofanity_checkF	streamingtemperaturezOptional[int]
max_tokensuse_api_for_tokensverbosetop_prepetition_penaltyupdate_intervalreturnstrc                    dS )Nzgiga-chat-model selfs    ]/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/llms/gigachat.py	_llm_typez_BaseGigaChat._llm_typeM   s          Dict[str, str]c                    dddddS )NGIGACHAT_CREDENTIALSGIGACHAT_ACCESS_TOKENGIGACHAT_PASSWORDGIGACHAT_KEY_FILE_PASSWORD)r   r   r    r'   r6   r7   s    r9   
lc_secretsz_BaseGigaChat.lc_secretsQ   s     23+!=	
 
 	
r;   c                    dS )NTr6   r7   s    r9   lc_serializablez_BaseGigaChat.lc_serializableZ   s    tr;   gigachat.GigaChatc                    ddl } |j        di d| j        d| j        d| j        d| j        d| j        d| j        d	| j        d
| j	        d| j
        d| j        d| j        d| j        d| j        d| j        d| j        d| j        S )zReturns GigaChat API clientr   Nr   r   r   r   r   r   r*   r   r    r!   r#   r$   r%   r&   r'   r/   r6   )gigachatGigaChatr   r   r   r   r   r   r*   r   r    r!   r#   r$   r%   r&   r'   r/   )r8   rG   s     r9   _clientz_BaseGigaChat._client^   s    	 x  
 
 
]]
]]
 ((
 **	

 **
 **
 !00
 
 ]]
 LL
 "22
  ..
 nn
 ]]
 #44
  LL!
 	
r;   valuesr   c                   	 ddl }n# t          $ r t          d          w xY wt          t          |                                                     }t          |                                          |z
  }|rt
                              d| d           d|v r^|                    d          du rGt
                              d           |                    d	          |                    d          |d	<   |S )
zJValidate authenticate data in environment and python package is installed.r   NzXCould not import gigachat python package. Please install it with `pip install gigachat`.zExtra fields z in GigaChat classr)   Fz?'profanity' field is deprecated. Use 'profanity_check' instead.r*   )rG   ImportErrorsetr   keysloggerwarningget)clsrJ   rG   fieldsdiffs        r9   validate_environmentz"_BaseGigaChat.validate_environmentv   s   	OOOO 	 	 	A  	
 Z__))++,,6;;==!!F* 	ENNC4CCCDDD&  VZZ%<%<%E%ENNQ   zz+,,4,2JJ{,C,C()s    !Dict[str, Any]c                \    | j         | j        | j        | j        | j        | j        | j        dS )zGet the identifying parameters.)r,   r   r)   r+   r-   r0   r1   )r,   r   r*   r+   r-   r0   r1   r7   s    r9   _identifying_paramsz!_BaseGigaChat._identifying_params   s9      +Z-/Z"&"9
 
 	
r;   input_	List[str]List[gm.TokensCount]c                8    | j                             ||          S )zGet tokens of string list)rI   tokens_countr8   rY   r   s      r9   r]   z_BaseGigaChat.tokens_count   s     |((777r;   c                H   K   | j                             ||           d{V S )z"Get tokens of strings list (async)N)rI   atokens_countr^   s      r9   r`   z_BaseGigaChat.atokens_count   s2       \//>>>>>>>>>r;   	gm.Modelsc                4    | j                                         S )z Get available models of Gigachat)rI   
get_modelsr7   s    r9   rc   z_BaseGigaChat.get_models   s    |&&(((r;   c                D   K   | j                                          d{V S )z(Get available models of Gigachat (async)N)rI   aget_modelsr7   s    r9   re   z_BaseGigaChat.aget_models   s,      \--/////////r;   gm.Modelc                6    | j                             |          S )zGet info about model)rI   	get_modelr8   r   s     r9   rh   z_BaseGigaChat.get_model   s    |%%e,,,r;   c                F   K   | j                             |           d{V S )zGet info about model (async)N)rI   
aget_modelri   s     r9   rk   z_BaseGigaChat.aget_model   s.      \,,U333333333r;   textintc                    | j         r!|                     |g          d         j        S t          t	          |          dz            S )z"Count approximate number of tokensr   gffffff@)r.   r]   tokensroundlen)r8   rl   s     r9   get_num_tokensz_BaseGigaChat.get_num_tokens   sC    " 	*$$dV,,Q/66TS)))r;   )r3   r4   )r3   r<   )r3   r(   )r3   rE   )rJ   r   r3   r   )r3   rV   )N)rY   rZ   r   r   r3   r[   )r3   ra   )r   r4   r3   rf   )rl   r4   r3   rm   ),__name__
__module____qualname__r   __annotations__r   r   r   r   r   r   r    r!   r#   r$   r%   r&   r'   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   propertyr:   rB   rD   r   rI   r   rU   rX   r]   r`   rc   re   rh   rk   rr   r6   r;   r9   r   r      sN        "H"""""H""""!%K%%%%E-"&L&&&&%ED%"H""""%#G####'+++++/$(N((((#I####"H""""'+++++ I+&*O****I1#'K''''- $J$$$$0$$$$$-G!E!!!!P*.....2'+O++++K! ! ! X! 
 
 
 X
    X 
 
 
 _
.    X* 

 

 

 X

 9=8 8 8 8 8 9=? ? ? ? ?) ) ) )0 0 0 0- - - -4 4 4 4* * * * * *r;   r   c                      e Zd ZU dZdZded<   d!d	Zd"dZ	 	 	 d#d$dZ	 	 	 d#d%dZ		 	 d&d'dZ
	 	 d&d(dZ ed           ZdS ))rH   a7  `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.llms import GigaChat
            giga = GigaChat(credentials=..., scope=..., verify_ssl_certs=False)
    r   r4   payload_rolemessagesrZ   r3   rV   c                Z    d fd|D             i} j         r
 j         |d<    j        
 j        |d<    j        
 j        |d<    j        
 j        |d<    j        
 j        |d<    j        
 j        |d<    j        
 j        |d	<    j        rt          	                    d
|           |S )Nrz   c                $    g | ]}j         |d S ))rolecontent)ry   ).0mr8   s     r9   
<listcomp>z+GigaChat._build_payload.<locals>.<listcomp>   s$    UUUq$"3BBUUUr;   r   r*   r,   r0   r-   r1   r2   zGiga request: %s)
r   r*   r,   r0   r-   r1   r2   r/   rO   info)r8   rz   payloads   `  r9   _build_payloadzGigaChat._build_payload   s    UUUUHUUU#
 : 	*#zGG+)-)=G%&'%)%5GM":!#zGG?&$(OGL!".,0,CG()+)-)=G%&< 	5KK*G444r;   responser   r   c                l   g }|j         D ]}|j        }t          |j        j        d|i          }|                    |g           |dk    rt                              d|           | j        r%t          	                    d|j        j                   |j
        }||j        d}t          ||          S )Nfinish_reason)rl   generation_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usage
model_name)generations
llm_output)choicesr   r   messager~   appendrO   rP   r/   r   usager   r   )r8   r   r   resr   genr   r   s           r9   _create_llm_resultzGigaChat._create_llm_result   s    # 	F 	FC-M[(!0- @  C u%%%&&=!   | F/1DEEEn%0OO
[ZHHHHr;   Npromptsr   Optional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]streamr"   kwargsc                    ||n| j         }|r>d } | j        |d         f||d|}|D ]}	||	}||	z  }|J t          |gg          S |                     |          }
| j                            |
          }|                     |          S Nr   )r   r   )r   )r+   _streamr   r   rI   chatr   r8   r   r   r   r   r   should_stream
generationstream_iterchunkr   r   s               r9   	_generatezGigaChat._generate   s     #)"4$. 	948J&$,
!%; BH K % ( (%!&JJ%'JJ))):,8888%%g..<$$W--&&x000r;   'Optional[AsyncCallbackManagerForLLMRun]c                <  K   ||n| j         }|rDd } | j        |d         f||d|}|2 3 d {V }	||	}||	z  }6 |J t          |gg          S |                     |          }
| j                            |
           d {V }|                     |          S r   )r+   _astreamr   r   rI   achatr   r   s               r9   
_ageneratezGigaChat._agenerate  s      #)"4$. 	948J'$-
!%; BH K  + ( ( ( ( ( ( (e%!&JJ%'JJ	  +
 ))):,8888%%g..++G44444444&&x000s   =promptIterator[GenerationChunk]c              +     K   |                      |g          }| j                            |          D ]I}|j        r@|j        d         j        j        }|r|                    |           t          |          V  Jd S Nr   )rl   )r   rI   r   r   deltar~   on_llm_new_tokenr   r8   r   r   r   r   r   r   r~   s           r9   r   zGigaChat._stream.  s       %%vh//\((11 	4 	4E} 4-*08 :00999%7333333	4 	4r;   AsyncIterator[GenerationChunk]c                 K   |                      |g          }| j                            |          2 3 d {V }|j        rG|j        d         j        j        }|r|                    |           d {V  t          |          W V  V6 d S r   )r   rI   astreamr   r   r~   r   r   r   s           r9   r   zGigaChat._astream>  s       %%vh//<//88 	4 	4 	4 	4 	4 	4 	4%} 4-*08 @%66w?????????%73333333 988s   B	allow)extra)rz   rZ   r3   rV   )r   r   r3   r   )NNN)r   rZ   r   r   r   r   r   r"   r   r   r3   r   )r   rZ   r   r   r   r   r   r"   r   r   r3   r   )NN)
r   r4   r   r   r   r   r   r   r3   r   )
r   r4   r   r   r   r   r   r   r3   r   )rs   rt   ru   __doc__ry   rv   r   r   r   r   r   r   r   model_configr6   r;   r9   rH   rH      s         	 	 L   0I I I I0 %):>!%1 1 1 1 1< %)?C!%1 1 1 1 1< %):>	4 4 4 4 4& %)?C	4 4 4 4 4  :  LLLr;   rH   )'
__future__r   logging	functoolsr   typingr   r   r   r   r	   r
   r   langchain_core.callbacksr   r   #langchain_core.language_models.llmsr    langchain_core.load.serializabler   langchain_core.outputsr   r   r   langchain_core.utilsr   langchain_core.utils.pydanticr   pydanticr   rG   gigachat.modelsmodelsgm	getLoggerrs   rO   r   rH   r6   r;   r9   <module>r      s   " " " " " "  % % % % % % T T T T T T T T T T T T T T T T T T        8 7 7 7 7 7 9 9 9 9 9 9 I I I I I I I I I I ) ) ) ) ) ) 4 4 4 4 4 4       !OOO      		8	$	$a* a* a* a* a*L a* a* a*HS S S S S}g S S S S Sr;   