§
    šŠtj F  ã                  ó  — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZmZ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lmZ d dlm Z   e!g d¢¦  «        Z"dZ#dd„Z$ G d„ de¦  «        Z%dS )é    )ÚannotationsN)ÚConfigParser)ÚPath)ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚTuple)ÚDocument)Ú
Embeddings©Úguard_import)ÚVectorStore)ÚDocstore)ÚInMemoryDocstore)Úmaximal_marginal_relevance)ÚangularÚ	euclideanÚ	manhattanÚhammingÚdotr   Úreturnr   c                 ó    — t          d¦  «        S )z1Import annoy if available, otherwise raise error.Úannoyr   © ó    úd/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/annoy.pyÚdependable_annoy_importr       s   € å˜Ñ Ô Ð r   c                  ó<  — e Zd ZdZdHd„ZedId„¦   «         Z	 dJdKd„ZdLd„Z	 dMdNd$„Z		 dMdOd&„Z
	 dMdPd(„Z	 dMdQd*„Z	 dMdRd+„Z	 dMdSd,„Z	 	 	 dTdUd2„Z	 	 	 dTdVd3„Zeded4dfdWd:„¦   «         Zeded4dfdXd;„¦   «         Zeded4dfdYd>„¦   «         ZdZd[dD„Zed?dEœd\dG„¦   «         ZdS )]ÚAnnoya  `Annoy` vector store.

    To use, you should have the ``annoy`` python package installed.

    Example:
        .. code-block:: python

            from langchain_community.vectorstores import Annoy
            db = Annoy(embedding_function, index, docstore, index_to_docstore_id)

    Úembedding_functionr   Úindexr   ÚmetricÚstrÚdocstorer   Úindex_to_docstore_idúDict[int, str]c                óL   — || _         || _        || _        || _        || _        dS )z%Initialize with necessary components.N)r#   r$   r%   r'   r(   )Úselfr#   r$   r%   r'   r(   s         r   Ú__init__zAnnoy.__init__*   s/   € ð #5ˆÔØˆŒ
ØˆŒØ ˆŒØ$8ˆÔ!Ð!Ð!r   r   úOptional[Embeddings]c                ó   — d S ©Nr   )r+   s    r   Ú
embeddingszAnnoy.embeddings9   s	   € ð ˆtr   NÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]Úkwargsú	List[str]c                ó    — t          d¦  «        ‚)Nz=Annoy does not allow to add new data once the index is build.)ÚNotImplementedError)r+   r1   r3   r5   s       r   Ú	add_textszAnnoy.add_texts>   s   € õ "ØKñ
ô 
ð 	
r   Úidxsú	List[int]ÚdistsúList[float]úList[Tuple[Document, float]]c                ó  — g }t          ||¦  «        D ]m\  }}| j        |         }| j                             |¦  «        }t	          |t
          ¦  «        st          d|› d|› �¦  «        ‚|                     ||f¦  «         Œn|S )a  Turns annoy results into a list of documents and scores.

        Args:
            idxs: List of indices of the documents in the index.
            dists: List of distances of the documents in the index.
        Returns:
            List of Documents and scores.
        úCould not find document for id ú, got )Úzipr(   r'   ÚsearchÚ
isinstancer   Ú
ValueErrorÚappend)r+   r:   r<   ÚdocsÚidxÚdistÚ_idÚdocs           r   Úprocess_index_resultszAnnoy.process_index_resultsH   s˜   € ð ˆÝ˜T 5Ñ)Ô)ð 	%ð 	%‰IˆC�ØÔ+¨CÔ0ˆCØ”-×&Ò& sÑ+Ô+ˆCÝ˜c¥8Ñ,Ô,ð UÝ Ð!SÀ3Ð!SÐ!SÈcÐ!SÐ!SÑTÔTÐTØ�KŠK˜˜d˜Ñ$Ô$Ð$Ð$Øˆr   é   éÿÿÿÿÚ	embeddingÚkÚintÚsearch_kc                óp   — | j                              |||d¬¦  «        \  }}|                      ||¦  «        S ©a}  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            search_k: inspect up to search_k nodes which defaults
                to n_trees * n if not provided
        Returns:
            List of Documents most similar to the query and score for each
        T©rR   Úinclude_distances)r$   Úget_nns_by_vectorrL   )r+   rO   rP   rR   r:   r<   s         r   Ú&similarity_search_with_score_by_vectorz,Annoy.similarity_search_with_score_by_vector\   sE   € ð ”j×2Ò2Ø�q 8¸tð 3ñ 
