o
    ZhX                     @   s   U d dl Z d dlmZ d dlmZmZmZmZ d dl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 dZeed	< d
edefddZdedefddZG dd deeZdS )    N)exists)AnyDictListOptional)urlparse)
Embeddings)convert_to_secret_strget_from_dict_or_env)	BaseModel
ConfigDict	SecretStrmodel_validatorz!https://api.jina.ai/v1/embeddingsJINA_API_URLurlreturnc                 C   s    t | }|jdv rt|jS dS )zCheck if a URL is a local file.

    Args:
        url (str): The URL to check.

    Returns:
        bool: True if the URL is a local file, False otherwise.
    )file F)r   schemer   path)r   Z
url_parsed r   Z/var/www/html/lang_env/lib/python3.10/site-packages/langchain_community/embeddings/jina.pyis_local   s   	

r   	file_pathc                 C   sB   t | d}t| dW  d   S 1 sw   Y  dS )zGet the bytes string of a file.

    Args:
        file_path (str): The path to the file.

    Returns:
        str: The bytes string of the file.
    rbzutf-8N)openbase64	b64encodereaddecode)r   Z
image_filer   r   r   get_bytes_str   s   	$r    c                   @   s   e Zd ZU dZeed< dZeed< dZe	e
 ed< eddZed	d
ededefddZdedeee  fddZdee deee  fddZdedee fddZdee deee  fddZdS )JinaEmbeddingszJina embedding models.sessionzjina-embeddings-v2-base-en
model_nameNjina_api_keyr   )Zprotected_namespacesbefore)modevaluesr   c                 C   s   z
t t|dd}W n& ty0 } zz
t t|dd}W n	 ty%   |w W Y d}~nd}~ww t }|jd|  ddd	 ||d
< |S )z/Validate that auth token exists in environment.r$   ZJINA_API_KEYZjina_auth_tokenZJINA_AUTH_TOKENNzBearer identityzapplication/json)AuthorizationzAccept-EncodingzContent-typer"   )r	   r
   
ValueErrorrequestsSessionheadersupdateZget_secret_value)clsr'   r$   Zoriginal_excr"   r   r   r   validate_environment3   s0   

z#JinaEmbeddings.validate_environmentinputc                 C   sV   | j jt|| jdd }d|vrt|d |d }t|dd d}dd	 |D S )
N)r1   model)jsondatadetailc                 S   s   | d S )Nindexr   )er   r   r   <lambda>X   s    z'JinaEmbeddings._embed.<locals>.<lambda>)keyc                 S   s   g | ]}|d  qS )Z	embeddingr   ).0resultr   r   r   
<listcomp>[   s    z)JinaEmbeddings._embed.<locals>.<listcomp>)r"   postr   r#   r3   RuntimeErrorsorted)selfr1   respZ
embeddingsZsorted_embeddingsr   r   r   _embedM   s   zJinaEmbeddings._embedtextsc                 C   s
   |  |S )zCall out to Jina's embedding endpoint.
        Args:
            texts: The list of texts to embed.
        Returns:
            List of embeddings, one for each text.
        rB   )r@   rC   r   r   r   embed_documents]   s   
zJinaEmbeddings.embed_documentstextc                 C   s   |  |gd S )zCall out to Jina's embedding endpoint.
        Args:
            text: The text to embed.
        Returns:
            Embeddings for the text.
        r   rD   )r@   rF   r   r   r   embed_queryf   s   zJinaEmbeddings.embed_queryurisc                 C   sB   g }|D ]}t |r|dt|i q|d|i q| |S )zCall out to Jina's image embedding endpoint.
        Args:
            uris: The list of uris to embed.
        Returns:
            List of embeddings, one for each text.
        bytesr   )r   appendr    rB   )r@   rH   r1   urir   r   r   embed_imageso   s   
zJinaEmbeddings.embed_images)__name__
__module____qualname____doc__r   __annotations__r#   strr$   r   r   r   Zmodel_configr   classmethodr   r0   r   floatrB   rE   rG   rL   r   r   r   r   r!   *   s   
 
	"	r!   )r   Zos.pathr   typingr   r   r   r   urllib.parser   r+   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr	   r
   Zpydanticr   r   r   r   r   rR   rQ   boolr   r    r!   r   r   r   r   <module>   s   
 