
    dh                        S r SSKJr  SSKrSSKJrJrJrJ	r	  SSK
rSSKJr  SSKJr  SSKJr  SSKJr  SS	KJr  SS
 jr " S S\5      rg)zbKNN Retriever.
Largely based on
https://github.com/karpathy/randomfun/blob/master/knn_vs_svm.ipynb    )annotationsN)AnyIterableListOptional)CallbackManagerForRetrieverRun)Document)
Embeddings)BaseRetriever)
ConfigDictc           	         [         R                  R                  5        n[        R                  " [        UR                  UR                  U 5      5      5      sSSS5        $ ! , (       d  f       g= f)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      Z/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/retrievers/knn.pycreate_indexr      sF     
			.	.	0HxxX\\**@*@(KLM 
1	0	0s   9A""
A0c                      \ rS rSr% SrS\S'    SrS\S'    S\S	'    SrS
\S'    SrS\S'    Sr	S\S'    \
" SS9r\ S         SS jj5       r\        SS j5       r      SS jrSrg)KNNRetriever!   z`KNN` retriever.r
   r   Nr   index	List[str]textsOptional[List[dict]]	metadatas   intkzOptional[float]relevancy_thresholdT)arbitrary_types_allowedc                2    [        X5      nU " SUUUUS.UD6$ )N)r   r   r    r"    )r   )clsr    r   r"   kwargsr   s         r   
from_textsKNNRetriever.from_texts5   s6     U/ 
!	

 
 	
    c                N    [        S U 5       6 u  pEU R                  " SXBUS.UD6$ )Nc              3  N   #    U H  oR                   UR                  4v   M     g 7fNpage_contentmetadata).0ds     r   	<genexpr>.KNNRetriever.from_documents.<locals>.<genexpr>M   s      Qy!..!**!=ys   #%)r    r   r"   r)   )zipr,   )r*   	documentsr   r+   r    r"   s         r   from_documentsKNNRetriever.from_documentsF   s:      Qy QR~~ 
)
GM
 	
r.   c                  [         R                  " U R                  R                  U5      5      nU R                  [         R
                  " U R                  S-  R                  SSS95      -  nU[         R
                  " US-  R                  5       5      -  nUR                  U5      n[         R                  " U* 5      n[         R                  " U5      [         R                  " U5      -
  S-   nU[         R                  " U5      -
  U-  nUSU R                    V	s/ sH[  n	U R                  b  X   U R                  :  d  M$  [        U R                  U	   U R                  (       a  U R                  U	   O0 S9PM]     n
n	U
$ s  sn	f )N      T)keepdimsgư>r   r2   )r   r   r   r   r   sqrtsumdotargsortmaxminr%   r&   r	   r    r"   )selfqueryrun_managerquery_embedsindex_embedssimilarities	sorted_ixdenominatornormalized_similaritiesrowtop_k_resultss              r   _get_relevant_documents$KNNRetriever._get_relevant_documentsR   sK    xx ; ;E BCzzBGGTZZ],?,?D,?,Q$RR#bgg|Q.C.C.E&FF#''5JJ}-	ff\*RVVL-AADH#/"&&2F#F+"U !TVV,


 -((0*/43K3KKH!ZZ_04,B - 	 

 

s   "F;Fr)   r1   )
r    r   r   r
   r"   r!   r+   r   returnr   )r:   zIterable[Document]r   r
   r+   r   rT   r   )rH   strrI   r   rT   zList[Document])__name__
__module____qualname____firstlineno____doc____annotations__r   r"   r%   r&   r   model_configclassmethodr,   r;   rR   __static_attributes__r)   r.   r   r   r   !   s    "E3!&*I#*9AsJ&+//" $L 
 +/	

 
 (	

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

 
	
 	
*H	r.   r   )r   r   r   r
   rT   z
np.ndarray)rZ   
__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>rh      s?   F #  0 0  C - 0 3 NJ= Jr.   