o
    Ci
                     @   sn   d dl mZ d dlZd dlmZmZ ddlmZ G dd dejZ	dd	ej
d
edefddZG dd dZdS )    )
ThreadPoolN)ListTuple   )rpcc                   @   sL   e Zd ZdZdedejfddZdedefdd	Zdefd
dZ	dd Z
dS )SearchServerz, Assign version that can be exposed via RPC sindexc                 C   s$   t j| | || _t|| _d S N)r   Server__init__r	   faissextract_index_ivf	index_ivf)selfr   r	    r   s/var/www/html/fyndo/python/python_agents/rag_suite/venv/lib/python3.10/site-packages/faiss/contrib/client_server.pyr      s   zSearchServer.__init__nprobereturnc                 C   s   || j _dS )z set nprobe field N)r   r   r   r   r   r   r   
set_nprobe      zSearchServer.set_nprobec                 C   s   | j jS r
   )r	   ntotalr   r   r   r   
get_ntotal   s   zSearchServer.get_ntotalc                 C   s   t | j|S r
   )getattrr	   )r   fr   r   r   __getattr__    r   zSearchServer.__getattr__N)__name__
__module____qualname____doc__intr   Indexr   r   r   r   r   r   r   r   r      s    r   Fr	   portv6c                    s   t j fdd||d dS )z( serve requests for that index forerver c                    s
   t |  S r
   )r   )r   r	   r   r   <lambda>(      
 z"run_index_server.<locals>.<lambda>)r%   N)r   
run_server)r	   r$   r%   r   r&   r   run_index_server%   s   

r*   c                   @   sl   e Zd ZdZddeeeef  defddZ	dedd	fd
dZ
dedd	fddZdddZdefddZd	S )ClientIndexzmanages a set of distance sub-indexes. The sub_indexes search a
    subset of the inverted lists. Searches are merged afterwards
    Fmachine_portsr%   c                 C   sV   g | _ |D ]\}}| j t||| qt| j | _t| j| _|  | _	d| _
dS )z+ connect to a series of (host, port) pairs FN)sub_indexesappendr   Clientlennir   poolr   r   verbose)r   r,   r%   machiner$   r   r   r   r   5   s   

zClientIndex.__init__r   r   Nc                       | j  fdd| j d S )Nc                    
   |   S r
   )r   idxr   r   r   r'   D   r(   z(ClientIndex.set_nprobe.<locals>.<lambda>r2   mapr-   r   r   r9   r   r   B      
zClientIndex.set_nprobentc                    r5   )Nc                    r6   r
   )set_omp_num_threadsr7   r=   r   r   r'   J   r(   z1ClientIndex.set_omp_num_threads.<locals>.<lambda>r:   )r   r=   r   r?   r   r>   H   r<   zClientIndex.set_omp_num_threadsc                 C   s   t | jdd | jS )Nc                 S   s   |   S r
   )r   r7   r   r   r   r'   P   s    z(ClientIndex.get_ntotal.<locals>.<lambda>)sumr2   r;   r-   r   r   r   r   r   N   s   zClientIndex.get_ntotalkc                    sV   t jd  }| j fdd| jD ]
\}}||| q|  |j|j	fS )Nr   c                    s   |   S r
   )searchr7   rA   xr   r   r'   X   s    z$ClientIndex.search.<locals>.<lambda>)
r   
ResultHeapshaper2   imapr-   
add_resultfinalizeDI)r   rD   rA   rhDiIir   rC   r   rB   T   s
   "zClientIndex.searchF)r   N)r   r   r    r!   r   r   strr"   boolr   r   r>   r   rB   r   r   r   r   r+   0   s     
r+   rO   )multiprocessing.poolr   r   typingr   r    r   r   r   r#   r"   rQ   r*   r+   r   r   r   r   <module>   s   