
    dh8                         % S SK r S SKJr  S SKJrJrJrJr  S SKJ	r	  S SK
r
S SKJr  S SKJrJr  S SKJrJrJrJr  Sr\\S	'   S
\S\4S jrS\S\4S jr " S S\\5      rg)    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                 d    [        U 5      nUR                  S;   a  [        UR                  5      $ g)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/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/jina.pyis_localr      s-     #JL(joo&&    	file_pathc                     [        U S5       n[        R                  " UR                  5       5      R	                  S5      sSSS5        $ ! , (       d  f       g= f)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	*
 1299'B 
		s   3A


Ac                       \ rS rSr% Sr\\S'   Sr\\S'   Sr	\
\   \S'   \" SS	9r\" S
S9\S\S\4S j5       5       rS\S\\\      4S jrS\\   S\\\      4S jrS\S\\   4S jrS\\   S\\\      4S jrSrg)JinaEmbeddings*   zJina embedding models.sessionzjina-embeddings-v2-base-en
model_nameNjina_api_key )protected_namespacesbefore)modevaluesr   c                 B    [        [        USS5      5      n[        R                  " 5       nUR
                  R                  SUR                  5        3SSS	.5        XAS
'   U$ ! [         a1  n [        [        USS5      5      n SnANq! [         a    Uef = fSnAff = f)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)clsr0   r+   original_excr)   s        r   validate_environment#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inputc                     U R                   R                  [        XR                  S.S9R	                  5       nSU;  a  [        US   5      eUS   n[        US S9nU Vs/ sH  oUS   PM	     sn$ s  snf )N)rA   model)jsondatadetailc                     U S   $ )Nindexr,   )es    r   <lambda>'JinaEmbeddings._embed.<locals>.<lambda>X   s    QwZr   )key	embedding)r)   postr   r*   rD   RuntimeErrorsorted)selfrA   resp
embeddingssorted_embeddingsresults         r   _embedJinaEmbeddings._embedM   s    ||  I ! 

$& 	 tH~..&\
 #:3GH 3DD2C{#2CDDDs   !A1textsc                 $    U R                  U5      $ )zCall out to Jina's embedding endpoint.
Args:
    texts: The list of texts to embed.
Returns:
    List of embeddings, one for each text.
rV   )rQ   rX   s     r   embed_documentsJinaEmbeddings.embed_documents]   s     {{5!!r   textc                 ,    U R                  U/5      S   $ )zpCall out to Jina's embedding endpoint.
Args:
    text: The text to embed.
Returns:
    Embeddings for the text.
r   rZ   )rQ   r]   s     r   embed_queryJinaEmbeddings.embed_queryf   s     {{D6"1%%r   urisc                     / nU HD  n[        U5      (       a  UR                  S[        U5      05        M1  UR                  SU05        MF     U R                  U5      $ )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   )rQ   ra   rA   uris       r   embed_imagesJinaEmbeddings.embed_imageso   sS     C}}g}S'9:;eS\*	 
 {{5!!r   )__name__
__module____qualname____firstlineno____doc__r   __annotations__r*   strr+   r   r   r   model_configr   classmethodr   r?   r   floatrV   r[   r_   rf   __static_attributes__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   r8   langchain_core.embeddingsr	   langchain_core.utilsr
   r   pydanticr   r   r   r   r   rn   rm   boolr   r%   r'   r,   r   r   <module>rz      sf      , , !  0 L F F7c 7# $ 
CS 
CS 
CR"Y
 R"r   