
    dh-                     \    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
Jr   " S S\\	5      rg)    N)AnyDictListOptional)
Embeddings)	BaseModel
ConfigDictmodel_validatorc                   `  ^  \ rS rSr% Sr \\S'    Sr\\S'    Sr	\\S'    Sr
\\S'   S	r\\S
'   Sr\\   \S'   Sr\\S'   \\S'   \\S'   \" SS9rS\S\SS4U 4S jjr\" SS9\S\S\4S j5       5       rS\S\4S jrS&S\S\S\4S  jjrS!\\   S\\\      4S" jrS#\S\\   4S$ jrS%rU =r$ )'AscendEmbeddings   aC  
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U ]  " U0 UD6   SSKJnJn   UR                  U R                  5      R                  5       R                  5       U l
        UR                  U R                  5      U l        U R                  (       a  U R                  R                  5         U R                  [!        S5       Vs/ sH	  nSU S3PM     sn5        g ! [
         a  n[        S5      UeS nAff = f! [         a  n[        SU 35      eS nAff = fs  snf )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:
   zwarmup z times)super__init__transformersr    r!   ImportErrorfrom_pretrainedr   npuevalr   r   	Exceptionr   halfencoderange)selfr   r   r    r!   ei	__class__s          ]/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/embeddings/ascend.pyr$   AscendEmbeddings.__init__'   s    $)&)	=	"224??CGGINNPDJ*::4??KDN ==JJOO%)<)Qwqc()<=  	1 	  	QRSQTU 	 =s5   C AC0 ;D
C-C((C-0
D:DDbefore)modevaluesc                 ~   SU;  a  [        S5      e[        R                  " US   [        R                  5      (       d  [	        SUS    S35      e SS Kn UR                  R                  US   5        U$ ! [         a    [        S5      e[         a  nUeS nAff = f! [         a  n[        SU 35      eS nAff = f)	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   r6   r>   r/   s       r2   validate_environment%AscendEmbeddings.validate_environment<   s     v%566yy-rww77#6vl7K6LAN 	
	=MM$$VK%89   	W%&UVV 	G	  	=7s;<<	=s0   A7 B 7BBB
B<)B77B<	sentencesc                    U R                  USSSSS9n SS KnU R                  UR                  R                  5       UR                  R                  5       SS9R                  nU R                  XRS   R                  5       5      nUR                  R                  R                  US	S
9nUR                  5       R                  5       R                  5       $ ! [         a  n[        S5      UeS nAff = f)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(   rL   last_hidden_statepoolingnn
functional	normalizecpudetachnumpy)r.   rC   inputsrP   r/   rR   tmp
embeddingss           r2   r,   AscendEmbeddings.encodeQ   s       
	
 !JJ  "F$9$9$=$=$?T ' 


 	 ll,5E.F.J.J.LMXX((223B2?
~~&&(..00  	U	s   C 
C1 C,,C1rR   rL   c                 n    SS K nU R                  S:X  a	  US S 2S4   $ U R                  S:X  aQ  UR                  XR	                  S5      R                  5       -  SS9nUR                  SSS	9R                  5       nXV-  $ [        S
U R                   S35      e! [         a  n[        S5      UeS nAff = f)Nr   rJ   r   meanrM   rN      T)rO   keepdimzPooling method [z] not implemented)rP   r&   r   sum	unsqueezefloatNotImplementedError)r.   rR   rL   rP   r/   sds          r2   rS   AscendEmbeddings.poolingf   s    	
 %'$QT**  F*		!$<$<R$@$F$F$HHb  A ""q$"7==?A5L%"4#6#6"77HI   	U	s   B 
B4#B//B4textsc                 b    SS K n/ n[        S[        U5      U R                  5       HQ  nXXPR                  -    nU R                  U Vs/ sH  opR                  U-   PM     sn5      nUR                  U5        MS     UR                  U5      $ ! [         a  n[        S5      UeS nAff = fs  snf )Nr   zCUnable to import numpy, please install with `pip install -U numpy`.)	rY   r&   r-   lenr   r,   r   appendconcatenate)	r.   ri   npr/   embedding_listr0   texts_textembs	            r2   embed_documents AscendEmbeddings.embed_documentsz   s    	
 q#e*doo6Aq??23F++FSFD884?FSTC!!#& 7 ~~n--  	U	 Ts   B 
B,

B)B$$B)rq   c                 F    U R                  U R                  U-   /5      S   $ )Nr   )r,   r   )r.   rq   s     r2   embed_queryAscendEmbeddings.embed_query   s$    {{D22T9:;A>>    )r   r   )N) __name__
__module____qualname____firstlineno____doc__str__annotations__r   intr   r   r   boolr   r   r   r   r	   model_configr$   r
   classmethodr   rA   r,   rS   r   rd   rs   rv   __static_attributes____classcell__)r1   s   @r2   r   r      s#    OIs2s5 "#"Hd$)NHSM)JJN26L>c >S >T >* (#$ 3   $&1 1 1* c S (.T#Y .4U3D .? ?U ? ?rx   r   )r:   typingr   r   r   r   langchain_core.embeddingsr   pydanticr   r	   r
   r   r   rx   r2   <module>r      s'    	 , , 0 ; ;A?z9 A?rx   