
    Ng                         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j        d	dfd
Zdej        d	dfdZ G d dee	          ZdS )    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                  rV|                                                     d          }t          j        d| j         d| j         d| | j        |           dS )+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     `/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/naver.py_raise_on_errorr'      s    {H011 
 ..w77#>h2 > >&l> >.;> >$	
 
 
 	

 
    c                 
  K   t           j                            | j                  r\|                                  d{V                     d          }t          j        d| j         d| j         d| | j        |           dS )r   Nr   r   r   r   r   )	r   r   r   r   areadr!   r"   r#   r   r$   s     r&   _araise_on_errorr+   "   s      {H011 
'~~////////77@@#>h2 > >&l> >.;> >$	
 
 
 	

 
r(   c                   P   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*dS ),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                 n    | j         rdnd}| j        dk    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   sp     $(#3B<<(,8(C(CT__
} B Bx B B'1B B48KB B	
r(   after)modec                 $   | 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        s8t          j	        | j        | 
                                | j        
          | _        | j        s8t          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R, ,D( % 	%:02ErJJ& &D" } 	(:<M DM { 	K&x1IJJDK{ 	,,,..  DK   	 % 1,,..! ! !D r(   c                     ddd}| j         r| j                                         nd }|r||d<   | j        r| 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    .(
 
 +D(99;;; 	
  	G3FG/0 %D"33555 	
  	;-:G)*r(   textc                     d|i}t          t          j        | j                  }|                    | j        |          }t          |           |                                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   s[    4.elDK00;;4=w;??!!!}}x(55r(   c                    K   d|i}t          t          j        | j                  }|                    | j        |           d {V }t          |           d {V  |                                d         d         S rb   )r   r   rZ   r/   rf   rO   r+   rc   )rG   r`   rg   r0   r   s        r&   _aembed_textzClovaXEmbeddings._aembed_text   s      4.E-t{;;%**t}7*KKKKKKKKx(((((((((}}x(55r(   textsc                 d    g }|D ]*}|                     |                     |                     +|S N)appendrh   )rG   rk   
embeddingsr`   s       r&   embed_documentsz ClovaXEmbeddings.embed_documents   sA    
 	6 	6Dd..t445555r(   c                 ,    |                      |          S rm   )rh   rG   r`   s     r&   embed_queryzClovaXEmbeddings.embed_query   s    %%%r(   c                 x   K   g }|D ]2}|                      |           d {V }|                    |           3|S rm   )rj   rn   )rG   rk   ro   r`   re   s        r&   aembed_documentsz!ClovaXEmbeddings.aembed_documents   s\      
 	) 	)D"//55555555Ii((((r(   c                 <   K   |                      |           d {V S rm   )rj   rr   s     r&   aembed_queryzClovaXEmbeddings.aembed_query   s,      &&t,,,,,,,,,r(   )+__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-   .   sJ           &+U4%8%8%8FHU\"88805d0C0C0CL(5,-CCC385Y3W3W3WXi0WWWX-2U4-W-W-Wx	*WWWR#eD
CCCHhsmCCC "E$///FHSM///S  K    e"%lG<<:  J    5Ar***GS***:dQSTTTL
DcN 
 
 
 X
 
# 
 
 
 X
 _'"""!d ! ! ! #"!Fc3h    06 6U 6 6 6 66s 6tE{ 6 6 6 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      so    2 2 2 2 2 2 2 2 2 2 2 2 2 2  0 0 0 0 0 0 D D D D D D D D                # " " " " ": 		8	$	$	
en 	
 	
 	
 	
 	
	
U^ 	
 	
 	
 	
 	
Z- Z- Z- Z- Z-y* Z- Z- Z- Z- Z-r(   