
    7|hy                        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
       G d dee             Zy)    )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)sinceremovalalternative_importc                      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      Z ed      edd              ZddZddZddZy)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_idforbid)extrabefore)modec                    t        t        |dd            |d<   t        t        |dd            |d<   t        t        |dd            |d<   |S )z'Validate api key exists in environment.r   CLOVA_EMB_API_KEYr   CLOVA_EMB_APIGW_API_KEYr   CLOVA_EMB_APP_IDr   )clsvaluess     c/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/clova.pyvalidate_environmentz$ClovaEmbeddings.validate_environmentB   sk     '< )<>QR'
"# -B 13L-
()
 1 3EF
x     c                X    g }|D ]"  }|j                  | j                  |             $ |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)selftexts
embeddingstexts       r'   embed_documentszClovaEmbeddings.embed_documentsS   s7     
 	6Dd..t45	6r)   c                $    | j                  |      S )z
        Embed a single query text and return its embedding.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        )r,   )r-   r0   s     r'   embed_queryzClovaEmbeddings.embed_queryb   s     %%r)   c                   d|i}t        t        | j                        j                         t        t        | j                        j                         dd}t        t        | j
                        j                         }t        j                  | j                   d| j                   d| ||      }|j                  dk(  r#|j                         }d|v rd|d   v r|d   d   S t        d	|j                   d
|j                         )zT
        Internal method to call the embedding API and handle the response.
        r0   zapplication/json)zX-NCP-CLOVASTUDIO-API-KEYzX-NCP-APIGW-API-KEYzContent-Type/)headersjson   result	embeddingzAPI request failed with status z: )r   r   r   get_secret_valuer   r   requestspostr   r   status_coder7   
ValueErrorr0   )r-   r0   payloadr6   r   responseresponse_datas          r'   r,   zClovaEmbeddings._embed_textn   s    4. *.411* #'477$ .
 i->>@==  !4::,ax8
 3&$MMOM=([M(<S-S$X.{;;-h.B.B-C2hmm_U
 	
r)   )r&   r   returnr   )r.   z	List[str]rC   zList[List[float]])r0   r   rC   zList[float])__name__
__module____qualname____doc__r   __annotations__r   r   r   r   r   model_configr   classmethodr(   r1   r3   r,    r)   r'   r   r      s    @ 	N #  #E3#&-1*1:37070"&F&:L (#  $
& 
r)   r   )
__future__r   typingr   r   r   r   r   r<   langchain_core._api.deprecationr	   langchain_core.embeddingsr
   langchain_core.utilsr   r   pydanticr   r   r   r   r   rK   r)   r'   <module>rR      sN    " 2 2  6 0 L F F 
=
}
i }

}
r)   