a
    bg.                      @   s   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 eZejdd	d
dZejdd	ddZG d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                 C   sH   t j| jrD|  d}t jd| j d| j d| | j| d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_message r$   r/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/naver.py_raise_on_error   s    
r&   c                    sN   t j| jrJ|  I dH d}t jd| j d| j d| | j| ddS )r   Nr   r   r   r   r   )	r   r   r   r   Zareadr   r    r!   r   r"   r$   r$   r%   _araise_on_error#   s    
r'   c                   @   s  e Zd ZU dZeddZeej e	d< eddZ
eej e	d< edddZee e	d< edd	dZee e	d
< edddZee e	d< eddZee e	d< edddZee	d< ededdddZee	d< edddZee	d< edddZeeeef dddZeedd d!Zed"d#edd$d%Z edd&d'Z!ddd(d)Z"ddd*d+Z#eee$f dd,d-Z%ee&e' d.d/d0Z(ee&e' d.d1d2Z)e&e e&e&e'  d3d4d5Z*ee&e' d.d6d7Z+e&e e&e&e'  d3d8d9Z,ee&e' d.d: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_clientZ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)   Zvalidation_aliasr2   r   <   )gtr)   timeoutTr$   )Zarbitrary_types_allowedZprotected_namespaces)r   c                 C   s   |   sddiS dddS d S )Nr-   NCP_CLOVASTUDIO_API_KEYNCP_APIGW_API_KEY)r-   r/   )_is_new_api_keyselfr$   r$   r%   
lc_secrets]   s    zClovaXEmbeddings.lc_secretsc                 C   sb   | j r
dnd}| jdkr| jnd}|  r@| j d| d| S | j d| d| d| j S dS )zGET embedding api urlZ
serviceappZtestappzbge-m3Zv2/z/v1/api-tools/embedding/N)r3   r4   r;   r0   r1   )r=   Zapp_typer4   r$   r$   r%   _api_urli   s    zClovaXEmbeddings._api_urlafter)modec                 C   s   | j sttdd| _ |  r(|   n|   | js>td| js^t	j
| j|  | jd| _| js| jrt	j| j|  | jd| _| S )Nr-   r9   zbase_url dose not exist.)r0   headersr8   )r-   r   r	   r;   _init_fields_on_new_api_key_init_fields_on_old_api_keyr0   
ValueErrorr*   r   Clientdefault_headersr8   r+   AsyncClientr<   r$   r$   r%   validate_model_afterv   s,    
z%ClovaXEmbeddings.validate_model_afterc                 C   s   | j r| j  dS dS d S )Nznv-F)r-   get_secret_value
startswithr<   r$   r$   r%   r;      s    z ClovaXEmbeddings._is_new_api_keyc                 C   s   | j stddt| _ d S )Nr0   NCP_CLOVASTUDIO_API_BASE_URL)r0   r	    _DEFAULT_BASE_URL_ON_NEW_API_KEYr<   r$   r$   r%   rD      s    z,ClovaXEmbeddings._init_fields_on_new_api_keyc                 C   sB   | j sttddd| _ | js,tddt| _| js>tdd| _d S )Nr/   r:    r0   rM   r1   ZNCP_CLOVASTUDIO_APP_ID)r/   r   r	   r0   _DEFAULT_BASE_URLr1   r<   r$   r$   r%   rE      s    
z,ClovaXEmbeddings._init_fields_on_old_api_keyc                 C   sf   ddd}| j r| j  nd }|  r6d| |d< n,|rB||d< | jrR| j nd }|rb||d< |S )Nzapplication/json)zContent-TypeAcceptzBearer AuthorizationzX-NCP-CLOVASTUDIO-API-KEYzX-NCP-APIGW-API-KEY)r-   rK   r;   r/   )r=   rC   Zclovastudio_api_keyr.   r$   r$   r%   rH      s$    z ClovaXEmbeddings.default_headers)textr   c                 C   s>   d|i}t tj| j}|j| j|d}t| | d d S NrS   )r!   jsonresult	embedding)r   r   rG   r*   postr@   r&   rU   )r=   rS   payloadr*   r   r$   r$   r%   _embed_text   s
    zClovaXEmbeddings._embed_textc                    sJ   d|i}t tj| j}|j| j|dI d H }t|I d H  | d d S rT   )r   r   rI   r+   rX   r@   r'   rU   )r=   rS   rY   r+   r   r$   r$   r%   _aembed_text   s
    zClovaXEmbeddings._aembed_text)textsr   c                 C   s"   g }|D ]}| | | q|S N)appendrZ   )r=   r\   
embeddingsrS   r$   r$   r%   embed_documents   s    z ClovaXEmbeddings.embed_documentsc                 C   s
   |  |S r]   )rZ   r=   rS   r$   r$   r%   embed_query   s    zClovaXEmbeddings.embed_queryc                    s,   g }|D ]}|  |I d H }|| q|S r]   )r[   r^   )r=   r\   r_   rS   rW   r$   r$   r%   aembed_documents   s
    z!ClovaXEmbeddings.aembed_documentsc                    s   |  |I d H S r]   )r[   ra   r$   r$   r%   aembed_query   s    zClovaXEmbeddings.aembed_query).__name__
__module____qualname____doc__r   r*   r   r   rG   __annotations__r+   rI   r-   r   r/   r0   strr1   r3   boolr
   r4   r8   intr   Zmodel_configpropertyr   r>   r@   r   r   rJ   r;   rD   rE   r   rH   r   floatrZ   r[   r`   rb   rc   rd   r$   r$   r$   r%   r(   /   sD   
r(   )loggingtypingr   r   r   r   r   r   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr   r	   Zpydanticr
   r   r   r   r   r   Ztyping_extensionsr   rP   rN   	getLoggerre   loggerResponser&   r'   r(   r$   r$   r$   r%   <module>   s    
