§
    æ˜ºhz.  ã                   óÚ   — d dl mZmZmZmZ d dlZd dlmZ d dlm	Z	m
Z
mZ dZdZdZdZd	Zd
ZdZ 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 )é    )ÚAnyÚDictÚListÚOptionalN)Ú
Embeddings)Ú	BaseModelÚExtraÚFieldz'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   ä¸ºè¿™ä¸ªå�¥å­�ç”Ÿæˆ�è¡¨ç¤ºä»¥ç”¨äºŽæ£€ç´¢ç›¸å…³æ–‡ç« ï¼šc                   óB  ‡ — e Zd ZU 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efˆ fd„Z G 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
            )
    ÚclientÚ
model_nameNÚcache_folder©Údefault_factoryÚmodel_kwargsÚencode_kwargsFÚmulti_processÚkwargsc                 óÒ   •—  t          ¦   «         j        di |¤Ž 	 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   NzrCould not import sentence_transformers python package. Please install it with `pip install sentence-transformers`.r   © )	ÚsuperÚ__init__Úsentence_transformersÚImportErrorÚSentenceTransformerr   r   r   r   ©Úselfr   r   ÚexcÚ	__class__s       €úr/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/langchain_community/embeddings/huggingface.pyr   zHuggingFaceEmbeddings.__init__5   s®   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð	Ø(Ð(Ð(Ð(Ð(øåð 	ð 	ð 	ÝðNñô ð ðøøøøð	øøøð @Ð+Ô?ØŒOð
ð 
Ø*.Ô*;ð
Ø?CÔ?Pð
ð 
ˆŒˆˆó   œ! ¡
A «;»A c                   ó    — e Zd ZdZej        ZdS )úHuggingFaceEmbeddings.Configú'Configuration for this pydantic object.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   ÚforbidÚextrar   ó    r"   ÚConfigr%   E   ó   € € € € € Ø5Ð5à”ˆˆˆr.   r/   ÚtextsÚreturnc                 óJ  — ddl }t          t          d„ |¦  «        ¦  «        }| j        rO| j                             ¦   «         }| j                             ||¦  «        }|j                             |¦  «         n | j        j	        |f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ú
ú ©Úreplace)Úxs    r"   ú<lambda>z7HuggingFaceEmbeddings.embed_documents.<locals>.<lambda>U   s   €  1§9¢9¨T°3Ñ#7Ô#7€ r.   )r   ÚlistÚmapr   r   Ústart_multi_process_poolÚencode_multi_processr   Ústop_multi_process_poolÚencoder   Útolist)r   r1   r   ÚpoolÚ
embeddingss        r"   Úembed_documentsz%HuggingFaceEmbeddings.embed_documentsJ   s¬   € ð 	%Ð$Ð$Ð$å•SÐ7Ð7¸Ñ?Ô?Ñ@Ô@ˆØÔð 	IØ”;×7Ò7Ñ9Ô9ˆDØœ×9Ò9¸%ÀÑFÔFˆJØ!Ô5×MÒMÈdÑSÔSÐSÐSà+˜œÔ+¨EÐHÐH°TÔ5GÐHÐHˆJà× Ò Ñ"Ô"Ð"r.   Útextc                 ó:   — |                       |g¦  «        d         S ©ú³Compute query embeddings using a HuggingFace transformer model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   ©rE   ©r   rF   s     r"   Úembed_queryz!HuggingFaceEmbeddings.embed_query_   ó   € ð ×#Ò# T FÑ+Ô+¨AÔ.Ð.r.   )r(   r)   r*   r+   r   Ú__annotations__ÚDEFAULT_MODEL_NAMEr   Ústrr   r   r
   Údictr   r   r   r   Úboolr   r/   r   ÚfloatrE   rL   Ú__classcell__©r!   s   @r"   r   r      sh  ø€ € € € € € ðð ð& €K€K�KØ(€J�Ð(Ð(Ñ(ØØ"&€L�(˜3”-Ð&Ð&Ñ&ðKà#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>Ø1Ø$) E¸$Ð$?Ñ$?Ô$?€M�4˜˜S˜”>Ð?Ð?Ñ?ØRØ€M�4ÐÐÑØ(ð
 ð 
ð 
ð 
ð 
ð 
ð 
ð ð ð ð ð ñ ô ð ð
# T¨#¤Yð #°4¸¸U¼Ô3Dð #ð #ð #ð #ð*	/ ð 	/¨¨U¬ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/r.   r   c                   óR  ‡ — e Zd ZU 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efˆ fd„Z G 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
            )
    r   r   Nr   r   r   r   Úembed_instructionÚquery_instructionr   c                 óÊ   •—  t          ¦   «         j        di |¤Ž 	 ddlm}  || j        fd| j        i| j        ¤Ž| _        dS # t          $ r}t          d¦  «        |‚d}~ww xY w)r   r   )Ú
INSTRUCTORr   z/Dependencies for InstructorEmbedding not found.Nr   )	r   r   ÚInstructorEmbeddingr[   r   r   r   r   r   )r   r   r[   Úer!   s       €r"   r   z&HuggingFaceInstructEmbeddings.__init__�   s¦   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð	XØ6Ð6Ð6Ð6Ð6Ð6à$˜*Ø”ðð Ø.2Ô.?ðØCGÔCTðð ˆDŒKˆKˆKøõ ð 	Xð 	Xð 	XÝÐOÑPÔPÐVWÐWøøøøð	Xøøøs   œ%A Á
A"ÁAÁA"c                   ó    — e Zd ZdZej        ZdS )ú$HuggingFaceInstructEmbeddings.Configr&   Nr'   r   r.   r"   r/   r_   ›   r0   r.   r/   r1   r2   c                 óx   ‡ — ˆ fd„|D ¦   «         } ‰ j         j        |fi ‰ j        ¤Ž}|                     ¦   «         S )zÆCompute 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   )rX   )Ú.0rF   r   s     €r"   ú
<listcomp>zAHuggingFaceInstructEmbeddings.embed_documents.<locals>.<listcomp>©   s!   ø€ ÐNÐNÐNÀ˜dÔ4°dÐ;ÐNÐNÐNr.   ©r   rA   r   rB   )r   r1   Úinstruction_pairsrD   s   `   r"   rE   z-HuggingFaceInstructEmbeddings.embed_documents    sR   ø€ ð OÐNÐNÐNÈÐNÑNÔNÐØ'�T”[Ô'Ð(9ÐPÐP¸TÔ=OÐPÐPˆ
Ø× Ò Ñ"Ô"Ð"r.   rF   c                 óz   — | j         |g} | j        j        |gfi | j        ¤Žd         }|                     ¦   «         S )z°Compute query embeddings using a HuggingFace instruct model.

        Args:
            text: The text to embed.

        Returns:
            Embeddings for the text.
        r   )rY   r   rA   r   rB   )r   rF   Úinstruction_pairÚ	embeddings       r"   rL   z)HuggingFaceInstructEmbeddings.embed_query­   sM   € ð !Ô2°DÐ9ÐØ&�D”KÔ&Ð(8Ð'9ÐPÐP¸TÔ=OÐPÐPÐQRÔSˆ	Ø×ÒÑ!Ô!Ð!r.   )r(   r)   r*   r+   r   rN   ÚDEFAULT_INSTRUCT_MODELr   rP   r   r   r
   rQ   r   r   r   ÚDEFAULT_EMBED_INSTRUCTIONrX   ÚDEFAULT_QUERY_INSTRUCTIONrY   r   r/   r   rS   rE   rL   rT   rU   s   @r"   rW   rW   k   s„  ø€ € € € € € ðð ð( €K€K�KØ,€J�Ð,Ð,Ñ,ØØ"&€L�(˜3”-Ð&Ð&Ñ&ðKà#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>Ø1Ø$) E¸$Ð$?Ñ$?Ô$?€M�4˜˜S˜”>Ð?Ð?Ñ?ØRØ6Ð�sÐ6Ð6Ñ6Ø5Ø6Ð�sÐ6Ð6Ñ6Ø1ð
X ð 
Xð 
Xð 
Xð 
Xð 
Xð 
Xðð ð ð ð ñ ô ð ð
# T¨#¤Yð #°4¸¸U¼Ô3Dð #ð #ð #ð #ð" ð "¨¨U¬ð "ð "ð "ð "ð "ð "ð "ð "r.   rW   c                   óB  ‡ — e Zd ZU 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
efˆ fd„Z G d„ d¦  «        Zdee         deee                  fd„Zdedee         fd„Zˆ xZS )ÚHuggingFaceBgeEmbeddingsa\  HuggingFace BGE sentence_transformers embedding models.

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

    Example:
        .. code-block:: python

            from langchain_community.embeddings import HuggingFaceBgeEmbeddings

            model_name = "BAAI/bge-large-en"
            model_kwargs = {'device': 'cpu'}
            encode_kwargs = {'normalize_embeddings': True}
            hf = HuggingFaceBgeEmbeddings(
                model_name=model_name,
                model_kwargs=model_kwargs,
                encode_kwargs=encode_kwargs
            )
    r   r   Nr   r   r   r   rY   r   c                 ó   •—  t          ¦   «         j        di |¤Ž 	 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S dS )r   r   NzrCould not import sentence_transformers python package. Please install it with `pip install sentence_transformers`.r   z-zhr   )r   r   r   r   r   r   r   r   r   Ú DEFAULT_QUERY_BGE_INSTRUCTION_ZHrY   r   s       €r"   r   z!HuggingFaceBgeEmbeddings.__init__Ü   sÏ   ø€ à�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"ð	Ø(Ð(Ð(Ð(Ð(øåð 	ð 	ð 	ÝðNñô ð ðøøøøð	øøøð @Ð+Ô?ØŒOð
ð 
Ø*.Ô*;ð
Ø?CÔ?Pð
ð 
ˆŒð �D”OÐ#Ð#Ý%EˆDÔ"Ð"Ð"ð $Ð#r#   c                   ó    — e Zd ZdZej        ZdS )úHuggingFaceBgeEmbeddings.Configr&   Nr'   r   r.   r"   r/   rq   î   r0   r.   r/   r1   r2   c                 ór   — d„ |D ¦   «         } | j         j        |fi | j        ¤Ž}|                     ¦   «         S )r4   c                 ó:   — g | ]}|                      d d¦  «        ‘ŒS )r6   r7   r8   )rb   Úts     r"   rc   z<HuggingFaceBgeEmbeddings.embed_documents.<locals>.<listcomp>ü   s&   € Ð5Ð5Ð5¨!�—’˜4 Ñ%Ô%Ð5Ð5Ð5r.   rd   )r   r1   rD   s      r"   rE   z(HuggingFaceBgeEmbeddings.embed_documentsó   sH   € ð 6Ð5¨uÐ5Ñ5Ô5ˆØ'�T”[Ô'¨ÐDÐD°Ô1CÐDÐDˆ
Ø× Ò Ñ"Ô"Ð"r.   rF   c                 ó–   — |                      dd¦  «        } | j        j        | j        |z   fi | j        ¤Ž}|                     ¦   «         S )rI   r6   r7   )r9   r   rA   rY   r   rB   )r   rF   rh   s      r"   rL   z$HuggingFaceBgeEmbeddings.embed_query   s\   € ð �|Š|˜D #Ñ&Ô&ˆØ&�D”KÔ&ØÔ" TÑ)ð
ð 
Ø-1Ô-?ð
ð 
ˆ	ð ×ÒÑ!Ô!Ð!r.   )r(   r)   r*   r+   r   rN   ÚDEFAULT_BGE_MODELr   rP   r   r   r
   rQ   r   r   r   Ú DEFAULT_QUERY_BGE_INSTRUCTION_ENrY   r   r/   r   rS   rE   rL   rT   rU   s   @r"   rm   rm   »   sp  ø€ € € € € € ðð ð& €K€K�KØ'€J�Ð'Ð'Ñ'ØØ"&€L�(˜3”-Ð&Ð&Ñ&ðKà#( 5¸Ð#>Ñ#>Ô#>€L�$�s˜C�x”.Ð>Ð>Ñ>Ø1Ø$) E¸$Ð$?Ñ$?Ô$?€M�4˜˜S˜”>Ð?Ð?Ñ?ØRØ=Ð�sÐ=Ð=Ñ=Ø1ðF ð Fð Fð Fð Fð Fð Fð$ð ð ð ð ñ ô ð ð
# T¨#¤Yð #°4¸¸U¼Ô3Dð #ð #ð #ð #ð" ð "¨¨U¬ð "ð "ð "ð "ð "ð "ð "ð "r.   rm   c                   óð   — e Zd ZU dZeed<   	 dZeed<   	 dZee         ed<   	 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_urlr2   c                 ó   — | j         p| j        S )N)r{   Ú_default_api_url©r   s    r"   Ú_api_urlz*HuggingFaceInferenceAPIEmbeddings._api_url  s   € àŒ|Ð4˜tÔ4Ð4r.   c                 ó   — d| j         › �S )NzAhttps://api-inference.huggingface.co/pipeline/feature-extraction/)r   r~   s    r"   r}   z2HuggingFaceInferenceAPIEmbeddings._default_api_url!  s   € ð"ð ”ð"ð "ð	
r.   c                 ó   — dd| j         › �iS )NÚAuthorizationzBearer )rz   r~   s    r"   Ú_headersz*HuggingFaceInferenceAPIEmbeddings._headers*  s   € àÐ!9¨4¬<Ð!9Ð!9Ð:Ð:r.   r1   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Š   )r   r1   Úresponses      r"   rE   z1HuggingFaceInferenceAPIEmbeddings.embed_documents.  sL   € õ, ”=ØŒMØ”MàØ.2ÀÐFÐFðð ð
ñ 
ô 
ˆð �}Š}‰ŒÐr.   rF   c                 ó:   — |                       |g¦  «        d         S rH   rJ   rK   s     r"   rL   z-HuggingFaceInferenceAPIEmbeddings.embed_queryN  rM   r.   )r(   r)   r*   r+   rP   rN   r   r{   r   Úpropertyr   r}   rQ   rƒ   r   rS   rE   rL   r   r.   r"   ry   ry     s!  € € € € € € ðð ð
 €L€L�LØ9Ø>€J�Ð>Ð>Ñ>Ø;Ø!€GˆX�cŒ]Ð!Ð!Ñ!ØKàð5˜#ð 5ð 5ð 5ñ „Xð5ð ð
 #ð 
ð 
ð 
ñ „Xð
ð ð;˜$ð ;ð ;ð ;ñ „Xð;ð T¨#¤Yð °4¸¸U¼Ô3Dð ð ð ð ð@	/ ð 	/¨¨U¬ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/r.   ry   )Útypingr   r   r   r   r‹   Úlangchain_core.embeddingsr   Úlangchain_core.pydantic_v1r   r	   r
   rO   ri   rv   rj   rk   rw   ro   r   rW   rm   ry   r   r.   r"   ú<module>r“      su  ðØ ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à €€€Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >à>Ð Ø2Ð Ø'Ð ØDÐ àBð ð @ð !ð $_Ð  ðT/ð T/ð T/ð T/ð T/˜I zñ T/ô T/ð T/ðnM"ð M"ð M"ð M"ð M" I¨zñ M"ô M"ð M"ð`R"ð R"ð R"ð R"ð R"˜y¨*ñ R"ô R"ð R"ðjG/ð G/ð G/ð G/ð G/¨	°:ñ G/ô G/ð G/ð G/ð G/r.   