
    7|hX                         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y)    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 y)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     b/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/embeddings/jina.pyis_localr      s-     #JL(joo&&    	file_pathc                     t        | d      5 }t        j                  |j                               j	                  d      cddd       S # 1 sw Y   yxY w)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%      sI     
i	 C*
 1299'BC C Cs   2A		Ac                       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y)JinaEmbeddingszJina embedding models.sessionzjina-embeddings-v2-base-en
model_nameNjina_api_key )protected_namespacesbefore)modevaluesr   c                 @   	 t        t        |dd            }t        j                         }|j
                  j                  d|j                          ddd	       ||d
<   |S # t        $ r1}	 t        t        |dd            }n# t        $ r |w xY wY d}~d}~ww xY w)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 ""$#*<+H+H+J*K!L#- 2	
 $y!  	##4(1BDUV   #""# 	#s)   A# #	B-BBBBBinputc                     | j                   j                  t        || j                  d      j	                         }d|vrt        |d         |d   }t        |d       }|D cg c]  }|d   	 c}S c c}w )N)r?   model)jsondatadetailc                     | d   S )Nindexr+   )es    r   <lambda>z'JinaEmbeddings._embed.<locals>.<lambda>X   s
    QwZ r   )key	embedding)r(   postr   r)   rB   RuntimeErrorsorted)selfr?   resp
embeddingssorted_embeddingsresults         r   _embedzJinaEmbeddings._embedM   s    ||  I ! 

$& 	 tH~..&\
 #:3GH 3DD{#DDDs   &A5textsc                 $    | j                  |      S )zCall out to Jina's embedding endpoint.
        Args:
            texts: The list of texts to embed.
        Returns:
            List of embeddings, one for each text.
        rS   )rN   rT   s     r   embed_documentszJinaEmbeddings.embed_documents]   s     {{5!!r   textc                 ,    | j                  |g      d   S )zCall out to Jina's embedding endpoint.
        Args:
            text: The text to embed.
        Returns:
            Embeddings for the text.
        r   rV   )rN   rX   s     r   embed_queryzJinaEmbeddings.embed_queryf   s     {{D6"1%%r   urisc                     g }|D ]=  }t        |      r|j                  dt        |      i       +|j                  d|i       ? | j                  |      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%   rS   )rN   r[   r?   uris       r   embed_imageszJinaEmbeddings.embed_imageso   sV      	+C}g}S'9:;eS\*		+
 {{5!!r   )__name__
__module____qualname____doc__r   __annotations__r)   strr*   r   r   r   model_configr   classmethodr   r>   r   floatrS   rW   rZ   r`   r+   r   r   r'   r'   *   s     L2J2(,L(9%,26L(#$ 3   $0EC EDe$5 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   rf   re   boolr   r%   r'   r+   r   r   <module>rq      sf      , , !  0 L F F7c 7# $ 
CS 
CS 
CR"Y
 R"r   