
    ~
iF                        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 eddd           G d dee                      Z eddd           G d dee                      Z eddd           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   NrCould 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   r1   excr/   s         C:\Users\Dell Inspiron 16\Desktop\tws\AgrotaPowerBi\back-agrota-powerbi\mcp-client-agrota\venv\Lib\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
 
s   #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)r1   listmapr   r   start_multi_process_poolencode_multi_processr3   stop_multi_process_poolencoder   r   tolist)r4   r;   r1   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   """rD   textc                 :    |                      |g          d         S Compute query embeddings using a HuggingFace transformer model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   rO   r4   rP   s     r6   embed_queryz!HuggingFaceEmbeddings.embed_queryy        ##TF++A..rD   )r0   
__module____qualname____doc__r   r   __annotations__DEFAULT_MODEL_NAMEr   strr   r   r   dictr   r   r   r   boolr   r.   r   model_configr   floatrO   rV   __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 	/ 	/ 	/ 	/ 	/ 	/ 	/ 	/rD   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.NrE   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/   r0   InstructorEmbeddingri   r   r   r   r   r2   r   r   warningswarnpop)r4   r   r   r   ri   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(r7   r,   r8   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,   )rf   ).0rP   r4   s     r6   
<listcomp>zAHuggingFaceInstructEmbeddings.embed_documents.<locals>.<listcomp>   s!    NNNd4d;NNNrD   rE   r   rK   r   r   rL   )r4   r;   instruction_pairsrN   s   `   r6   rO   z-HuggingFaceInstructEmbeddings.embed_documents   sj     ONNNNNN'T['
 
"0
  
 


   """rD   rP   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.
        rE   r   )rg   r   rK   r   r   rL   )r4   rP   instruction_pair	embeddings       r6   rV   z)HuggingFaceInstructEmbeddings.embed_query   si     !2D9&DK&
 
"0
  
 
 		
 !!!rD   )r0   rX   rY   rZ   r   r   r[   DEFAULT_INSTRUCT_MODELr   r]   r   r   r   r^   r   r   r   DEFAULT_EMBED_INSTRUCTIONrf   DEFAULT_QUERY_INSTRUCTIONrg   r   r_   r.   r   r`   r   ra   rO   rV   rb   rc   s   @r6   re   re      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 " " " " " " " "rD   re   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   rg    rf   Fr   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}n"# t          $ r}t          d          |d}~ww xY wg d} fd|D             } |j         j        fd j	        i j
        d|i _        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   rj   r!   r"   r#   r$   r%   r&   r'   r(   r)   r   Nr+   )torch_dtypeattn_implementationprovider	file_nameexportc                 X    i | ]&}|j         v |j                             |          'S r,   )r   rt   )rx   kr4   s     r6   
<dictcomp>z5HuggingFaceBgeEmbeddings.__init__.<locals>.<dictcomp>X  sD     #
 #
 #
D%%% t $$Q''%%%rD   r   r   z-zhrE   r   rk   rl   rm   rp   r,   )r-   r.   r   r/   r0   r1   r2   r3   r   r   r   r    DEFAULT_QUERY_BGE_INSTRUCTION_ZHrg   r   r   rr   rs   rt   )	r4   r   r   r   r1   r5   extra_model_kwargsextra_model_kwargs_dictr/   s	   `       r6   r.   z!HuggingFaceBgeEmbeddings.__init__9  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
 
*
 
 
 1	
 
 
 DO##%ED"$"4449T4>;RTT	    ! J   "&!3!7!78K!L!LD 54s   $A) )
B3BBr7   r,   r8   r;   r<   c                       fd|D             }  j         j        |fd j        i j        }|                                S )r>   c                 L    g | ] }j         |                    d d          z   !S )r@   r&   )rf   rA   )rx   tr4   s     r6   ry   z<HuggingFaceBgeEmbeddings.embed_documents.<locals>.<listcomp>  s/    NNN1'!))D#*>*>>NNNrD   rE   rz   )r4   r;   rN   s   `  r6   rO   z(HuggingFaceBgeEmbeddings.embed_documentsw  sg     ONNNNNN'T['
 
%)%7
;?;M
 

   """rD   rP   c                     |                     dd          } | j        j        | j        |z   fd| j        i| j        }|                                S )rS   r@   r&   rE   )rA   r   rK   rg   r   r   rL   )r4   rP   r~   s      r6   rV   z$HuggingFaceBgeEmbeddings.embed_query  si     ||D#&&&DK&"T)
 
"0
  
 
	
 !!!rD   )r0   rX   rY   rZ   r   r   r[   DEFAULT_BGE_MODELr   r]   r   r   r   r^   r   r   r    DEFAULT_QUERY_BGE_INSTRUCTION_ENrg   rf   r   r_   r.   r   r`   r   ra   rO   rV   rb   rc   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x :H2FFFL#T#Y #4U3D # # # #" "U " " " " " " " "rD   r   z3langchain_huggingface.HuggingFaceEndpointEmbeddingsc                   *   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_headersr7   r,   r8   r<   c                     | j         p| j        S )N)r   _default_api_urlr4   s    r6   _api_urlz*HuggingFaceInferenceAPIEmbeddings._api_url  s    |4t44rD   c                     d| j          S )NzAhttps://api-inference.huggingface.co/pipeline/feature-extraction/)r   r   s    r6   r   z2HuggingFaceInferenceAPIEmbeddings._default_api_url  s    " " "	
rD   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
%
 	
rD   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   rO   z1HuggingFaceInferenceAPIEmbeddings.embed_documents  sL    0 =MM.2FF 
 
 
 }}rD   rP   c                 :    |                      |g          d         S rR   rT   rU   s     r6   rV   z-HuggingFaceInferenceAPIEmbeddings.embed_query  rW   rD   )r0   rX   rY   rZ   r   r[   r   r]   r   r   r   r   r   r`   propertyr   r   r^   r   r   ra   rO   rV   r,   rD   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 	/ 	/ 	/ 	/ 	/ 	/rD   r   )rr   typingr   r   r   r   r   langchain_core._apir   r   langchain_core.embeddingsr	   pydanticr
   r   r   r   r\   r   r   r   r   r   r   r   re   r   r   r,   rD   r6   <module>r      s@    , , , , , , , , , , , ,  ; ; ; ; ; ; ; ; 0 0 0 0 0 0 < < < < < < < < < < < <> 2 ' D B  @ ! $_   
D  
g/ g/ g/ g/ g/Iz g/ g/ 
g/T 
D  
o" o" o" o" o"Iz o" o" 
o"d 
D  
T" T" T" T" T"y* T" T" 
T"n 
L  
P/ P/ P/ P/ P/	: P/ P/ 
P/ P/ P/rD   