§
    šŠtjÚ  ã                   óX   — 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
dS )é    )ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictc                   ó†  ‡ — 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: "
    )
    é   ÚmeanNTÚ
model_nameÚmax_seq_lenÚpooling_strategyÚquery_instructionÚdocument_instructionÚpaddingÚmodel_kwargsÚencode_kwargsÚkwargsÚreturnc	                 óZ  •—  t          ¦   «         j        di |	¤Ž || _        || _        || _        || _        |pi | _        |pi | _        | j                             dd¦  «        | _	        | j                             dd¦  «        | _
        || _        || _        |                      ¦   «          d S )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             €új/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/optimum_intel.pyr   z%QuantizedBiEncoderEmbeddings.__init__)   sµ   ø€ ð 	�‰ŒÔÐ"Ð"˜6Ð"Ð"Ð"Ø",ˆÔØ&ˆÔØ'ˆŒØˆŒØ*Ð0¨bˆÔØ(Ð.¨BˆÔàÔ+×/Ò/Ð0FÈÑNÔNˆŒØÔ,×0Ò0°¸rÑBÔBˆŒà!2ˆÔØ$8ˆÔ!à�ŠÑÔÐÐÐó    c                 óp  — 	 ddl m} n"# t          $ r}t          d¦  «        |‚d }~ww xY w	 ddlm}  |j        | j        fi | j        ¤Ž| _        n-# t          $ r }t          d| j        › d|› d�¦  «        ‚d }~ww xY w|                     | j        ¬¦  «        | _
        | j                             ¦   «          d S )	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Ð2Ð2Ð2Ð2Ð2Ð2øÝð 	ð 	ð 	Ýð1ñô ð ðøøøøð	øøøð
	Ø/Ð/Ð/Ð/Ð/Ð/à%> YÔ%>ØÔ'ð&ð &Ø+/Ô+<ð&ð &ˆDÔ"Ð"øõ ð 	ð 	ð 	ÝðØÔ-ðð àðð ð ñô ð øøøøð	øøøð &3×%BÒ%BØ*.Ô*Að &Cñ &
ô &
ˆÔ"ð 	Ô×#Ò#Ñ%Ô%Ð%Ð%Ð%s'   ‚	 ‰
(“#£(¬#A Á
A:ÁA5Á5A:Úallowr   )ÚextraÚprotected_namespacesÚinputsc                 óÎ  — 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY w|                     ¦   «         5   | j        d
i |¤Ž}| j        dk    r|                      ||d         ¦  «        }n0| j        dk    r|                      |¦  «        }nt          d¦  «        ‚| j        r"|j	        j
                             |dd¬	¦  «        }|cd d d ¦  «         S # 1 swxY w Y   d S )Nr   úCUnable to import torch, please install with `pip install -U torch`.r   Úattention_maskÚclszpooling method no supportedé   é   )ÚpÚdimr   )Útorchr-   Úinference_moder0   r    Ú_mean_poolingÚ_cls_poolingÚ
