§
    šŠtj6  ã                   ód   — 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
mZ  G d„ dee	¦  «        ZdS )é    N)ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictÚmodel_validatorc                   óŠ  ‡ — e Zd ZU dZ	 eed<   	 dZeed<   	 dZeed<   	 dZ	eed<   dZ
eed	<   d
Zee         ed<   dZeed<   eed<   eed<    ed¬¦  «        Zdededdfˆ fd„Z ed¬¦  «        ededefd„¦   «         ¦   «         Zdedefd„Zd$deded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 )%ÚAscendEmbeddingsag  
    Ascend NPU accelerate Embedding model

    Please ensure that you have installed CANN and torch_npu.

    Example:

    from langchain_community.embeddings import AscendEmbeddings
    model = AscendEmbeddings(model_path=<path_to_model>,
        device_id=0,
        query_instruction="Represent this sentence for searching relevant passages: "
    )
    Ú
model_pathr   Ú	device_idÚ Úquery_instructionÚdocument_instructionTÚuse_fp16ÚclsÚpooling_methodé    Ú
batch_sizeÚmodelÚ	tokenizer© )Úprotected_namespacesÚargsÚkwargsÚreturnNc                 ó:  •—  t          ¦   «         j        |i |¤Ž 	 ddlm}m} n"# t
          $ r}t          d¦  «        |‚d }~ww xY w	 |                     | j        ¦  «                             ¦   «          	                    ¦   «         | _
        |                     | j        ¦  «        | _        n$# t          $ r}t          d|› �¦  «        ‚d }~ww xY w| j        r| j
                             ¦   «          |                      d„ t!          d¦  «        D ¦   «         ¦  «         d S )Nr   )Ú	AutoModelÚAutoTokenizerzQUnable to import transformers, please install with `pip install -U transformers`.z?Failed to load model [self.model_path], due to following error:c                 ó   — g | ]}d |› d�‘Œ	S )zwarmup z timesr   )Ú.0Úis     úc/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/embeddings/ascend.pyú
<listcomp>z-AscendEmbeddings.__init__.<locals>.<listcomp>:   s$   € Ð<Ð<Ð<¨QÐ(˜qÐ(Ð(Ð(Ð<Ð<Ð<ó    é
   )ÚsuperÚ__init__Útransformersr   r    ÚImportErrorÚfrom_pretrainedr   ÚnpuÚevalr   r   Ú	Exceptionr   ÚhalfÚencodeÚrange)Úselfr   r   r   r    ÚeÚ	__class__s         €r$   r)   zAscendEmbeddings.__init__'   sO  ø€ Ø�‰ŒÔ˜$Ð) &Ð)Ð)Ð)ð	Ø=Ð=Ð=Ð=Ð=Ð=Ð=Ð=Ð=øÝð 	ð 	ð 	Ýð1ñô ð ðøøøøð	øøøð
	Ø"×2Ò2°4´?ÑCÔC×GÒGÑIÔI×NÒNÑPÔPˆDŒJØ*×:Ò:¸4¼?ÑKÔKˆDŒNˆNøÝð 	ð 	ð 	ÝØUÐRSÐUÐUñô ð øøøøð	øøøð
 Œ=ð 	ØŒJ�OŠOÑÔÐØ�ŠÐ<Ð<µ%¸±)´)Ð<Ñ<Ô<Ñ=Ô=Ð=Ð=Ð=s+   œ% ¥
A¯?¿AÁA"B+ Â+
CÂ5CÃCÚbefore)ÚmodeÚvaluesc                 ó˜  — d|vrt          d¦  «        ‚t          j        |d         t          j        ¦  «        st	          d|d         › d�¦  «        ‚	 dd l}n,# t          $ r t          d¦  «        ‚t          $ r}|‚d }~ww xY w	 |j	         
                    |d         ¦  «         n$# t          $ r}t          d|› �¦  «        ‚d }~ww xY w|S )	Nr   zmodel_path is requiredz$Unable to find valid model path in [ú]r   z-torch_npu not found, please install torch_npur   zset device failed due to )Ú
