
    WiO                     ^    d dl Z d dlZd dlZd dlmZ d dlmZmZmZ d dl	m
Z
  G d de
      Zy)    N)tqdm)ListMappingAny)BaseEmbedderc                        e Zd ZdZdddi fdej
                  dededz  dedz  de	ee
f   f
 fd	Zdd
ee   dedej                  fdZd Z xZS )OpenAIBackendaJ  OpenAI Embedding Model.

    Arguments:
        client: A `openai.OpenAI` client.
        embedding_model: An OpenAI model. Default is
                         For an overview of models see:
                         https://platform.openai.com/docs/models/embeddings
        delay_in_seconds: If a `batch_size` is given, use this set
                          the delay in seconds between batches.
        batch_size: The size of each batch.
        generator_kwargs: Kwargs passed to `openai.Embedding.create`.
                          Can be used to define custom engines or
                          deployment_ids.

    Examples:
    ```python
    import openai
    from bertopic.backend import OpenAIBackend

    client = openai.OpenAI(api_key="sk-...")
    openai_embedder = OpenAIBackend(client, "text-embedding-ada-002")
    ```
    ztext-embedding-ada-002Nclientembedding_modeldelay_in_seconds
batch_sizegenerator_kwargsc                 6   t         |           || _        || _        || _        || _        || _        | j                  j                  d      r|j                  d      | _        y | j                  j                  d      s| j                  | j                  d<   y y )Nmodelengine)super__init__r
   r   r   r   r   get)selfr
   r   r   r   r   	__class__s         d/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/bertopic/backend/_openai.pyr   zOpenAIBackend.__init__"   s     	. 0$ 0  $$W-#3#7#7#@D &&**84-1-A-AD!!'* 5    	documentsverbosereturnc                    |D cg c]  }|dk(  rdn| }}| j                   g }t        | j                  |      |       D ]  } | j                  j                  j
                  dd|i| j                  }|j                  |j                  D cg c]  }|j                   c}       | j                  sut        j                  | j                          nU | j                  j                  j
                  dd|i| j                  }|j                  D cg c]  }|j                   }}t        j                  |      S c c}w c c}w c c}w )a  Embed a list of n documents/words into an n-dimensional
        matrix of embeddings.

        Arguments:
            documents: A list of documents or words to be embedded
            verbose: Controls the verbosity of the process

        Returns:
            Document/words embeddings with shape (n, m) with `n` documents/words
            that each have an embeddings size of `m`
          )disableinput )r   r   _chunksr
   
embeddingscreater   extenddata	embeddingr   timesleepnparray)	r   r   r   docprepared_documentsr#   batchresponsers	            r   embedzOpenAIBackend.embed6   s)    DMMCSBYcC7MM ??&Jdll+=>GT 684;;1188^u^H]H]^!!"F11;;"FG ((JJt4456 5t{{--44g;MgQUQfQfgH/7}}=!!++=J=xx
### N #G >s   EE
Ec              #   ~   K   t        dt        |      | j                        D ]  }|||| j                  z      y w)Nr   )rangelenr   )r   r   is      r   r"   zOpenAIBackend._chunksV   s<     q#i.$//: 	5AADOO 344	5s   ;=)F)__name__
__module____qualname____doc__openaiOpenAIstrfloatintr   r   r   r   boolr*   ndarrayr1   r"   __classcell__)r   s   @r   r	   r	   	   s    6  8)-!%.0BB B  $,	B
 $JB "#s(+B($tCy $4 $BJJ $@5r   r	   )r(   r:   numpyr*   r   typingr   r   r   bertopic.backendr   r	   r!   r   r   <module>rE      s(        % % )O5L O5r   