
    hw                    x    d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZmZmZmZ dZdZ G d d	ee      Zy
)    )annotations)AnyOptional)
Embeddings)	BaseModel
ConfigDictField)IMPORT_ERRORis_ipex_availableis_optimum_intel_availableis_optimum_intel_versionz'sentence-transformers/all-mpnet-base-v2z1.22c                  
    e Zd ZU dZ eed      Zded<   	 dZded<   	  ee		      Z
d
ed<   	  ee		      Zd
ed<   	  ee		      Zd
ed<   	 dZded<   	 dZded<   	 d fdZ eddd      Z	 	 	 	 	 	 ddZddZddZ xZS )HuggingFaceEmbeddingsaa  HuggingFace sentence_transformers embedding models.

    To use, you should have the ``sentence_transformers`` python package installed.

    Example:
        .. code-block:: python

            from langchain_huggingface import HuggingFaceEmbeddings

            model_name = "sentence-transformers/all-mpnet-base-v2"
            model_kwargs = {'device': 'cpu'}
            encode_kwargs = {'normalize_embeddings': False}
            hf = HuggingFaceEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )

    model)defaultaliasstr
model_nameNzOptional[str]cache_folder)default_factorydict[str, Any]model_kwargsencode_kwargsquery_encode_kwargsFboolmulti_processshow_progressc                   t        |   di | 	 ddl}| j                  j                  dd      dk(  ret               r
t               s#dt        j                  d       }t        |      t        d	t              rd
t         d}t        |      ddlm} |}n|j                  } || j                  fd| j                   i| j                  | _        y# t        $ r}d}t        |      |d}~ww xY w)z$Initialize the sentence_transformer.r   NzrCould not import sentence_transformers python package. Please install it with `pip install sentence-transformers`.backendtorchipexzBackend: ipex zoptimum[ipex]<z&Backend: ipex requires optimum-intel>=z_. You can install it with pip: `pip install --upgrade --upgrade-strategy eager `optimum[ipex]`.)IPEXSentenceTransformerr    )super__init__sentence_transformersImportErrorr   getr   r   r
   formatr   _MIN_OPTIMUM_VERSIONoptimum.intelr#   SentenceTransformerr   r   _client)selfkwargsr'   excmsgr#   	model_cls	__class__s          k/var/www/html/aiagenthome/venv/lib/python3.12/site-packages/langchain_huggingface/embeddings/huggingface.pyr&   zHuggingFaceEmbeddings.__init__A   s   "6"	,(   G4>-/7H7J&|':':?'K&LM!#&&'-AB<+, -''  "#&&=/I .AAI OO
*.*;*;
?C?P?P
9  	,N  c"+	,s   C 	C1C,,C1forbidr$   T)extraprotected_namespacespopulate_by_namec                   ddl }|D cg c]  }|j                  dd       }}| j                  rR| j                  j	                         }| j                  j                  ||      }|j                  j                  |       n) | j                  j                  |fd| j                  i|}t        |t              rd}t        |      |j                         S c c}w )at  Embed a text using the HuggingFace transformer model.

        Args:
            texts: The list of texts to embed.
            encode_kwargs: Keyword arguments to pass when calling the
                `encode` method for the documents of the SentenceTransformer
                encode method.

        Returns:
            List of embeddings, one for each text.

        r   N
 show_progress_barzHExpected embeddings to be a Tensor or a numpy array, got a list instead.)r'   replacer   r.   start_multi_process_poolencode_multi_processr-   stop_multi_process_poolencoder   
isinstancelist	TypeErrortolist)r/   textsr   r'   xpool
embeddingsr2   s           r5   _embedzHuggingFaceEmbeddings._embedl   s     	%/45u!4%u5<<88:D::5$GJ!55MMdS,,,"&"4"4  J j$'&  C.   ""' 6s   Cc                :    | j                  || j                        S )zCompute doc embeddings using a HuggingFace transformer model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.

        )rK   r   )r/   rG   s     r5   embed_documentsz%HuggingFaceEmbeddings.embed_documents   s     {{5$"4"455    c                    t        | j                        dkD  r| j                  n| j                  }| j                  |g|      d   S )zCompute query embeddings using a HuggingFace transformer model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.

        r   )lenr   r   rK   )r/   textembed_kwargss      r5   embed_queryz!HuggingFaceEmbeddings.embed_query   sJ     4++,q0 $$## 	
 {{D6<033rN   )r0   r   )rG   	list[str]r   r   returnlist[list[float]])rG   rT   rU   rV   )rQ   r   rU   zlist[float])__name__
__module____qualname____doc__r	   DEFAULT_MODEL_NAMEr   __annotations__r   dictr   r   r   r   r   r&   r   model_configrK   rM   rS   __classcell__)r4   s   @r5   r   r      s    ( $6gFJF"&L-&K#(#>L.>d %*$$?M>?k +0*EEk  M4(M4)#
J L$#$#/=$#	$#L
64rN   r   N)
__future__r   typingr   r   langchain_core.embeddingsr   pydanticr   r   r	   (langchain_huggingface.utils.import_utilsr
   r   r   r   r[   r+   r   r$   rN   r5   <module>re      s<    "   0 1 1  ?  Y4Iz Y4rN   