
    7|h*                         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dZ e j0                  e      Zd	ej6                  d
dfdZd	ej6                  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.comz%https://clovastudio.stream.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     c/var/www/html/test/engine/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fd#Z!d/d$Z"d/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)0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                 4    | j                         sddiS dddS )Nr3   NCP_CLOVASTUDIO_API_KEYNCP_APIGW_API_KEY)r3   r5   )_is_new_api_keyselfs    r&   
lc_secretszClovaXEmbeddings.lc_secrets]   s1    ##%)+D 
 ,E%8 r(   c                     | j                   rdnd}| j                  dk7  r| j                  nd}| j                         r| j                   d| d| S | j                   d| d| d| j                   S )zGET embedding api url
serviceapptestappzbge-m3v2/z/v1/api-tools/embedding/)r9   r:   rF   r6   r7   )rH   app_typer:   s      r&   _api_urlzClovaXEmbeddings._api_urli   s~     $(#3#3<(,8(CT__
!mm_AhZ/G
|TT ==/8**:,a}Fr(   after)modec                 &   | j                   st        t        dd            | _         | j                         r| j	                          n| j                          | j                  st        d      | j                  s?t        j                  | j                  | j                         | j                        | _        | j                  sK| j                  r?t        j                  | j                  | j                         | j                        | _        | S )Nr3   rD   zbase_url dose not exist.)r6   headersr?   )r3   r	   r
   rF   _init_fields_on_new_api_key_init_fields_on_old_api_keyr6   
ValueErrorr/   r   Clientdefault_headersr?   r0   AsyncClientrG   s    r&   validate_model_afterz%ClovaXEmbeddings.validate_model_afterv   s    +++@68QR,D( !,,.,,.}}788{{,,,,.DK   T]] % 1 1,,.!D r(   c                 n    | j                   r)| j                   j                         j                  d      S y)Nznv-F)r3   get_secret_value
startswithrG   s    r&   rF   z ClovaXEmbeddings._is_new_api_key   s.    ''//@@BMMeTTr(   c                 J    | j                   st        ddt              | _         y y )Nr6   NCP_CLOVASTUDIO_API_BASE_URL)r6   r
    _DEFAULT_BASE_URL_ON_NEW_API_KEYrG   s    r&   rU   z,ClovaXEmbeddings._init_fields_on_new_api_key   s#    }}(.0DM r(   c                     | j                   st        t        ddd            | _         | j                  st        ddt              | _        | j
                  st        dd      | _        y y )Nr5   rE    r6   r`   r7   NCP_CLOVASTUDIO_APP_ID)r5   r	   r
   r6   _DEFAULT_BASE_URLr7   rG   s    r&   rV   z,ClovaXEmbeddings._init_fields_on_old_api_key   sa    %%%:02ErJ&D" }}(:<MDM {{&x1IJDK r(   c                     ddd}| j                   r| j                   j                         nd }| j                         r
d| |d<   |S |r||d<   | j                  r| j                  j                         nd }|r||d<   |S )Nzapplication/json)zContent-TypeAcceptzBearer AuthorizationzX-NCP-CLOVASTUDIO-API-KEYzX-NCP-APIGW-API-KEY)r3   r]   rF   r5   )rH   rT   clovastudio_api_keyr4   s       r&   rY   z ClovaXEmbeddings.default_headers   s    .(
 ++ ((99; 	 !)01D0E'FGO$  #7J34 )) &&779 
 1>-.r(   textc                     d|i}t        t        j                  | j                        }|j	                  | j
                  |      }t        |       |j                         d   d   S Nrj   )r#   jsonresult	embedding)r   r   rX   r/   postrP   r'   rm   )rH   rj   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rl   )r   r   rZ   r0   rp   rP   r+   rm   )rH   rj   rq   r0   r   s        r&   _aembed_textzClovaXEmbeddings._aembed_text   sq     4.E--t/@/@A%**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)appendrr   )rH   ru   
embeddingsrj   s       r&   embed_documentsz ClovaXEmbeddings.embed_documents   s5    
 	6Dd..t45	6r(   c                 $    | j                  |      S rw   )rr   rH   rj   s     r&   embed_queryzClovaXEmbeddings.embed_query   s    %%r(   c                 x   K   g }|D ],  }| j                  |       d {   }|j                  |       . |S 7 wrw   )rt   rx   )rH   ru   ry   rj   ro   s        r&   aembed_documentsz!ClovaXEmbeddings.aembed_documents   sH     
 	)D"//55Ii(	)  6s   :8:c                 @   K   | j                  |       d {   S 7 wrw   )rt   r|   s     r&   aembed_queryzClovaXEmbeddings.aembed_query   s     &&t,,,,s   )r   N).__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   rI   rP   r   r   r[   rF   rU   rV   r   rY   r   floatrr   rt   rz   r}   r   r   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  #< 
Kc3h <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   re   ra   	getLoggerr   loggerResponser'   r+   r-   r@   r(   r&   <module>r      s     2 2  0 D  #: #J  			8	$	
enn 	
 	
	
U^^ 	
 	
}-y* }-r(   