ValueErrorÚosÚaccessÚF_OKÚFileNotFoundErrorÚ	torch_npur+   ÚModuleNotFoundErrorr/   r-   Ú
set_device)r   r8   r@   r4   s       r$   Úvalidate_environmentz%AscendEmbeddings.validate_environment<   s  € ð ˜vÐ%Ð%ÝÐ5Ñ6Ô6Ð6ÝŒy˜ Ô-­r¬wÑ7Ô7ð 	Ý#ØN°v¸lÔ7KÐNÐNÐNñô ð ð	ØÐÐÐÐøÝð 	Wð 	Wð 	WÝ%Ð&UÑVÔVÐVÝð 	ð 	ð 	ØˆGøøøøð	øøøð	=ØŒM×$Ò$ V¨KÔ%8Ñ9Ô9Ð9Ð9øÝð 	=ð 	=ð 	=ÝÐ;¸Ð;Ð;Ñ<Ô<Ð<øøøøð	=øøøàˆs0   ÁA Á"BÁ:A<Á<BÂ B& Â&
CÂ0CÃCÚ	sentencesc                 ó*  — |                       |dddd¬¦  «        }	 dd l}n"# t          $ r}t          d¦  «        |‚d }~ww xY w|                      |j                             ¦   «         |j                             ¦   «         d¬¦  «        j        }|                      ||d                              ¦   «         ¦  «        }|j	        j
                             |d	¬
