
    _jh                         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 G d de          Z G d dee                   ZdS )	    )
Embeddings	DocumentsEmbeddingFunctionSpacevalidate_config_schema)ListDictAny	TypedDictOptionalNc                       e Zd ZU eed<   dS )NomicQueryConfig	task_typeN)__name__
__module____qualname__str__annotations__     x/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/chromadb/utils/embedding_functions/nomic_embedding_function.pyr   r      s         NNNNNr   r   c            	       J   e Zd ZdZ	 ddededee         defdZded	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dS )NomicEmbeddingFunctionzW
    This class is used to get embeddings for a list of texts using the Nomic API.
    NOMIC_API_KEYmodelr   query_configapi_key_env_varc                     	 ddl m} n# t          $ r t          d          w xY w|| _        || _        || _        t          j        |          | _	        || _
        | j	        st          d| d          || _        dS )av  
        Initialize the NomicEmbeddingFunction.

        Args:
            model (str): The name of the model to use for text embeddings.
            task_type (str): The type of task to embed with. See reference https://docs.nomic.ai/platform/embeddings-and-retrieval/text-embedding#embedding-task-types
            query_config (Optional[NomicQueryConfig]): The configuration for setting task type for queries
            api_key_env_var (str): The environment variable name for the Nomic API key. Defaults to "NOMIC_API_KEY".

            Supported task types: search_document, search_query, classification, clustering
        r   )embedzUThe nomic python package is not installed. Please install it with `pip install nomic`zThe z! environment variable is not set.N)nomicr    ImportError
ValueErrorr   r   r   osgetenvapi_keyr   )selfr   r   r   r   r    s         r   __init__zNomicEmbeddingFunction.__init__   s    $	####### 	 	 	g  	
 
".y11(| 	XVOVVVWWW


s   	 #inputreturnc                     t          d |D                       st          d          | j                            | j        || j                  }d |j        D             S )Nc              3   @   K   | ]}t          |t                    V  d S N
isinstancer   .0items     r   	<genexpr>z2NomicEmbeddingFunction.__call__.<locals>.<genexpr>9   ,      ;;T:dC((;;;;;;r   z.Nomic only supports text documents, not imagesr   textsr   c                 @    g | ]}t          j        |j                  S r   nparray	embeddingr1   datas     r   
<listcomp>z3NomicEmbeddingFunction.__call__.<locals>.<listcomp>@   $    AAAT((AAAr   )allr#   r    textr   r   r=   )r'   r)   outputs      r   __call__zNomicEmbeddingFunction.__call__8   sq    ;;U;;;;; 	OMNNN*n ! 
 

 BAV[AAAAr   c                    t          d |D                       st          d          | j        r| j                            d          n| j        }| j                            | j        ||          }d |j        D             S )Nc              3   @   K   | ]}t          |t                    V  d S r-   r.   r0   s     r   r3   z5NomicEmbeddingFunction.embed_query.<locals>.<genexpr>C   r4   r   z,Nomic only supports text queries, not imagesr   r5   c                 @    g | ]}t          j        |j                  S r   r8   r<   s     r   r>   z6NomicEmbeddingFunction.embed_query.<locals>.<listcomp>N   r?   r   )	r@   r#   r   getr   r    rA   r   r=   )r'   r)   r   rB   s       r   embed_queryz"NomicEmbeddingFunction.embed_queryB   s    ;;U;;;;; 	MKLLL 372CWD!!+... 	 * ! 
 

 BAV[AAAAr   c                      dS )Nr!   r   r   r   r   namezNomicEmbeddingFunction.nameP   s    wr   c                     dS )Ncosiner   r'   s    r   default_spacez$NomicEmbeddingFunction.default_spaceT   s    xr   c                 
    g dS )N)rL   l2ipr   rM   s    r   supported_spacesz'NomicEmbeddingFunction.supported_spacesW   s    %%%%r   configzEmbeddingFunction[Documents]c                     |                      d          }|                      d          }|                      d          }|                      d          }|||
J d            t          ||||          S )Nr   r   r   r   FzThis code should not be reachedr   r   r   r   )rG   r   )rS   r   r   r   r   s        r   build_from_configz(NomicEmbeddingFunction.build_from_configZ   s    

7## **%677JJ{++	zz.11=O3y7H;;;;;%+%	
 
 
 	
r   c                 8    | j         | j        | j        | j        dS )NrU   rU   rM   s    r   
get_configz!NomicEmbeddingFunction.get_configi   s'    Z#3 -	
 
 	
r   
old_config
new_configNc                 ,    d|v rt          d          d S )Nr   zNThe model cannot be changed after the embedding function has been initialized.)r#   )r'   rY   rZ   s      r   validate_config_updatez-NomicEmbeddingFunction.validate_config_updateq   s,     j  `   ! r   c                 &    t          | d           dS )z
        Validate the configuration using the JSON schema.

        Args:
            config: Configuration to validate
        r!   Nr   )rS   s    r   validate_configz&NomicEmbeddingFunction.validate_configy   s     	vw/////r   )r   )r   r   r   __doc__r   r   r   r(   r   r   rC   rH   staticmethodrJ   r   rN   r	   rR   r
   r   rV   rX   r\   r^   r   r   r   r   r      s          /       /0	 
        DBi BJ B B B BB Bz B B B B #    \u    &$u+ & & & & 
$sCx. 
5S 
 
 
 \

DcN 
 
 
 
sCx.6:38n	    0S#X 04 0 0 0 \0 0 0r   r   )chromadb.api.typesr   r   r   r   *chromadb.utils.embedding_functions.schemasr   typingr	   r
   r   r   r   r$   numpyr9   r   r   r   r   r   <module>re      s              N M M M M M 7 7 7 7 7 7 7 7 7 7 7 7 7 7 				        y   p0 p0 p0 p0 p0.y9 p0 p0 p0 p0 p0r   