
    NgB                        d dl Z d dlmZmZmZmZ d dlZd dlmZm	Z	 d dl
mZ d dlmZmZmZmZ dZdZdZd	Zd
ZdZdZ eddd           G d dee                      Z G d dee          Z G d dee          Z G d dee          ZdS )    N)AnyDictListOptional)
deprecatedwarn_deprecated)
Embeddings)	BaseModel
ConfigDictField	SecretStrz'sentence-transformers/all-mpnet-base-v2zhkunlp/instructor-largezBAAI/bge-large-enz&Represent the document for retrieval: z<Represent the question for retrieving supporting documents: z9Represent this question for searching relevant passages: u9   为这个句子生成表示以用于检索相关文章：z0.2.21.0z+langchain_huggingface.HuggingFaceEmbeddings)sinceremovalalternative_importc                   V    e Zd ZU dZdZeed<   eZe	ed<   	 dZ
ee	         ed<   	  ee          Zee	ef         ed<   	  ee          Zee	ef         ed<   	 d	Zeed
<   	 d	Zeed<   	 def fdZ edd          Zdee	         deee                  fdZde	dee         fdZ xZS )HuggingFaceEmbeddingsai  HuggingFace sentence_transformers embedding models.

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

    Example:
        .. code-block:: python

            from langchain_community.embeddings 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
            )
    Nclient
