§
    æ˜ºh

  ã                  óŽ   — d Z ddlmZ ddlZddl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„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ÚListÚOptional)ÚCallbackManagerForRetrieverRun)ÚDocument)Ú
Embeddings)ÚBaseRetrieverÚ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      új/var/www/html/services/rag-service/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ed<   	 ded<   	 dZd	ed
<   	 dZded<   	  G d„ d¦  «        Zedd„¦   «         Z	dd„Z
dS )ÚKNNRetrieverz`KNN` retriever.r	   r   r   Úindexr   Útextsé   ÚintÚkNzOptional[float]Úrelevancy_thresholdc                  ó   — e Zd ZdZdZdS )úKNNRetriever.Configz'Configuration for this pydantic object.TN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úarbitrary_types_allowed© ó    r   ÚConfigr%   .   s   € € € € € à5Ð5à"&ÐÐÐr,   r-   Úkwargsr   c                ó:   — t          ||¦  «        } | d|||dœ|¤ŽS )N)r   r   r   r+   )r   )Úclsr   r   r.   r   s        r   Ú
from_textszKNNRetriever.from_texts4   s2   € õ ˜U JÑ/Ô/ˆØˆsÐM˜j°¸UÐMÐMÀfÐMÐMÐMr,   Ú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                óv   •— g | ]5}‰j         �‰|         ‰j         k    ¯t          ‰j        |         ¬¦  «        ‘Œ6S )N)Úpage_content)r#   r   r   )Ú.0ÚrowÚnormalized_similaritiesÚselfs     €€r   ú
<listcomp>z8KNNRetriever._get_relevant_documents.<locals>.<listcomp>I   sS   ø€ ð 
ð 
ð 
ààÔ(Ð0Ø*¨3Ô/°4Ô3KÒKÐKõ	  $¤*¨S¤/Ð2Ñ2Ô2ð LÐKÐKr,   r   )r   r   r   r   r   ÚsqrtÚsumÚdotÚargsortÚmaxÚminr"   )
r?   r2   r4   Úquery_embedsÚindex_embedsÚsimilaritiesÚ	sorted_ixÚdenominatorÚtop_k_resultsr>   s
   `        @r   Ú_get_relevant_documentsz$KNNRetriever._get_relevant_documents;   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,   )r   r   r   r	   r.   r   r   r   )r2   r3   r4   r   r   r5   )r&   r'   r(   r)   Ú__annotations__r"   r#   r-   Úclassmethodr1   rM   r+   r,   r   r   r       sË   € € € € € € ØÐàÐÐÑØ"Ø€J€J�JØØÐÐÑØ!Ø€A€J€J€J�JØ&Ø+/ÐÐ/Ð/Ð/Ñ/Ø"ð'ð 'ð 'ð 'ð 'ñ 'ô 'ð 'ð ðNð Nð Nñ „[ðNðð ð ð ð ð r,   r   )r   r   r   r	   r   r   )r)   Ú
__future__r   Úconcurrent.futuresr   Útypingr   r   r   Únumpyr   Úlangchain_core.callbacksr   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr	   Úlangchain_core.retrieversr
   r   r   r+   r,   r   ú<module>rX      sï   ððFð Fð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ø CÐ CÐ CÐ CÐ CÐ CØ -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðNð Nð Nð Nð1ð 1ð 1ð 1ð 1�=ñ 1ô 1ð 1ð 1ð 1r,   