
    7|h                        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y)    )annotationsN)AnyIterableListOptional)CallbackManagerForRetrieverRun)Document)
Embeddings)BaseRetriever)
ConfigDictc           	         t         j                  j                         5 }t        j                  t        |j                  |j                  |                   cddd       S # 1 sw Y   yxY w)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)contexts
embeddingsexecutors      d/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/retrievers/nanopq.pycreate_indexr      sS     
			.	.	0 NHxxX\\**@*@(KLMN N Ns   8A!!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y)NanoPQRetrieverz`NanoPQ retriever.r
   r   Nr   index	List[str]textsOptional[List[dict]]	metadatas   intkzOptional[float]relevancy_thresholdsubspace   clustersT)arbitrary_types_allowedc                4    t        ||      } | d||||d|S )N)r   r   r   r!    )r   )clsr   r   r!   kwargsr   s         r   
from_textszNanoPQRetriever.from_texts5   s8     UJ/ 
!	

 
 	
    c                R    t        d |D         \  }} | j                  d|||d|S )Nc              3  L   K   | ]  }|j                   |j                  f  y wNpage_contentmetadata).0ds     r   	<genexpr>z1NanoPQRetriever.from_documents.<locals>.<genexpr>M   s      Q!!..!**!= Qs   "$)r   r   r!   r+   )zipr.   )r,   	documentsr   r-   r   r!   s         r   from_documentszNanoPQRetriever.from_documentsF   s@      Qy QRys~~ 
J)
GM
 	
r/   c                  	 ddl m} t        j                  | j
                  j                  |            }	  || j                  | j                  d      j                  | j                  j                  d            }|j!                  | j                  j                  d      
      }|j#                  |j                  d            }|j%                  |      }	t        j&                  |	      }
|
d| j(                   D cg c]7  }t+        | j,                  |   | j.                  r| j.                  |   ni       9 }}|S # t        $ r t        d      w xY w# t        $ rc dj                  | j                  j                  d   | j                  | j                  | j                  j                  d   	      }t        |      w xY wc c}w )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)query)codesr3   )nanopqr=   ImportErrorr   r   r   r   r&   r(   fitr   astypeAssertionErrorformatshapeRuntimeErrorencodedtableadistargsortr$   r	   r   r!   )selfrG   run_managerr=   query_embedspqerror_message
index_codedtdists	sorted_ixrowtop_k_resultss                r   _get_relevant_documentsz'NanoPQRetriever._get_relevant_documentsR   s   	! xx ; ;E BC	.dmmtDHH

!!),B" YYDJJ$5$5i$@YA
YY\00;Y<z*JJu%	 !TVV,

 	 !ZZ_04,B
 
 M  	T 	  	.> f $

 0 0 3== $

 0 0 3	    }--	.(
s   E AE <G	EA,Gr2   )
r   r   r   r
   r!   r    r-   r   returnr   )r:   zIterable[Document]r   r
   r-   r   ra   r   )rG   strrV   r   ra   zList[Document])__name__
__module____qualname____doc____annotations__r   r!   r$   r%   r&   r(   r   model_configclassmethodr.   r;   r`   r+   r/   r   r   r      s   "E3!&*I#*9AsJ&+//"HcPHc& $L 
 +/	

 
 (	

 
 

 
  	
%	
 	
 		

 
	
 	
++*H+	+r/   r   )r   r   r   r
   ra   z
np.ndarray)
__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+   r/   r   <module>rs      s7    "  0 0  C - 0 3 N`m `r/   