ô 
‰ˆˆeð ×)Ò)¨$°Ñ6Ô6Ð6r   Údocstore_indexc                óp   — | j                              |||d¬¦  «        \  }}|                      ||¦  «        S rT   )r$   Úget_nns_by_itemrL   )r+   rY   rP   rR   r:   r<   s         r   Ú%similarity_search_with_score_by_indexz+Annoy.similarity_search_with_score_by_indexn   sE   € ð ”j×0Ò0Ø˜A¨ÀDð 1ñ 
ô 
‰ˆˆeð ×)Ò)¨$°Ñ6Ô6Ð6r   Úqueryc                ó^   — |                       |¦  «        }|                      |||¦  «        }|S )a~  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            search_k: inspect up to search_k nodes which defaults
                to n_trees * n if not provided

        Returns:
            List of Documents most similar to the query and score for each
        )r#   rX   )r+   r]   rP   rR   rO   rG   s         r   Úsimilarity_search_with_scorez"Annoy.similarity_search_with_score€   s3   € ð ×+Ò+¨EÑ2Ô2ˆ	Ø×:Ò:¸9ÀaÈÑRÔRˆØˆr   úList[Document]c                óH   — |                       |||¦  «        }d„ |D ¦   «         S )a„  Return docs most similar to embedding vector.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            search_k: inspect up to search_k nodes which defaults
                to n_trees * n if not provided

        Returns:
            List of Documents most similar to the embedding.
        c                ó   — g | ]\  }}|‘ŒS r   r   ©Ú.0rK   Ú_s      r   ú
<listcomp>z5Annoy.similarity_search_by_vector.<locals>.<listcomp>£   ó   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2r   )rX   )r+   rO   rP   rR   r5   Údocs_and_scoress         r   Úsimilarity_search_by_vectorz!Annoy.similarity_search_by_vector’   s6   € ð ×EÒEØ�q˜(ñ
ô 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r   c                óH   — |                       |||¦  «        }d„ |D ¦   «         S )az  Return docs most similar to docstore_index.

        Args:
            docstore_index: Index of document in docstore
            k: Number of Documents to return. Defaults to 4.
            search_k: inspect up to search_k nodes which defaults
                to n_trees * n if not provided

        Returns:
            List of Documents most similar to the embedding.
        c                ó   — g | ]\  }}|‘ŒS r   r   rc   s      r   rf   z4Annoy.similarity_search_by_index.<locals>.<listcomp>¶   rg   r   )r\   )r+   rY   rP   rR   r5   rh   s         r   Úsimilarity_search_by_indexz Annoy.similarity_search_by_index¥   s6   € ð ×DÒDØ˜A˜xñ
ô 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r   c                óH   — |                       |||¦  «        }d„ |D ¦   «         S )al  Return docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            search_k: inspect up to search_k nodes which defaults
                to n_trees * n if not provided

        Returns:
            List of Documents most similar to the query.
        c                ó   — g | ]\  }}|‘ŒS r   r   rc   s      r   rf   z+Annoy.similarity_search.<locals>.<listcomp>Ç   rg   r   )r_   )r+   r]   rP   rR   r5   rh   s         r   Úsimilarity_searchzAnnoy.similarity_search¸   s/   € ð ×;Ò;¸EÀ1ÀhÑOÔOˆØ2Ð2 /Ð2Ñ2Ô2Ð2r   é   ç      à?Úfetch_kÚlambda_multÚfloatc                ó¼  ‡ ‡— ‰ j                              ||dd¬¦  «        Šˆ fd„‰D ¦   «         }t          t          j        |gt          j        ¬¦  «        |||¬¦  «        }ˆfd„|D ¦   «         }g }	|D ]h}
‰ j        |
         }‰ j                             |¦  «        }t          |t          ¦  «        st          d|› d	|› �¦  «        ‚|	                     |¦  «         Œi|	S )
