
    dhF                     4   S SK r S SKJrJrJrJr  S SKrS SKJrJ	r	  S SK
Jr  S SKJrJrJrJr  SrSrSrS	rS
rSrSr\" SSSS9 " S S\\5      5       r\" SSSS9 " S S\\5      5       r\" SSSS9 " S S\\5      5       r\" SSSS9 " S S\\5      5       rg)    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                     ^  \ rS rSr% SrSr\\S'   \r	\
\S'    Sr\\
   \S'    \" \S9r\\
\4   \S'    \" \S9r\\
\4   \S	'    S
r\\S'    S
r\\S'    S\4U 4S jjr\" SSS9rS\\
   S\\\      4S jrS\
S\\   4S jrSrU =r$ )HuggingFaceEmbeddings   a5  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U ]  " S0 UD6  SU;  aP  SnSn[        UUSU R                  R                   S3SU S3-   SU S	3-   SU R                  R                   S
3-   S9   SSKnUR                  " U R                  4SU R                  0U R                  D6U l        g! [         a  n[        S5      UeSnAff = f)$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   r2   excr0   s         b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/huggingface.pyr/   HuggingFaceEmbeddings.__init__C   s    "6"v%EG-dnn.E.E-FkR25'9PQRgYCDE dnn--..CDE	( ,??OO
*.*;*;
?C?P?P
  	N 	s   )B& &
