a
    bgX                     @   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	< eed
ddZeed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   q/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/langchain_community/embeddings/jina.pyis_local   s    	

r   )	file_pathr   c                 C   sB   t | d$}t| dW  d   S 1 s40    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eedddZeeee  dddZee eee  dddZeee dddZee eee  d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 nP tyd } z8zt t|dd}W n tyN   |Y n0 W Y d}~n
d}~0 0 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   s(    

 z#JinaEmbeddings.validate_environment)inputr   c                 C   sV   | j jt|| jdd }d|vr0t|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       z'JinaEmbeddings._embed.<locals>.<lambda>)keyc                 S   s   g | ]}|d  qS )Z	embeddingr   ).0resultr   r   r   
<listcomp>[   r9   z)JinaEmbeddings._embed.<locals>.<listcomp>)r"   postr   r#   r3   RuntimeErrorsorted)selfr1   respZ
embeddingsZsorted_embeddingsr   r   r   _embedM   s    
zJinaEmbeddings._embed)textsr   c                 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.
        rC   )rA   rD   r   r   r   embed_documents]   s    zJinaEmbeddings.embed_documents)textr   c                 C   s   |  |gd S )zCall out to Jina's embedding endpoint.
        Args:
            text: The text to embed.
        Returns:
            Embeddings for the text.
        r   rE   )rA   rG   r   r   r   embed_queryf   s    zJinaEmbeddings.embed_query)urisr   c                 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    rC   )rA   rI   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   floatrC   rF   rH   rM   r   r   r   r   r!   *   s   

		r!   )r   os.pathr   typingr   r   r   r   urllib.parser   r+   Zlangchain_core.embeddingsr   Zlangchain_core.utilsr	   r
   Zpydanticr   r   r   r   r   rS   rR   boolr   r    r!   r   r   r   r   <module>   s   