aô  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            embedding: Embedding to look up documents similar to.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            k: Number of Documents to return. Defaults to 4.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.

        Returns:
            List of Documents selected by maximal marginal relevance.
        rN   FrU   c                óD   •— g | ]}‰j                              |¦  «        ‘ŒS r   )r$   Úget_item_vector)rd   Úir+   s     €r   rf   zAAnnoy.max_marginal_relevance_search_by_vector.<locals>.<listcomp>å   s)   ø€ ÐBÐBÐB¸�d”j×0Ò0°Ñ3Ô3ÐBÐBÐBr   )Údtype)rP   rs   c                ó,   •— g | ]}|d k    ¯‰|         ‘ŒS )rN   r   )rd   rx   r:   s     €r   rf   zAAnnoy.max_marginal_relevance_search_by_vector.<locals>.<listcomp>í   s"   ø€ ÐEÐEÐE¨¸QÀ"ºW¸W˜D œG¸W¸W¸Wr   r@   rA   )r$   rW   r   ÚnpÚarrayÚfloat32r(   r'   rC   rD   r   rE   rF   )r+   rO   rP   rr   rs   r5   r0   Úmmr_selectedÚselected_indicesrG   rx   rJ   rK   r:   s   `            @r   Ú'max_marginal_relevance_search_by_vectorz-Annoy.max_marginal_relevance_search_by_vectorÉ   s  øø€ ð2 Œz×+Ò+Ø�w¨¸uð ,ñ 
ô 
ˆð CÐBÐBÐB¸TÐBÑBÔBˆ
Ý1ÝŒH�i�[­¬
Ð3Ñ3Ô3ØØØ#ð	
ñ 
ô 
ˆð FÐEÐEÐE¨\ÐEÑEÔEÐàˆØ!ð 	ð 	ˆAØÔ+¨AÔ.ˆCØ”-×&Ò& sÑ+Ô+ˆCÝ˜c¥8Ñ,Ô,ð UÝ Ð!SÀ3Ð!SÐ!SÈcÐ!SÐ!SÑTÔTÐTØ�KŠK˜ÑÔÐÐØˆr   c                ób   — |                       |¦  «        }|                      ||||¬¦  «        }|S )aê  Return docs selected using the maximal marginal relevance.

        Maximal marginal relevance optimizes for similarity to query AND diversity
        among selected documents.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            fetch_k: Number of Documents to fetch to pass to MMR algorithm.
            lambda_mult: Number between 0 and 1 that determines the degree
                        of diversity among the results with 0 corresponding
                        to maximum diversity and 1 to minimum diversity.
                        Defaults to 0.5.
        Returns:
            List of Documents selected by maximal marginal relevance.
        )rs   )r#   r€   )r+   r]   rP   rr   rs   r5   rO   rG   s           r   Úmax_marginal_relevance_searchz#Annoy.max_marginal_relevance_searchø   sA   € ð0 ×+Ò+¨EÑ2Ô2ˆ	Ø×;Ò;Ø�q˜'¨{ð <ñ 
