
    Ig                         d dl 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mZ d dlmZmZmZmZmZmZ d dlmZ dZ e j.                  e      Zdej4                  d	dfd
Zdej4                  d	dfdZ G d dee	      Zy)    N)AnyDictListOptionalcast)
Embeddings)convert_to_secret_strget_from_env)AliasChoices	BaseModel
ConfigDictField	SecretStrmodel_validator)Selfz$https://clovastudio.apigw.ntruss.comresponsereturnc                    t         j                  j                  | j                        r^| j	                         j                  d      }t        j                  d| j                   d| j                   d| | j                  |       y)+Raise an error if the response is an error.utf-8Error response  while fetching : requestr   N)	httpxcodesis_errorstatus_codereaddecodeHTTPStatusErrorurlr   r   error_messages     a/var/www/html/answerous/venv/lib/python3.12/site-packages/langchain_community/embeddings/naver.py_raise_on_errorr'      s{    {{H001 ..w7##h223 4&ll^2m_>$$	
 	
 2    c                 .  K   t         j                  j                  | j                        rf| j	                          d{   j                  d      }t        j                  d| j                   d| j                   d| | j                  |       y7 Sw)r   Nr   r   r   r   r   )	r   r   r   r   areadr!   r"   r#   r   r$   s     r&   _araise_on_errorr+   "   s     {{H001'~~//77@##h223 4&ll^2m_>$$	
 	
 2/s   =BB ABc                      e Zd ZU dZ ed      Zeej                     e	d<    ed      Z
eej                     e	d<    edd      Zee   e	d<   	  edd	      Zee   e	d
<   	  edd      Zee   e	d<   	  ed      Zee   e	d<    edd      Zee	d<    ed edd      d      Zee	d<    edd      Zee	d<    edd      Zedeeef   fd       Zedefd       Z ed !      defd"       Z deee!f   fd#Z"d$ede#e$   fd%Z%d$ede#e$   fd&Z&d'e#e   de#e#e$      fd(Z'd$ede#e$   fd)Z(d'e#e   de#e#e$      fd*Z)d$ede#e$   fd+Z*y),ClovaXEmbeddingsa  `NCP ClovaStudio` Embedding API.

    following environment variables set or passed in constructor in lower case:
    - ``NCP_CLOVASTUDIO_API_KEY``
    - ``NCP_APIGW_API_KEY``
    - ``NCP_CLOVASTUDIO_APP_ID``

    Example:
        .. code-block:: python

            from langchain_community import ClovaXEmbeddings

            model = ClovaXEmbeddings(model="clir-emb-dolphin")
            output = embedding.embed_documents(documents)
    N)defaultclientasync_clientapi_key)r.   aliasncp_clovastudio_api_keyapigw_api_keyncp_apigw_api_keybase_urlapp_idFz=false: use testapp, true: use service app on NCP Clova Studio)r.   descriptionservice_appzclir-emb-dolphin
