
    BvhJ                     x    d dl mZmZmZmZ d dlmZ d dlmZm	Z	m
Z
mZmZ d dlZd dlZd dlZ G d dee         Zy)    )
Embeddings	DocumentsEmbeddingFunctionSpacevalidate_config_schema)ListDictAnyUnionOptionalNc                   D   e Zd ZdZ	 	 	 	 	 	 	 	 	 ddee   dededee   dee   dee   d	ee   d
ee   dee   fdZde	de
fdZedefd       ZdefdZdee   fdZedeeef   ddfd       Zdeeef   fdZdeeef   deeef   ddfdZedeeef   ddfd       Zy)JinaEmbeddingFunctionz
    This class is used to get embeddings for a list of texts using the Jina AI API.
    It requires an API key and a model name. The default model name is "jina-embeddings-v2-base-en".
    Napi_key
model_nameapi_key_env_vartasklate_chunkingtruncate
dimensionsembedding_type
normalizedc
                    	 ddl }
|t        j                  dt
               || _        |xs t        j                  |      | _	        | j                  st        d| d      || _
        || _        || _        || _        || _        || _        |	| _        d| _        |
j%                         | _        | j&                  j(                  j+                  d| j                   d	d
       y# t        $ r t        d      w xY w)aL  
        Initialize the JinaEmbeddingFunction.

        Args:
            api_key_env_var (str, optional): Environment variable name that contains your API key for the Jina AI API.
                Defaults to "CHROMA_JINA_API_KEY".
            model_name (str, optional): The name of the model to use for text embeddings.
                Defaults to "jina-embeddings-v2-base-en".
            task (str, optional): The task to use for the Jina AI API.
                Defaults to None.
            late_chunking (bool, optional): Whether to use late chunking for the Jina AI API.
                Defaults to None.
            truncate (bool, optional): Whether to truncate the Jina AI API.
                Defaults to None.
            dimensions (int, optional): The number of dimensions to use for the Jina AI API.
                Defaults to None.
            embedding_type (str, optional): The type of embedding to use for the Jina AI API.
                Defaults to None.
            normalized (bool, optional): Whether to normalize the Jina AI API.
                Defaults to None.

        r   NzUThe httpx python package is not installed. Please install it with `pip install httpx`zDirect api_key configuration will not be persisted. Please use environment variables via api_key_env_var for persistent storage.zThe z! environment variable is not set.z!https://api.jina.ai/v1/embeddingszBearer identity)AuthorizationzAccept-Encoding)httpxImportError
ValueErrorwarningswarnDeprecationWarningr   osgetenvr   r   r   r   r   r   r   r   _api_urlClient_sessionheadersupdate)selfr   r   r   r   r   r   r   r   r   r   s              d/RAG/venv/lib/python3.12/site-packages/chromadb/utils/embedding_functions/jina_embedding_function.py__init__zJinaEmbeddingFunction.__init__   s    D	 MM_"  /<"))O"<||tO#44UVWW$ 	* $,$;$$ '~6:V	
;  	g 	s   C% %C:inputreturnc                    t        d |D              st        d      || j                  d}| j                  | j                  |d<   | j                  | j                  |d<   | j
                  | j
                  |d<   | j                  | j                  |d<   | j                  | j                  |d<   | j                  | j                  |d	<   | j                  j                  | j                  |
      j                         }d|vrt        |j                  dd            |d   }t        |d       }|D cg c]*  }t!        j"                  |d   t         j$                        , c}S c c}w )a|  
        Get the embeddings for a list of texts.

        Args:
            input (Documents): A list of texts to get embeddings for.

        Returns:
            Embeddings: The embeddings for the texts.

        Example:
            >>> jina_ai_fn = JinaEmbeddingFunction(api_key_env_var="CHROMA_JINA_API_KEY")
            >>> input = ["Hello, world!", "How are you?"]
        c              3   <   K   | ]  }t        |t                y w)N)
isinstancestr).0items     r*   	<genexpr>z1JinaEmbeddingFunction.__call__.<locals>.<genexpr>c   s     ;UT:dC(Us   z0Jina AI only supports text documents, not images)r,   modelr   r   r   r   r   r   )jsondatadetailzUnknown errorc                     | d   S )Nindex )es    r*   <lambda>z0JinaEmbeddingFunction.__call__.<locals>.<lambda>   s    !G*    )key	embedding)dtype)allr   r   r   r   r   r   r   r   r&   postr$   r6   RuntimeErrorgetsortednparrayfloat32)r)   r,   payloadrespembeddings_datasorted_embeddingsresults          r*   __call__zJinaEmbeddingFunction.__call__T   se    ;U;;OPP __#

 99 "iiGFO)'+'9'9GO$==$"&--GJ??&$(OOGL!*(,(;(;G$%??&$(OOGL! }}!!$--g!>CCEtxx/BCCDHL #?8LM
 ,
+ HHVK(

;+
 	
 
s   :/E,c                       y)Njinar;   r;   r>   r*   namezJinaEmbeddingFunction.name   s    r>   c                      y)Ncosiner;   r)   s    r*   default_spacez#JinaEmbeddingFunction.default_space   s    r>   c                 
    g dS )N)rT   l2ipr;   rU   s    r*   supported_spacesz&JinaEmbeddingFunction.supported_spaces   s    %%r>   configzEmbeddingFunction[Documents]c           
      N   | j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }| j                  d      }||J d	       t        ||||||||
      S )Nr   r   r   r   r   r   r   r   zThis code should not be reachedr   r   r   r   r   r   r   r   )rE   r   )	r[   r   r   r   r   r   r   r   r   s	            r*   build_from_configz'JinaEmbeddingFunction.build_from_config   s     **%67ZZ-
zz&!

?3::j)ZZ-
$45ZZ-
"j&8;;;5$+!'!)!	
 		
r>   c           	          | j                   | j                  | j                  | j                  | j                  | j
                  | j                  | j                  dS )Nr]   r]   rU   s    r*   
get_configz JinaEmbeddingFunction.get_config   sJ    #33//II!////"11//	
 		
r>   
old_config
new_configc                 "    d|v rt        d      y )Nr   zSThe model name cannot be changed after the embedding function has been initialized.)r   )r)   ra   rb   s      r*   validate_config_updatez,JinaEmbeddingFunction.validate_config_update   s!     :%e  &r>   c                     t        | d       y)z
        Validate the configuration using the JSON schema.

        Args:
            config: Configuration to validate

        Raises:
            ValidationError: If the configuration does not match the schema
        rQ   Nr   )r[   s    r*   validate_configz%JinaEmbeddingFunction.validate_config   s     	vv.r>   )	Nzjina-embeddings-v2-base-enCHROMA_JINA_API_KEYNNNNNN)__name__
__module____qualname____doc__r   r1   boolintr+   r   r   rO   staticmethodrR   r   rV   r	   rZ   r
   r   r^   r`   rd   rf   r;   r>   r*   r   r   	   s    "&64"(,#'$((,%)C
#C
 C
 	C

 smC
  ~C
 4.C
 SMC
 !C
 TNC
J8
i 8
J 8
t #  u &$u+ & 
$sCx. 
5S 
 
0

DcN 

sCx.6:38n	 
/S#X 
/4 
/ 
/r>   r   )chromadb.api.typesr   r   r   r   *chromadb.utils.embedding_functions.schemasr   typingr	   r
   r   r   r   r"   numpyrG   r   r   r;   r>   r*   <module>rs      s1    N N M 3 3 	  G/-i8 G/r>   