
    Zǻi7                        d dl mZ d dlZd dlmZmZmZ d dlmZ d dl	m
Z
 d dlmZmZ erd dlZ G d deej                        Z G d	 d
e      Z G d de      Zy)    )annotationsN)TYPE_CHECKINGAnyOptional)Embedder)EmbeddingsGenerationError)RateLimitHandlerrate_limit_handlerc                  |     e Zd ZU dZded<   	 	 d	 	 	 	 	 	 	 d fdZej                  d	d       Ze	d
d       Z
 xZS )BaseOpenAIEmbeddingsz4
    Abstract base class for OpenAI embeddings.
    zopenai.OpenAIclientc                    	 dd l }t        |   |       || _         || _         | j
                  di || _        y # t        $ r t        d      w xY w)Nr   zuCould not import openai python client.
                Please install it with `pip install "neo4j-graphrag[openai]"`. )openaiImportErrorsuper__init__model_initialize_clientr   )selfr   r
   kwargsr   	__class__s        ^/opt/lhia/marcimex/agent/venv/lib/python3.12/site-packages/neo4j_graphrag/embeddings/openai.pyr   zBaseOpenAIEmbeddings.__init__$   sd    	 	+,
-d--77  	R 	s	   < Ac                     y)zZ
        Initialize the OpenAI client.
        Must be implemented by subclasses.
        Nr   r   r   s     r   r   z'BaseOpenAIEmbeddings._initialize_client6   s     	    c                    	  | j                   j                  j                  d|| j                  d|}|j                  d   j
                  }|S # t        $ r}t        d|       |d}~ww xY w)a  
        Generate embeddings for a given query using an OpenAI text embedding model.

        Args:
            text (str): The text to generate an embedding for.
            **kwargs (Any): Additional arguments to pass to the OpenAI embedding generation function.
        )inputr   r   z*Failed to generate embedding with OpenAI: Nr   )r   
embeddingscreater   data	embedding	Exceptionr   )r   textr   responser"   es         r   embed_queryz BaseOpenAIEmbeddings.embed_query>   s    		4t{{--44 $**06H &.]]1%5%?%?I 	+<QC@	s   AA 	A-A((A-)ztext-embedding-ada-002N)r   strr
   zOptional[RateLimitHandler]r   r   returnNoner   r   r)   r   )r$   r(   r   r   r)   zlist[float])__name__
__module____qualname____doc____annotations__r   abcabstractmethodr   r
   r'   __classcell__)r   s   @r   r   r      sq      .9=88 78 	8
 
8$ 	   r   r   c                      e Zd ZdZddZy)OpenAIEmbeddingsa9  
    OpenAI embeddings class.
    This class uses the OpenAI python client to generate embeddings for text data.

    Args:
        model (str): The name of the OpenAI embedding model to use. Defaults to "text-embedding-ada-002".
        kwargs: All other parameters will be passed to the openai.OpenAI init.
    c                :     | j                   j                  di |S Nr   )r   OpenAIr   s     r   r   z#OpenAIEmbeddings._initialize_client]   s    !t{{!!+F++r   Nr+   r,   r-   r.   r/   r   r   r   r   r5   r5   S   s    ,r   r5   c                      e Zd ZdZddZy)AzureOpenAIEmbeddingsaP  
    Azure OpenAI embeddings class.
    This class uses the Azure OpenAI python client to generate embeddings for text data.

    Args:
        model (str): The name of the Azure OpenAI embedding model to use. Defaults to "text-embedding-ada-002".
        kwargs: All other parameters will be passed to the openai.AzureOpenAI init.
    c                :     | j                   j                  di |S r7   )r   AzureOpenAIr   s     r   r   z(AzureOpenAIEmbeddings._initialize_clientk   s    &t{{&&000r   Nr+   r9   r   r   r   r;   r;   a   s    1r   r;   )
__future__r   r1   typingr   r   r   neo4j_graphrag.embeddings.baser   neo4j_graphrag.exceptionsr   neo4j_graphrag.utils.rate_limitr	   r
   r   ABCr   r5   r;   r   r   r   <module>rD      sO     # 
 / / 3 ? P38SWW 3l,+ ,10 1r   