ô 
ˆð ˆr   éd   r0   úList[List[float]]r   ÚtreesÚn_jobsc                óÒ  ‡— |t           vr't          d|› dt          t           ¦  «        › �¦  «        ‚t          d¦  «        }	|st          d¦  «        ‚t	          |d         ¦  «        }
|	                     |
|¬¦  «        }t          |¦  «        D ]\  }}|                     ||¦  «         Œ|                     ||¬¦  «         g }t          |¦  «        D ]5\  }}|r||         ni }| 	                    t          ||¬¦  «        ¦  «         Œ6d	„ t          t	          |¦  «        ¦  «        D ¦   «         Št          ˆfd
„t          |¦  «        D ¦   «         ¦  «        } | |j        |||‰¦  «        S )NzUnsupported distance metric: z. Expected one of r   z/embeddings must be provided to build AnnoyIndexr   ©r%   )r†   )Úpage_contentÚmetadatac                óP   — i | ]#}|t          t          j        ¦   «         ¦  «        “Œ$S r   )r&   ÚuuidÚuuid4)rd   rx   s     r   ú
<dictcomp>z Annoy.__from.<locals>.<dictcomp>6  s(   € ÐKÐKÐK°�q�#�dœj™lœlÑ+Ô+ÐKÐKÐKr   c                ó(   •— i | ]\  }}‰|         |“ŒS r   r   )rd   rx   rK   Úindex_to_ids      €r   rŽ   z Annoy.__from.<locals>.<dictcomp>8  s#   ø€ ÐDÐDÐD¡V Q¨ˆ[˜Œ^˜SÐDÐDÐDr   )ÚINDEX_METRICSrE   Úlistr   ÚlenÚ
AnnoyIndexÚ	enumerateÚadd_itemÚbuildrF   r   Úranger   Úembed_query)Úclsr1   r0   rO   r3   r%   r…   r†   r5   r   Úfr$   rx   ÚembÚ	documentsÚtextrŠ   r'   r�   s                     @r   Ú__fromzAnnoy.__from  s¤  ø€ ð �Ð&Ð&Ýð=°Fð =ð =Ý'+­MÑ':Ô':ð=ð =ñô ð õ ˜WÑ%Ô%ˆØð 	PÝÐNÑOÔOÐOÝ�
˜1”ÑÔˆØ× Ò  ¨6Ð Ñ2Ô2ˆÝ 
Ñ+Ô+ð 	#ð 	#‰FˆAˆsØ�NŠN˜1˜cÑ"Ô"Ð"Ð"Ø�Š�E &ˆÑ)Ô)Ð)àˆ	Ý  Ñ'Ô'ð 	Mð 	M‰GˆAˆtØ'0Ð8�y ”|�|°bˆHØ×Ò�X°4À(ÐKÑKÔKÑLÔLÐLÐLØKÐKµU½3¸y¹>¼>Ñ5JÔ5JÐKÑKÔKˆÝ#ØDÐDÐDÐD­y¸Ñ/CÔ/CÐDÑDÔDñ
ô 
ˆð ˆs�9Ô(¨%°¸À;ÑOÔOÐOr   c           	     óT   — |                      |¦  «        } | j        |||||||fi |¤ŽS )aè  Construct Annoy wrapper from raw documents.

        Args:
            texts: List of documents to index.
            embedding: Embedding function to use.
            metadatas: List of metadata dictionaries to associate with documents.
            metric: Metric to use for indexing. Defaults to "angular".
            trees: Number of trees to use for indexing. Defaults to 100.
            n_jobs: Number of jobs to use for indexing. Defaults to -1.

        This is a user friendly interface that:
            1. Embeds documents.
            2. Creates an in memory docstore
            3. Initializes the Annoy database

        This is intended to be a quick way to get started.

        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Annoy
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                index = Annoy.from_texts(texts, embeddings)
        )Úembed_documentsÚ_Annoy__from)	rš   r1   rO   r3   r%   r…   r†   r5   r0   s	            r   Ú
from_textszAnnoy.from_texts<  sJ   € ðH ×.Ò.¨uÑ5Ô5ˆ
ØˆsŒzØ�:˜y¨)°V¸UÀFð
ð 
ØNTð
ð 
ð 	
r   Útext_embeddingsúList[Tuple[str, List[float]]]c           	     óZ   — d„ |D ¦   «         }d„ |D ¦   «         }	 | j         ||	|||||fi |¤ŽS )aŒ  Construct Annoy wrapper from embeddings.

        Args:
            text_embeddings: List of tuples of (text, embedding)
            embedding: Embedding function to use.
            metadatas: List of metadata dictionaries to associate with documents.
            metric: Metric to use for indexing. Defaults to "angular".
            trees: Number of trees to use for indexing. Defaults to 100.
            n_jobs: Number of jobs to use for indexing. Defaults to -1

        This is a user friendly interface that:
            1. Creates an in memory docstore with provided embeddings
            2. Initializes the Annoy database

        This is intended to be a quick way to get started.

        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Annoy
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                text_embeddings = embeddings.embed_documents(texts)
                text_embedding_pairs = list(zip(texts, text_embeddings))
                db = Annoy.from_embeddings(text_embedding_pairs, embeddings)
        c                ó   — g | ]
}|d          ‘ŒS )r   r   ©rd   Úts     r   rf   z)Annoy.from_embeddings.<locals>.<listcomp>Š  s   € Ð/Ð/Ð/˜!��1”Ð/Ð/Ð/r   c                ó   — g | ]
}|d          ‘ŒS )é   r   r¨   s     r   rf   z)Annoy.from_embeddings.<locals>.<listcomp>‹  s   € Ð4Ð4Ð4˜q�a˜”dÐ4Ð4Ð4r   )r¢   )
rš   r¤   rO   r3   r%   r…   r†   r5   r1   r0   s
             r   Úfrom_embeddingszAnnoy.from_embeddingse  s]   € ðJ 0Ð/˜Ð/Ñ/Ô/ˆØ4Ð4 OÐ4Ñ4Ô4ˆ
