Ë
    µŒjÓ  ã                   ó`   — d dl Zd dlZd dlmZmZmZmZ d dlm	Z	 d dl
mZmZ  G d„ dee	«      Zy)é    N)ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictc                   ó@  ‡ — e Zd ZdZdddddddddœded	ed
edee   dee   dedee   dee   dee   de	ddfˆ fd„Z
d#d„Z edd¬«      Zde	de	fd„Zede	de	fd„«       Zede	de	de	fd„«       Zdee   deee      fd„Zdee   deee      fd „Zd!edee   fd"„Zˆ xZS )$ÚQuantizedBgeEmbeddingsai  Leverage Itrex runtime to unlock the performance of compressed NLP models.

    Please ensure that you have installed intel-extension-for-transformers.

    Input:
        model_name: str = Model name.
        max_seq_len: int = The maximum sequence length for tokenization. (default 512)
        pooling_strategy: str =
            "mean" or "cls", pooling strategy for the final layer. (default "mean")
        query_instruction: Optional[str] =
            An instruction to add to the query before embedding. (default None)
        document_instruction: Optional[str] =
            An instruction to add to each document before embedding. (default None)
        padding: Optional[bool] =
            Whether to add padding during tokenization or not. (default True)
        model_kwargs: Optional[Dict] =
            Parameters to add to the model during initialization. (default {})
        encode_kwargs: Optional[Dict] =
            Parameters to add during the embedding forward pass. (default {})
        onnx_file_name: Optional[str] =
            File name of onnx optimized model which is exported by itrex.
            (default "int8-model.onnx")

    Example:
        .. code-block:: python

            from langchain_community.embeddings import QuantizedBgeEmbeddings

            model_name = "Intel/bge-small-en-v1.5-sts-int8-static-inc"
            encode_kwargs = {'normalize_embeddings': True}
            hf = QuantizedBgeEmbeddings(
                model_name,
                encode_kwargs=encode_kwargs,
                query_instruction="Represent this sentence for searching relevant passages: "
            )
    i   ÚmeanNTzint8-model.onnx)Úmax_seq_lenÚpooling_strategyÚquery_instructionÚdocument_instructionÚpaddingÚmodel_kwargsÚencode_kwargsÚonnx_file_nameÚ
model_namer   r   r   r   r   r   r   r   ÚkwargsÚreturnc                óR  •— t        ‰| �  di |
¤Ž t        j                  j	                  d«      €t        d«      ‚t        j                  j	                  d«      €t        d«      ‚t        j                  j	                  d«      €t        d«      ‚|| _        || _        || _        || _	        |xs i | _
        |xs i | _        | j                  j                  dd«      | _        | j                  j                  d	d
«      | _        || _        || _        |	| _        | j%                  «        y )NÚ intel_extension_for_transformersz‹Could not import intel_extension_for_transformers python package. Please install it with `pip install -U intel-extension-for-transformers`.ÚtorchzUCould not import torch python package. Please install it with `pip install -U torch`.ÚonnxzSCould not import onnx python package. Please install it with `pip install -U onnx`.Únormalize_embeddingsFÚ
batch_sizeé    © )ÚsuperÚ__init__Ú	importlibÚutilÚ	find_specÚImportErrorÚmodel_name_or_pathr   Úpoolingr   r   r   ÚgetÚ	normalizer   r   r   r   Ú
load_model)Úselfr   r   r   r   r   r   r   r   r   r   Ú	__class__s              €ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/itrex.pyr!   zQuantizedBgeEmbeddings.__init__/   s%  ø€ ô 	‰ÑÑ"˜6Ò"ô �>‰>×#Ñ#Ð$FÓGÐOÜðEóð ô �>‰>×#Ñ# GÓ,Ð4ÜðAóð ô �>‰>×#Ñ# FÓ+Ð3Üð@óð ð
 #-ˆÔØ&ˆÔØ'ˆŒØˆŒØ*Ò0¨bˆÔØ(Ò.¨BˆÔà×+Ñ+×/Ñ/Ð0FÈÓNˆŒØ×,Ñ,×0Ñ0°¸rÓBˆŒà!2ˆÔØ$8ˆÔ!Ø,ˆÔà�‰Õó    c                 óÒ  — ddl m} ddlm} ddlm}m} |j                  | j                  «      j                  | _	        |j                  | j                  «      | _
        t        j                  j                  | j                  | j                  «      }t        j                  j                  |«      s || j                  | j                  ¬«      }|j                  |d¬«      | _        y )Nr   )Úhf_hub_download)Ú	AutoModel)Ú
AutoConfigÚAutoTokenizer)ÚfilenameT)Úuse_embedding_runtime)Úhuggingface_hubr0   Ú-intel_extension_for_transformers.transformersr1   Útransformersr2   r3   Úfrom_pretrainedr&   Úhidden_sizeÚtransformer_tokenizerÚosÚpathÚjoinr   ÚexistsÚtransformer_model)r+   r0   r1   r2   r3   Úonnx_model_paths         r-   r*   z!QuantizedBgeEmbeddings.load_modele   s¹   € Ý3ÝKß:à%×5Ñ5Ø×#Ñ#ó
ç
‰+ð 	Ôð &3×%BÑ%BØ×#Ñ#ó&
ˆÔ"ô Ÿ'™'Ÿ,™, t×'>Ñ'>À×@SÑ@SÓTˆÜ�w‰w�~‰~˜oÔ.Ù-Ø×'Ñ'°$×2EÑ2EôˆOð "+×!:Ñ!:Ø°4ð ";ó "
ˆÕr.   Úallowr   )ÚextraÚprotected_namespacesÚinputsc                 óŠ  — dd l }|j                  «       D �cg c]  }|‘Œ }}| j                  j                  |«      }d|v r|d   }n!|j                  «       D �cg c]  }|‘Œ c}d   }|j	                  |«      j                  |d   j                  d   |d   j                  d   | j                  «      }| j                  dk(  r| j                  ||d   «      }n,| j                  dk(  r| j                  |«      }nt        d«      ‚| j                  r(|j                  j                  j                  |d	d¬
«      }|S c c}w c c}w )Nr   zlast_hidden_state:0Ú	input_idsé   r   Úattention_maskÚclszpooling method no supportedé   )ÚpÚdim)r   Úvaluesr@   ÚgenerateÚtensorÚreshapeÚshaper:   r'   Ú_mean_poolingÚ_cls_poolingÚ
ValueErrorr)   ÚnnÚ
functional)	r+   rE   r   ÚvalueÚengine_inputÚoutputsÚlast_hidden_stateÚoutÚembs	            r-   Ú_embedzQuantizedBgeEmbeddings._embed~   s<  € Ûà+1¯=©=¬?Ó;©? %š¨?ˆÐ;Ø×(Ñ(×1Ñ1°,Ó?ˆØ  GÑ+Ø 'Ð(=Ñ >Ñà07·±Ô0@Ó AÑ0@¨¢Ð0@Ñ AÀ!Ñ DÐØ!ŸL™LÐ):Ó;×CÑCØ�;Ñ×%Ñ% aÑ(¨&°Ñ*=×*CÑ*CÀAÑ*FÈ×HXÑHXó
Ðð �<‰<˜6Ò!Ø×$Ñ$Ð%6¸Ð?OÑ8PÓQ‰CØ�\‰\˜UÒ"Ø×#Ñ#Ð$5Ó6‰CäÐ:Ó;Ð;à�>Š>Ø—(‘(×%Ñ%×/Ñ/°°q¸aÐ/Ó@ˆCØˆ
ùò% <ùò
 !Bs   —	D;Á	E r[   c                 ó   — | d d …df   S ©Nr   r   )r[   s    r-   rT   z#QuantizedBgeEmbeddings._cls_pooling•   s   € à ¢ A Ñ&Ð&r.   rI   c                 ó6  — 	 dd l }|j                  d«      j                  | j	                  «       «      j                  «       }|j                  | |z  d«      }|j                  |j                  d«      d¬«      }||z  S # t        $ r}t        d«      |‚d }~ww xY w)Nr   zCUnable to import torch, please install with `pip install -U torch`.éÿÿÿÿrH   g•Ö&è.>)Úmin)r   r%   Ú	unsqueezeÚexpandÚsizeÚfloatÚsumÚclamp)r[   rI   r   ÚeÚinput_mask_expandedÚsum_embeddingsÚsum_masks          r-   rS   z$QuantizedBgeEmbeddings._mean_pooling™   s¤   € ð	Ûð ×$Ñ$ RÓ(×/Ñ/Ð0A×0FÑ0FÓ0HÓI×OÑOÓQð 	ð Ÿ™Ð#4Ð7JÑ#JÈAÓNˆØ—;‘;Ð2×6Ñ6°qÓ9¸t�;ÓDˆØ Ñ(Ð(øô ò 	ÜØUóàðûð	ús   ‚A> Á>	BÂBÂBÚtextsc                 ó”   — | j                  || j                  d| j                  d¬«      }| j                  |«      j	                  «       S )NTÚpt)Ú
max_lengthÚ
truncationr   Úreturn_tensors)r;   r   r   r^   Útolist)r+   rn   rE   s      r-   Ú_embed_textz"QuantizedBgeEmbeddings._embed_text¨   sJ   € Ø×+Ñ+ØØ×'Ñ'ØØ—L‘LØð ,ó 
ˆð �{‰{˜6Ó"×)Ñ)Ó+Ð+r.   c                 ó²  — 	 ddl }|D �cg c]  }| j                  r| j                  |z   n|‘Œ! }}|j                  |dg¬«      j	                  «       }|d   | j
                  z  |d<   t        |j                  dg«      d   j                  t        «      «      }g }|D ]  }	|| j                  |	«      z  }Œ |S # t        $ r}t        d«      |‚d}~ww xY wc c}w )zñEmbed a list of text documents using the Optimized Embedder model.

        Input:
            texts: List[str] = List of text documents to embed.
        Output:
            List[List[float]] = The embeddings of each text document.
        r   NzEUnable to import pandas, please install with `pip install -U pandas`.rn   )ÚcolumnsÚindexÚbatch_index)
Úpandasr%   r   Ú	DataFrameÚreset_indexr   ÚlistÚgroupbyÚapplyru   )
r+   rn   Úpdrj   ÚdÚdocsÚtext_list_dfÚbatchesÚvectorsÚbatchs
             r-   Úembed_documentsz&QuantizedBgeEmbeddings.embed_documents²   sø   € ð	Ûñ ó
á�ð .2×-FÒ-FˆD×%Ñ%¨Ò)ÈAÑMØð 	ð 
ð —|‘| D°7°)�|Ó<×HÑHÓJˆð '3°7Ñ&;¸t¿¹Ñ&Nˆ�]Ñ#ô �|×+Ñ+¨]¨OÓ<¸WÑE×KÑKÌDÓQÓRˆàˆÛˆEØ�t×'Ñ'¨Ó.Ñ.‰Gð àˆøô+ ò 	ÜØWóàðûð	üò
s   ‚B7 Š$CÂ7	CÃ CÃCÚtextc                 ób   — | j                   r| j                   |z   }| j                  |g«      d   S r`   )r   ru   )r+   rˆ   s     r-   Úembed_queryz"QuantizedBgeEmbeddings.embed_queryÓ   s3   € Ø×!Ò!Ø×)Ñ)¨DÑ0ˆDØ×Ñ  Ó'¨Ñ*Ð*r.   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚintr   Úboolr   r   r!   r*   r	   Úmodel_configr^   ÚstaticmethodrT   rS   r   rg   ru   r‡   rŠ   Ú__classcell__)r,   s   @r-   r   r   	   sv  ø„ ñ#ðR Ø &Ø+/Ø.2ØØ'+Ø(,Ø(9ò4àð4ð ð	4ð
 ð4ð $ C™=ð4ð ' s™mð4ð ð4ð ˜t‘nð4ð   ‘~ð4ð ! ™ð4ð ð4ð 
õ4ól
ñ( ØØô€Lð
˜Sð  Só ð. ð'¨ð '°ò 'ó ð'ð ð)¨ð )¸cð )Àcò )ó ð)ð,  c¡ð ,¨t°D¸±KÑ/@ó ,ð T¨#¡Yð °4¸¸U¹Ñ3Dó ðB+ ð +¨¨U©÷ +r.   r   )Úimportlib.utilr"   r<   Útypingr   r   r   r   Úlangchain_core.embeddingsr   Úpydanticr   r	   r   r   r.   r-   Ú<module>r™      s'   ðÛ Û 	ß ,Ó ,å 0ß *ôM+˜Y¨
õ M+r.   