§
    šŠtjü  ã                  óž   — 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dS )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)Ú
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      ú`/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/retrievers/knn.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<   	  e	d¬¦  «        Z
e	 ddd„¦   «         Zed d„¦   «         Zd!d„ZdS )"ÚKNNRetrieverz`KNN` retriever.r
   r   Nr   Úindexr   ÚtextsúOptional[List[dict]]Ú	metadatasé   ÚintÚkzOptional[float]Úrelevancy_thresholdT)Úarbitrary_types_allowedÚkwargsr   c                ó<   — t          ||¦  «        } | d||||dœ|¤ŽS )N)r   r    r!   r#   © )r   )Úclsr!   r   r#   r)   r    s         r   Ú
from_textszKNNRetriever.from_texts5   sG   € õ ˜U JÑ/Ô/ˆØˆ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>z.KNNRetriever.from_documents.<locals>.<genexpr>M   s+   è è € Ð QÐ QÀ! !¤.°!´*Ð!=Ð QÐ QÐ QÐ QÐ QÐ Qr.   )r!   r   r#   r+   )Úzipr-   )r,   r/   r   r)   r!   r#   s         r   Úfrom_documentszKNNRetriever.from_documentsF   sQ   € õ Ð QÐ QÀyÐ QÑ QÔ QÐRÑˆˆyØˆsŒ~ð 
Ø J¸)ð
ð 
ØGMð
ð 
ð 	
r.   ÚqueryÚstrÚrun_managerr   úList[Document]c               óD  ‡ ‡	— t          j        ‰ j                             |¦  «        ¦  «        }‰ j        t          j        ‰ j        dz                       dd¬¦  «        ¦  «        z  }|t          j        |dz                       ¦   «         ¦  «        z  }|                     |¦  «        }t          j        | ¦  «        }t          j	        |¦  «        t          j
        |¦  «        z
  dz   }|t          j
        |¦  «        z
  |z  Š	ˆ	ˆ fd„|d‰ j        …         D ¦   «         }|S )Né   é   T)Úkeepdimsg�íµ ÷Æ°>c                ó    •— g | ]J}‰j         �‰|         ‰j         k    ¯t          ‰j        |         ‰j        r‰j        |         ni ¬¦  «        ‘ŒKS )Nr4   )r'   r	   r!   r#   )r7   ÚrowÚnormalized_similaritiesÚselfs     €€r   ú
<listcomp>z8KNNRetriever._get_relevant_documents.<locals>.<listcomp>`   sr   ø€ ð 

ð 

ð 

ð
 àÔ(Ð0Ø*¨3Ô/°4Ô3KÒKÐKõ Ø!œZ¨œ_Ø04´ÐF˜œ¨Ô,Ð,ÀBðñ ô ð LÐKÐKr.   r   )r   r   r   r   r    ÚsqrtÚsumÚdotÚargsortÚmaxÚminr&   )
rG   r<   r>   Úquery_embedsÚindex_embedsÚsimilaritiesÚ	sorted_ixÚdenominatorÚtop_k_resultsrF   s
   `        @r   Ú_get_relevant_documentsz$KNNRetriever._get_relevant_documentsR   s  øø€ õ ”x ¤× ;Ò ;¸EÑ BÔ BÑCÔCˆà”z¥B¤G¨T¬Z¸©]×,?Ò,?ÀÈDÐ,?Ñ,QÔ,QÑ$RÔ$RÑRˆØ#¥b¤g¨|¸Q©×.CÒ.CÑ.EÔ.EÑ&FÔ&FÑFˆà#×'Ò'¨Ñ5Ô5ˆÝ”J ˜}Ñ-Ô-ˆ	å”f˜\Ñ*Ô*­R¬V°LÑ-AÔ-AÑAÀDÑHˆØ#/µ"´&¸Ñ2FÔ2FÑ#FÈ+Ñ"UÐð

ð 

ð 

ð 

ð 

ð
 !  T¤V Ô,ð

ñ 

ô 

ˆð Ðr.   r3   )
r!   r   r   r
   r#   r"   r)   r   r   r   )r/   r0   r   r
   r)   r   r   r   )r<   r=   r>   r   r   r?   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r    r#   r&   r'   r   Úmodel_configÚclassmethodr-   r;   rU   r+   r.   r   r   r   !   sþ   € € € € € € ØÐàÐÐÑØ"Ø€EÐÐÐÑØØÐÐÑØ!Ø&*€IÐ*Ð*Ð*Ñ*Ø9Ø€A€J€J€J�JØ&Ø+/ÐÐ/Ð/Ð/Ñ/Ø"à�:Ø $ðñ ô €Lð ð
 +/ð	
ð 
ð 
ð 
ñ „[ð
ð  ð	
ð 	
ð 	
ñ „[ð	
ðð ð ð ð ð r.   r   )r   r   r   r
   r   r   )rY   Ú
__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>rf      s  ððFð Fð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 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ðJð Jð Jð Jð J�=ñ Jô Jð Jð Jð Jr.   