§
    šŠtjy  ã                  ó¼   — 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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)Ú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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_idÚforbid)ÚextraÚbefore)ÚmodeÚvaluesr   Úreturnr   c                óÌ   — 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   )Úclsr!   s     úb/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/clova.pyÚvalidate_environmentz$ClovaEmbeddings.validate_environmentB   s…   € õ '<Ý  Ð)<Ð>QÑRÔRñ'
ô '
ˆÐ"Ñ#õ -BÝ ØÐ1Ð3Lñô ñ-
ô -
ˆÐ(Ñ)õ
 1Ý  ¨Ð3EÑFÔFñ
ô 
ˆˆxÑð ˆó    Útextsú	List[str]úList[List[float]]c                ód   — g }|D ]*}|                      |                      |¦  «        ¦  «         Œ+|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+   Ú
embeddingsÚtexts       r(   Úembed_documentszClovaEmbeddings.embed_documentsS   sC   € ð ˆ
Øð 	6ð 	6ˆDØ×Ò˜d×.Ò.¨tÑ4Ô4Ñ5Ô5Ð5Ð5ØÐr*   r3   úList[float]c                ó,   — |                       |¦  «        S )z°
        Embed a single query text and return its embedding.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        )r0   )r1   r3   s     r(   Úembed_queryzClovaEmbeddings.embed_queryb   s   € ð ×Ò Ñ%Ô%Ð%r*   c                ó  — d|i}t          t          | j        ¦  «                             ¦   «         t          t          | j        ¦  «                             ¦   «         ddœ}t          t          | j        ¦  «                             ¦   «         }t          j        | j        › d| j	        › d|› �||¬¦  «        }|j
        dk    r0|                     ¦   «         }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.
        r3   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_coder;   Ú
ValueErrorr3   )r1   r3   Úpayloadr:   r   ÚresponseÚresponse_datas          r(   r0   zClovaEmbeddings._embed_textn   s*  € ð ˜4�.ˆõ *.Ý˜4Ô1ñ*ô *çÒÑ Ô Ý#'Ý˜4Ô7ñ$ô $çÒÑ Ô Ø.ð
ð 
ˆõ •i ¤Ñ-Ô-×>Ò>Ñ@Ô@ˆÝ”=ØÔ Ð8Ð8 4¤:Ð8Ð8°Ð8Ð8ØØð
ñ 
ô 
ˆð Ô 3Ò&Ð&Ø$ŸMšM™OœOˆMØ˜=Ð(Ð(¨[¸MÈ(Ô<SÐ-SÐ-SØ$ XÔ.¨{Ô;Ð;ÝØU¨hÔ.BÐUÐUÀhÄmÐUÐUñ
ô 
ð 	
r*   )r!   r   r"   r   )r+   r,   r"   r-   )r3   r   r"   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   r   r   Úmodel_configr   Úclassmethodr)   r4   r7   r0   © r*   r(   r   r      s$  € € € € € € ðð ð@ 	Nð ð ð ð ñ ð Ø#€EÐ#Ð#Ð#Ñ#Ø&Ø-1ÐÐ1Ð1Ð1Ñ1Ø:Ø37ÐÐ7Ð7Ð7Ñ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   rN   r*   r(   ú<module>rU      s  ðØ "Ð "Ð "Ð "Ð "Ð "à 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à €€€Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø LÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fð €Ø
ØØ=ðñ ô ð
}
ð }
ð }
ð }
ð }
�i ñ }
ô }
ñô ð
}
ð }
ð }
r*   