
    Zǻi                    b    d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZ  G d de      Zy)	    )annotations)AnyOptional)Embedder)EmbeddingsGenerationError)RateLimitHandlerrate_limit_handlerasync_rate_limit_handlerc                  Z     e Zd ZdZ	 d	 	 	 	 	 	 	 d fdZedd       Zedd       Z xZ	S )OllamaEmbeddingsz
    Ollama embeddings class.
    This class uses the ollama Python client to generate vector embeddings for text data.

    Args:
        model (str): The name of the Mistral AI text embedding model to use. Defaults to "mistral-embed".
    c                    	 dd l }t        |   |       || _         |j
                  di || _         |j                  di || _        y # t        $ r t        d      w xY w)Nr   zuCould not import ollama python client.
                Please install it with `pip install "neo4j_graphrag[ollama]"`. )	ollamaImportErrorsuper__init__modelClientclientAsyncClientasync_client)selfr   r	   kwargsr   	__class__s        ^/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/neo4j_graphrag/embeddings/ollama.pyr   zOllamaEmbeddings.__init__&   ss    	 	+,
#fmm-f-.F..88  	R 	s   A A!c                     | j                   j                  d| j                  |d|}||j                  st	        d      |j                  }|d   }t        |t              st	        d      |S )a  
        Generate embeddings for a given query using an Ollama text embedding model.

        Args:
            text (str): The text to generate an embedding for.
            **kwargs (Any): Additional keyword arguments to pass to the Ollama client.
        r   inputFailed to retrieve embeddings.r   "Embedding is not a list of floats.r   )r   embedr   
embeddingsr   
isinstancelistr   textr   embeddings_responser"   	embeddings         r   embed_queryzOllamaEmbeddings.embed_query8   s     0dkk// 
**
 
 &.A.L.L+,LMM(33
qM	)T*+,PQQ    c                   K    | j                   j                  d| j                  |d| d{   }||j                  st	        d      |j                  }|d   }t        |t              st	        d      |S 7 Kw)a  
        Asynchronously generate embeddings for a given query using an Ollama text embedding model.

        Args:
            text (str): The text to generate an embedding for.
            **kwargs (Any): Additional keyword arguments to pass to the Ollama client.
        r   Nr   r   r    r   )r   r!   r   r"   r   r#   r$   r%   s         r   async_embed_queryz"OllamaEmbeddings.async_embed_queryR   s      %<D$5$5$;$; %
**%
 %
 
 &.A.L.L+,LMM(33
qM	)T*+,PQQ
s   -A=A;AA=)N)r   strr	   zOptional[RateLimitHandler]r   r   returnNone)r&   r-   r   r   r.   zlist[float])
__name__
__module____qualname____doc__r   r	   r)   r
   r,   __classcell__)r   s   @r   r   r      s`     :>99 79 	9
 
9$  2  r*   r   N)
__future__r   typingr   r   neo4j_graphrag.embeddings.baser   neo4j_graphrag.exceptionsr   neo4j_graphrag.utils.rate_limitr   r	   r
   r   r   r*   r   <module>r:      s+     #   3 ? Mx Mr*   