Ë
    µŒjf  ã                  ó†   — d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ  G d	„ d
e«      Zy)é    )ÚannotationsN)ÚPath)ÚAnyÚDictÚIterableÚListÚOptional)ÚCallbackManagerForRetrieverRun)ÚDocument)ÚBaseRetriever)Ú
ConfigDictc                  ó  — e Zd ZU dZdZded<   	 ded<   	 dZded<   	 dZd	ed
<   	  ed¬«      Z	e
	 	 d	 	 	 	 	 	 	 	 	 dd„«       Ze
ddœ	 	 	 	 	 	 	 dd„«       Z	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 dd„Ze
dddœ	 	 	 	 	 	 	 dd„«       Zy)ÚTFIDFRetrieverz˜`TF-IDF` retriever.

    Largely based on
    https://github.com/asvskartheek/Text-Retrieval/blob/master/TF-IDF%20Search%20Engine%20(SKLEARN).ipynb
    Nr   Ú
vectorizerúList[Document]ÚdocsÚtfidf_arrayé   ÚintÚkT)Úarbitrary_types_allowedc                ó  — 	 ddl m} |xs i } |di |¤Ž}|j                  |«      }|xs	 d„ |D «       }t	        ||«      D ��	cg c]  \  }}	t        ||	¬«      ‘Œ }
}}	 | d||
|dœ|¤ŽS # t        $ r t        d«      ‚w xY wc c}	}w )Nr   )ÚTfidfVectorizerzNCould not import scikit-learn, please install with `pip install scikit-learn`.c              3  ó    K  — | ]  }i –— Œ y ­w©N© )Ú.0Ú_s     ún/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/retrievers/tfidf.pyÚ	<genexpr>z,TFIDFRetriever.from_texts.<locals>.<genexpr>4   s   è ø€ Ð!4©e¨¤"©eùs   ‚©Úpage_contentÚmetadata©r   r   r   r   )Úsklearn.feature_extraction.textr   ÚImportErrorÚfit_transformÚzipr   )ÚclsÚtextsÚ	metadatasÚtfidf_paramsÚkwargsr   r   r   ÚtÚmr   s              r   Ú
from_textszTFIDFRetriever.from_texts!   s«   € ð	ÝGð $Ò) rˆÙ$Ñ4 |Ñ4ˆ
Ø ×.Ñ.¨uÓ5ˆØÒ4Ñ!4©eÓ!4ˆ	ÜADÀUÈIÔAVÔWÑAV¹¸¸A” a°!Ö4ÐAVˆÑWÙÐW˜j¨tÀÑWÐPVÑWÐWøô ò 	Üð!óð ð	üó Xs   ‚A) ÁBÁ)A>)r,   c               óR   — t        d„ |D «       Ž \  }} | j                  d|||dœ|¤ŽS )Nc              3  óL   K  — | ]  }|j                   |j                  f–— Œ y ­wr   r!   )r   Úds     r   r    z0TFIDFRetriever.from_documents.<locals>.<genexpr>@   s   è ø€ Ð QÁyÀ! !§.¡.°!·*±*Ô!=Áyùs   ‚"$)r*   r,   r+   r   )r(   r0   )r)   Ú	documentsr,   r-   r*   r+   s         r   Úfrom_documentszTFIDFRetriever.from_documents8   s@   € ô Ñ QÁyÓ QÐRÑˆˆyØˆs�~‰~ð 
Ø l¸iñ
ØKQñ
ð 	
ó    c               ó  — ddl m} | j                  j                  |g«      } || j                  |«      j                  d«      }|j                  «       | j                   d  d d d…   D �cg c]  }| j                  |   ‘Œ }}|S c c}w )Nr   )Úcosine_similarity)éÿÿÿÿr9   )	Úsklearn.metrics.pairwiser8   r   Ú	transformr   ÚreshapeÚargsortr   r   )ÚselfÚqueryÚrun_managerr8   Ú	query_vecÚresultsÚiÚreturn_docss           r   Ú_get_relevant_documentsz&TFIDFRetriever._get_relevant_documentsE   s‹   € õ 	?à—O‘O×-Ñ-ØˆGó
ˆ	ñ $ D×$4Ñ$4°iÓ@×HÑHØó
ˆð .5¯_©_Ó->ÀÇÁ¸w¸yÐ-IÉ$ÈBÈ$Ò-OÓPÑ-O¨�t—y‘y “|Ð-OˆÐPØÐùò Qs   Á+BÚtfidf_vectorizerc                ód  — 	 dd l }t        |«      }|j                  dd¬«       |j	                  | j
                  ||› d�z  «       t        ||› d�z  d«      5 }t        j                  | j                  | j                  f|«       d d d «       y # t        $ r t        d«      ‚w xY w# 1 sw Y   y xY w)Nr   úBCould not import joblib, please install with `pip install joblib`.T)Úexist_okÚparentsú.joblibú.pklÚwb)
