o
    Æpæi=  ã                   @  s0   d dl mZ d dlZG dd„ dƒZddd„ZdS )	é    )ÚannotationsNc                      sJ   e Zd ZU dZdZded< e ¡ Zd‡ fdd„Z	dd	d
„Z
dd„ Z‡  ZS )ÚEmbedderua   å¥å‘é‡æ¨¡åž‹å°è£…ï¼›è¿›ç¨‹å†…å•ä¾‹ï¼Œå¤šæ¬¡ ``Embedder()`` åªåˆå§‹åŒ–ä¸€æ¬¡åº•å±‚æ¨¡åž‹ã€‚NzEmbedder | NoneÚ	_instanceÚreturnc                   sd   | j d u r/| j | j d u rtƒ  | ¡| _ W d   ƒ | j S W d   ƒ | j S 1 s*w   Y  | j S )N)r   Ú
_init_lockÚsuperÚ__new__)Úcls©Ú	__class__© ú./home/dore/onebot/Bot_Ero/core/llm/embedder.pyr      s   


þþ
ÿýzEmbedder.__new__ÚNonec                 C  s0   t | ddƒrd S ddlm} |dƒ| _d| _d S )NÚ_initializedFr   )ÚSentenceTransformerzBAAI/bge-small-zhT)ÚgetattrÚsentence_transformersr   Úmodelr   )Úselfr   r   r   r   Ú__init__   s
   

zEmbedder.__init__c                 C  s    t |tƒr|g}| jj|ddS )NT)Únormalize_embeddings)Ú
isinstanceÚstrr   Úencode)r   Útextsr   r   r   Úembed   s   
zEmbedder.embed©r   r   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__Ú	threadingÚLockr   r   r   r   Ú__classcell__r   r   r
   r   r      s   
 
r   r   c                   C  s   t ƒ S )ul   åœ¨è¿›ç¨‹å¯åŠ¨æ—¶è°ƒç”¨ï¼Œæå‰åŠ è½½å¥å‘é‡æ¨¡åž‹ï¼Œé¿å…é¦–æ¡ä¾èµ–å‘é‡çš„ä»»åŠ¡é•¿æ—¶é—´é˜»å¡žã€‚)r   r   r   r   r   Úpreload_embedder_model!   s   r%   r   )Ú
__future__r   r"   r   r%   r   r   r   r   Ú<module>   s    