
    ~
i*                          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 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.comz%https://clovastudio.stream.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     C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\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                   l   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-dS )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                 <    |                                  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]   s>    ##%% 	)+D 
 ,E%8  r(   c                     | j         rdnd}| j        dk    r| j        nd}|                                 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B<<(,8(C(CT__
!! 	mTThTT
TTT = F F8 F F+5F F8<F Fr(   after)modec                    | j         s"t          t          dd                    | _         |                                 r|                                  n|                                  | j        st          d          | j        s8t          j
        | j        |                                 | j                  | _        | j        s?| j        r8t          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R, ,D( !! 	/,,....,,...} 	97888{ 	,,,..  DK   	T] 	 % 1,,..! ! !D r(   c                 l    | j         r,| j                                                             d          S dS )Nznv-F)r3   get_secret_value
startswithrG   s    r&   rF   z ClovaXEmbeddings._is_new_api_key   s5    ' 	/@@BBMMeTTT5r(   c                 N    | j         st          ddt                    | _         d S d S )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   s4    } 	(.0 DMMM	 	r(   c                     | j         s#t          t          ddd                    | _         | j        st          ddt                    | _        | j        st          dd          | _        d S d S )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   s    % 	%:02ErJJ& &D" } 	(:<M DM { 	K&x1IJJDKKK	K 	Kr(   c                     ddd}| j         r| j                                         nd }|                                 r	d| |d<   n0|r||d<   | j        r| 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    .(
 
 +D(99;;; 	 !! 	?'F1D'F'FGO$$ # K7J34 )&77999 
  ?1>-.r(   textc                     d|i}t          t          j        | j                  }|                    | j        |          }t          |           |                                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   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 rl   )r   r   rZ   r0   rp   rP   r+   rm   )rH   rj   rq   r0   r   s        r&   _aembed_textzClovaXEmbeddings._aembed_text   s      4.E-t/@AA%**t}7*KKKKKKKKx(((((((((}}x(55r(   textsc                 d    g }|D ]*}|                     |                     |                     +|S N)appendrr   )rH   ru   
embeddingsrj   s       r&   embed_documentsz ClovaXEmbeddings.embed_documents   sA    
 	6 	6Dd..t445555r(   c                 ,    |                      |          S rw   )rr   rH   rj   s     r&   embed_queryzClovaXEmbeddings.embed_query   s    %%%r(   c                 x   K   g }|D ]2}|                      |           d {V }|                    |           3|S rw   )rt   rx   )rH   ru   ry   rj   ro   s        r&   aembed_documentsz!ClovaXEmbeddings.aembed_documents   s\      
 	) 	)D"//55555555Ii((((r(   c                 <   K   |                      |           d {V S rw   )rt   r|   s     r&   aembed_queryzClovaXEmbeddings.aembed_query   s,      &&t,,,,,,,,,r(   )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           &+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    #"<       
K 
K 
K 
Kc3h    <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   re   ra   	getLoggerr   loggerResponser'   r+   r-   r@   r(   r&   <module>r      su    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                # " " " " ": #J  		8	$	$	
en 	
 	
 	
 	
 	
	
U^ 	
 	
 	
 	
 	
}- }- }- }- }-y* }- }- }- }- }-r(   