ValueErrorr"   ÚnnÚ
functional)r$   r8   rA   r4   ÚoutputsÚembs         r&   Ú_embedz#QuantizedBiEncoderEmbeddings._embedl   sa  € ð	ØˆLˆLˆLˆLøÝð 	ð 	ð 	ÝØUñô àðøøøøð	øøøð ×!Ò!Ñ#Ô#ð 	ð 	Ø,�dÔ,Ð6Ð6¨vÐ6Ð6ˆGØŒ|˜vÒ%Ð%Ø×(Ò(¨°&Ð9IÔ2JÑKÔK��Ø” Ò&Ð&Ø×'Ò'¨Ñ0Ô0��å Ð!>Ñ?Ô?Ð?àŒ~ð EØ”hÔ)×3Ò3°C¸1À!Ð3ÑDÔD�Øð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s"   ‚ ‡
&‘!¡&½BCÃCÃ!CrH   c                 óf   — t          | t          ¦  «        r	| d         }n| d         }|d d …df         S )NÚlast_hidden_stater   )Ú
isinstanceÚdict)rH   Útoken_embeddingss     r&   rD   z)QuantizedBiEncoderEmbeddings._cls_pooling€   s@   € å�g�tÑ$Ô$ð 	*Ø&Ð':Ô;ÐÐà& qœzÐØ    1 Ô%Ð%r'   r;   c                 óÆ  — 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY wt          | t          ¦  «        r	| d         }n| d         }|                     d¦  «                             |                     ¦   «         ¦  «                             ¦   «         }|                     ||z  d¦  «        }| 	                    |                     d¦  «        d¬¦  «        }||z  S )Nr   r:   rL   éÿÿÿÿr>   g•Ö&è.>)Úmin)
rA   r-   rM   rN   Ú	unsqueezeÚexpandÚsizeÚfloatÚsumÚclamp)rH   r;   rA   r4   rO   Úinput_mask_expandedÚsum_embeddingsÚsum_masks           r&   rC   z*QuantizedBiEncoderEmbeddings._mean_poolingˆ   s   € ð	ØˆLˆLˆLˆLøÝð 	ð 	ð 	ÝØUñô àðøøøøð	øøøõ �g�tÑ$Ô$ð 	*Ø&Ð':Ô;ÐÐð  ' qœzÐà×$Ò$ RÑ(Ô(×/Ò/Ð0@×0EÒ0EÑ0GÔ0GÑHÔH×NÒNÑPÔPð 	ð ŸšÐ#3Ð6IÑ#IÈ1ÑMÔMˆØ—;’;Ð2×6Ò6°qÑ9Ô9¸t�;ÑDÔDˆØ Ñ(Ð(s   ‚ ‡
&‘!¡&Útextsc                 ó˜   — |                       || j        d| j        d¬¦  «        }|                      |¦  «                             ¦   «         S )NTÚpt)Ú
max_lengthÚ
truncationr   Úreturn_tensors)r2   r   r   rJ   Útolist)r$   r\   r8   s      r&   Ú_embed_textz(QuantizedBiEncoderEmbeddings._embed_textœ   sP   € Ø×+Ò+ØØÔ'ØØ”LØð ,ñ 
ô 
ˆð �{Š{˜6Ñ"Ô"×)Ò)Ñ+Ô+Ð+r'   c                 ó  ‡ — 	 ddl }n"# t          $ r}t          d¦  «        |‚d}~ww xY w	 ddlm} n"# t          $ r}t          d¦  «        |‚d}~ww xY wˆ fd„|D ¦   «         }|                     |dg¬¦  «                             ¦   «         }|d	         ‰ j        z  |d
<   t          |                     d
g¦  «        d                              t          ¦  «        ¦  «        }g } ||d¬¦  «        D ]}	|‰  	                    |	¦  «        z  }Œ|S )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`.c                 ó6   •— g | ]}‰j         r
‰j         |z   n|‘ŒS r   )r   )Ú.0Údr$   s     €r&   ú
<listcomp>z@QuantizedBiEncoderEmbeddings.embed_documents.<locals>.<listcomp>º   s>   ø€ ð 
ð 
ð 
àð .2Ô-FÐMˆDÔ%¨Ñ)Ð)ÈAð
ð 
ð 
r'   r\   )ÚcolumnsÚindexÚbatch_indexÚBatches)Údesc)
Úpandasr-   re   Ú	DataFrameÚreset_indexr   ÚlistÚgroupbyÚapplyrc   )
r$   r\   Úpdr4   re   ÚdocsÚtext_list_dfÚbatchesÚvectorsÚbatchs
   `         r&   Úembed_documentsz,QuantizedBiEncoderEmbeddings.embed_documents¦   sx  ø€ ð	ØÐÐÐÐøÝð 	ð 	ð 	ÝØWñô àðøøøøð	øøøð	Ø!Ð!Ð!Ð!Ð!Ð!Ð!øÝð 	ð 	ð 	ÝØSñô àðøøøøð	øøøð
ð 
ð 
ð 
àð
ñ 
ô 
ˆð —|’| D°7°)�|Ñ<Ô<×HÒHÑJÔJˆð '3°7Ô&;¸t¼Ñ&Nˆ�]Ñ#õ �|×+Ò+¨]¨OÑ<Ô<¸WÔE×KÒKÍDÑQÔQÑRÔRˆàˆØ�T˜'¨	Ð2Ñ2Ô2ð 	/ð 	/ˆEØ�t×'Ò'¨Ñ.Ô.Ñ.ˆGˆGØˆs$   ƒ ˆ
'’"¢'«2 ²
A¼AÁAÚtextc                 ó\   — | j         r
| j         |z   }|                      |g¦  «        d         S )Nr   )r   rc   )r$   r|   s     r&   Úembed_queryz(QuantizedBiEncoderEmbeddings.embed_queryÍ   s5   € ØÔ!ð 	1ØÔ)¨DÑ0ˆDØ×Ò  Ñ'Ô'¨Ô*Ð*r'   )r   r   NNTNN)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚintr   Úboolr   r   r   r#   r	   Úmodel_configrJ   ÚstaticmethodrD   rC   r   rV   rc   r{   r~   Ú__classcell__)r%   s   @r&   r   r      s  ø€ € € € € ðð ð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Ð 0Ð 0Ð 0Ð 0Ð 0Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *ðI+ð I+ð I+ð I+ð I+ 9¨jñ I+ô I+ð I+ð I+ð I+r'   