Ë
    µŒj-  ã                   ó\   — 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y)é    N)ÚAnyÚDictÚListÚOptional)Ú
Embeddings)Ú	BaseModelÚ
ConfigDictÚmodel_validatorc                   óT  ‡ — 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        ‰| �  |i |¤Ž 	 ddlm}m} 	 |j                  | j                  «      j                  «       j                  «       | _
        |j                  | j                  «      | _        | j                  r| j                  j                  «        | j                  t!        d«      D �cg c]  }d|› d�‘Œ
 c}«       y # t
        $ r}t        d«      |‚d }~ww xY w# t        $ r}t        d|› �«      ‚d }~ww xY wc c}w )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          €úo/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/embeddings/ascend.pyr#   zAscendEmbeddings.__init__'   sö   ø€ Ü‰Ñ˜$Ð) &Ò)ð	ß=ð	Ø"×2Ñ2°4·?±?ÓC×GÑGÓI×NÑNÓPˆDŒJØ*×:Ñ:¸4¿?¹?ÓKˆDŒNð �=Š=Ø�J‰J�O‰OÔØ�‰´%¸´)Ó<±)¨Q�w˜q˜c Ò(°)Ñ<Õ=øô ò 	Üð1óð ðûð	ûô ò 	ÜØQÐRSÐQTÐUóð ûð	üò =s5   ’C
 ›AC' Â5DÃ
	C$ÃCÃC$Ã'	DÃ0C>Ã>DÚbefore)ÚmodeÚvaluesc                 óh  — d|vrt        d«      ‚t        j                  |d   t        j                  «      st	        d|d   › d�«      ‚	 dd l}	 |j                  j                  |d   «       |S # t        $ r t        d«      ‚t        $ r}|‚d }~ww xY w# t        $ r}t        d|› �«      ‚d }~ww xY w)	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   r4   r<   r.   s       r1   Úvalidate_environmentz%AscendEmbeddings.validate_environment<   sÉ   € ð ˜vÑ%ÜÐ5Ó6Ð6Ü�y‰y˜ Ñ-¬r¯w©wÔ7Ü#Ø6°v¸lÑ7KÐ6LÈAÐNóð ð	Ûð
	=Ø�M‰M×$Ñ$ V¨KÑ%8Ô9ð ˆøô ò 	WÜ%Ð&UÓVÐVÜò 	ØˆGûð	ûô ò 	=ÜÐ7¸°sÐ;Ó<Ð<ûð	=ús0   Á
A/ ÁB Á/BÂBÂBÂ	B1ÂB,Â,B1Ú	sentencesc                 óú  — | j                  |dddd¬«      }	 dd l}| j                  |j                  j                  «       |j                  j                  «       d¬«      j                  }| j                  ||d   j                  «       «      }|j                  j                  j                  |d	¬
«      }|j                  «       j                  «       j                  «       S # t        $ r}t        d«      |‚d }~ww xY w)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'   rI   Úlast_hidden_stateÚpoolingÚnnÚ
functionalÚ	normalizeÚcpuÚdetachÚnumpy)r-   r@   ÚinputsrM   r.   rO   ÚtmpÚ
embeddingss           r1   r+   zAscendEmbeddings.encodeQ   sô   € Ø—‘ØØØØØð  ó 
ˆð	Ûð
 !ŸJ™JØ×Ñ× Ñ Ó" F×$9Ñ$9×$=Ñ$=Ó$?ÈTð 'ó 
