
    dh                     `    S SK rS SKrS SKJrJrJrJr  S SKJ	r	  S SK
JrJr   " S S\\	5      rg)    N)AnyDictListOptional)
Embeddings)	BaseModel
ConfigDictc                   V  ^  \ rS rSrSrSSSSSSSSS.S	\S
\S\S\\   S\\   S\S\\	   S\\	   S\\   S\
SS4U 4S jjjrS%S jr\" SSS9rS\
S\
4S jr\S\
S\
4S j5       r\S\
S\
S\
4S j5       rS\\   S\\\      4S  jrS\\   S\\\      4S! jrS"\S\\   4S# jrS$rU =r$ )&QuantizedBgeEmbeddings	   a  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                `  > [         TU ]  " S0 U
D6  [        R                  R	                  S5      c  [        S5      e[        R                  R	                  S5      c  [        S5      e[        R                  R	                  S5      c  [        S5      eXl        X l        X0l        X`l	        U=(       d    0 U l
        U=(       d    0 U l        U R                  R                  SS5      U l        U R                  R                  S	S
5      U l        X@l        XPl        Xl        U R%                  5         g )N intel_extension_for_transformerszCould 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              \/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/itrex.pyr"   QuantizedBgeEmbeddings.__init__/   s    	"6" >>##$FGOE  >>##G,4A  >>##F+3@ 
 #-&'*0b(.B++//0FN,,00rB!2$8!,    c                    SSK Jn  SSKJn  SSKJnJn  UR                  U R                  5      R                  U l	        UR                  U R                  5      U l
        [        R                  R                  U R                  U R                  5      n[        R                  R                  U5      (       d  U" U R                  U R                  S9nUR                  USS9U l        g )Nr   )hf_hub_download)	AutoModel)
AutoConfigAutoTokenizer)filenameT)use_embedding_runtime)huggingface_hubr2   -intel_extension_for_transformers.transformersr3   transformersr4   r5   from_pretrainedr'   hidden_sizetransformer_tokenizerospathjoinr   existstransformer_model)r,   r2   r3   r4   r5   onnx_model_paths         r.   r+   !QuantizedBgeEmbeddings.load_modele   s    3K:%55##

+ 	 &3%B%B##&
" '',,t'>'>@S@STww~~o..-''$2E2EO "+!:!:4 "; "
r0   allowr    )extraprotected_namespacesinputsc                    SS K nUR                  5        Vs/ sH  o3PM     nnU R                  R                  U5      nSU;   a  US   nO"UR                  5        Vs/ sH  owPM     snS   nUR	                  U5      R                  US   R                  S   US   R                  S   U R                  5      nU R                  S:X  a  U R                  XaS   5      nO-U R                  S:X  a  U R                  U5      nO[        S5      eU R                  (       a%  UR                  R                  R                  US	SS
9nU$ s  snf s  snf )Nr   zlast_hidden_state:0	input_ids   r   attention_maskclszpooling method no supported   )pdim)r   valuesrB   generatetensorreshapeshaper<   r(   _mean_pooling_cls_pooling
ValueErrorr*   nn
functional)	r,   rH   r   valueengine_inputoutputslast_hidden_stateoutembs	            r.   _embedQuantizedBgeEmbeddings._embed~   s:   +1==?;?%?;((11,? G+ '(= >070@ A0@0@ A! D!LL):;CC;%%a(&*=*C*CA*FHXHX
 <<6!$$%6?O8PQC\\U"##$56C:;;>>((%%//qa/@C
% <
 !Bs   
E
Er^   c                     U S S 2S4   $ Nr   r    )r^   s    r.   rW   #QuantizedBgeEmbeddings._cls_pooling   s     A&&r0   rL   c                 .    SS K nUR                  S5      R                  U R	                  5       5      R                  5       nUR                  X-  S5      nUR                  UR                  S5      SS9nXV-  $ ! [         a  n[        S5      UeS nAff = f)Nr   zCUnable to import torch, please install with `pip install -U torch`.rK   g&.>)min)r   r&   	unsqueezeexpandsizefloatsumclamp)r^   rL   r   einput_mask_expandedsum_embeddingssum_masks          r.   rV   $QuantizedBgeEmbeddings._mean_pooling   s    	 $$R(//0A0F0F0HIOOQ 	 #4#JAN;;266q9t;D((  	U	s   A9 9
BBBtextsc                     U R                  UU R                  SU R                  SS9nU R                  U5      R	                  5       $ )NTpt)
max_length
truncationr   return_tensors)r=   r   r   ra   tolist)r,   rt   rH   s      r.   _embed_text"QuantizedBgeEmbeddings._embed_text   sJ    ++''LL , 
 {{6"))++r0   c                     SSK nU Vs/ sH%  nU R                  (       a  U R                  U-   OUPM'     nnUR                  US/S9R	                  5       nUS   U R
                  -  US'   [        UR                  S/5      S   R                  [        5      5      n/ nU H  n	XR                  U	5      -  nM     U$ ! [         a  n[        S5      UeSnAff = fs  snf )zEmbed 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`.rt   )columnsindexbatch_index)
pandasr&   r   	DataFramereset_indexr   listgroupbyapplyr{   )
r,   rt   pdro   ddocstext_list_dfbatchesvectorsbatchs
             r.   embed_documents&QuantizedBgeEmbeddings.embed_documents   s    	 
 .2-F-FD%%)AM 	 
 ||D7)|<HHJ '37&;t&N]# |++]O<WEKKDQRE''..G +  	W	
s   B< +C<
CCCtextc                 l    U R                   (       a  U R                   U-   nU R                  U/5      S   $ rd   )r   r{   )r,   r   s     r.   embed_query"QuantizedBgeEmbeddings.embed_query   s3    !!))D0D'**r0   )r   r   r   r<   r   r   r'   r*   r   r   r(   r   rB   r=   )r   N)__name__
__module____qualname____firstlineno____doc__strintr   boolr   r   r"   r+   r	   model_configra   staticmethodrW   rV   r   rl   r{   r   r   __static_attributes____classcell__)r-   s   @r.   r   r   	   s   #R  &+/.2'+(,(944 	4
 4 $C=4 'sm4 4 tn4  ~4 !4 4 
4 4l
( L
S S . ' ' ' ' ) )c )c ) ),c ,tDK/@ ,T#Y 4U3D B+ +U + +r0   r   )importlib.utilr#   r>   typingr   r   r   r   langchain_core.embeddingsr   pydanticr   r	   r   r    r0   r.   <module>r      s'     	 , , 0 *M+Y
 M+r0   