
    Wi                     V    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
  G d de
      Zy)    N)ListUnion)SentenceTransformer)StaticEmbedding)BaseEmbedderc                   h     e Zd ZdZd	deeef   def fdZd	de	e   dede
j                  fdZ xZS )
SentenceTransformerBackenda  Sentence-transformers embedding model.

    The sentence-transformers embedding model used for generating document and
    word embeddings.

    Arguments:
        embedding_model: A sentence-transformers embedding model
        model2vec: Indicates whether `embedding_model` is a model2vec model.
                   NOTE: Only works if `embedding_model` is a string.
                   Otherwise, you can pass the model2vec model directly to `embedding_model`.

    Examples:
    To create a model, you can load in a string pointing to a
    sentence-transformers model:

    ```python
    from bertopic.backend import SentenceTransformerBackend

    sentence_model = SentenceTransformerBackend("all-MiniLM-L6-v2")
    ```

    or  you can instantiate a model yourself:

    ```python
    from bertopic.backend import SentenceTransformerBackend
    from sentence_transformers import SentenceTransformer

    embedding_model = SentenceTransformer("all-MiniLM-L6-v2")
    sentence_model = SentenceTransformerBackend(embedding_model)
    ```

    If you want to use a model2vec model without having to install model2vec,
    you can pass the model2vec model as a string:

    ```python
    from bertopic.backend import SentenceTransformerBackend
    from sentence_transformers import SentenceTransformer

    embedding_model = SentenceTransformer("minishlab/potion-base-8M", model2vec=True)
    sentence_model = SentenceTransformerBackend(embedding_model)
    ```
    embedding_model	model2vecc                 8   t         |           d | _        |r8t        |t              r(t        j                  |      }t        |g      | _        y t        |t              r|| _        y t        |t              rt        |      | _        || _        y t        d      )N)moduleszPlease select a correct SentenceTransformers model: 
`from sentence_transformers import SentenceTransformer` 
`model = SentenceTransformer('all-MiniLM-L6-v2')`)
super__init__	_hf_model
isinstancestrr   from_model2vecr   r
   
ValueError)selfr
   r   static_embedding	__class__s       r/home/sietch6/trending-topics-pipeline/venv/lib/python3.12/site-packages/bertopic/backend/_sentencetransformers.pyr   z#SentenceTransformerBackend.__init__5   s    OS9.==oN#6@P?Q#RD )<=#2D -#6#GD ,DND     	documentsverbosereturnc                 @    | j                   j                  ||      }|S )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`
        )show_progress_bar)r
   encode)r   r   r   
embeddingss       r   embedz SentenceTransformerBackend.embedH   s%     ))00g0V
r   )F)__name__
__module____qualname____doc__r   r   r   boolr   r   npndarrayr!   __classcell__)r   s   @r   r	   r	   	   sJ    )Vc3F.F(G TX &tCy 4 BJJ r   r	   )numpyr'   typingr   r   sentence_transformersr   sentence_transformers.modelsr   bertopic.backendr   r	    r   r   <module>r0      s"      5 8 )L Lr   