
    Zǻi                        d dl mZ d dl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 	 d dlmZ  G d d	e      Zy# e$ r dZY w xY w)
    )annotationsN)AnyOptional)Embedder)EmbeddingsGenerationError)RateLimitHandlerrate_limit_handler)Mistralc                  J     e Zd ZdZ	 	 d	 	 	 	 	 	 	 d fdZedd       Z xZS )MistralAIEmbeddingsz
    Mistral AI embeddings class.
    This class uses the Mistral AI 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                    t         t        d      t        |   |       |j	                  dd       }|t        j                  dd      }|| _        t        dd|i|| _        y )NzmCould not import mistralai.
                Please install it with `pip install "neo4j-graphrag[mistralai]"`.api_keyMISTRAL_API_KEY  )	r
   ImportErrorsuper__init__poposgetenvmodelmistral_client)selfr   r	   kwargsr   	__class__s        _/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/neo4j_graphrag/embeddings/mistral.pyr   zMistralAIEmbeddings.__init__(   so     ?U  	+,**Y-?ii 126G
%@g@@    c                J   	  | j                   j                  j                  d| j                  |gd|}||j                  st        d      |j                  d   j                  }t        |t              st        d      |S # t        $ r}t        d|       |d}~ww xY w)a	  
        Generate embeddings for a given query using a Mistral AI text embedding model.

        Args:
            text (str): The text to generate an embedding for.
            **kwargs (Any): Additional keyword arguments to pass to the Mistral AI client.
        )r   inputsz-Failed to generate embedding with MistralAI: NzFailed to retrieve embeddings.r   z"Embedding is not a list of floats.r   )
r   
embeddingscreater   	Exceptionr   data	embedding
isinstancelist)r   textr   embeddings_batch_responseer%   s         r   embed_queryzMistralAIEmbeddings.embed_query:   s    	(M(;(;(F(F(M(M )jj$)39)% %,4M4R4R+,LMM-2215??	)T*+,PQQ  	+?sC	s   4B 	B"BB")zmistral-embedN)r   strr	   zOptional[RateLimitHandler]r   r   returnNone)r(   r,   r   r   r-   zlist[float])__name__
__module____qualname____doc__r   r	   r+   __classcell__)r   s   @r   r   r      sT     %9=AA 7A 	A
 
A$  r   r   )
__future__r   r   typingr   r   neo4j_graphrag.embeddings.baser   neo4j_graphrag.exceptionsr   neo4j_graphrag.utils.rate_limitr   r	   	mistralair
   r   r   r   r   r   <module>r:      sC     # 	   3 ? P!
5( 5	  Gs   : AA