
    7|h-                       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jD                  e#      Z$ G d de      Z% G d de%e      Z&y)    )annotationsN)cached_property)TYPE_CHECKINGAnyAsyncIteratorDictIteratorListOptional)AsyncCallbackManagerForLLMRunCallbackManagerForLLMRun)BaseLLM)Serializable)
GenerationGenerationChunk	LLMResult)pre_init)
get_fields)
ConfigDictc                  F   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d0d#       Ze d1d$       Z!e"d2d%       Z#ed3d&       Z$	 d4	 	 	 	 	 d5d'Z%	 d4	 	 	 	 	 d5d(Z&d6d)Z'd6d*Z(d7d+Z)d7d,Z*d8d-Z+y)9_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_intervalc                     y)Nzgiga-chat-model selfs    `/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/llms/gigachat.py	_llm_typez_BaseGigaChat._llm_typeM   s         c                    dddddS )NGIGACHAT_CREDENTIALSGIGACHAT_ACCESS_TOKENGIGACHAT_PASSWORDGIGACHAT_KEY_FILE_PASSWORD)r   r   r    r'   r4   r5   s    r7   
lc_secretsz_BaseGigaChat.lc_secretsQ   s     23+!=	
 	
r9   c                     y)NTr4   r5   s    r7   lc_serializablez_BaseGigaChat.lc_serializableZ   s    r9   c                   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/   r4   )gigachatGigaChatr   r   r   r   r   r   r*   r   r    r!   r#   r$   r%   r&   r'   r/   )r6   rC   s     r7   _clientz_BaseGigaChat._client^   s    	 x   
]]
]]
 ((
 **	

 **
 **
 !00
 
 ]]
 LL
 "22
  ..
 nn
 ]]
 #44
  LL!
 	
r9   c                   	 ddl }t        t        |       j	                               }t        |j	                               |z
  }|rt
        j                  d| d       d|v rM|j                  d      du r:t
        j                  d       |j                  d	      |j                  d      |d	<   |S # t        $ r t        d      w xY w)
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*   )rC   ImportErrorsetr   keysloggerwarningget)clsvaluesrC   fieldsdiffs        r7   validate_environmentz"_BaseGigaChat.validate_environmentv   s    	 Z_))+,6;;=!F*NN]4&0BCD& VZZ%<%ENNQ zz+,4,2JJ{,C()  	A 	s   B2 2C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   r5   s    r7   _identifying_paramsz!_BaseGigaChat._identifying_params   sE      ++ZZ--//ZZ"&"9"9
 	
