U
    h                     @  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	 d dl
mZ d dlmZ d dlmZ d dlmZ eeZd	Zd
ZG dd deeZdS )    )annotationsN)cached_property)AnyDictListOptional)
Embeddings)	BaseModel)pre_init)
get_fieldsi@B Z   c                   @  s   e Zd ZU dZ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dZdddd d!Zdddd"d#Zd$d%d&d'd(Zd$d%d&d)d*ZdS )+GigaChatEmbeddingsa  GigaChat Embeddings models.

    Example:
        .. code-block:: python
            from langchain_community.embeddings.gigachat import GigaChatEmbeddings

            embeddings = GigaChatEmbeddings(
                credentials=..., scope=..., verify_ssl_certs=False
            )
    NzOptional[str]base_urlauth_urlcredentialsscopeaccess_tokenmodeluserpasswordiX  zOptional[float]timeoutzOptional[bool]verify_ssl_certsca_bundle_file	cert_filekey_filekey_file_passwordr   )returnc                 C  sJ   ddl }|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   )gigachatZGigaChatr   r   r   r   r   r   r   r   r   r   r   r   r   r   )selfr    r   K/tmp/pip-unpacked-wheel-9gdii04g/langchain_community/embeddings/gigachat.py_client<   s"    zGigaChatEmbeddings._clientr   )valuesr   c                 C  sd   zddl }W n tk
r(   tdY nX tt|  }t| | }|r`t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 class)r   ImportErrorsetr   keysloggerwarning)clsr"   r   fieldsZdiffr   r   r    validate_environmentR   s    
z'GigaChatEmbeddings.validate_environmentz	List[str]zList[List[float]])textsr   c                 C  s   g }d}g }i }| j dk	r$| j |d< |D ]`}|| |t|7 }|tksVt|tkr(| jjf d|i|jD ]}||j qnd}g }q(|r| jjf d|i|jD ]}||j q|S zEmbed documents using a GigaChat embeddings models.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r   Nr   r+   )	r   appendlenMAX_BATCH_SIZE_CHARSMAX_BATCH_SIZE_PARTSr!   
embeddingsdata	embedding)r   r+   resultsizelocal_textsembed_kwargstextr3   r   r   r    embed_documentsb   s4    	




z"GigaChatEmbeddings.embed_documentsc           	        s   g }d}g }i }| j dk	r$| j |d< |D ]j}|| |t|7 }|tksVt|tkr(| jjf d|i|I dH }|jD ]}||j qxd}g }q(|r| jjf d|i|I dH }|jD ]}||j q|S r,   )	r   r-   r.   r/   r0   r!   Zaembeddingsr2   r3   )	r   r+   r4   r5   r6   r7   r8   r1   r3   r   r   r    aembed_documents   s8    	






z#GigaChatEmbeddings.aembed_documentsstrzList[float])r8   r   c                 C  s   | j |gdd S )Embed a query using a GigaChat embeddings models.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r+   r   )r9   )r   r8   r   r   r    embed_query   s    	zGigaChatEmbeddings.embed_queryc                   s   | j |gdI dH }|d S )r<   r=   Nr   )r:   )r   r8   Zdocsr   r   r    aembed_query   s    	zGigaChatEmbeddings.aembed_query)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r
   r*   r9   r:   r>   r?   r   r   r   r    r      s.   
"$r   )
__future__r   logging	functoolsr   typingr   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.pydantic_v1r	   Zlangchain_core.utilsr
   Zlangchain_core.utils.pydanticr   	getLoggerr@   r&   r/   r0   r   r   r   r   r    <module>   s   
