
    Ng                        d dl mZ d dlZd dlmZmZmZmZ 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 ddZ G d de          ZdS )    )annotationsN)AnyIterableListOptional)CallbackManagerForRetrieverRun)Document)
Embeddings)BaseRetriever)
ConfigDictcontexts	List[str]
embeddingsr
   return
np.ndarrayc           	         t           j                                        5 }t          j        t          |                    |j        |                               cddd           S # 1 swxY w Y   dS )z
    Create an index of embeddings for a list of contexts.

    Args:
        contexts: List of contexts to embed.
        embeddings: Embeddings model to use.

    Returns:
        Index of embeddings.
    N)
concurrentfuturesThreadPoolExecutornparraylistmapembed_query)r   r   executors      a/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/retrievers/nanopq.pycreate_indexr      s     
		.	.	0	0 NHxX\\**@(KKLLMMN N N N N N N N N N N N N N N N N Ns   :A&&A*-A*c                      e Zd ZU dZded<   	 dZded<   	 ded<   	 dZd	ed
<   	 dZded<   	 dZded<   	 dZ	ded<   	 dZ
ded<   	  ed          Ze	 d!d"d            Zed#d            Zd$d ZdS )%NanoPQRetrieverz`NanoPQ retriever.r
   r   Nr   indexr   textsOptional[List[dict]]	metadatas   intkzOptional[float]relevancy_thresholdsubspace   clustersT)arbitrary_types_allowedkwargsr   c                <    t          ||          } | d||||d|S )N)r   r    r!   r#    )r   )clsr!   r   r#   r,   r    s         r   
from_textszNanoPQRetriever.from_texts5   sG     UJ//s 
!	
 

 
 
 	
    	documentsIterable[Document]c                P    t          d |D              \  }} | j        d|||d|S )Nc              3  2   K   | ]}|j         |j        fV  d S Npage_contentmetadata).0ds     r   	<genexpr>z1NanoPQRetriever.from_documents.<locals>.<genexpr>M   s+       Q Q!!.!*!= Q Q Q Q Q Qr1   )r!   r   r#   r.   )zipr0   )r/   r2   r   r,   r!   r#   s         r   from_documentszNanoPQRetriever.from_documentsF   sQ      Q Qy Q Q QRys~ 
J)
 
GM
 
 	
r1   querystrrun_managerr   List[Document]c               ,    	 ddl m} n# t          $ r t          d          w xY wt          j         j                            |                    }	  | j         j        d          	                     j
                            d                    }n`# t          $ rS d                     j
        j        d          j         j         j
        j        d         	          }t          |          w xY w|                     j
                            d          
          }|                    |                    d                    }|                    |          }	t          j        |	          }
 fd|
d j                 D             }|S )Nr   )PQzBCould not import nanopq, please install with `pip install nanopq`.T)MKsverbosefloat32zReceived params: training_sample={training_sample}, n_cluster={n_clusters}, subspace={subspace}, embedding_shape={embedding_shape}. Issue with the combination. Please retrace back to find the exact error   )training_sample
n_clustersr(   embedding_shape)vecs)r?   )codesc                p    g | ]2}t          j        |         j        rj        |         ni            3S )r7   )r	   r!   r#   )r:   rowselfs     r   
<listcomp>z;NanoPQRetriever._get_relevant_documents.<locals>.<listcomp>u   sY     
 
 

 	 !Z_04F,,B  
 
 
r1   )nanopqrD   ImportErrorr   r   r   r   r(   r*   fitr    astypeAssertionErrorformatshapeRuntimeErrorencodedtableadistargsortr&   )rQ   r?   rA   rD   query_embedspqerror_message
index_codedtdists	sorted_ixtop_k_resultss   `           r   _get_relevant_documentsz'NanoPQRetriever._get_relevant_documentsR   s   	!!!!!!! 	 	 	W  	
 x ; ;E B BCC	.dmtDDDHH
!!),, BB  	. 	. 	.> f $
 0 3= $
 0 3	     }---	. YYDJ$5$5i$@$@YAA
YY\00;;Y<<z**Ju%%	
 
 
 

 !TV,
 
 
 s   
 $AB AC5r6   )
r!   r   r   r
   r#   r"   r,   r   r   r   )r2   r3   r   r
   r,   r   r   r   )r?   r@   rA   r   r   rB   )__name__
__module____qualname____doc____annotations__r    r#   r&   r'   r(   r*   r   model_configclassmethodr0   r>   rg   r.   r1   r   r   r      s&        "E!&*I****9AJJJJ&+/////"HPH&: $  L 
 +/	
 
 
 
 [
  	
 	
 	
 [	
+ + + + + +r1   r   )r   r   r   r
   r   r   )
__future__r   concurrent.futuresr   typingr   r   r   r   numpyr   langchain_core.callbacksr   langchain_core.documentsr	   langchain_core.embeddingsr
   langchain_core.retrieversr   pydanticr   r   r   r.   r1   r   <module>rx      s   " " " " " "     0 0 0 0 0 0 0 0 0 0 0 0     C C C C C C - - - - - - 0 0 0 0 0 0 3 3 3 3 3 3      N N N N` ` ` ` `m ` ` ` ` `r1   