o
    Zhy                     @  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Zd"ddZd#ddZ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)modevaluesr   returnr   c                 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   [/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/embeddings/clova.pyvalidate_environmentB   s   

z$ClovaEmbeddings.validate_environmenttexts	List[str]List[List[float]]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_documentsr'   List[float]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rI| }d|v rId|d v rI|d d S td	|j
 d
|j )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: )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   s0   
zClovaEmbeddings._embed_text)r   r   r   r   )r!   r"   r   r#   )r'   r   r   r)   )__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   r0   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    