model_namecache_folderdefault_factorymodel_kwargsencode_kwargsFmulti_processshow_progresskwargsc                 `    t                      j        di | d|vrCd}d}t          ||d| j        j         dd| dz   d| d	z   d| j        j         d
z              	 ddl}n"# t          $ r}t          d          |d}~ww xY w |j        | j        fd| j	        i| j
        | _        dS )$Initialize the sentence_transformer.r   0.2.160.4.0Default values for .model_name were deprecated in LangChain  and will be removed in %. Explicitly pass a model_name to the constructor instead.r   r   messager   NzrCould not import sentence_transformers python package. Please install it with `pip install sentence-transformers`.r    )super__init__r   	__class____name__sentence_transformersImportErrorSentenceTransformerr   r   r   r   selfr   r   r   r0   excr.   s         f/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/embeddings/huggingface.pyr-   zHuggingFaceEmbeddings.__init__C   s7   ""6"""v%%EGRdn.ERRRQ5QQQRDgDDDE Edn-DDDE   	((((( 	 	 	N  	 @+?O
 
*.*;
?C?P
 
   #A( (
B2BBforbidr+   extraprotected_namespacestextsreturnc                 X   ddl }t          t          d |                    }| j        rO| j                                        }| j                            ||          }|j                            |           n | j        j	        |fd| j
        i| j        }|                                S )Compute doc embeddings using a HuggingFace transformer model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        r   Nc                 .    |                      dd          S )N
r&   )replace)xs    r6   <lambda>z7HuggingFaceEmbeddings.embed_documents.<locals>.<lambda>m   s    199T3#7#7     show_progress_bar)r0   listmapr   r   start_multi_process_poolencode_multi_processr2   stop_multi_process_poolencoder   r   tolist)r4   r<   r0   pool
embeddingss        r6   embed_documentsz%HuggingFaceEmbeddings.embed_documentsb   s     	%$$$S77??@@ 	;7799D99%FFJ!5MMdSSSS++ )-);?C?Q J   """rE   textc                 :    |                      |g          d         S Compute query embeddings using a HuggingFace transformer model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   rP   r4   rQ   s     r6   embed_queryz!HuggingFaceEmbeddings.embed_queryy        ##TF++A..rE   )r/   
__module____qualname____doc__r   r   __annotations__DEFAULT_MODEL_NAMEr   strr   r   r   dictr   r   r   r   boolr   r-   r   model_configr   floatrP   rW   __classcell__r.   s   @r6   r   r      sz         & FC(J((("&L(3-&&&K#(5#>#>#>L$sCx.>>>d %*E$$?$?$?M4S>???k  M4(M4)
 
 
 
 
 
 
: :H2FFFL#T#Y #4U3D # # # #.	/ 	/U 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/rE   r   c                   f    e Zd ZU dZdZeed<   eZe	ed<   	 dZ
ee	         ed<   	  ee          Zee	ef         ed<   	  ee          Zee	ef         ed<   	 eZe	ed	<   	 eZe	ed
<   	 dZeed<   	 def fdZ edd          Zdee	         deee                  fdZde	dee         fdZ xZS )HuggingFaceInstructEmbeddingsa  Wrapper around sentence_transformers embedding models.

    To use, you should have the ``sentence_transformers``
    and ``InstructorEmbedding`` python packages installed.

    Example:
        .. code-block:: python

            from langchain_community.embeddings import HuggingFaceInstructEmbeddings

            model_name = "hkunlp/instructor-large"
            model_kwargs = {'device': 'cpu'}
            encode_kwargs = {'normalize_embeddings': True}
            hf = HuggingFaceInstructEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )
    Nr   r   r   r   r   r   embed_instructionquery_instructionFr   r   c                 $    t                      j        di | d|vrCd}d}t          ||d| j        j         dd| dz   d| d	z   d| j        j         d
z              	 ddlm}  || j        fd| j        i| j	        | _
        n"# t          $ r}t          d          |d}~ww xY wd| j        v r\t          dddd| j        j                    | j        rt          j        d           | j                            d          | _        dS dS )r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r   )
INSTRUCTORr   z/Dependencies for InstructorEmbedding not found.NrF   0.2.5r   "encode_kwargs['show_progress_bar']the show_progress method on r   r   namealternativeuBoth encode_kwargs['show_progress_bar'] and show_progress are set;encode_kwargs['show_progress_bar'] takes precedencer+   )r,   r-   r   r.   r/   InstructorEmbeddingrj   r   r   r   r   r1   r   r   warningswarnpop)r4   r   r   r   rj   er.   s         r6   r-   z&HuggingFaceInstructEmbeddings.__init__   s   ""6"""v%%EGRdn.ERRRQ5QQQRDgDDDE Edn-DDDE   	X666666$* .2.?CGCT DKK  	X 	X 	XOPPVWW	X $"4449T4>;RTT	    ! J   "&!3!7!78K!L!LD 54s   #%B	 	
B(B##B(r8   r+   r9   r<   r=   c                       fd|D             }  j         j        |fd j        i j        }|                                S )zCompute doc embeddings using a HuggingFace instruct model.

        Args:
            texts: The list of texts to embed.

        Returns:
            List of embeddings, one for each text.
        c                 "    g | ]}j         |gS r+   )rg   ).0rQ   r4   s     r6   
<listcomp>zAHuggingFaceInstructEmbeddings.embed_documents.<locals>.<listcomp>   s!    NNNd4d;NNNrE   rF   r   rL   r   r   rM   )r4   r<   instruction_pairsrO   s   `   r6   rP   z-HuggingFaceInstructEmbeddings.embed_documents   sj     ONNNNNN'T['
 
