a
    bg-                     @  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rd 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d!d"d#d$Zed%d"d&d'Zedd"d(d)Ze d*d"d+d,Z!e"d-d-d.d/d0Z#ed1d"d2d3Z$dJd4dd5d6d7d8Z%dKd4dd5d6d9d:Z&d;d"d<d=Z'd;d"d>d?Z(d!d@dAdBdCZ)d!d@dAdDdEZ*d!dFdGdHdIZ+dS )L_BaseGigaChatNz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str)returnc                 C  s   dS )Nzgiga-chat-model selfr2   r2   o/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/llms/gigachat.py	_llm_typeM   s    z_BaseGigaChat._llm_typez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$   r2   r3   r2   r2   r5   
lc_secretsQ   s
    z_BaseGigaChat.lc_secretsc                 C  s   dS )NTr2   r3   r2   r2   r5   lc_serializableZ   s    z_BaseGigaChat.lc_serializablezgigachat.GigaChatc                 C  sR   ddl }|j| j| j| j| j| j| j| j| j	| j
| j| j| j| j| j| j| jdS )zReturns GigaChat API clientr   N)r   r   r   r   r   r   r'   r   r   r   r    r!   r"   r#   r$   r,   )gigachatGigaChatr   r   r   r   r   r   r'   r   r   r   r    r!   r"   r#   r$   r,   )r4   r9   r2   r2   r5   _client^   s&    z_BaseGigaChat._clientr   )valuesr1   c                 C  s   zddl }W n ty&   tdY n0 tt|  }t| | }|r^td| d d|v r|ddu rtd |d	du r|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'   )r9   ImportErrorsetr   keysloggerwarningget)clsr<   r9   fieldsdiffr2   r2   r5   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.   r3   r2   r2   r5   _identifying_params   s    z!_BaseGigaChat._identifying_params	List[str]zList[gm.TokensCount])input_r   r1   c                 C  s   | j ||S )zGet tokens of string list)r;   tokens_countr4   rJ   r   r2   r2   r5   rK      s    z_BaseGigaChat.tokens_countc                   s   | j ||I dH S )z"Get tokens of strings list (async)N)r;   atokens_countrL   r2   r2   r5   rM      s    z_BaseGigaChat.atokens_countz	gm.Modelsc                 C  s
   | j  S )z Get available models of Gigachat)r;   
get_modelsr3   r2   r2   r5   rN      s    z_BaseGigaChat.get_modelsc                   s   | j  I dH S )z(Get available models of Gigachat (async)N)r;   aget_modelsr3   r2   r2   r5   rO      s    z_BaseGigaChat.aget_modelszgm.Model)r   r1   c                 C  s   | j |S )zGet info about model)r;   	get_modelr4   r   r2   r2   r5   rP      s    z_BaseGigaChat.get_modelc                   s   | j |I dH S )zGet info about model (async)N)r;   
aget_modelrQ   r2   r2   r5   rR      s    z_BaseGigaChat.aget_modelint)textr1   c                 C  s,   | j r| |gd jS tt|d S dS )z"Count approximate number of tokensr   gffffff@N)r+   rK   tokensroundlen)r4   rT   r2   r2   r5   get_num_tokens   s    z_BaseGigaChat.get_num_tokens)N)N),__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.   r/   propertyr6   r7   r8   r   r;   r   rF   rH   rK   rM   rN   rO   rP   rR   rX   r2   r2   r2   r5   r      sZ   
  r   c                   @  s   e Zd ZU dZdZded< ddddd	Zd
ddddZd"ddddd
ddddZd#ddddd
ddddZ	d$dddd
ddddZ
d%dddd
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   r0   payload_rolerI   rG   )messagesr1   c                   s   d fdd|D i} j r& j |d<  jd ur: j|d<  jd urN j|d<  jd urb j|d<  jd urv j|d<  jd ur j|d	<  jd ur j|d
<  jrt	d| |S )Nr_   c                   s   g | ]} j |d qS ))Zrolecontent)r^   ).0mr3   r2   r5   
<listcomp>       z+GigaChat._build_payload.<locals>.<listcomp>r   r'   r)   r-   r*   r.   r/   zGiga request: %s)
r   r'   r)   r-   r*   r.   r/   r,   r@   info)r4   r_   payloadr2   r3   r5   _build_payload   s&    












zGigaChat._build_payloadr   r   )responser1   c                 C  s~   g }|j D ]T}|j}t|jjd|id}||g |dkrHtd| | jr
t	d|jj q
|j
}||jd}t||dS )Nfinish_reason)rT   Zgeneration_infostopz'Giga generation stopped with reason: %szGiga response: %s)token_usageZ
model_name)generations
llm_output)choicesri   r   messager`   appendr@   rA   r,   re   usager   r   )r4   rh   rl   resri   genrk   rm   r2   r2   r5   _create_llm_result   s$    
zGigaChat._create_llm_resultNzOptional[List[str]]z"Optional[CallbackManagerForLLMRun]r   )promptsrj   run_managerstreamkwargsr1   c                 K  s   |d ur|n| j }|rpd }| j|d f||d|}|D ]}	|d u rL|	}q:||	7 }q:|d usbJ t|ggdS | |}
| j|
}| |S Nr   )rj   rv   )rl   )r(   _streamr   rg   r;   Zchatrt   r4   ru   rj   rv   rw   rx   Zshould_streamZ
generationZstream_iterchunkrf   rh   r2   r2   r5   	_generate   s&    

zGigaChat._generatez'Optional[AsyncCallbackManagerForLLMRun]c                   s   |d ur|n| j }|rzd }| j|d f||d|}|2 z"3 d H W }	|d u rT|	}q:||	7 }q:6 |d uslJ t|ggdS | |}
| j|
I d H }| |S ry   )r(   _astreamr   rg   r;   Zachatrt   r{   r2   r2   r5   
_agenerate  s&    
zGigaChat._ageneratezIterator[GenerationChunk])promptrj   rv   rx   r1   c                 k  sP   |  |g}| j|D ]2}|jr|jd jj}|r>|| t|dV  qd S Nr   )rT   )rg   r;   rw   rn   deltar`   on_llm_new_tokenr   r4   r   rj   rv   rx   rf   r|   r`   r2   r2   r5   rz   .  s    
zGigaChat._streamzAsyncIterator[GenerationChunk]c                 K s`   |  |g}| j|2 z@3 d H W }|jr|jd jj}|rL||I d H  t|dV  q6 d S r   )rg   r;   Zastreamrn   r   r`   r   r   r   r2   r2   r5   r~   >  s    zGigaChat._astreamZallow)extra)NNN)NNN)NN)NN)rY   rZ   r[   __doc__r^   r\   rg   rt   r}   r   rz   r~   r   Zmodel_configr2   r2   r2   r5   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   r9   Zgigachat.modelsmodelsZgm	getLoggerrY   r@   r   r:   r2   r2   r2   r5   <module>   s"   $
 %