ç
Ñ
ð 	ð �l‰lÐ,¨fÐ5EÑ.F×.JÑ.JÓ.LÓMˆØ—X‘X×(Ñ(×2Ñ2°3¸BÐ2Ó?ˆ
Ø�~‰~Ó×&Ñ&Ó(×.Ñ.Ó0Ð0øô ò 	ÜØUóàðûð	ús   ˜C  Ã 	C:Ã)C5Ã5C:rO   rI   c                 óx  — 	 dd l }| j                  dk(  r	|d d …df   S | j                  dk(  rY|j                  ||j	                  d«      j                  «       z  d¬«      }|j                  dd¬	«      j                  «       }||z  S t        d
| j                  › d�«      ‚# t        $ r}t        d«      |‚d }~ww xY w)Nr   rG   r   ÚmeanrJ   rK   é   T)rL   ÚkeepdimzPooling method [z] not implemented)rM   r%   r   ÚsumÚ	unsqueezeÚfloatÚNotImplementedError)r-   rO   rI   rM   r.   ÚsÚds          r1   rP   zAscendEmbeddings.poolingf   s×   € ð	Ûð
 ×Ñ %Ò'Ø$¢Q¨ TÑ*Ð*Ø× Ñ  FÒ*Ø—	‘	Ø! N×$<Ñ$<¸RÓ$@×$FÑ$FÓ$HÑHÈbð ó ˆAð ×"Ñ" q°$Ð"Ó7×=Ñ=Ó?ˆAØ�q‘5ˆLä%Ø" 4×#6Ñ#6Ð"7Ð7HÐIóð øô ò 	ÜØUóàðûð	ús   ‚B Â	B9Â(B4Â4B9Útextsc                 ó^  — 	 dd l }g }t        dt        |«      | j                  «      D ]Q  }|||| j                  z    }| j                  |D �cg c]  }| j                  |z   ‘Œ c}«      }|j                  |«       ŒS |j                  |«      S # t        $ r}t        d«      |‚d }~ww xY wc c}w )Nr   zCUnable to import numpy, please install with `pip install -U numpy`.)	rV   r%   r,   Úlenr   r+   r   ÚappendÚconcatenate)	r-   rd   Únpr.   Úembedding_listr/   Útexts_ÚtextÚembs	            r1   Úembed_documentsz AscendEmbeddings.embed_documentsz   s²   € ð	Ûð
 ˆÜ�qœ#˜e›* d§o¡oÖ6ˆAØ˜1˜q 4§?¡?Ñ2Ð3ˆFØ—+‘+ÉFÓSÉFÀD˜t×8Ñ8¸4Ó?ÈFÑSÓTˆCØ×!Ñ! #Õ&ð 7ð �~‰~˜nÓ-Ð-øô ò 	ÜØUóàðûð	üò Ts   ‚B ÁB*
Â	B'ÂB"Â"B'rl   c                 óF   — | j                  | j                  |z   g«      d   S )Nr   )r+   r   )r-   rl   s     r1   Úembed_queryzAscendEmbeddings.embed_queryˆ   s$   € Ø�{‰{˜D×2Ñ2°TÑ9Ð:Ó;¸AÑ>Ð>ó    )N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__r   Úintr   r   r   Úboolr   r   r   r   r	   Úmodel_configr#   r
   Úclassmethodr   r?   r+   rP   r   r`   rn   rp   Ú__classcell__)r0   s   @r1   r   r      s  ø… ñð ØƒOØØ€IˆsÓØ2ØÐ�sÓØ5Ø "Ð˜#Ó"Ø€HˆdÓØ$)€N�H˜S‘MÓ)Ø€J�ÓØƒJØƒNá°2Ô6€Lð>˜cð >¨Sð >°Tõ >ñ* ˜(Ô#Øð¨$ð °3ò ó ó $ðð&1 ð 1¨ó 1ñ*¨ð ¸cð ÈSó ð(. T¨#¡Yð .°4¸¸U¹Ñ3Dó .ð? ð ?¨¨U©÷ ?rq   r   )r8   Útypingr   r   r   r   Úlangchain_core.embeddingsr   Úpydanticr   r	   r
   r   r   rq   r1   Ú<module>r€      s'   ðÛ 	ß ,Ó ,å 0ß ;Ñ ;ôA?�z 9õ A?rq   