Újoblibr&   r   ÚmkdirÚdumpr   ÚopenÚpickler   r   )r>   Úfolder_pathÚ	file_namerN   ÚpathÚfs         r   Ú
save_localzTFIDFRetriever.save_localS   s¯   € ð
	Ûô �KÓ ˆØ�
‰
˜D¨$ˆ
Ô/ð 	�‰�D—O‘O T¨y¨k¸Ð,AÑ%AÔBô �$˜I˜; dÐ+Ñ+¨TÔ2°aÜ�K‰K˜Ÿ™ D×$4Ñ$4Ð5°qÔ9÷ 3Ð2øô ò 	ÜØTóð ð	ú÷ 3Ð2ús   ‚B Á-B&ÂB#Â&B/F)Úallow_dangerous_deserializationrT   c               ó.  — 	 ddl }|st        d«      ‚t        |«      }|j	                  ||› d�z  «      }t        ||› d�z  d«      5 }t        j                  |«      \  }}	ddd«        | |	¬«      S # t        $ r t        d«      ‚w xY w# 1 sw Y   Œ,xY w)	aì  Load the retriever from local storage.

        Args:
            folder_path: Folder path to load from.
            allow_dangerous_deserialization: Whether to allow dangerous deserialization.
                Defaults to False.
                The deserialization relies on .joblib and .pkl files, which can be
                modified to deliver a malicious payload that results in execution of
                arbitrary code on your machine. You will need to set this to `True` to
                use deserialization. If you do this, make sure you trust the source of
                the file.
            file_name: File name to load from. Defaults to "tfidf_vectorizer".

        Returns:
            TFIDFRetriever: Loaded retriever.
        r   NrH   a   The de-serialization of this retriever is based on .joblib and .pkl files.Such files can be modified to deliver a malicious payload that results in execution of arbitrary code on your machine.You will need to set `allow_dangerous_deserialization` to `True` to load this retriever. If you do this, make sure you trust the source of the file, and you are responsible for validating the file came from a trusted source.rK   rL   Úrbr$   )rN   r&   Ú
ValueErrorr   ÚloadrQ   rR   )
r)   rS   rX   rT   rN   rU   r   rV   r   r   s
             r   Ú
load_localzTFIDFRetriever.load_locali   s·   € ð0	Ûñ /Üð.ó	ð 	ô �KÓ ˆð —[‘[ ¨9¨+°WÐ(=Ñ!=Ó>ˆ
ô �$˜I˜; dÐ+Ñ+¨TÔ2°aô !'§¡¨A£ÑˆD�+÷ 3ñ
 ˜j¨tÀÔMÐMøô9 ò 	ÜØTóð ð	ú÷. 3Ð2ús   ‚A3 ÁBÁ3BÂB)NN)
r*   zIterable[str]r+   zOptional[Iterable[dict]]r,   úOptional[Dict[str, Any]]r-   r   Úreturnr   )r4   zIterable[Document]r,   r^   r-   r   r_   r   )r?   Ústrr@   r
   r_   r   )rF   )rS   r`   rT   r`   r_   ÚNone)rS   r`   rX   ÚboolrT   r`   r_   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__annotations__r   r   r   Úmodel_configÚclassmethodr0   r5   rE   rW   r]   r   r6   r   r   r      sb  … ñð €J�ÓØØ
ÓØØ€K�ÓØØ€A€sƒJØ(áØ $ô€Lð ð /3Ø15ð	XàðXð ,ðXð /ð	Xð
 ðXð 
òXó ðXð, ð
 26ñ	

à%ð

ð /ð	

ð
 ð

ð 
ò

ó ð

ðØðØ*Hðà	óð" ,ð:àð:ð ð:ð 
ó	:ð, ð
 16Ø+ñ5Nàð5Nð *.ð	5Nð
 ð5Nð 
ò5Nó ñ5Nr6   r   )Ú
__future__r   rR   Úpathlibr   Útypingr   r   r   r   r	   Úlangchain_core.callbacksr
   Úlangchain_core.documentsr   Úlangchain_core.retrieversr   Úpydanticr   r   r   r6   r   Ú<module>rq      s0   ðÝ "ã Ý ß 6Õ 6å CÝ -Ý 3Ý ôRN�]õ RNr6   