Ë
    µŒjü  ã                  ó–   — 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      úl/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/retrievers/knn.pyÚcreate_indexr      sF   € ô 
×	Ñ	×	.Ñ	.Ô	0°HÜ�x‰xœ˜XŸ\™\¨*×*@Ñ*@À(ÓKÓLÓM÷ 
1×	0Ò	0ú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   € ô ˜U JÓ/ˆÙð 
Ø!ØØØñ	
ð
 ñ
ð 	
ó    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ÁyÀ! !§.¡.°!·*±*Ô!=Áyùs   ‚"$)r   r   r!   r(   )Úzipr+   )r)   Ú	documentsr   r*   r   r!   s         r   Úfrom_documentszKNNRetriever.from_documentsF   s@   € ô Ñ QÁyÓ 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   sK  € ô —x‘x §¡× ;Ñ ;¸EÓ BÓCˆà—z‘z¤B§G¡G¨T¯Z©Z¸©]×,?Ñ,?ÀÈDÐ,?Ó,QÓ$RÑRˆØ#¤b§g¡g¨|¸Q©×.CÑ.CÓ.EÓ&FÑFˆà#×'Ñ'¨Ó5ˆÜ—J‘J ˜}Ó-ˆ	ä—f‘f˜\Ó*¬R¯V©V°LÓ-AÑAÀDÑHˆØ#/´"·&±&¸Ó2FÑ#FÈ+Ñ"UÐð !  T§V¡VÑ,ó

ñ
 -�à×(Ñ(Ð0Ø*¨3Ñ/°4×3KÑ3KÒKô Ø!ŸZ™Z¨™_Ø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ù   … ÙàÓØ"Ø€Eˆ3ÓØØÓØ!Ø&*€IÐ#Ó*Ø9Ø€A€sƒJØ&Ø+/Ð˜Ó/Ø"áØ $ô€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,   