o
    Zh-                     @  s   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"e#Z$G dd deZ%G d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                   @  s  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dId#d$ZedJd&d'ZedKd(d)Ze dLd+d,Z!e"dMd/d0Z#edNd2d3Z$	dOdPd7d8Z%	dOdPd9d:Z&dQd<d=Z'dQd>d?Z(dRdAdBZ)dRdCdDZ*dSdGdHZ+dS )T_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                 C     dS )Nzgiga-chat-model selfr4   r4   X/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/llms/gigachat.py	_llm_typeM      z_BaseGigaChat._llm_typeDict[str, str]c                 C  s   dddddS )NZGIGACHAT_CREDENTIALSZGIGACHAT_ACCESS_TOKENZGIGACHAT_PASSWORDZGIGACHAT_KEY_FILE_PASSWORD)r   r   r   r%   r4   r5   r4   r4   r7   
lc_secretsQ   s
   z_BaseGigaChat.lc_secretsc                 C  r3   )NTr4   r5   r4   r4   r7   lc_serializableZ   r9   z_BaseGigaChat.lc_serializablegigachat.GigaChatc                 C  s   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   r>   r4   r4   r7   _client^   sD   
	
z_BaseGigaChat._clientvaluesr   c                 C  s   zddl }W n ty   tdw tt|  }t| | }|r-td| d d|v rK|ddu rKtd |d	du rK|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(   )r>   ImportErrorsetr   keysloggerwarningget)clsrA   r>   fieldsdiffr4   r4   r7   validate_environmentv   s$   z"_BaseGigaChat.validate_environmentDict[str, Any]c                 C  s"   | j | j| j| j| j| j| jdS )zGet the identifying parameters.)r*   r   r'   r)   r+   r.   r/   )r*   r   r(   r)   r+   r.   r/   r5   r4   r4   r7   _identifying_params   s   z!_BaseGigaChat._identifying_paramsinput_	List[str]List[gm.TokensCount]c                 C  s   | j ||S )zGet tokens of string list)r@   tokens_countr6   rN   r   r4   r4   r7   rQ      s   z_BaseGigaChat.tokens_countc                   s   | j ||I dH S )z"Get tokens of strings list (async)N)r@   atokens_countrR   r4   r4   r7   rS      s   z_BaseGigaChat.atokens_count	gm.Modelsc                 C  s
   | j  S )z Get available models of Gigachat)r@   
get_modelsr5   r4   r4   r7   rU      s   
z_BaseGigaChat.get_modelsc                   s   | j  I dH S )z(Get available models of Gigachat (async)N)r@   aget_modelsr5   r4   r4   r7   rV      s   z_BaseGigaChat.aget_modelsgm.Modelc                 C  s   | j |S )zGet info about model)r@   	get_modelr6   r   r4   r4   r7   rX      s   z_BaseGigaChat.get_modelc                   s   | j |I dH S )zGet info about model (async)N)r@   
aget_modelrY   r4   r4   r7   rZ      s   z_BaseGigaChat.aget_modeltextintc                 C  s(   | j r| |gd jS tt|d S )z"Count approximate number of tokensr   gffffff@)r,   rQ   tokensroundlen)r6   r[   r4   r4   r7   get_num_tokens   s   z_BaseGigaChat.get_num_tokens)r1   r2   )r1   r:   )r1   r&   )r1   r=   )rA   r   r1   r   )r1   rL   )N)rN   rO   r   r   r1   rP   )r1   rT   )r   r2   r1   rW   )r[   r2   r1   r\   ),__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-   r.   r/   r0   propertyr8   r;   r<   r   r@   r   rK   rM   rQ   rS   rU   rV   rX   rZ   r`   r4   r4   r4   r7   r      s   
 



