o
    "iv                     @   sh   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 eG dd dZG d	d
 d
ZdS )    N)	dataclass)QdrantRepository)RedisCacheRepository)EmbeddingService)RerankerServicec                   @   sF   e Zd ZU eed< eed< eed< eed< eed< eed< eed< dS )	RetrievedChunkchunk_idcall_idagent_idspeakertextscoremetadataN)__name__
__module____qualname__str__annotations__floatdict r   r   K/home/aiteam/pcaa-dev/ai-call-quality-rag/app/services/retrieval_service.pyr   
   s   
 r   c                   @   s~   e Zd Zdedededededededefd	d
Z	e
dededefddZdededee dedB dedee fddZdS )RetrievalServiceqdrant_repoemb_servicereranker_service
cache_reporetrieval_cache_ttlcandidate_kdefault_top_kkeyword_weightc	           	      C   s4   || _ || _|| _|| _|| _|| _|| _|| _d S N)qdrantembrerankercacher   r   r   r    )	selfr   r   r   r   r   r   r   r    r   r   r   __init__   s   
zRetrievalService.__init__queryr   returnc                    sN   dd |    D }|sdS |   t fdd|D }|tt|d S )Nc                 S   s   g | ]}|r|qS r   r   ).0tr   r   r   
<listcomp>,   s    z3RetrievalService._keyword_score.<locals>.<listcomp>g        c                 3   s    | ]	}| v rd V  qdS )   Nr   )r*   tokentxtr   r   	<genexpr>0   s    z2RetrievalService._keyword_score.<locals>.<genexpr>r-   )lowersplitsummaxlen)r(   r   q_tokenshitsr   r/   r   _keyword_score*   s   zRetrievalService._keyword_score	tenant_idtagstop_kNuse_keywordc                 C   s  |p| j }| j|||||}| j|}|rdd |D S | j|}| jj|||t| j	|d}	g }
|	D ]H}|j
p<i }t|j}|rZ| ||dd}d| j | | j|  }|
t|dd|dd|d	d|d
d|ddt||d q6|
r| j|dd |
D ng }t|D ]\}}d|
| j d|  |
| _q|
jdd dd |
d | }| j|dd |D | j |S )Nc                 S   s   g | ]	}t d i |qS )r   )r   )r*   cr   r   r   r,   8   s    z-RetrievalService.retrieve.<locals>.<listcomp>)r:   r;   limitr    g      ?r   r	   r
   r   unknown)r   r	   r
   r   r   r   r   c                 S      g | ]}|j qS r   )r   )r*   xr   r   r   r,   Q       g333333?g?c                 S   s   | j S r!   )r   )rC   r   r   r   <lambda>U   s    z+RetrievalService.retrieve.<locals>.<lambda>T)keyreversec                 S   rB   r   )__dict__)r*   rr   r   r   r,   W   rD   )r   r%   retrieval_keyget_jsonr#   
embed_textr"   searchr5   r   payloadr   r   r9   getr    appendr   r$   rerank	enumeratesortset_jsonr   )r&   r:   r(   r;   r<   r=   	cache_keycached	query_vecr8   interimhrN   r   kwrerank_scoresidxrsresultr   r   r   retrieve3   s@   







 zRetrievalService.retrieve)r   r   r   r   r   r   r   intr   r'   staticmethodr   r9   listboolr   r_   r   r   r   r   r      s*    	
2r   )mathdataclassesr   "app.repositories.qdrant_repositoryr   app.repositories.redis_cacher   app.services.embedding_servicer   app.services.reranker_servicer   r   r   r   r   r   r   <module>   s    
