a
    bgy                     @  s   d dl mZ d dlmZmZmZmZmZ d dlZd dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZmZ e
dd	d
dG dd deeZdS )    )annotations)AnyDictListOptionalcastN)
deprecated)
Embeddingsconvert_to_secret_strget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validatorz0.3.4z1.0.0z$langchain_community.ClovaXEmbeddings)ZsinceZremovalZalternative_importc                   @  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< e
ddZedd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S ) ClovaEmbeddingsa  
    Clova's embedding service.

    To use this service,

    you should have the following environment variables
    set with your API tokens and application ID,
    or pass them as named parameters to the constructor:

    - ``CLOVA_EMB_API_KEY``: API key for accessing Clova's embedding service.
    - ``CLOVA_EMB_APIGW_API_KEY``: API gateway key for enhanced security.
    - ``CLOVA_EMB_APP_ID``: Application ID for identifying your application.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import ClovaEmbeddings
            embeddings = ClovaEmbeddings(
                clova_emb_api_key='your_clova_emb_api_key',
                clova_emb_apigw_api_key='your_clova_emb_apigw_api_key',
                app_id='your_app_id'
            )

            query_text = "This is a test query."
            query_result = embeddings.embed_query(query_text)

            document_text = "This is a test document."
            document_result = embeddings.embed_documents([document_text])

    zChttps://clovastudio.apigw.ntruss.com/testapp/v1/api-tools/embeddingstrendpoint_urlzclir-emb-dolphinmodelNzOptional[SecretStr]clova_emb_api_keyclova_emb_apigw_api_keyapp_idZforbid)extrabefore)moder   r   )valuesreturnc                 C  s@   t t|dd|d< t t|dd|d< t t|dd|d< |S )z'Validate api key exists in environment.r   ZCLOVA_EMB_API_KEYr   ZCLOVA_EMB_APIGW_API_KEYr   ZCLOVA_EMB_APP_IDr
   )clsr    r   r/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/clova.pyvalidate_environmentB   s    

z$ClovaEmbeddings.validate_environmentz	List[str]zList[List[float]])textsr   c                 C  s"   g }|D ]}| | | q|S )z
        Embed a list of texts and return their embeddings.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        )append_embed_text)selfr!   Z
embeddingstextr   r   r   embed_documentsS   s    
zClovaEmbeddings.embed_documentszList[float])r%   r   c                 C  s
   |  |S )z
        Embed a single query text and return its embedding.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        )r#   )r$   r%   r   r   r   embed_queryb   s    
zClovaEmbeddings.embed_queryc                 C  s   d|i}t t| j t t| j dd}t t| j }tj| j d| j	 d| ||d}|j
dkr| }d|v rd|d v r|d d S td	|j
 d
|j dS )zT
        Internal method to call the embedding API and handle the response.
        r%   zapplication/json)zX-NCP-CLOVASTUDIO-API-KEYzX-NCP-APIGW-API-KEYzContent-Type/)headersjson   resultZ	embeddingzAPI request failed with status z: N)r   r   r   Zget_secret_valuer   r   requestspostr   r   status_coder*   
ValueErrorr%   )r$   r%   payloadr)   r   responseZresponse_datar   r   r   r#   n   s,    
zClovaEmbeddings._embed_text)__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   Zmodel_configr   classmethodr    r&   r'   r#   r   r   r   r   r      s    
 
r   )
__future__r   typingr   r   r   r   r   r-   Zlangchain_core._api.deprecationr   Zlangchain_core.embeddingsr	   Zlangchain_core.utilsr   r   Zpydanticr   r   r   r   r   r   r   r   r   <module>   s   