"0
  
 


   """rE   rQ   c                     | j         |g} | j        j        |gfd| j        i| j        d         }|                                S )zCompute query embeddings using a HuggingFace instruct model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        rF   r   )rh   r   rL   r   r   rM   )r4   rQ   instruction_pair	embeddings       r6   rW   z)HuggingFaceInstructEmbeddings.embed_query   si     !2D9&DK&
 
"0
  
 
 		
 !!!rE   )r/   rY   rZ   r[   r   r   r\   DEFAULT_INSTRUCT_MODELr   r^   r   r   r   r_   r   r   r   DEFAULT_EMBED_INSTRUCTIONrg   DEFAULT_QUERY_INSTRUCTIONrh   r   r`   r-   r   ra   r   rb   rP   rW   rc   rd   s   @r6   rf   rf      s         ( FC,J,,,"&L(3-&&&K#(5#>#>#>L$sCx.>>>1$)E$$?$?$?M4S>???R6s66656s6661M4)%M %M %M %M %M %M %MN :H2FFFL#T#Y #4U3D # # # #"" "U " " " " " " " "rE   rf   c                   f    e Zd ZU dZdZeed<   eZe	ed<   	 dZ
ee	         ed<   	  ee          Zee	ef         ed<   	  ee          Zee	ef         ed<   	 eZe	ed	<   	 d
Ze	ed<   	 dZeed<   	 def fdZ edd          Zdee	         deee                  fdZde	dee         fdZ xZS )HuggingFaceBgeEmbeddingsaE  HuggingFace sentence_transformers embedding models.

    To use, you should have the ``sentence_transformers`` python package installed.
    To use Nomic, make sure the version of ``sentence_transformers`` >= 2.3.0.

    Bge Example:
        .. code-block:: python

            from langchain_community.embeddings import HuggingFaceBgeEmbeddings

            model_name = "BAAI/bge-large-en-v1.5"
            model_kwargs = {'device': 'cpu'}
            encode_kwargs = {'normalize_embeddings': True}
            hf = HuggingFaceBgeEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )
     Nomic Example:
        .. code-block:: python

            from langchain_community.embeddings import HuggingFaceBgeEmbeddings

            model_name = "nomic-ai/nomic-embed-text-v1"
            model_kwargs = {
                'device': 'cpu',
                'trust_remote_code':True
                }
            encode_kwargs = {'normalize_embeddings': True}
            hf = HuggingFaceBgeEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs,
                query_instruction = "search_query:",
                embed_instruction = "search_document:"
            )
    Nr   r   r   r   r   r   rh    rg   Fr   r   c                 T    t                      j        di | d|vrCd}d}t          ||d| j        j         dd| dz   d| d	z   d| j        j         d
z              	 ddl}n"# t          $ r}t          d          |d}~ww xY w |j        | j        fd| j	        i| j
        | _        d| j        v rt          | _        d| j        v r\t          dddd| j        j                    | j        rt!          j        d           | j                            d          | _        dS dS )r   r   rk   r!   r"   r#   r$   r%   r&   r'   r(   r)   r   NzrCould not import sentence_transformers python package. Please install it with `pip install sentence_transformers`.r   z-zhrF   r   rl   rm   rn   rq   r+   )r,   r-   r   r.   r/   r0   r1   r2   r   r   r   r    DEFAULT_QUERY_BGE_INSTRUCTION_ZHrh   r   r   rs   rt   ru   r3   s         r6   r-   z!HuggingFaceBgeEmbeddings.__init__/  s   ""6"""v%%EGRdn.ERRRQ5QQQRDgDDDE Edn-DDDE   	((((( 	 	 	N  	 @+?O
 
*.*;
?C?P
 
 DO##%ED"$"4449T4>;RTT	    ! J   "&!3!7!78K!L!LD 54r7   r8   r+   r9   r<   r=   c                       fd|D             }  j         j        |fd j        i j        }|                                S )r?   c                 L    g | ] }j         |                    d d          z   !S )rA   r&   )rg   rB   )ry   tr4   s     r6   rz   z<HuggingFaceBgeEmbeddings.embed_documents.<locals>.<listcomp>h  s/    NNN1'!))D#*>*>>NNNrE   rF   r{   )r4   r<   rO   s   `  r6   rP   z(HuggingFaceBgeEmbeddings.embed_documents_  sg     ONNNNNN'T['
 
%)%7
;?;M
 

   """rE   rQ   c                     |                     dd          } | j        j        | j        |z   fd| j        i| j        }|                                S )rT   rA   r&   rF   )rB   r   rL   rh   r   r   rM   )r4   rQ   r   s      r6   rW   z$HuggingFaceBgeEmbeddings.embed_queryn  si     ||D#&&&DK&"T)
 
"0
  
 
	
 !!!rE   )r/   rY   rZ   r[   r   r   r\   DEFAULT_BGE_MODELr   r^   r   r   r   r_   r   r   r    DEFAULT_QUERY_BGE_INSTRUCTION_ENrh   rg   r   r`   r-   r   ra   r   rb   rP   rW   rc   rd   s   @r6   r   r      s        $ $L FC'J'''"&L(3-&&&K#(5#>#>#>L$sCx.>>>1$)E$$?$?$?M4S>???R=s===1s4M4),M ,M ,M ,M ,M ,M ,M\ :H2FFFL#T#Y #4U3D # # # #" "U " " " " " " " "rE   r   c                   *   e Zd ZU dZeed<   	 dZeed<   	 dZe	e         ed<   	 i Z
eeef         ed<   	  edd	
          Zedefd            Zedefd            Zedefd            Zdee         deee                  fdZdedee         fdZdS )!HuggingFaceInferenceAPIEmbeddingszkEmbed texts using the HuggingFace API.

    Requires a HuggingFace Inference API key and a model name.
    api_keyz&sentence-transformers/all-MiniLM-L6-v2r   Napi_urladditional_headersr8   r+   r9   r=   c                     | j         p| j        S )N)r   _default_api_urlr4   s    r6   _api_urlz*HuggingFaceInferenceAPIEmbeddings._api_url  s    |4t44rE   c                     d| j          S )NzAhttps://api-inference.huggingface.co/pipeline/feature-extraction/)r   r   s    r6   r   z2HuggingFaceInferenceAPIEmbeddings._default_api_url  s    " " "	
rE   c                 L    dd| j                                          i| j        S )NAuthorizationzBearer )r   get_secret_valuer   r   s    r6   _headersz*HuggingFaceInferenceAPIEmbeddings._headers  s5     Ht|'D'D'F'FHH
%
 	
rE   r<   c                 x    t          j        | j        | j        |dddd          }|                                S )a  Get the embeddings for a list of texts.

        Args:
            texts (Documents): A list of texts to get embeddings for.

        Returns:
            Embedded texts as List[List[float]], where each inner List[float]
                corresponds to a single input text.

        Example:
            .. code-block:: python

                from langchain_community.embeddings import (
                    HuggingFaceInferenceAPIEmbeddings,
                )

                hf_embeddings = HuggingFaceInferenceAPIEmbeddings(
                    api_key="your_api_key",
                    model_name="sentence-transformers/all-MiniLM-l6-v2"
                )
                texts = ["Hello, world!", "How are you?"]
                hf_embeddings.embed_documents(texts)
        T)wait_for_model	use_cache)inputsoptions)headersjson)requestspostr   r   r   )r4   r<   responses      r6   rP   z1HuggingFaceInferenceAPIEmbeddings.embed_documents  sL    0 =MM.2FF 
 
 
 }}rE   rQ   c                 :    |                      |g          d         S rS   rU   rV   s     r6   rW   z-HuggingFaceInferenceAPIEmbeddings.embed_query  rX   rE   )r/   rY   rZ   r[   r   r\   r   r^   r   r   r   r   r   ra   propertyr   r   r_   r   r   rb   rP   rW   r+   rE   r6   r   r     sT         
 9>J>>>;!GXc]!!!K)+S#X+++D:H2FFFL5# 5 5 5 X5 
# 
 
 
 X
 
$ 
 
 
 X
 T#Y  4U3D        D	/ 	/U 	/ 	/ 	/ 	/ 	/ 	/rE   r   )rs   typingr   r   r   r   r   langchain_core._apir   r   langchain_core.embeddingsr	   pydanticr
   r   r   r   r]   r   r   r   r   r   r   r   rf   r   r   r+   rE   r6   <module>r      s    , , , , , , , , , , , ,  ; ; ; ; ; ; ; ; 0 0 0 0 0 0 < < < < < < < < < < < <> 2 ' D B  @ ! $_   
D  
g/ g/ g/ g/ g/Iz g/ g/ 
g/To" o" o" o" o"Iz o" o" o"dF" F" F" F" F"y* F" F" F"RP/ P/ P/ P/ P/	: P/ P/ P/ P/ P/rE   