§
    šŠtj@  ã                  ó²   — 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
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 erd dlZ G d	„ d
e¦  «        ZdS )é    )ÚannotationsN)Úrepeat)	ÚTYPE_CHECKINGÚAnyÚDictÚIterableÚListÚOptionalÚTupleÚTypeÚUnion©ÚDocument)Ú
Embeddings)ÚVectorStore)Úmaximal_marginal_relevancec                  ó&  — e Zd ZdZ	 	 dFdGd„ZedHd„¦   «         Z	 	 dIdJd„Ze	 	 	 	 	 	 dKdLd$„¦   «         Z		 dMdNd(„Z
	 	 dOdPd.„Z	 	 dOdQd0„Z	 	 dOdRd2„ZdSd4„Z	 	 	 dTdUd8„Z	 	 dIdVd:„Ze	 dMdWd<„¦   «         ZedXd=„¦   «         Z	 	 	 dYdZdC„Z	 	 	 dYd[dD„ZdMd\dE„ZdS )]ÚSupabaseVectorStoreaî  `Supabase Postgres` vector store.

    It assumes you have the `pgvector`
    extension installed and a `match_documents` (or similar) function. For more details:
    https://integrations.langchain.com/vectorstores?integration_name=SupabaseVectorStore

    You can implement your own `match_documents` function in order to limit the search
    space to a subset of documents based on your own authorization or business logic.

    Note that the Supabase Python client does not yet support async operations.

    If you'd like to use `max_marginal_relevance_search`, please review the instructions
    below on modifying the `match_documents` function to return matched embeddings.


    Examples:

    .. code-block:: python

        from langchain_community.embeddings.openai import OpenAIEmbeddings
        from langchain_core.documents import Document
        from langchain_community.vectorstores import SupabaseVectorStore
        from supabase.client import create_client

        docs = [
            Document(page_content="foo", metadata={"id": 1}),
        ]
        embeddings = OpenAIEmbeddings()
        supabase_client = create_client("my_supabase_url", "my_supabase_key")
        vector_store = SupabaseVectorStore.from_documents(
            docs,
            embeddings,
            client=supabase_client,
            table_name="documents",
            query_name="match_documents",
            chunk_size=500,
        )

    To load from an existing table:

    .. code-block:: python

        from langchain_community.embeddings.openai import OpenAIEmbeddings
        from langchain_community.vectorstores import SupabaseVectorStore
        from supabase.client import create_client


        embeddings = OpenAIEmbeddings()
        supabase_client = create_client("my_supabase_url", "my_supabase_key")
        vector_store = SupabaseVectorStore(
            client=supabase_client,
            embedding=embeddings,
            table_name="documents",
            query_name="match_documents",
        )

    éô  NÚclientúsupabase.client.ClientÚ	embeddingr   Ú
table_nameÚstrÚ
chunk_sizeÚintÚ
query_nameúUnion[str, None]ÚreturnÚNonec                óž   — 	 ddl }n# t          $ r t          d¦  «        ‚w xY w|| _        || _        |pd| _        |pd| _        |pd| _        dS )z Initialize with supabase client.r   NzXCould not import supabase python package. Please install it with `pip install supabase`.Ú	documentsÚmatch_documentsr   )ÚsupabaseÚImportErrorÚ_clientÚ
_embeddingr   r   r   )Úselfr   r   r   r   r   r$   s          úg/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/supabase.pyÚ__init__zSupabaseVectorStore.__init__W   s~   € ð	ØˆOˆOˆOˆOøÝð 	ð 	ð 	ÝðAñô ð ð	øøøð ˆŒØ&/ˆŒØ$Ð3¨ˆŒØ$Ð9Ð(9ˆŒØ$Ð+¨ˆŒˆˆs   ‚ ‡!c                ó   — | j         S ©N)r'   )r(   s    r)   Ú
embeddingszSupabaseVectorStore.embeddingsp   s
   € àŒÐó    ÚtextsúIterable[str]Ú	metadatasúOptional[List[Dict[Any, Any]]]ÚidsúOptional[List[str]]Úkwargsr   ú	List[str]c                óª   — |                       ||¦  «        }| j                             t          |¦  «        ¦  «        }|                      |||¦  «        S r,   )Ú_texts_to_documentsr'   Úembed_documentsÚlistÚadd_vectors)r(   r/   r1   r3   r5   ÚdocsÚvectorss          r)   Ú	add_textszSupabaseVectorStore.add_textst   sL   € ð ×'Ò'¨¨yÑ9Ô9ˆà”/×1Ò1µ$°u±+´+Ñ>Ô>ˆØ×Ò ¨¨sÑ3Ô3Ð3r.   r"   r#   ÚclsúType['SupabaseVectorStore']úOptional[List[dict]]ú Optional[supabase.client.Client]úOptional[str]ú'SupabaseVectorStore'c	                óâ   — |st          d¦  «        ‚|st          d¦  «        ‚|                     |¦  «        }
