o
    g&”i…  ã                   @   s<   d dl Z d dlmZ d dlmZ e  e¡ZG dd„ dƒZdS )é    N)ÚSentenceTransformer)ÚRedisCacheRepositoryc                   @   sb   e Zd Zdedededefdd„Zdd„ Zd	ed
ee	 fdd„Z
dee d
eee	  fdd„ZdS )ÚEmbeddingServiceÚ
model_nameÚdeviceÚ
cache_repoÚ	cache_ttlc                 C   s"   || _ || _d | _|| _|| _d S )N)r   r   ÚmodelÚcacher   )Úselfr   r   r   r   © r   ú!app/services/embedding_service.pyÚ__init__   s
   
zEmbeddingService.__init__c                 C   s"   | j d u rt| j| jd| _ | j S )N)r   )r	   r   r   r   )r   r   r   r   Ú
_get_model   s   
zEmbeddingService._get_modelÚtextÚreturnc                 C   sP   | j  | j|¡}| j  |¡}|r|S |  ¡ j|dd ¡ }| j  ||| j¡ |S ©NT)Únormalize_embeddings)	r
   Úembedding_keyr   Úget_jsonr   ÚencodeÚtolistÚset_jsonr   )r   r   Ú	cache_keyÚcachedÚvecr   r   r   Ú
embed_text   s   zEmbeddingService.embed_textÚtextsc                 C   sÈ   g }g }g }t |ƒD ])\}}| j | j|¡}| j |¡}|r$| |¡ q
| g ¡ | |¡ | |¡ q
|rb|  ¡ j|dd}	t||	ƒD ]\}}
|
 	¡ }|||< | j 
| j | j|| ¡|| j¡ qD|S r   )Ú	enumerater
   r   r   r   Úappendr   r   Úzipr   r   r   )r   r   ÚvectorsÚmissing_indicesÚmissing_textsÚiÚtxtÚkeyr   Ú	generatedr   Úvaluesr   r   r   Úembed_texts!   s$   

$zEmbeddingService.embed_textsN)Ú__name__Ú
__module__Ú__qualname__Ústrr   Úintr   r   ÚlistÚfloatr   r)   r   r   r   r   r   
   s
    "
r   )	ÚloggingÚsentence_transformersr   Úapp.repositories.redis_cacher   Ú	getLoggerr*   Úloggerr   r   r   r   r   Ú<module>   s
    
