o
    "i                     @   s6   d dl mZ d dlmZ d dlmZ G dd dZdS )    )Any)QdrantClient)modelsc                   @   s   e Zd ZddedededededB f
dd	Zd
eddfddZdee	j
 ddfddZdee dedee dedee f
ddZdS )QdrantRepositoryFNhostportcollection_namehttpsapi_keyc                 C   s   || _ t||||d| _d S )N)r   r   r	   r
   )r   r   client)selfr   r   r   r	   r
    r   O/home/aiteam/pcaa-dev/ai-call-quality-rag/app/repositories/qdrant_repository.py__init__   s   zQdrantRepository.__init__vector_sizereturnc                 C   sH   dd | j  jD }| j|v rd S | j j| jtj|tjjdd d S )Nc                 S   s   g | ]}|j qS r   )name).0cr   r   r   
<listcomp>   s    z6QdrantRepository.ensure_collection.<locals>.<listcomp>)sizedistance)r   vectors_config)	r   get_collectionscollectionsr   create_collectionqmVectorParamsDistanceCOSINE)r   r   r   r   r   r   ensure_collection   s   

z"QdrantRepository.ensure_collectionpointsc                 C   s   | j j| j|d d S )N)r   r!   )r   upsertr   )r   r!   r   r   r   upsert_chunks   s   zQdrantRepository.upsert_chunksquery_vector	tenant_idtagslimitc                 C   sZ   t jdt j|ddg}|r|t jdt j|dd | jj| j|t j|d|ddd	S )
Nr%   )value)keymatchr&   )any)mustTF)r   r$   query_filterr'   with_payloadwith_vectors)	r   FieldCondition
MatchValueappendMatchAnyr   searchr   Filter)r   r$   r%   r&   r'   filtersr   r   r   r4      s   
zQdrantRepository.search)FN)__name__
__module____qualname__strintboolr   r    listr   PointStructr#   floatr   r4   r   r   r   r   r      s
    $
.r   N)typingr   qdrant_clientr   qdrant_client.httpr   r   r   r   r   r   r   <module>   s    