Ë
    µŒjÚ  ã                   óP   — 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)é    )ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictc                   ó2  ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddedededee   dee   d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 )ÚQuantizedBiEncoderEmbeddingsaK  Quantized bi-encoders embedding models.

    Please ensure that you have installed optimum-intel and ipex.

    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 {})

    Example:

    from langchain_community.embeddings import QuantizedBiEncoderEmbeddings

    model_name = "Intel/bge-small-en-v1.5-rag-int8-static"
    encode_kwargs = {'normalize_embeddings': True}
    hf = QuantizedBiEncoderEmbeddings(
        model_name,
        encode_kwargs=encode_kwargs,
        query_instruction="Represent this sentence for searching relevant passages: "
    )
    NÚ
model_nameÚmax_seq_lenÚpooling_strategyÚquery_instructionÚdocument_instructionÚpaddingÚmodel_kwargsÚencode_kwargsÚkwargsÚreturnc	                 óH  •— t        ‰
| �  di |	¤Ž || _        || _        || _        || _        |xs i | _        |xs i | _        | j                  j                  dd«      | _	        | j                  j                  dd«      | _
        || _        || _        | j                  «        y )NÚnormalize_embeddingsFÚ
batch_sizeé    © )ÚsuperÚ__init__Úmodel_name_or_pathr   Úpoolingr   r   r   ÚgetÚ	normalizer   r   r   Ú
load_model)Úselfr   r   r   r   r   r   r   r   r   Ú	__class__s             €úv/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/optimum_intel.pyr   z%QuantizedBiEncoderEmbeddings.__init__)   sœ   ø€ ô 	‰ÑÑ"˜6Ò"Ø",ˆÔØ&ˆÔØ'ˆŒØˆŒØ*Ò0¨bˆÔØ(Ò.¨BˆÔà×+Ñ+×/Ñ/Ð0FÈÓNˆŒØ×,Ñ,×0Ñ0°¸rÓBˆŒà!2ˆÔØ$8ˆÔ!à�‰Õó    c                 ó‚  — 	 ddl m} 	 ddlm}  |j
                  | j                  fi | j                  ¤Ž| _        |j                  | j                  ¬«      | _
        | j                  j                  «        y # t        $ r}t        d«      |‚d }~ww xY w# t        $ r!}t        d| j                  › d|› d�«      ‚d }~ww xY w)	Nr   )ÚAutoTokenizerzQUnable to import transformers, please install with `pip install -U transformers`.)Ú	IPEXModelz
Failed to load model z, due to the following error:
a¦  
Please ensure that you have installed optimum-intel and ipex correctly,using:

pip install optimum[neural-compressor]
pip install intel_extension_for_pytorch

For more information, please visit:
* Install optimum-intel as shown here: https://github.com/huggingface/optimum-intel.
* Install IPEX as shown here: https://intel.github.io/intel-extension-for-pytorch/index.html#installation?platform=cpu&version=v2.2.0%2Bcpu.
)Úpretrained_model_name_or_path)Útransformersr'   ÚImportErrorÚoptimum.intelr(   Úfrom_pretrainedr   r   Útransformer_modelÚ	ExceptionÚtransformer_tokenizerÚeval)r"   r'   Úer(   s       r$   r!   z'QuantizedBiEncoderEmbeddings.load_modelE   sâ   € ð	Ý2ð	Ý/à%> Y×%>Ñ%>Ø×'Ñ'ñ&Ø+/×+<Ñ+<ñ&ˆDÔ"ð$ &3×%BÑ%BØ*.×*AÑ*Að &Có &
ˆÔ"ð 	×Ñ×#Ñ#Õ%øô; ò 	Üð1óð ðûð	ûô ò 	ÜðØ×-Ñ-Ð.ð /Ø€ð 	ðóð ûð	ús.   ‚A7 ‰2B Á7	BÂ BÂBÂ	B>ÂB9Â9B>Úallowr   )ÚextraÚprotected_namespacesÚinputsc                 óÄ  — 	 dd l }|j                  «       5   | j                  d
i |¤Ž}| j                  dk(  r| j                  ||d   «      }n,| j                  dk(  r| j                  |«      }nt        d«      ‚| j                  r(|j                  j                  j                  |dd¬	«      }|cd d d «       S # t        $ r}t        d«      |‚d }~ww xY w# 1 sw Y   y xY w)Nr   úCUnable to import torch, please install with `pip install -U torch`.ÚmeanÚattention_maskÚclszpooling method no supportedé   é   )ÚpÚdimr   )Útorchr+   Úinference_moder.   r   Ú_mean_poolingÚ_cls_poolingÚ
ValueErrorr    ÚnnÚ
functional)r"   r6   r@   r2   ÚoutputsÚembs         r$   Ú_embedz#QuantizedBiEncoderEmbeddings._embedl   sÚ   € ð	Ûð
 ×!Ñ!Õ#Ø,�d×,Ñ,Ñ6¨vÑ6ˆGØ�|‰|˜vÒ%Ø×(Ñ(¨°&Ð9IÑ2JÓK‘Ø—‘ Ò&Ø×'Ñ'¨Ó0‘ä Ð!>Ó?Ð?à�~Š~Ø—h‘h×)Ñ)×3Ñ3°C¸1À!Ð3ÓD�Ø÷ $Ñ#øô	 ò 	ÜØUóàðûð	ú÷ $Ð#ús#   ‚B9 –BCÂ9	CÃCÃCÃCrG   c                 óJ   — t        | t        «      r| d   }n| d   }|d d …df   S )NÚlast_hidden_stater   )Ú