r   c                   @  s   e Zd ZU dZdZded< 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ed%d&ZdS )/r?   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   r2   payload_rolemessagesrO   r1   rL   c                   s   d fdd|D i} j r j |d<  jd ur j|d<  jd ur' j|d<  jd ur1 j|d<  jd ur; j|d<  jd urE j|d	<  jd urO j|d
<  jrXt	d| |S )Nrg   c                   s   g | ]} j |d qS ))Zrolecontent)rf   ).0mr5   r4   r7   
<listcomp>   s    z+GigaChat._build_payload.<locals>.<listcomp>r   r(   r*   r.   r+   r/   r0   zGiga request: %s)
r   r(   r*   r.   r+   r/   r0   r-   rE   info)r6   rg   payloadr4   r5   r7   _build_payload   s&   












zGigaChat._build_payloadresponser   r   c                 C  s~   g }|j D ]*}|j}t|jjd|id}||g |dkr$td| | jr/t	d|jj q|j
}||jd}t||dS )Nfinish_reason)r[   Zgeneration_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usageZ
model_name)generations
llm_output)choicesrp   r   messagerh   appendrE   rF   r-   rl   usager   r   )r6   ro   rs   resrp   genrr   rt   r4   r4   r7   _create_llm_result   s&   
zGigaChat._create_llm_resultNpromptsrq   Optional[List[str]]run_manager"Optional[CallbackManagerForLLMRun]streamr    kwargsc                 K  s   |d ur|n| j }|r8d }| j|d f||d|}|D ]}	|d u r&|	}q||	7 }q|d us1J t|ggdS | |}
| j|
}| |S Nr   )rq   r~   )rs   )r)   _streamr   rn   r@   Zchatr{   r6   r|   rq   r~   r   r   Zshould_streamZ
generationZstream_iterchunkrm   ro   r4   r4   r7   	_generate   s&   


zGigaChat._generate'Optional[AsyncCallbackManagerForLLMRun]c                   s   |d ur|n| j }|r>d }| j|d f||d|}|2 z3 d H W }	|d u r+|	}q||	7 }q6 |d us7J t|ggdS | |}
| j|
I d H }| |S r   )r)   _astreamr   rn   r@   Zachatr{   r   r4   r4   r7   
_agenerate  s*   


zGigaChat._ageneratepromptIterator[GenerationChunk]c                 k  sR    |  |g}| j|D ]}|jr&|jd jj}|r || t|dV  qd S Nr   )r[   )rn   r@   r   ru   deltarh   on_llm_new_tokenr   r6   r   rq   r~   r   rm   r   rh   r4   r4   r7   r   .  s   
zGigaChat._streamAsyncIterator[GenerationChunk]c                 K sb   |  |g}| j|2 z 3 d H W }|jr-|jd jj}|r'||I d H  t|dV  q6 d S r   )rn   r@   Zastreamru   r   rh   r   r   r   r4   r4   r7   r   >  s   zGigaChat._astreamZallow)extra)rg   rO   r1   rL   )ro   r   r1   r   )NNN)r|   rO   rq   r}   r~   r   r   r    r   r   r1   r   )r|   rO   rq   r}   r~   r   r   r    r   r   r1   r   )NN)
r   r2   rq   r}   r~   r   r   r   r1   r   )
r   r2   rq   r}   r~   r   r   r   r1   r   )ra   rb   rc   __doc__rf   rd   rn   r{   r   r   r   r   r   Zmodel_configr4   r4   r4   r7   r?      s,   
 


r?   )'
__future__r   logging	functoolsr   typingr   r   r   r   r   r	   r
   Zlangchain_core.callbacksr   r   Z#langchain_core.language_models.llmsr   Z langchain_core.load.serializabler   Zlangchain_core.outputsr   r   r   Zlangchain_core.utilsr   Zlangchain_core.utils.pydanticr   Zpydanticr   r>   Zgigachat.modelsmodelsZgm	getLoggerra   rE   r   r?   r4   r4   r4   r7   <module>   s$    $
 %