¦  «        }|                     ¦   «                              ¦   «                              ¦   «         S )NTÚpti   )ÚpaddingÚ
truncationÚreturn_tensorsÚ
max_lengthr   úCUnable to import torch, please install with `pip install -U torch`.)Úreturn_dictÚattention_maskéÿÿÿÿ©Údim)r   Útorchr+   r   Ú	input_idsr-   rM   Úlast_hidden_stateÚpoolingÚnnÚ
functionalÚ	normalizeÚcpuÚdetachÚnumpy)r3   rD   ÚinputsrQ   r4   rS   ÚtmpÚ
embeddingss           r$   r1   zAscendEmbeddings.encodeQ   s"  € Ø—’ØØØØØð  ñ 
ô 
ˆð	ØˆLˆLˆLˆLøÝð 	ð 	ð 	ÝØUñô àðøøøøð	øøøð !ŸJšJØÔ× Ò Ñ"Ô" FÔ$9×$=Ò$=Ñ$?Ô$?ÈTð 'ñ 
ô 
ä
ð 	ð �lŠlÐ,¨fÐ5EÔ.F×.JÒ.JÑ.LÔ.LÑMÔMˆØ”XÔ(×2Ò2°3¸BÐ2Ñ?Ô?ˆ
Ø�~Š~ÑÔ×&Ò&Ñ(Ô(×.Ò.Ñ0Ô0Ð0s   œ! ¡
A «;»A rS   rM   c                 ó   — 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY w| j        dk    r|d d …df         S | j        dk    rm|                     ||                     d¦  «                             ¦   «         z  d¬¦  «        }|                     dd¬	¦  «                             ¦   «         }||z  S t          d
| j        › d�¦  «        ‚)Nr   rK   r   ÚmeanrN   rO   é   T)rP   ÚkeepdimzPooling method [z] not implemented)rQ   r+   r   ÚsumÚ	unsqueezeÚfloatÚNotImplementedError)r3   rS   rM   rQ   r4   ÚsÚds          r$   rT   zAscendEmbeddings.poolingf   s  € ð	ØˆLˆLˆLˆLøÝð 	ð 	ð 	ÝØUñô àðøøøøð	øøøð Ô %Ò'Ð'Ø$ Q Q Q¨ TÔ*Ð*ØÔ  FÒ*Ð*Ø—	’	Ø! N×$<Ò$<¸RÑ$@Ô$@×$FÒ$FÑ$HÔ$HÑHÈbð ñ ô ˆAð ×"Ò" q°$Ð"Ñ7Ô7×=Ò=Ñ?Ô?ˆAØ�q‘5ˆLå%ØI 4Ô#6ÐIÐIÐIñô ð s   ‚ ‡
&‘!¡&Útextsc                 ó‚  ‡ — 	 dd l }n"# t          $ r}t          d¦  «        |‚d }~ww xY wg }t          dt          |¦  «        ‰ j        ¦  «        D ]J}|||‰ j        z   …         }‰                      ˆ fd„|D ¦   «         ¦  «        }|                     |¦  «         ŒK|                     |¦  «                             ¦   «         S )Nr   zCUnable to import numpy, please install with `pip install -U numpy`.c                 ó$   •— g | ]}‰j         |z   ‘ŒS r   )r   )r"   Útextr3   s     €r$   r%   z4AscendEmbeddings.embed_documents.<locals>.<listcomp>„   s!   ø€ ÐSÐSÐSÀD˜tÔ8¸4Ñ?ÐSÐSÐSr&   )	rZ   r+   r2   Úlenr   r1   ÚappendÚconcatenateÚtolist)r3   rh   Únpr4   Úembedding_listr#   Útexts_Úembs   `       r$   Úembed_documentsz AscendEmbeddings.embed_documentsz   sé   ø€ ð	ØÐÐÐÐøÝð 	ð 	ð 	ÝØUñô àðøøøøð	øøøð ˆÝ�q�#˜e™*œ* d¤oÑ6Ô6ð 	'ð 	'ˆAØ˜1˜q 4¤?Ñ2Ð2Ô3ˆFØ—+’+ÐSÐSÐSÐSÈFÐSÑSÔSÑTÔTˆCØ×!Ò! #Ñ&Ô&Ð&Ð&Ø�~Š~˜nÑ-Ô-×4Ò4Ñ6Ô6Ð6s   ƒ ˆ
'’"¢'rk   c                 óJ   — |                       | j        |z   g¦  «        d         S )Nr   )r1   r   )r3   rk   s     r$   Úembed_queryzAscendEmbeddings.embed_queryˆ   s$   € Ø�{Š{˜DÔ2°TÑ9Ð:Ñ;Ô;¸AÔ>Ð>r&   )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   Úintr   r   r   Úboolr   r   r   r   r	   Úmodel_configr)   r
   Úclassmethodr   rC   r1   rT   r   rd   rt   rv   Ú__classcell__)r5   s   @r$   r   r      sê  ø€ € € € € € ðð ð Ø€O€O�OØØ€IˆsÐÐÑØ2ØÐ�sÐÐÑØ5Ø "Ð˜#Ð"Ð"Ñ"Ø€HˆdÐÐÑØ$)€N�H˜S”MÐ)Ð)Ñ)Ø€J�ÐÐÑØ€J€J�JØ€N€N�Nà�:°2Ð6Ñ6Ô6€Lð>˜cð >¨Sð >°Tð >ð >ð >ð >ð >ð >ð* €_˜(Ð#Ñ#Ô#Øð¨$ð °3ð ð ð ñ „[ñ $Ô#ðð&1 ð 1¨ð 1ð 1ð 1ð 1ð*ð ¨ð ¸cð ÈSð ð ð ð ð(7 T¨#¤Yð 7°4¸¸U¼Ô3Dð 7ð 7ð 7ð 7ð? ð ?¨¨U¬ð ?ð ?ð ?ð ?ð ?ð ?ð ?ð ?r&   r   )r<   Útypingr   r   r   r   Úlangchain_core.embeddingsr   Úpydanticr   r	   r
   r   r   r&   r$   ú<module>r…      s¢   ðØ 	€	€	€	Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;ðA?ð A?ð A?ð A?ð A?�z 9ñ A?ô A?ð A?ð A?ð A?r&   