|                      ||¦  «        } | j        |||
|||fi |	¤Ž  | |||||¬¦  «        S )z9Return VectorStore initialized from texts and embeddings.zSupabase client is required.z)Supabase document table_name is required.)r   r   r   r   r   )Ú
ValueErrorr9   r8   Ú_add_vectors)r?   r/   r   r1   r   r   r   r   r3   r5   r-   r<   s               r)   Ú
from_textszSupabaseVectorStore.from_texts€   s¶   € ð ð 	=ÝÐ;Ñ<Ô<Ð<àð 	JÝÐHÑIÔIÐIà×.Ò.¨uÑ5Ô5ˆ
Ø×&Ò& u¨iÑ8Ô8ˆØˆÔØ�J 
¨D°#°zð	
ð 	
ØEKð	
ð 	
ð 	
ð ˆsØØØ!Ø!Ø!ð
ñ 
ô 
ð 	
r.   r=   úList[List[float]]úList[Document]c                óT   — |                       | j        | j        |||| j        ¦  «        S r,   )rG   r&   r   r   )r(   r=   r"   r3   s       r)   r;   zSupabaseVectorStore.add_vectors£   s/   € ð × Ò ØŒL˜$œ/¨7°I¸sÀDÄOñ
ô 
ð 	
r.   é   ÚqueryÚkÚfilterúOptional[Dict[str, Any]]c                óX   — | j                              |¦  «        } | j        |f||dœ|¤ŽS ©N©rN   rO   )r'   Úembed_queryÚsimilarity_search_by_vector©r(   rM   rN   rO   r5   Úvectors         r)   Úsimilarity_searchz%SupabaseVectorStore.similarity_search­   s;   € ð ”×,Ò,¨UÑ3Ô3ˆØ/ˆtÔ/°ÐU¸!ÀFÐUÐUÈfÐUÐUÐUr.   úList[float]c                ó@   —  | j         |f||dœ|¤Ž}d„ |D ¦   «         }|S )NrS   c                ó   — g | ]\  }}|‘ŒS © r\   )Ú.0ÚdocÚ_s      r)   ú
<listcomp>zCSupabaseVectorStore.similarity_search_by_vector.<locals>.<listcomp>Â   s   € Ð.Ð.Ð.™V˜S !�SÐ.Ð.Ð.r.   )Ú1similarity_search_by_vector_with_relevance_scores)r(   r   rN   rO   r5   Úresultr"   s          r)   rU   z/SupabaseVectorStore.similarity_search_by_vector·   sN   € ð H�ÔGØð
Ø 6ð
ð 
Ø-3ð
ð 
ˆð /Ð. vÐ.Ñ.Ô.ˆ	àÐr.   úList[Tuple[Document, float]]c                óX   — | j                              |¦  «        } | j        |f||dœ|¤ŽS rR   )r'   rT   ra   rV   s         r)   Ú'similarity_search_with_relevance_scoresz;SupabaseVectorStore.similarity_search_with_relevance_scoresÆ   sJ   € ð ”×,Ò,¨UÑ3Ô3ˆØEˆtÔEØð
Ø ð
ð 
Ø*0ð
ð 
ð 	
r.   úDict[str, Any]c                ó4   — t          |¬¦  «        }|r||d<   |S )N)Úquery_embeddingrO   )Údict)r(   rM   rO   Úrets       r)   Ú
match_argszSupabaseVectorStore.match_argsÒ   s*   € õ #°5Ð9Ñ9Ô9ˆØð 	#Ø"ˆC�‰MØˆ
r.   Úpostgrest_filterÚscore_thresholdúOptional[float]c                óŽ  ‡— |rq|                      ¦   «         D ]\\  }}t          |t          ¦  «        rBd|v r>|d         }d                     d„ |D ¦   «         ¦  «        }	d|› d|	› d�}
|r
d|› d|
› d�}ŒZ|
}Œ]|                      ||¦  «        }| j                             | j        |¦  «        }|r$|j         	                    d	d|› d�¦  «        |_        | 
                    |¦  «        }|                     ¦   «         }d
