
    NgX                         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ZdedefdZ G 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                 ^    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   
url_parseds     _/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/jina.pyis_localr      s2     #JL((jo&&&5    	file_pathc                     t          | d          5 }t          j        |                                                              d          cddd           S # 1 swxY 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   
image_files     r   get_bytes_strr%      s     
i		 C*
 1 12299'BBC C C C C C C C C C C C C C C C C Cs   9AAAc                   N   e Zd ZU dZeed<   dZeed<   dZe	e
         ed<    ed          Z ed	
          ededefd                        Zdede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S )JinaEmbeddingszJina embedding models.sessionzjina-embeddings-v2-base-en
model_nameNjina_api_key )protected_namespacesbefore)modevaluesr   c                 j   	 t          t          |dd                    }nG# t          $ r:}	 t          t          |dd                    }n# t          $ r |w xY wY d}~nd}~ww xY wt          j                    }|j                            d|                                 ddd	           ||d
<   |S )z/Validate that auth token exists in environment.r*   JINA_API_KEYjina_auth_tokenJINA_AUTH_TOKENNzBearer identityzapplication/json)AuthorizationzAccept-EncodingzContent-typer(   )r
   r   
ValueErrorrequestsSessionheadersupdateget_secret_value)clsr/   r*   original_excr(   s        r   validate_environmentz#JinaEmbeddings.validate_environment3   s   
	#0$V^^LL LL  	# 	# 	##4(1BDUVV     # # #""# 	# "$$!L<+H+H+J+J!L!L#- 2 	
 	
 	
 $ys&   ! 
A%A
A AA  A%inputc                     | j                             t          || j        d                                          }d|vrt          |d                   |d         }t          |d           }d |D             S )N)r?   model)jsondatadetailc                     | d         S )Nindexr+   )es    r   <lambda>z'JinaEmbeddings._embed.<locals>.<lambda>X   s
    QwZ r   )keyc                     g | ]
}|d          S )	embeddingr+   ).0results     r   
<listcomp>z)JinaEmbeddings._embed.<locals>.<listcomp>[   s    DDD{#DDDr   )r(   postr   r)   rB   RuntimeErrorsorted)selfr?   resp
embeddingssorted_embeddingss        r   _embedzJinaEmbeddings._embedM   s    |  II ! 
 

$&& 	 tH~...&\
 #:3G3GHHH ED2CDDDDr   textsc                 ,    |                      |          S )zCall out to Jina's embedding endpoint.
        Args:
            texts: The list of texts to embed.
        Returns:
            List of embeddings, one for each text.
        rV   )rR   rW   s     r   embed_documentszJinaEmbeddings.embed_documents]   s     {{5!!!r   textc                 :    |                      |g          d         S )zCall out to Jina's embedding endpoint.
        Args:
            text: The text to embed.
        Returns:
            Embeddings for the text.
        r   rY   )rR   r[   s     r   embed_queryzJinaEmbeddings.embed_queryf   s     {{D6""1%%r   urisc                     g }|D ]M}t          |          r%|                    dt          |          i           6|                    d|i           N|                     |          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%   rV   )rR   r^   r?   uris       r   embed_imageszJinaEmbeddings.embed_imageso   ss      	+ 	+C}} +g}S'9'9:;;;;eS\****{{5!!!r   )__name__
__module____qualname____doc__r   __annotations__r)   strr*   r   r   r   model_configr   classmethodr   r>   r   floatrV   rZ   r]   rc   r+   r   r   r'   r'   *   sU          LLL2J222(,L(9%,,,:2666L_(###$ 3    [ $#0EC EDe$5 E E E E "T#Y "4U3D " " " "& &U & & & &"c "tDK/@ " " " " " "r   r'   )r    os.pathr   typingr   r   r   r   urllib.parser   r7   langchain_core.embeddingsr	   langchain_core.utilsr
   r   pydanticr   r   r   r   r   ri   rh   boolr   r%   r'   r+   r   r   <module>rt      sI          , , , , , , , , , , , , ! ! ! ! ! !  0 0 0 0 0 0 L L L L L L L L F F F F F F F F F F F F7c 7 7 7# $    
CS 
CS 
C 
C 
C 
CR" R" R" R" R"Y
 R" R" R" R" R"r   