C0B<<Cforbidr-   extraprotected_namespacestextsreturnc                    SSK n[        [        S U5      5      nU R                  (       a`  U R                  R                  5       nU R                  R                  X5      nUR                  R                  U5        UR                  5       $ U R                  R                  " U4SU R                  0U R                  D6nUR                  5       $ )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                 &    U R                  SS5      $ )N
r'   )replace)xs    r7   <lambda>7HuggingFaceEmbeddings.embed_documents.<locals>.<lambda>m   s    199T3#7    show_progress_bar)r2   listmapr   r   start_multi_process_poolencode_multi_processr4   stop_multi_process_poolencoder   r   tolist)r5   r=   r2   pool
embeddingss        r7   embed_documents%HuggingFaceEmbeddings.embed_documentsb   s     	%S7?@;;779D99%FJ!55MMdS   ""	 ++)-););?C?Q?QJ   ""rG   textc                 ,    U R                  U/5      S   $ Compute query embeddings using a HuggingFace transformer model.

Args:
    text: The text to embed.

Returns:
    Embeddings for the text.
r   rR   r5   rT   s     r7   embed_query!HuggingFaceEmbeddings.embed_queryy        ##TF+A..rG   )r   )r1   
__module____qualname____firstlineno____doc__r   r   __annotations__DEFAULT_MODEL_NAMEr   strr   r   r   dictr   r   r   r   boolr   r/   r   model_configr   floatrR   rZ   __static_attributes____classcell__r0   s   @r7   r   r      s    & FC(J("&L(3-&K#(#>L$sCx.>d %*$$?M4S>?k  M4(M4)
 
: H2FL#T#Y #4U3D #.	/ 	/U 	/ 	/rG   r   c                   (  ^  \ rS rSr% SrSr\\S'   \r	\
\S'    Sr\\
   \S'    \" \S9r\\
\4   \S'    \" \S9r\\
\4   \S	'    \r\
\S
'    \r\
\S'    Sr\\S'    S\4U 4S jjr\" SSS9rS\\
   S\\\      4S jrS\
S\\   4S jrSrU =r $ )HuggingFaceInstructEmbeddings   aT  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                 n  > [         TU ]  " S0 UD6  SU;  aP  SnSn[        UUSU R                  R                   S3SU S3-   SU S	3-   SU R                  R                   S
3-   S9   SSKJn  U" U R                  4SU R                  0U R                  D6U l
        SU R                  ;   ak  [        SSSSU R                  R                   3S9  U R                  (       a  [        R                  " S5        U R                  R!                  S5      U l        gg! [         a  n[        S5      UeSnAff = f)r    r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r   )
INSTRUCTORr   z/Dependencies for InstructorEmbedding not found.NrH   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   r0   r1   InstructorEmbeddingrq   r   r   r   r   r3   r   r   warningswarnpop)r5   r   r   r   rq   er0   s         r7   r/   &HuggingFaceInstructEmbeddings.__init__   s_   "6"v%EG-dnn.E.E-FkR25'9PQRgYCDE dnn--..CDE	X6$.2.?.?CGCTCTDK $"4"449:4>>;R;R:ST	 !!J "&!3!3!7!78K!LD 5  	XOPVWW	Xs   )4D 
D4#D//D4r9   r-   r:   r=   r>   c                     U Vs/ sH  o R                   U/PM     nnU R                  R                  " U4SU R                  0U R                  D6nUR                  5       $ s  snf )zCompute doc embeddings using a HuggingFace instruct model.

Args:
    texts: The list of texts to embed.

Returns:
    List of embeddings, one for each text.
rH   )rn   r   rN   r   r   rO   )r5   r=   rT   instruction_pairsrQ   s        r7   rR   -HuggingFaceInstructEmbeddings.embed_documents   sp     INN44d;N[[''
"00
   


   "" Os   A rT   c                     U R                   U/nU R                  R                  " U/4SU R                  0U R                  D6S   nUR                  5       $ )zCompute query embeddings using a HuggingFace instruct model.

Args:
    text: The text to embed.

Returns:
    Embeddings for the text.
rH   r   )ro   r   rN   r   r   rO   )r5   rT   instruction_pair	embeddings       r7   rZ   )HuggingFaceInstructEmbeddings.embed_query   sh     !22D9KK&&
"00
   
 		
 !!rG   )r   r   )!r1   r]   r^   r_   r`   r   r   ra   DEFAULT_INSTRUCT_MODELr   rc   r   r   r   rd   r   r   r   DEFAULT_EMBED_INSTRUCTIONrn   DEFAULT_QUERY_INSTRUCTIONro   r   re   r/   r   rf   r   rg   rR   rZ   rh   ri   rj   s   @r7   rl   rl      s    ( FC,J,"&L(3-&K#(#>L$sCx.>1$)$$?M4S>?R6s656s61M4)%M %MN H2FL#T#Y #4U3D #"" "U " "rG   rl   c                   (  ^  \ rS rSr% SrSr\\S'   \r	\
\S'    Sr\\
   \S'    \" \S9r\\
\4   \S'    \" \S9r\\
\4   \S	'    \r\
\S
'    Sr\
\S'    Sr\\S'    S\4U 4S jjr\" SSS9rS\\
   S\\\      4S jrS\
S\\   4S jrSrU =r$ )HuggingFaceBgeEmbeddings   a  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   ro    rn   Fr   r   c                 D  > [         T	U ]  " S0 UD6  SU;  aP  SnSn[        UUSU R                  R                   S3SU S3-   SU S	3-   SU R                  R                   S
3-   S9   SSKn/ SQnU Vs0 sH/  nXpR                  ;   d  M  XpR                  R                  U5      _M1     nnUR                  " U R                  4SU R                  0U R                  DSU0D6U l        SU R                  ;   a  [        U l        SU R                  ;   ak  [        SSSSU R                  R                   3S9  U R                   (       a  ["        R$                  " S5        U R                  R                  S5      U l        gg! [         a  n[        S5      UeSnAff = fs  snf )r    r   rr   r"   r#   r$   r%   r&   r'   r(   r)   r*   r   Nr,   )torch_dtypeattn_implementationprovider	file_nameexportr   r   z-zhrH   r   rs   rt   ru   rx   r-   )r.   r/   r   r0   r1   r2   r3   r   r|   r4   r   r   r    DEFAULT_QUERY_BGE_INSTRUCTION_ZHro   r   r   rz   r{   )
r5   r   r   r   r2   r6   extra_model_kwargskextra_model_kwargs_dictr0   s
            r7   r/   !HuggingFaceBgeEmbeddings.__init__9  s   "6"v%EG-dnn.E.E-FkR25'9PQRgYCDE dnn--..CDE	(
 (#
'%%% (A  $$Q''' 	  #

 ,??OO
**
 
 1	
 DOO#%ED"$"4"449:4>>;R;R:ST	 !!J "&!3!3!7!78K!LD 57  	N 	#
s$   )E? 5FF?
F	FFr9   r-   r:   r=   r>   c                     U Vs/ sH!  o R                   UR                  SS5      -   PM#     nnU R                  R                  " U4SU R                  0U R
                  D6nUR                  5       $ s  snf )r@   rB   r'   rH   )rn   rC   r   rN   r   r   rO   )r5   r=   trQ   s       r7   rR   (HuggingFaceBgeEmbeddings.embed_documentsw  sx     INN1''!))D#*>>N[[''
%)%7%7
;?;M;M

   ""	 Os   'A1rT   c                     UR                  SS5      nU R                  R                  " U R                  U-   4SU R                  0U R
                  D6nUR                  5       $ )rW   rB   r'   rH   )rC   r   rN   ro   r   r   rO   )r5   rT   r   s      r7   rZ   $HuggingFaceBgeEmbeddings.embed_query  se     ||D#&KK&&""T)
"00
   
	
 !!rG   )r   ro   r   ) r1   r]   r^   r_   r`   r   r   ra   DEFAULT_BGE_MODELr   rc   r   r   r   rd   r   r   r    DEFAULT_QUERY_BGE_INSTRUCTION_ENro   rn   r   re   r/   r   rf   r   rg   rR   rZ   rh   ri   rj   s   @r7   r   r      s    $L FC'J'"&L(3-&K#(#>L$sCx.>1$)$$?M4S>?R=s=1s4M4):M :Mx H2FL#T#Y #4U3D #" "U " "rG   r   z3langchain_huggingface.HuggingFaceEndpointEmbeddingsc                       \ rS rSr% Sr\\S'    Sr\\S'    Sr	\
\   \S'    0 r\\\4   \S'    \" S	S
S9r\S\4S j5       r\S\4S j5       r\S\4S j5       rS\\   S\\\      4S jrS\S\\   4S jrS
rg)!HuggingFaceInferenceAPIEmbeddingsi  zcEmbed 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_headersr9   r-   r:   r>   c                 @    U R                   =(       d    U R                  $ )N)r   _default_api_urlr5   s    r7   _api_url*HuggingFaceInferenceAPIEmbeddings._api_url  s    ||4t444rG   c                      SU R                    3$ )NzAhttps://api-inference.huggingface.co/pipeline/feature-extraction/)r   r   s    r7   r   2HuggingFaceInferenceAPIEmbeddings._default_api_url  s      "	
rG   c                 X    SSU R                   R                  5        30U R                  E$ )NAuthorizationzBearer )r   get_secret_valuer   r   s    r7   _headers*HuggingFaceInferenceAPIEmbeddings._headers  s6     wt||'D'D'F&GH
%%
 	
rG   r=   c                     [         R                  " U R                  U R                  USSS.S.S9nUR	                  5       $ )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   )r5   r=   responses      r7   rR   1HuggingFaceInferenceAPIEmbeddings.embed_documents  s>    0 ==MMMM.2F
 }}rG   rT   c                 ,    U R                  U/5      S   $ rV   rX   rY   s     r7   rZ   -HuggingFaceInferenceAPIEmbeddings.embed_query  r\   rG   )r1   r]   r^   r_   r`   r   ra   r   rc   r   r   r   r   r   rf   propertyr   r   rd   r   r   rg   rR   rZ   rh   r-   rG   r7   r   r     s    
 9>J>;!GXc]!K)+S#X+DH2FL5# 5 5 
# 
 
 
$ 
 
 T#Y  4U3D  D	/ 	/U 	/rG   r   )rz   typingr   r   r   r   r   langchain_core._apir   r   langchain_core.embeddingsr	   pydanticr
   r   r   r   rb   r   r   r   r   r   r   r   rl   r   r   r-   rG   r7   <module>r      s    , ,  ; 0 < <> 2 ' D B  @ ! $_   
D
g/Iz g/
g/T 
D
o"Iz o"
o"d 
D
T"y* T"
T"n 
L
P/	: P/
P/rG   