„ |j        D ¦   «         }‰�8ˆfd„|D ¦   «         }t          |¦  «        dk    rt          j        d‰› �¦  «         |S )Nz$inú,c              3  ó<   K  — | ]}d t          |¦  «        › d �V — ŒdS )ú'N)r   )r]   Úvs     r)   ú	<genexpr>zXSupabaseVectorStore.similarity_search_by_vector_with_relevance_scores.<locals>.<genexpr>é   s0   è è € Ð)KÐ)K¸A¨-­c°!©f¬f¨-¨-¨-Ð)KÐ)KÐ)KÐ)KÐ)KÐ)Kr.   zmetadata->>z IN (ú)ú(z) and (Úandc           	     óÖ   — g | ]f}|                      d ¦  «        ¯t          |                      di ¦  «        |                      d d¦  «        ¬¦  «        |                      dd¦  «        f‘ŒgS )ÚcontentÚmetadataÚ ©rz   Úpage_contentÚ
similarityç        )Úgetr   ©r]   Úsearchs     r)   r`   zYSupabaseVectorStore.similarity_search_by_vector_with_relevance_scores.<locals>.<listcomp>þ   s…   € ð 

ð 

ð 

ð Ø�zŠz˜)Ñ$Ô$ð

åØ#ŸZšZ¨
°BÑ7Ô7Ø!'§¢¨I°rÑ!:Ô!:ðñ ô ð —
’
˜<¨Ñ-Ô-ðð

ð 

ð 

r.   c                ó*   •— g | ]\  }}|‰k    ¯||f‘ŒS r\   r\   )r]   r^   r~   rm   s      €r)   r`   zYSupabaseVectorStore.similarity_search_by_vector_with_relevance_scores.<locals>.<listcomp>  s7   ø€ ð ð ð á#�C˜Ø Ò0Ð0ð �jÐ!à0Ð0Ð0r.   r   zDNo relevant docs were retrieved using the relevance score threshold )ÚitemsÚ
isinstanceri   Újoinrk   r&   Úrpcr   ÚparamsÚsetÚlimitÚexecuteÚdataÚlenÚwarningsÚwarn)r(   rM   rN   rO   rl   rm   ÚkeyÚvalueÚ	in_valuesÚ
values_strÚ
new_filterÚmatch_documents_paramsÚquery_builderÚresÚmatch_results        `         r)   ra   zESupabaseVectorStore.similarity_search_by_vector_with_relevance_scoresÚ   sÏ  ø€ ð ð 	6Ø$Ÿlšl™nœnð 6ð 6‘
��UÝ˜e¥TÑ*Ô*ð 6¨u¸¨~¨~à % e¤�Ià!$§¢Ð)KÐ)KÀÐ)KÑ)KÔ)KÑ!KÔ!K�JØ!F¨sÐ!FÐ!F¸Ð!FÐ!FÐ!F�Jð (ð 6Ø+UÐ/?Ð+UÐ+UÈ
Ð+UÐ+UÐ+UÐ(Ð(à+5Ð(øà!%§¢°¸Ñ!?Ô!?ÐØœ×(Ò(¨¬Ð:PÑQÔQˆàð 	Ø#0Ô#7×#;Ò#;ØÐ.Ð+Ð.Ð.Ð.ñ$ô $ˆMÔ ð &×+Ò+¨AÑ.Ô.ˆà×#Ò#Ñ%Ô%ˆð

ð 

ð œ(ð

ñ 

ô 

ˆð Ð&ðð ð ð à'3ðñ ô ˆLõ
 �<Ñ Ô  AÒ%Ð%Ý”ð4Ø"1ð4ð 4ñô ð ð
 Ðr.   ú(List[Tuple[Document, float, np.ndarray]]c                ó2  — |                       ||¦  «        }| j                             | j        |¦  «        }|r$|j                             dd|› d�¦  «        |_        |                     |¦  «        }|                     ¦   «         }d„ |j        D ¦   «         }|S )Nrw   rv   ru   c           
     ód  — g | ]­}|                      d ¦  «        ¯t          |                      di ¦  «        |                      d d¦  «        ¬¦  «        |                      dd¦  «        t          j        |                      dd¦  «                             d¦  «        t          j        d¬	¦  «        f‘Œ®S )
ry   rz   r{   r|   r~   r   r   z[]rp   )Úsep)r€   r   ÚnpÚ
fromstringÚstripÚfloat32r�   s     r)   r`   zXSupabaseVectorStore.similarity_search_by_vector_returning_embeddings.<locals>.<listcomp>+  sÀ   € ð 
ð 
ð 
ð Ø�zŠz˜)Ñ$Ô$ð
åØ#ŸZšZ¨
°BÑ7Ô7Ø!'§¢¨I°rÑ!:Ô!:ðñ ô ð —
’
˜<¨Ñ-Ô-õ ”Ø—J’J˜{¨BÑ/Ô/×5Ò5°dÑ;Ô;½R¼ZÈSðñ ô ðð
ð 
ð 
r.   )	rk   r&   r‡   r   rˆ   r‰   rŠ   r‹   rŒ   )	r(   rM   rN   rO   rl   r•   r–   r—   r˜   s	            r)   Ú0similarity_search_by_vector_returning_embeddingszDSupabaseVectorStore.similarity_search_by_vector_returning_embeddings  s·   € ð "&§¢°¸Ñ!?Ô!?ÐØœ×(Ò(¨¬Ð:PÑQÔQˆàð 	Ø#0Ô#7×#;Ò#;ØÐ.Ð+Ð.Ð.Ð.ñ$ô $ˆMÔ ð &×+Ò+¨AÑ.Ô.ˆà×#Ò#Ñ%Ô%ˆð
ð 
ð œ(ð
ñ 
ô 
ˆð" Ðr.   ú"Optional[Iterable[Dict[Any, Any]]]c                ó\   — |€t          i ¦  «        }d„ t          | |¦  «        D ¦   «         }|S )z:Return list of Documents from list of texts and metadatas.Nc                ó6   — g | ]\  }}t          ||¬ ¦  «        ‘ŒS ))r}   rz   r   )r]   Útextrz   s      r)   r`   z;SupabaseVectorStore._texts_to_documents.<locals>.<listcomp>G  s9   € ð 
ð 
ð 
á��hõ  $°Ð:Ñ:Ô:ð
ð 
ð 
r.   )r   Úzip)r/   r1   r<   s      r)   r8   z'SupabaseVectorStore._texts_to_documents>  sD   € ð ÐÝ˜r™
œ
ˆIð
ð 
å"% e¨YÑ"7Ô"7ð
ñ 
ô 
ˆð
 ˆr.   c                ó"  — g }t          |¦  «        D ]E\  }}	||         j        |	||         j        dœ|¥}
|�||         |
d<   |                     |
¦  «         ŒFg }t	          dt          |¦  «        |¦  «        D ]–}||||z   …         }|                      |¦  «                             |¦  «                             ¦   «         }t          |j	        ¦  «        dk    rt          d¦  «        ‚d„ |j	        D ¦   «         }|                     |¦  «         Œ—|S )zAdd vectors to Supabase table.)ry   r   rz   NÚidr   zError inserting: No rows addedc                ó|   — g | ]9}|                      d ¦  «        ¯t          |                      d ¦  «        ¦  «        ‘Œ:S ©r¨   )r€   r   )r]   Úis     r)   r`   z4SupabaseVectorStore._add_vectors.<locals>.<listcomp>p  s9   € ÐHÐHÐH¨¸A¿EºEÀ$¹K¼KÐH•3�q—u’u˜T‘{”{Ñ#Ô#ÐHÐHÐHr.   )Ú	enumerater}   rz   ÚappendÚranger�   Úfrom_Úupsertr‹   rŒ   Ú	ExceptionÚextend)r   r   r=   r"   r3   r   r5   ÚrowsÚidxr   ÚrowÚid_listr«   Úchunkrb   s                  r)   rG   z SupabaseVectorStore._add_vectorsN  s4  € ð &(ˆÝ'¨Ñ0Ô0ð 		ð 		‰NˆC�à$ Sœ>Ô6Ø&Ø% cœNÔ3ðð ð ð	ˆCð ˆØ œH��D‘	Ø�KŠK˜ÑÔÐÐàˆÝ�q�#˜d™)œ) ZÑ0Ô0ð 	 ð 	 ˆAØ˜˜Q ™^Ð+Ô,ˆEà—\’\ *Ñ-Ô-×4Ò4°UÑ;Ô;×CÒCÑEÔEˆFå�6”;ÑÔ 1Ò$Ð$ÝÐ @ÑAÔAÐAð IÐH¨V¬[ÐHÑHÔHˆCà�NŠN˜3ÑÔÐÐàˆr.   é   ç      à?Úfetch_kÚlambda_multÚfloatc                óä   ‡
— |                       ||¦  «        }d„ |D ¦   «         Š
d„ |D ¦   «         }t          t          j        |gt          j        ¬¦  «        |||¬¦  «        }ˆ
fd„|D ¦   «         }	|	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.
            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.
        c                ó   — g | ]
}|d          ‘ŒS )r   r\   ©r]   Ú	doc_tuples     r)   r`   zOSupabaseVectorStore.max_marginal_relevance_search_by_vector.<locals>.<listcomp>’  s   € ÐBÐBÐB¨i˜Y qœ\ÐBÐBÐBr.   c                ó   — g | ]
}|d          ‘ŒS )é   r\   r¿   s     r)   r`   zOSupabaseVectorStore.max_marginal_relevance_search_by_vector.<locals>.<listcomp>“  s   € ÐCÐCÐC¨y˜i¨œlÐCÐCÐCr.   )Údtype)rN   r»   c                ó    •— g | ]
}‰|         ‘ŒS r\   r\   )r]   r«   Úmatched_documentss     €r)   r`   zOSupabaseVectorStore.max_marginal_relevance_search_by_vector.<locals>.<listcomp>œ  s   ø€ ÐIÐIÐI°qÐ/°Ô2ÐIÐIÐIr.   )r¡   r   r�   Úarrayr    )r(   r   rN   rº   r»   r5   rb   Úmatched_embeddingsÚmmr_selectedÚfiltered_documentsrÅ   s             @r)   Ú'max_marginal_relevance_search_by_vectorz;SupabaseVectorStore.max_marginal_relevance_search_by_vectorv  s    ø€ ð0 ×FÒFØ�wñ
ô 
ˆð CÐB¸6ÐBÑBÔBÐØCÐC¸FÐCÑCÔCÐå1ÝŒH�i�[­¬
Ð3Ñ3Ô3ØØØ#ð	
ñ 
ô 
ˆð JÐIÐIÐI¸LÐIÑIÔIÐà!Ð!r.   c                ól   — | j                              |¦  «        }|                      ||||¬¦  «        }|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.

        `max_marginal_relevance_search` requires that `query_name` returns matched
        embeddings alongside the match documents. The following function
        demonstrates how to do this:

        ```sql
        CREATE FUNCTION match_documents_embeddings(query_embedding vector(1536),
                                                   match_count int)
            RETURNS TABLE(
                id uuid,
                content text,
                metadata jsonb,
                embedding vector(1536),
                similarity float)
            LANGUAGE plpgsql
            AS $$
            # variable_conflict use_column
        BEGIN
            RETURN query
            SELECT
                id,
                content,
                metadata,
                embedding,
                1 -(docstore.embedding <=> query_embedding) AS similarity
            FROM
                docstore
            ORDER BY
                docstore.embedding <=> query_embedding
            LIMIT match_count;
        END;
        $$;
        ```
        )r»   )r'   rT   rÊ   )r(   rM   rN   rº   r»   r5   r   r<   s           r)   Úmax_marginal_relevance_searchz1SupabaseVectorStore.max_marginal_relevance_search   sD   € ðr ”O×/Ò/°Ñ6Ô6ˆ	Ø×;Ò;Ø�q˜'¨{ð <ñ 
ô 
ˆð ˆr.   c                ó  — |€t          d¦  «        ‚d„ |D ¦   «         }|D ]_}| j                             | j        ¦  «                             ¦   «                              d|d         ¦  «                             ¦   «          Œ`dS )zUDelete by vector IDs.

        Args:
            ids: List of ids to delete.
        NzNo ids provided to delete.c                ó   — g | ]}d |i‘ŒS rª   r\   )r]   r¨   s     r)   r`   z.SupabaseVectorStore.delete.<locals>.<listcomp>é  s1   € ð &
ð &
ð &
ð ð �bðð&
ð &
ð &
r.   r¨   )rF   r&   r¯   r   ÚdeleteÚeqr‹   )r(   r3   r5   r³   rµ   s        r)   rÏ   zSupabaseVectorStore.deleteß  sž   € ð ˆ;ÝÐ9Ñ:Ô:Ð:ð&
ð &
ð ð	&
ñ &
ô &
ˆð ð 	Wð 	WˆCØŒL×Ò˜tœÑ/Ô/×6Ò6Ñ8Ô8×;Ò;¸DÀ#ÀdÄ)ÑLÔL×TÒTÑVÔVÐVÐVð	Wð 	Wr.   )r   N)r   r   r   r   r   r   r   r   r   r   r   r    )r   r   )NN)
r/   r0   r1   r2   r3   r4   r5   r   r   r6   )NNr"   r#   r   N)r?   r@   r/   r6   r   r   r1   rA   r   rB   r   rC   r   r   r   r   r3   r4   r5   r   r   rD   r,   )r=   rI   r"   rJ   r3   r4   r   r6   )rL   N)
rM   r   rN   r   rO   rP   r5   r   r   rJ   )
r   rY   rN   r   rO   rP   r5   r   r   rJ   )
rM   r   rN   r   rO   rP   r5   r   r   rc   )rM   rY   rO   rP   r   rf   )NNN)rM   rY   rN   r   rO   rP   rl   rC   rm   rn   r   rc   )
rM   rY   rN   r   rO   rP   rl   rC   r   r™   )r/   r0   r1   r¢   r   rJ   )r   r   r   r   r=   rI   r"   rJ   r3   r4   r   r   r5   r   r   r6   )rL   r¸   r¹   )r   rY   rN   r   rº   r   r»   r¼   r5   r   r   rJ   )rM   r   rN   r   rº   r   r»   r¼   r5   r   r   rJ   )r3   r4   r5   r   r   r    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   Úpropertyr-   r>   ÚclassmethodrH   r;   rX   rU   re   rk   ra   r¡   Ústaticmethodr8   rG   rÊ   rÌ   rÏ   r\   r.   r)   r   r      sQ  € € € € € ð8ð 8ð~ Ø'+ð,ð ,ð ,ð ,ð ,ð2 ðð ð ñ „Xðð 59Ø#'ð	
4ð 
4ð 
4ð 
4ð 
4ð ð
 +/Ø37Ø$/Ø'8ØØ#'ð 
ð  
ð  
ð  
ñ „[ð 
ðL $(ð	
ð 
ð 
ð 
ð 
ð Ø+/ð	Vð Vð Vð Vð Vð Ø+/ð	ð ð ð ð ð$ Ø+/ð	

ð 

ð 

ð 

ð 

ðð ð ð ð ,0Ø*.Ø+/ð<ð <ð <ð <ð <ðD ,0Ø*.ð$ð $ð $ð $ð $ðL ð 9=ðð ð ð ñ „\ðð ð%ð %ð %ñ „\ð%ðT ØØ ð("ð ("ð ("ð ("ð ("ðZ ØØ ð=ð =ð =ð =ð =ð~Wð Wð Wð Wð Wð Wð Wr.   r   )Ú
__future__r   rŽ   Ú	itertoolsr   Útypingr   r   r   r   r	   r
   r   r   r   Únumpyr�   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   r$   r   r\   r.   r)   ú<module>rà      sO  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à MÐ MÐ MÐ MÐ MÐ Màð Ø€O€O€OðVWð VWð VWð VWð VW˜+ñ VWô VWð VWð VWð VWr.   