isinstanceÚdict)rG   Útoken_embeddingss     r$   rC   z)QuantizedBiEncoderEmbeddings._cls_pooling€   s1   € ä�gœtÔ$Ø&Ð':Ñ;Ñà& q™zÐØ¢ 1 Ñ%Ð%r%   r:   c                 ól  — 	 dd l }t        | t        «      r| d   }n| d   }|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   r8   rK   éÿÿÿÿr=   g•Ö&è.>)Úmin)
r@   r+   rL   rM   Ú	unsqueezeÚexpandÚsizeÚfloatÚsumÚclamp)rG   r:   r@   r2   rN   Úinput_mask_expandedÚsum_embeddingsÚsum_masks           r$   rB   z*QuantizedBiEncoderEmbeddings._mean_poolingˆ   sÆ   € ð	Ûô
 �gœtÔ$Ø&Ð':Ñ;Ñð  ' q™zÐà×$Ñ$ RÓ(×/Ñ/Ð0@×0EÑ0EÓ0GÓH×NÑNÓPð 	ð Ÿ™Ð#3Ð6IÑ#IÈ1ÓMˆØ—;‘;Ð2×6Ñ6°qÓ9¸t�;ÓDˆØ Ñ(Ð(øô ò 	ÜØUóàðûð	ús   ‚B Â	B3Â"B.Â.B3Útextsc                 ó”   — | j                  || j                  d| j                  d¬«      }| j                  |«      j	                  «       S )NTÚpt)Ú
max_lengthÚ
truncationr   Úreturn_tensors)r0   r   r   rI   Útolist)r"   r[   r6   s      r$   Ú_embed_textz(QuantizedBiEncoderEmbeddings._embed_textœ   sJ   € Ø×+Ñ+ØØ×'Ñ'ØØ—L‘LØð ,ó 
ˆð �{‰{˜6Ó"×)Ñ)Ó+Ð+r%   c                 ó
  — 	 ddl }	 ddlm} |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
¬«      D ]  }
|	| j                  |
«      z  }	Œ |	S # t        $ r}t        d«      |‚d}~ww xY w# 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`.)ÚtqdmzAUnable to import tqdm, please install with `pip install -U tqdm`.r[   )ÚcolumnsÚindexÚbatch_indexÚBatches)Údesc)Úpandasr+   rd   r   Ú	DataFrameÚreset_indexr   ÚlistÚgroupbyÚapplyrb   )r"   r[   Úpdr2   rd   ÚdÚdocsÚtext_list_dfÚbatchesÚvectorsÚbatchs              r$   Úembed_documentsz,QuantizedBiEncoderEmbeddings.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ˆàˆÙ˜'¨	×2ˆEØ�t×'Ñ'¨Ó.Ñ.‰Gð 3àˆøô7 ò 	ÜØWóàðûð	ûô ò 	ÜØSóàðûð	üò
s3   ‚C ‡C# ‘$D Ã	C ÃCÃC Ã#	C=Ã,C8Ã8C=Útextc                 ób   — | j                   r| j                   |z   }| j                  |g«      d   S )Nr   )r   rb   )r"   rx   s     r$   Úembed_queryz(QuantizedBiEncoderEmbeddings.embed_queryÍ   s3   € Ø×!Ò!Ø×)Ñ)¨DÑ0ˆDØ×Ñ  Ó'¨Ñ*Ð*r%   )i   r9   NNTNN)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚintr   Úboolr   r   r   r!   r	   Úmodel_configrI   ÚstaticmethodrC   rB   r   rU   rb   rw   rz   Ú__classcell__)r#   s   @r$   r   r      se  ø„ ñðH Ø &Ø+/Ø.2ØØ'+Ø(,ñàðð ðð ð	ð
 $ C™=ðð ' s™mðð ðð ˜t‘nðð   ‘~ðð ðð 
õó8 &ñD ØØô€Lð
˜Sð  Só ð( ð&˜cð & cò &ó ð&ð ð)˜sð )°Cð )¸Cò )ó ð)ð&,  c¡ð ,¨t°D¸±KÑ/@ó ,ð% T¨#¡Yð %°4¸¸U¹Ñ3Dó %ðN+ ð +¨¨U©÷ +r%   r   N)Útypingr   r   r   r   Úlangchain_core.embeddingsr   Úpydanticr   r	   r   r   r%   r$   Ú<module>rˆ      s!   ðß ,Ó ,å 0ß *ôI+ 9¨jõ I+r%   