model_namemodelz$NCP ClovaStudio embedding model name)r.   validation_aliasr8   r   <   )gtr.   timeoutT )arbitrary_types_allowedprotected_namespacesr   c                     dddS )NNCP_CLOVASTUDIO_API_KEYNCP_APIGW_API_KEY)r3   r5   r@   selfs    r&   
lc_secretszClovaXEmbeddings.lc_secrets\   s     (A!4
 	
r(   c                     | j                   rdnd}| j                  dk7  r| j                  nd}| j                   d| d| d| j                   S )zGET embedding api url
serviceapptestappzbge-m3v2/z/v1/api-tools/embedding/)r9   r:   r6   r7   )rG   app_typer:   s      r&   _api_urlzClovaXEmbeddings._api_urlc   sT     $(#3#3<(,8(CT__
}}oQxj&zl!DKK=B	
r(   after)modec                 J   | j                   st        t        dd            | _         | j                  st        t        ddd            | _        | j                  st        ddt
              | _        | j                  st        dd	      | _        | j                  s?t        j                  | j                  | j                         | j                  
      | _        | j                  s?t        j                  | j                  | j                         | j                  
      | _        | S )Nr3   rD   r5   rE    r6   NCP_CLOVASTUDIO_API_BASE_URLr7   NCP_CLOVASTUDIO_APP_ID)r6   headersr?   )r3   r	   r
   r5   r6   _DEFAULT_BASE_URLr7   r/   r   Clientdefault_headersr?   r0   AsyncClientrF   s    r&   validate_model_afterz%ClovaXEmbeddings.validate_model_afterm   s    +++@68QR,D( %%%:02ErJ&D" }}(:<MDM {{&x1IJDK{{,,,,.DK    % 1 1,,.!D r(   c                     ddd}| j                   r| j                   j                         nd }|r||d<   | j                  r| j                  j                         nd }|r||d<   |S )Nzapplication/json)zContent-TypeAcceptzX-NCP-CLOVASTUDIO-API-KEYzX-NCP-APIGW-API-KEY)r3   get_secret_valuer5   )rG   rV   clovastudio_api_keyr4   s       r&   rY   z ClovaXEmbeddings.default_headers   s    .(
 ++ ((99; 	
 3FG/0 %% ""335 	
 -:G)*r(   textc                     d|i}t        t        j                  | j                        }|j	                  | j
                  |      }t        |       |j                         d   d   S Nr`   )r#   jsonresult	embedding)r   r   rX   r/   postrO   r'   rc   )rG   r`   payloadr/   r   s        r&   _embed_textzClovaXEmbeddings._embed_text   sS    4.ellDKK0;;4==w;?!}}x(55r(   c                    K   d|i}t        t        j                  | j                        }|j	                  | j
                  |       d {   }t        |       d {    |j                         d   d   S 7 -7 wrb   )r   r   rZ   r/   rf   rO   r+   rc   )rG   r`   rg   r0   r   s        r&   _aembed_textzClovaXEmbeddings._aembed_text   so     4.E--t{{;%**t}}7*KKx(((}}x(55 L(s$   A	A=A9A=A;A=;A=textsc                 X    g }|D ]"  }|j                  | j                  |             $ |S N)appendrh   )rG   rk   
embeddingsr`   s       r&   embed_documentsz ClovaXEmbeddings.embed_documents   s5    
 	6Dd..t45	6r(   c                 $    | j                  |      S rm   )rh   rG   r`   s     r&   embed_queryzClovaXEmbeddings.embed_query   s    %%r(   c                 x   K   g }|D ],  }| j                  |       d {   }|j                  |       . |S 7 wrm   )rj   rn   )rG   rk   ro   r`   re   s        r&   aembed_documentsz!ClovaXEmbeddings.aembed_documents   sH     
 	)D"//55Ii(	)  6s   :8:c                 @   K   | j                  |       d {   S 7 wrm   )rj   rr   s     r&   aembed_queryzClovaXEmbeddings.aembed_query   s     &&t,,,,s   )+__name__
__module____qualname____doc__r   r/   r   r   rX   __annotations__r0   rZ   r3   r   r5   r6   strr7   r9   boolr   r:   r?   intr   model_configpropertyr   rH   rO   r   r   r[   r   rY   r   floatrh   rj   rp   rs   ru   rw   r@   r(   r&   r-   r-   .   s     &+4%8FHU\\"805d0CL(5,,-C38Y3WXi0WX-24-Wx	*WR#D
CHhsmC "$/FHSM/SK  "%lG<:J  Ar*GS*dQSTL
DcN 
 
 
# 
 
 '"!d ! #!Fc3h 06 6U 66s 6tE{ 6T#Y 4U3D & &U &DI $tE{:K -s -tE{ -r(   r-   )loggingtypingr   r   r   r   r   r   langchain_core.embeddingsr   langchain_core.utilsr	   r
   pydanticr   r   r   r   r   r   typing_extensionsr   rW   	getLoggerrx   loggerResponser'   r+   r-   r@   r(   r&   <module>r      s|     2 2  0 D  #: 			8	$	
enn 	
 	
	
U^^ 	
 	
Z-y* Z-r(   