o
    ¸ŠTjõ  ã                   @  sD   U d Z ddlmZ ddlZddlmZ i Zded< G dd	„ d	ƒZ	dS )
a&  Small sentence embedder shared by the RAG index, the retriever, and the semantic cache.

We use one tiny model (default: BAAI/bge-small-en-v1.5) for everything so the memory/energy
footprint stays low. bge/e5 models expect a short query prefix for retrieval; documents are
embedded without it.
é    )ÚannotationsNé   )ÚConfigzdict[str, object]Ú_MODEL_CACHEc                   @  s2   e Zd Zddd„Zdd„ Zddd„Zddd„ZdS )ÚEmbedderÚcfgr   c                 C  s4   |  dd¡| _|  dd¡| _|  dd¡| _d | _d S )Nzembeddings.model_idzBAAI/bge-small-en-v1.5zembeddings.query_prefixÚ zembeddings.deviceZcpu)ÚgetÚmodel_idÚquery_prefixÚdeviceÚ_model)Úselfr   © r   úsrc/agent/embeddings.pyÚ__init__   s   
zEmbedder.__init__c                 C  sZ   | j d ur| j S | j› d| j› �}|tvr%ddlm} || j| jd�t|< t| | _ | j S )Nú:r   )ÚSentenceTransformer)r   )r   r
   r   r   Zsentence_transformersr   )r   Úkeyr   r   r   r   Ú_load   s   

zEmbedder._loadÚtextsú	list[str]Úreturnú
np.ndarrayc                 C  s$   |   ¡ }|j|dddd�}| d¡S ©NTF)Znormalize_embeddingsZconvert_to_numpyZshow_progress_barZfloat32)r   ÚencodeÚastype)r   r   ÚmodelZvecsr   r   r   Úembed_documents#   s
   ÿ
zEmbedder.embed_documentsÚtextÚstrc                 C  s*   |   ¡ }|j| j| dddd�}| d¡S r   )r   r   r   r   )r   r   r   Zvecr   r   r   Úembed_query*   s   ü
zEmbedder.embed_queryN)r   r   )r   r   r   r   )r   r    r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r   r!   r   r   r   r   r      s
    

r   )
Ú__doc__Z
__future__r   ZnumpyZnpZsettingsr   r   Ú__annotations__r   r   r   r   r   Ú<module>   s    