
    7|h                        d Z 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)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           	         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      a/var/www/html/test/engine/venv/lib/python3.12/site-packages/langchain_community/retrievers/knn.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<   	  e	d      Z
e	 d	 	 	 	 	 	 	 	 	 dd       Ze	 	 	 	 	 	 	 	 dd       Z	 	 	 	 	 	 ddZy)KNNRetrieverz`KNN` retriever.r
   r   Nr   index	List[str]textsOptional[List[dict]]	metadatas   intkzOptional[float]relevancy_thresholdT)arbitrary_types_allowedc                4    t        ||      } | d||||d|S )N)r   r   r   r!    )r   )clsr   r   r!   kwargsr   s         r   
from_textszKNNRetriever.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>z.KNNRetriever.from_documents.<locals>.<genexpr>M   s      Q!!..!**!= Qs   "$)r   r   r!   r(   )zipr+   )r)   	documentsr   r*   r   r!   s         r   from_documentszKNNRetriever.from_documentsF   s@      Qy QRys~~ 
J)
GM
 	
r,   c                  t        j                  | j                  j                  |            }| j                  t        j
                  | j                  dz  j                  dd            z  }|t        j
                  |dz  j                               z  }|j                  |      }t        j                  |       }t        j                  |      t        j                  |      z
  dz   }|t        j                  |      z
  |z  }|d| j                   D 	cg c]U  }	| j                  ||	   | j                  k\  r5t        | j                  |	   | j                  r| j                  |	   ni       W }
}	|
S c c}	w )N      T)keepdimsgư>r   r0   )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_documentsz$KNNRetriever._get_relevant_documentsR   sF    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*3/43K3KK !ZZ_04,B

 

 

s   AE7r/   )
r   r   r   r
   r!   r    r*   r   returnr   )r7   zIterable[Document]r   r
   r*   r   rO   r   )rD   strrE   r   rO   zList[Document])__name__
__module____qualname____doc____annotations__r   r!   r$   r%   r   model_configclassmethodr+   r8   rN   r(   r,   r   r   r   !   s    "E3!&*I#*9AsJ&+//" $L 
 +/	

 
 (	

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

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