àˆsŒzØ�:˜y¨)°V¸UÀFð
ð 
ØNTð
ð 
ð 	
r   FÚfolder_pathÚprefaultÚboolÚNonec                óŽ  — t          |¦  «        }t          j        |d¬¦  «         t          ¦   «         }| j        j        | j        dœ|d<   | j                             t          |dz  ¦  «        |¬¦  «         t          |dz  d¦  «        5 }t          j        | j        | j        |f|¦  «         d	d	d	¦  «         d	S # 1 swxY w Y   d	S )
a  Save Annoy index, docstore, and index_to_docstore_id to disk.

        Args:
            folder_path: folder path to save index, docstore,
                and index_to_docstore_id to.
            prefault: Whether to pre-load the index into memory.
        T)Úexist_ok)r›   r%   ÚANNOYúindex.annoy)r®   ú	index.pklÚwbN)r   ÚosÚmakedirsr   r$   r›   r%   Úsaver&   ÚopenÚpickleÚdumpr'   r(   )r+   r­   r®   ÚpathÚconfig_objectÚfiles         r   Ú
save_localzAnnoy.save_local‘  s  € õ �KÑ Ô ˆÝ
Œ�D 4Ð(Ñ(Ô(Ð(å$™œˆà””Ø”kð"
ð "
ˆ�gÑð 	Œ
�Š�˜D =Ñ0Ñ1Ô1¸HˆÑEÔEÐEÝ�$˜Ñ$ dÑ+Ô+ð 	Y¨tÝŒK˜œ¨Ô(AÀ=ÐQÐSWÑXÔXÐXð	Yð 	Yð 	Yñ 	Yô 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yøøøð 	Yð 	Yð 	Yð 	Yð 	Yð 	Ys   Â
#B:Â:B>ÃB>)Úallow_dangerous_deserializationrÁ   c               óØ  — |st          d¦  «        ‚t          |¦  «        }t          d¦  «        }t          |dz  d¦  «        5 }t	          j        |¦  «        \  }}}	ddd¦  «         n# 1 swxY w Y   t          |	d         d         ¦  «        }
|	d         d         }|                     |
|¬	¦  «        }|                     t          |d
z  ¦  «        ¦  «          | |j	        ||||¦  «        S )aR  Load Annoy index, docstore, and index_to_docstore_id to disk.

        Args:
            folder_path: folder path to load index, docstore,
                and index_to_docstore_id from.
            embeddings: Embeddings to use when generating queries.
            allow_dangerous_deserialization: whether to allow deserialization
                of the data which involves loading a pickle file.
                Pickle files can be modified by malicious actors to deliver a
                malicious payload that results in execution of
                arbitrary code on your machine.
        aB  The de-serialization relies loading a pickle file. Pickle 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 enable deserialization. If you do this, make sure that you trust the source of the data. For example, if you are loading a file that you created, and know that no one else has modified the file, then this is safe to do. Do not set this to `True` if you are loading a file from an untrusted source (e.g., some random site on the internet.).r   rµ   ÚrbNr³   r›   r%   rˆ   r´   )
rE   r   r   rº   r»   ÚloadrQ   r”   r&   r™   )rš   r­   r0   rÁ   r½   r   r¿   r'   r(   r¾   r›   r%   r$   s                r   Ú
load_localzAnnoy.load_local¥  sJ  € ð( /ð 	Ýð	"ñô ð õ �KÑ Ô ˆå˜WÑ%Ô%ˆå�$˜Ñ$ dÑ+Ô+ð 	¨tõ ”Øñô ñ	ØØ$Øð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ �˜gÔ& sÔ+Ñ,Ô,ˆØ˜wÔ'¨Ô1ˆà× Ò  ¨6Ð Ñ2Ô2ˆØ�
Š
•3�t˜mÑ+Ñ,Ô,Ñ-Ô-Ð-àˆsØÔ" E¨6°8Ð=Qñ
ô 
ð 	
s   ÁA(Á(A,Á/A,)
r#   r   r$   r   r%   r&   r'   r   r(   r)   )r   r-   r/   )r1   r2   r3   r4   r5   r   r   r6   )r:   r;   r<   r=   r   r>   )rM   rN   )rO   r=   rP   rQ   rR   rQ   r   r>   )rY   rQ   rP   rQ   rR   rQ   r   r>   )r]   r&   rP   rQ   rR   rQ   r   r>   )
rO   r=   rP   rQ   rR   rQ   r5   r   r   r`   )
rY   rQ   rP   rQ   rR   rQ   r5   r   r   r`   )
r]   r&   rP   rQ   rR   rQ   r5   r   r   r`   )rM   rp   rq   )rO   r=   rP   rQ   rr   rQ   rs   rt   r5   r   r   r`   )r]   r&   rP   rQ   rr   rQ   rs   rt   r5   r   r   r`   )r1   r6   r0   r„   rO   r   r3   r4   r%   r&   r…   rQ   r†   rQ   r5   r   r   r"   )r1   r6   rO   r   r3   r4   r%   r&   r…   rQ   r†   rQ   r5   r   r   r"   )r¤   r¥   rO   r   r3   r4   r%   r&   r…   rQ   r†   rQ   r5   r   r   r"   )F)r­   r&   r®   r¯   r   r°   )r­   r&   r0   r   rÁ   r¯   r   r"   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   Úpropertyr0   r9   rL   rX   r\   r_   ri   rl   ro   r€   r‚   ÚclassmethodÚDEFAULT_METRICr¢   r£   r¬   rÀ   rÅ   r   r   r   r"   r"      sw  € € € € € ð
ð 
ð9ð 9ð 9ð 9ð ðð ð ñ „Xðð +/ð
ð 
ð 
ð 
ð 
ðð ð ð ð* CEð7ð 7ð 7ð 7ð 7ð& @Bð7ð 7ð 7ð 7ð 7ð& 79ðð ð ð ð ð& CEð3ð 3ð 3ð 3ð 3ð( @Bð3ð 3ð 3ð 3ð 3ð( 79ð3ð 3ð 3ð 3ð 3ð( ØØ ð-ð -ð -ð -ð -ðd ØØ ðð ð ð ð ð< ð +/Ø$ØØð#Pð #Pð #Pð #Pñ „[ð#PðJ ð
 +/Ø$ØØð&
ð &
ð &
ð &
ñ „[ð&
ðP ð
 +/Ø$ØØð)
ð )
ð )
ð )
ñ „[ð)
ðVYð Yð Yð Yð Yð( ð 16ð6
ð 6
ð 6
ð 6
ð 6
ñ „[ð6
ð 6
ð 6
r   r"   )r   r   )&Ú
__future__r   r·   r»   rŒ   Úconfigparserr   Úpathlibr   Útypingr   r   r   r	   r
   r   r   Únumpyr{   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   Ú!langchain_community.docstore.baser   Ú&langchain_community.docstore.in_memoryr   Ú&langchain_community.vectorstores.utilsr   Ú	frozensetr‘   rÌ   r    r"   r   r   r   ú<module>rÚ      sƒ  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ø Ð Ð Ð Ð Ð Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ Gà Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø CÐ CÐ CÐ CÐ CÐ CØ MÐ MÐ MÐ MÐ MÐ Mà�	ÐQÐQÐQÑRÔR€Ø€ð!ð !ð !ð !ð

ð 
ð 
ð 
ð 
ˆKñ 
ô 
ð 
ð 
ð 
r   