r9   c                :    | j                   j                  ||      S )zGet tokens of string list)rE   tokens_countr6   input_r   s      r7   rU   z_BaseGigaChat.tokens_count   s     ||((77r9   c                V   K   | j                   j                  ||       d{   S 7 w)z"Get tokens of strings list (async)N)rE   atokens_countrV   s      r7   rY   z_BaseGigaChat.atokens_count   s%      \\//>>>>s    )')c                6    | j                   j                         S )z Get available models of Gigachat)rE   
get_modelsr5   s    r7   r[   z_BaseGigaChat.get_models   s    ||&&((r9   c                R   K   | j                   j                          d{   S 7 w)z(Get available models of Gigachat (async)N)rE   aget_modelsr5   s    r7   r]   z_BaseGigaChat.aget_models   s     \\--////s   '%'c                8    | j                   j                  |      S )zGet info about model)rE   	get_modelr6   r   s     r7   r_   z_BaseGigaChat.get_model   s    ||%%e,,r9   c                T   K   | j                   j                  |       d{   S 7 w)zGet info about model (async)N)rE   
aget_modelr`   s     r7   rb   z_BaseGigaChat.aget_model   s!     \\,,U3333s   (&(c                    | j                   r| j                  |g      d   j                  S t        t	        |      dz        S )z"Count approximate number of tokensr   gffffff@)r.   rU   tokensroundlen)r6   texts     r7   get_num_tokensz_BaseGigaChat.get_num_tokens   s<    ""$$dV,Q/666TS))r9   )returnstr)ri   zDict[str, str])ri   r(   )ri   zgigachat.GigaChat)rN   r   ri   r   )ri   Dict[str, Any])N)rW   	List[str]r   r   ri   zList[gm.TokensCount])ri   z	gm.Models)r   rj   ri   zgm.Model)rg   rj   ri   int),__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   propertyr8   r?   rA   r   rE   r   rQ   rS   rU   rY   r[   r]   r_   rb   rh   r4   r9   r7   r   r      s   "Hm""Hm"!%K%E=-"&L-&%E=D-%"Hm"%#G_#'+n+/$(NM(#I}#"Hm"'+}+ It+&*O^*It1#'K'- $J$0$$-GT!E?!P*..2'+O_+K! ! 
 
   
 
.  * 

 

 9=88(58	8 9=??(5?	?)0-4*r9   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y)rD   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   rj   payload_rolec                   d|D cg c]  }| j                   |d c}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        j                  d
|       |S c c}w )Nmessages)rolecontentr   r*   r,   r0   r-   r1   r2   zGiga request: %s)rt   r   r*   r,   r0   r-   r1   r2   r/   rJ   info)r6   rv   mpayloads       r7   _build_payloadzGigaChat._build_payload   s    HUq$"3"3BU#
 ::#zzGG+)-)=)=G%&'%)%5%5GM"::!#zzGG??&$(OOGL!"".,0,C,CG()+)-)=)=G%&<<KK*G4) Vs   Dc                   g }|j                   D ]  }|j                  }t        |j                  j                  d|i      }|j                  |g       |dk7  rt        j                  d|       | j                  slt        j                  d|j                  j                          |j                  }||j                  d}t        ||      S )Nfinish_reason)rg   generation_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usage
model_name)generations
llm_output)choicesr~   r   messagerx   appendrJ   rK   r/   ry   usager   r   )r6   responser   resr~   genr   r   s           r7   _create_llm_resultzGigaChat._create_llm_result   s    ## 	FC--M[[((!0- @C u%&=! ||/1D1DE	F nn%0O
[ZHHr9   Nc                   ||n| j                   }|r>d } | j                  |d   f||d|}|D ]  }	||	}||	z  } |J t        |gg      S | j                  |      }
| j                  j                  |
      }| j                  |      S Nr   )r   run_manager)r   )r+   _streamr   r|   rE   chatr   r6   promptsr   r   streamkwargsshould_stream
generationstream_iterchunkr{   r   s               r7   	_generatezGigaChat._generate   s     #)"4$..48J&$,,
!%;BHK % (%!&J%'J	(
 ))):,88%%g.<<$$W-&&x00r9   c                H  K   ||n| j                   }|r1d } | j                  |d   f||d|}|2 3 d {   }	||	}||	z  }| j                  |      }
| j                  j                  |
       d {   }| j                  |      S 7 T6 |J t        |gg      S 7 *wr   )r+   _astreamr   r|   rE   achatr   r   s               r7   
_ageneratezGigaChat._agenerate  s      #)"4$..48J'$--
!%;BHK  + ( (e%!&J%'J %%g.++G44&&x00({
 ))):,88 5s1   0B"BBB;B"5B 6B"BB"c              +    K   | j                  |g      }| j                  j                  |      D ]S  }|j                  s|j                  d   j                  j
                  }|r|j                  |       t        |       U y wNr   )rg   )r|   rE   r   r   deltarx   on_llm_new_tokenr   r6   promptr   r   r   r{   r   rx   s           r7   r   zGigaChat._stream.  su      %%vh/\\((1 	4E}}--*0088009%733	4s   =B ABc               8  K   | j                  |g      }| j                  j                  |      2 3 d {   }|j                  s|j                  d   j                  j
                  }|r|j                  |       d {    t        |       d7 _7 6 y wr   )r|   rE   astreamr   r   rx   r   r   r   s           r7   r   zGigaChat._astream>  s      %%vh/<<//8 	4 	4%}}--*0088%66w???%733	4 @	 9s=   .BBBBB9B?B BBBBallow)extra)rv   rl   ri   rk   )r   r   ri   r   )NNN)r   rl   r   Optional[List[str]]r   "Optional[CallbackManagerForLLMRun]r   r"   r   r   ri   r   )r   rl   r   r   r   'Optional[AsyncCallbackManagerForLLMRun]r   r"   r   r   ri   r   )NN)
r   rj   r   r   r   r   r   r   ri   zIterator[GenerationChunk])
r   rj   r   r   r   r   r   r   ri   zAsyncIterator[GenerationChunk])rn   ro   rp   __doc__rt   rq   r|   r   r   r   r   r   r   model_configr4   r9   r7   rD   rD      s;   	 L#0I0 %):>!%11 "1 8	1
 1 1 
1< %)?C!%11 "1 =	1
 1 1 
1< %):>	44 "4 8	4
 4 
#4& %)?C	44 "4 =	4
 4 
(4  Lr9   rD   )'
__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   rC   gigachat.modelsmodelsgm	getLoggerrn   rJ   r   rD   r4   r9   r7   <module>r      sm    "  % T T T 8 9 I I ) 4  			8	$a*L a*HS}g Sr9   