§
    šŠtjR  ã                  ó  — d dl mZ d dlZd dlZd dl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mZ erd dlmZ d d	lmZmZ  ej        e ¦  «        Z!dd„Z" edd¬¦  «        Z# G d„ de¦  «        Z$dS )é    )ÚannotationsN)	ÚTYPE_CHECKINGÚAnyÚCallableÚIterableÚListÚOptionalÚTupleÚTypeVarÚUnion)ÚDocument)Ú
Embeddings)ÚVectorStore)ÚDistanceStrategyÚmaximal_marginal_relevance©ÚClient)ÚNeighborÚVectorDistanceMetricÚreturnr   c                 óZ   — 	 ddl m}  n"# t          $ r}t          d¦  «        |‚d }~ww xY w| S )Nr   r   zoCould not import aerospike_vector_search python package. Please install it with `pip install aerospike_vector`.)Úaerospike_vector_searchr   ÚImportError)r   Úes     úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/aerospike.pyÚ_import_aerospiker   #   s_   € ðØ2Ð2Ð2Ð2Ð2Ð2Ð2øÝð ð ð ÝðEñ
ô 
ð ð	øøøøðøøøð
 €Ms   ‚	 ‰
(“#£(ÚAVSTÚ	Aerospike)Úboundc                  óF  — e Zd ZdZdddddej        fdMd„ZedNd„¦   «         ZdOd„Z	dPd„Z
edQd!„¦   «         Z	 	 	 	 	 	 dRdSd/„Z	 	 dTdUd1„Z	 	 	 dVdWd7„Z	 	 	 dVdXd8„Z	 	 	 dVdYd:„Z	 	 	 dVdZd;„Zd[d=„Zed\d@„¦   «         Z	 	 	 	 	 d]d^dE„Z	 	 	 	 	 d]d_dF„Ze	 	 	 	 	 	 	 d`dadL„¦   «         ZdS )br   zu`Aerospike` vector store.

    To use, you should have the ``aerospike_vector_search`` python package installed.
    NÚ_vectorÚ_textÚ_idÚclientr   Ú	embeddingúUnion[Embeddings, Callable]Ú	namespaceÚstrÚ
index_nameúOptional[str]Ú
vector_keyÚtext_keyÚid_keyÚset_nameÚdistance_strategyú7Optional[Union[DistanceStrategy, VectorDistanceMetric]]c
                óv  — t          ¦   «         }
t          |t          ¦  «        st          j        d¦  «         t          ||
¦  «        st          dt          |¦  «        › �¦  «        ‚|| _        || _        || _	        || _
        || _        || _        || _        || _        |                      |	¦  «        | _        dS )a  Initialize with Aerospike client.

        Args:
            client: Aerospike client.
            embedding: Embeddings object or Callable (deprecated) to embed text.
            namespace: Namespace to use for storing vectors. This should match
            index_name: Name of the index previously created in Aerospike. This
            vector_key: Key to use for vector in metadata. This should match the
                key used during index creation.
            text_key: Key to use for text in metadata.
            id_key: Key to use for id in metadata.
            set_name: Default set name to use for storing vectors.
            distance_strategy: Distance strategy to use for similarity search
                This should match the distance strategy used during index creation.
        z`Passing in `embedding` as a Callable is deprecated. Please pass in an Embeddings object instead.zDclient should be an instance of aerospike_vector_search.Client, got N)r   Ú
isinstancer   ÚwarningsÚwarnÚ
ValueErrorÚtypeÚ_clientÚ
_embeddingÚ	_text_keyÚ_vector_keyÚ_id_keyÚ_index_nameÚ
_namespaceÚ	_set_nameÚconvert_distance_strategyÚ_distance_strategy)Úselfr$   r%   r'   r)   r+   r,   r-   r.   r/   Ú	aerospikes              r   Ú__init__zAerospike.__init__7   sÑ   € õ< &Ñ'Ô'ˆ	å˜)¥ZÑ0Ô0ð 	ÝŒMð.ñô ð õ
 ˜& )Ñ,Ô,ð 	Ýð&Ý˜F‘|”|ð&ð &ñô ð ð
 ˆŒØ#ˆŒØ!ˆŒØ%ˆÔØˆŒØ%ˆÔØ#ˆŒØ!ˆŒØ"&×"@Ò"@ÐARÑ"SÔ"SˆÔÐÐó    r   úOptional[Embeddings]c                óH   — t          | j        t          ¦  «        r| j        S dS )z/Access the query embedding object if available.N)r2   r8   r   ©rA   s    r   Ú
embeddingszAerospike.embeddingsm   s%   € õ �d”o¥zÑ2Ô2ð 	#Ø”?Ð"ØˆtrD   ÚtextsúIterable[str]úList[List[float]]c                ó¢   ‡ — t          ‰ j        t          ¦  «        r'‰ j                             t	          |¦  «        ¦  «        S ˆ fd„|D ¦   «         S )zEmbed search docs.c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS © )r8   )Ú.0ÚtrA   s     €r   ú
<listcomp>z.Aerospike._embed_documents.<locals>.<listcomp>x   s%   ø€ Ð2Ð2Ð2 q�—’ Ñ"Ô"Ð2Ð2Ð2rD   )r2   r8   r   Úembed_documentsÚlist)rA   rI   s   ` r   Ú_embed_documentszAerospike._embed_documentst   sN   ø€ å�d”o¥zÑ2Ô2ð 	@Ø”?×2Ò2µ4¸±;´;Ñ?Ô?Ð?Ø2Ð2Ð2Ð2¨EÐ2Ñ2Ô2Ð2rD   ÚtextúList[float]c                ó”   — t          | j        t          ¦  «        r| j                             |¦  «        S |                      |¦  «        S )zEmbed query text.)r2   r8   r   Úembed_query)rA   rU   s     r   Ú_embed_queryzAerospike._embed_queryz   s>   € å�d”o¥zÑ2Ô2ð 	5Ø”?×.Ò.¨tÑ4Ô4Ð4Ø�Š˜tÑ$Ô$Ð$rD   ú-Union[VectorDistanceMetric, DistanceStrategy]r   c                óä   — ddl m} t          | t          ¦  «        r| S | |j        k    rt          j        S | |j        k    rt          j        S | |j        k    rt          j        S t          d¦  «        ‚)zÕ
        Convert Aerospikes distance strategy to langchains DistanceStrategy
        enum. This is a convenience method to allow users to pass in the same
        distance metric used to create the index.
        r   )r   úDUnknown distance strategy, must be cosine, dot_product, or euclidean)	Úaerospike_vector_search.typesr   r2   r   ÚCOSINEÚDOT_PRODUCTÚSQUARED_EUCLIDEANÚEUCLIDEAN_DISTANCEr5   )r/   r   s     r   r?   z#Aerospike.convert_distance_strategy€   sŽ   € ð 	GÐFÐFÐFÐFÐFåÐ'Õ)9Ñ:Ô:ð 	%Ø$Ð$àÐ 4Ô ;Ò;Ð;Ý#Ô*Ð*àÐ 4Ô @Ò@Ð@Ý#Ô/Ð/àÐ 4Ô FÒFÐFÝ#Ô6Ð6åØRñ
ô 
ð 	
rD   éè  TÚ	metadatasúOptional[List[dict]]ÚidsúOptional[List[str]]Úembedding_chunk_sizeÚintÚwait_for_indexÚboolÚkwargsr   ú	List[str]c           
     ó”  — |€| j         }|€| j        }|r|€t          d¦  «        ‚t          |¦  «        }|pd„ |D ¦   «         }|rd„ |D ¦   «         }n|pd„ |D ¦   «         }t	          dt          |¦  «        |¦  «        D ]¦}	||	|	|z   …         }
||	|	|z   …         }||	|	|z   …         }|                      |
¦  «        }t          |||
¦  «        D ]\  }}}||| j        <   ||| j	        <   Œt          ||¦  «        D ]+\  }}||| j
        <    | j        j        d	| j        |||dœ|¤Ž Œ,Œ§|r!| j                             | j        |¬¦  «         |S )
a  Run more texts through the embeddings and add to the vectorstore.


        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadata associated with the texts.
            ids: Optional list of ids to associate with the texts.
            set_name: Optional aerospike set name to add the texts to.
            batch_size: Batch size to use when adding the texts to the vectorstore.
            embedding_chunk_size: Chunk size to use when embedding the texts.
            index_name: Optional aerospike index name used for waiting for index
                completion. If not provided, the default index_name will be used.
            wait_for_index: If True, wait for the all the texts to be indexed
                before returning. Requires index_name to be provided. Defaults
                to True.
            kwargs: Additional keyword arguments to pass to the client upsert call.

        Returns:
            List of ids from adding the texts into the vectorstore.

        Nz6if wait_for_index is True, index_name must be providedc                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S rN   )r(   ÚuuidÚuuid4©rO   Ú_s     r   rQ   z'Aerospike.add_texts.<locals>.<listcomp>Å   s&   € Ð7Ð7Ð7¨A•c�$œ*™,œ,Ñ'Ô'Ð7Ð7Ð7rD   c                ó6   — g | ]}|                      ¦   «         ‘ŒS rN   )Úcopy)rO   Úms     r   rQ   z'Aerospike.add_texts.<locals>.<listcomp>É   s    € Ð5Ð5Ð5 a˜Ÿš™œÐ5Ð5Ð5rD   c                ó   — g | ]}i ‘ŒS rN   rN   rq   s     r   rQ   z'Aerospike.add_texts.<locals>.<listcomp>Ë   s   € Ð%8Ð%8Ð%8¨Q bÐ%8Ð%8Ð%8rD   r   )r'   Úkeyr.   Úrecord_data)r'   ÚnamerN   )r>   r<   r5   rS   ÚrangeÚlenrT   Úzipr:   r9   r;   r7   Úupsertr=   Úwait_for_index_completion)rA   rI   rc   re   r.   rg   r)   ri   rk   ÚiÚchunk_textsÚ	chunk_idsÚchunk_metadatasrH   Úmetadatar%   rU   Úids                     r   Ú	add_textszAerospike.add_texts›   sø  € ð@ ÐØ”~ˆHàÐØÔ)ˆJàð 	W˜jÐ0ÝÐUÑVÔVÐVå�U‘”ˆØÐ7Ð7Ð7°Ð7Ñ7Ô7ˆð ð 	9Ø5Ð5¨9Ð5Ñ5Ô5ˆIˆIà!Ð8Ð%8Ð%8°%Ð%8Ñ%8Ô%8ˆIå�q�#˜e™*œ*Ð&:Ñ;Ô;ð 	ð 	ˆAØ  AÐ(<Ñ$<Ð <Ô=ˆKØ˜A Ð$8Ñ 8Ð8Ô9ˆIØ'¨¨AÐ0DÑ,DÐ(DÔEˆOØ×.Ò.¨{Ñ;Ô;ˆJå-0Ø ¨[ñ.ô .ð 0ð 0Ñ)�˜) Tð .7�˜Ô)Ñ*Ø+/�˜œÑ(Ð(å # I¨Ñ ?Ô ?ð ð ‘��HØ)+�˜œÑ&Ø#�”Ô#ð Ø"œoØØ%Ø (ð	ð ð
 ðð ð ð ðð ð 	ØŒL×2Ò2Øœ/Øð 3ñ ô ð ð
 ˆ
rD   úOptional[bool]c                ór   — ddl m} |r.|D ]+}	  | j        j        d| j        ||dœ|¤Ž Œ# |$ r Y  dS w xY wdS )a7  Delete by vector ID or other criteria.

        Args:
            ids: List of ids to delete.
            **kwargs: Other keyword arguments to pass to client delete call.

        Returns:
            Optional[bool]: True if deletion is successful,
            False otherwise, None if not implemented.
        r   )ÚAVSServerError)r'   rw   r.   FTrN   )r   rˆ   r7   Údeleter=   )rA   re   r.   rk   rˆ   r„   s         r   r‰   zAerospike.deleteë   sœ   € ð  	;Ð:Ð:Ð:Ð:Ð:àð 
	!Øð 	!ð 	!�ð!Ø'�D”LÔ'ð Ø"&¤/ØØ!)ðð ð !ð	ð ð ð øð &ð !ð !ð !Ø ˜5˜5˜5ð!øøøð ˆts   Ž*ª4³4é   ÚqueryÚkÚmetadata_keysúList[Tuple[Document, float]]c                óL   —  | j         |                      |¦  «        f|||dœ|¤ŽS )a‡  Return aerospike documents most similar to query, along with scores.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            metadata_keys: List of metadata keys to return with the documents.
                If None, all metadata keys will be returned. Defaults to None.
            index_name: Name of the index to search. Overrides the default
                index_name.
            kwargs: Additional keyword arguments to pass to the search method.

        Returns:
            List of Documents most similar to the query and associated scores.
        ©rŒ   r�   r)   )Ú&similarity_search_by_vector_with_scorerY   )rA   r‹   rŒ   r�   r)   rk   s         r   Úsimilarity_search_with_scorez&Aerospike.similarity_search_with_score  sI   € ð. ;ˆtÔ:Ø×Ò˜eÑ$Ô$ð
àØ'Ø!ð	
ð 
ð
 ð
ð 
ð 	
rD   c           	     ó¤  — g }|r| j         |vr| j         g|z   }|€| j        }|€t          d¦  «        ‚ | j        j        d|| j        |||dœ|¤Ž}|D ]}}|j        }	| j         |	v rH|	                     | j         ¦  «        }
|j        }| 	                    t          |
|	¬¦  «        |f¦  «         ŒZt                               d| j         › d�¦  «         Œ~|S )a³  Return aerospike documents most similar to embedding, along with scores.

        Args:
            embedding: Embedding to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            metadata_keys: List of metadata keys to return with the documents.
                If None, all metadata keys will be returned. Defaults to None.
            index_name: Name of the index to search. Overrides the default
                index_name.
            kwargs: Additional keyword arguments to pass to the client
                vector_search method.

        Returns:
            List of Documents most similar to the query and associated scores.

        Nzindex_name must be provided)r)   r'   r‹   ÚlimitÚfield_names)Úpage_contentrƒ   zFound document with no `z` key. Skipping.rN   )r9   r<   r5   r7   Úvector_searchr=   ÚfieldsÚpopÚdistanceÚappendr   ÚloggerÚwarning)rA   r%   rŒ   r�   r)   rk   ÚdocsÚresultsÚresultrƒ   rU   Úscores               r   r‘   z0Aerospike.similarity_search_by_vector_with_score*  s   € ð2 ˆàð 	=˜Tœ^°=Ð@Ð@Ø!œ^Ð,¨}Ñ<ˆMàÐØÔ)ˆJàÐÝÐ:Ñ;Ô;Ð;à"< $¤,Ô"<ð #
Ø!Ø”oØØØ%ð#
ð #
ð ð#
ð #
ˆð ð 	ð 	ˆFØ”}ˆHàŒ~ Ð)Ð)Ø—|’| D¤NÑ3Ô3�Øœ�Ø—’�X°4À(ÐKÑKÔKÈUÐSÑTÔTÐTÐTå—’ØO¨t¬~ÐOÐOÐOñô ð ð àˆrD   úList[Document]c                ó:   — d„  | j         |f|||dœ|¤ŽD ¦   «         S )ak  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.
            metadata_keys: List of metadata keys to return with the documents.
                If None, all metadata keys will be returned. Defaults to None.
            index_name: Name of the index to search. Overrides the default
                index_name.
            kwargs: Additional keyword arguments to pass to the search method.


        Returns:
            List of Documents most similar to the query vector.
        c                ó   — g | ]\  }}|‘ŒS rN   rN   ©rO   Údocrr   s      r   rQ   z9Aerospike.similarity_search_by_vector.<locals>.<listcomp>}  s,   € ð 	
ð 	
ð 	
á��Qð ð	
ð 	
ð 	
rD   r�   )r‘   )rA   r%   rŒ   r�   r)   rk   s         r   Úsimilarity_search_by_vectorz%Aerospike.similarity_search_by_vectorf  sR   € ð.	
ð 	
àE˜$ÔEØðàØ+Ø%ð	ð ð
 ðð ð	
ñ 	
ô 	
ð 		
rD   c                ó>   —  | j         |f|||dœ|¤Ž}d„ |D ¦   «         S )a*  Return aerospike documents most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            metadata_keys: List of metadata keys to return with the documents.
                If None, all metadata keys will be returned. Defaults to None.
            index_name: Optional name of the index to search. Overrides the
                default index_name.

        Returns:
            List of Documents most similar to the query and score for each
        r�   c                ó   — g | ]\  }}|‘ŒS rN   rN   r¥   s      r   rQ   z/Aerospike.similarity_search.<locals>.<listcomp>   s   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2rD   )r’   )rA   r‹   rŒ   r�   r)   rk   Údocs_and_scoress          r   Úsimilarity_searchzAerospike.similarity_searchˆ  sJ   € ð* <˜$Ô;Øð
Ø mÀ
ð
ð 
ØNTð
ð 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2rD   úCallable[[float], float]c                óÈ   — | j         t          j        k    r| j        S | j         t          j        k    r| j        S | j         t          j        k    r| j        S t          d¦  «        ‚)aÓ  
        The 'correct' relevance function
        may differ depending on a few things, including:
        - the distance / similarity metric used by the VectorStore
        - the scale of your embeddings (OpenAI's are unit normed. Many others are not!)
        - embedding dimensionality
        - etc.

        0 is dissimilar, 1 is similar.

        Aerospike's relevance_fn assume euclidean and dot product embeddings are
        normalized to unit norm.
        r\   )	r@   r   r^   Ú_cosine_relevance_score_fnr_   Ú%_max_inner_product_relevance_score_fnra   Ú_euclidean_relevance_score_fnr5   rG   s    r   Ú_select_relevance_score_fnz$Aerospike._select_relevance_score_fn¢  sj   € ð Ô"Õ&6Ô&=Ò=Ð=ØÔ2Ð2ØÔ$Õ(8Ô(DÒDÐDØÔ=Ð=ØÔ$Õ(8Ô(KÒKÐKØÔ5Ð5åØVñô ð rD   r¡   Úfloatc                ó   — d| dz  z
  S )zgAerospike returns cosine distance scores between [0,2]

        0 is dissimilar, 1 is similar.
        é   é   rN   )r¡   s    r   r®   z$Aerospike._cosine_relevance_score_fn»  s   € ð �E˜A‘I‰ÐrD   é   ç      à?Úfetch_kÚlambda_multc                óX  ‡ ‡
— |r‰ j         |vr‰ j         g|z   } ‰ j        |f|||dœ|¤ŽŠ
t          t          j        |gt          j        ¬¦  «        ˆ fd„‰
D ¦   «         ||¬¦  «        }|r3‰ j         |v r*|D ]'}	‰
|	         j                             ‰ 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.
            metadata_keys: List of metadata keys to return with the documents.
                If None, all metadata keys will be returned. Defaults to None.
            index_name: Optional name of the index to search. Overrides the
                default index_name.
        Returns:
            List of Documents selected by maximal marginal relevance.
        r�   )Údtypec                ó4   •— g | ]}|j         ‰j                 ‘ŒS rN   )rƒ   r:   )rO   r¦   rA   s     €r   rQ   zEAerospike.max_marginal_relevance_search_by_vector.<locals>.<listcomp>í  s#   ø€ Ð<Ð<Ð<°ˆSŒ\˜$Ô*Ô+Ð<Ð<Ð<rD   )rŒ   r¹   c                ó    •— g | ]
}‰|         ‘ŒS rN   rN   )rO   r   rž   s     €r   rQ   zEAerospike.max_marginal_relevance_search_by_vector.<locals>.<listcomp>ö  s   ø€ Ð.Ð.Ð.˜A��Q”Ð.Ð.Ð.rD   )r:   r§   r   ÚnpÚarrayÚfloat32rƒ   r™   )rA   r%   rŒ   r¸   r¹   r�   r)   rk   Úmmr_selectedr   rž   s   `         @r   Ú'max_marginal_relevance_search_by_vectorz1Aerospike.max_marginal_relevance_search_by_vectorÃ  s	  øø€ ð< ð 	?˜TÔ-°]ÐBÐBØ!Ô-Ð.°Ñ>ˆMà/ˆtÔ/Øð
àØ'Ø!ð	
ð 
ð
 ð
ð 
ˆõ 2ÝŒH�i�[­¬
Ð3Ñ3Ô3Ø<Ð<Ð<Ð<°tÐ<Ñ<Ô<ØØ#ð	
ñ 
ô 
ˆð ð 	7˜TÔ-°Ð>Ð>Ø!ð 7ð 7�Ø�Q”Ô ×$Ò$ TÔ%5Ñ6Ô6Ð6Ð6à.Ð.Ð.Ð. Ð.Ñ.Ô.Ð.rD   c                óT   — |                       |¦  «        } | j        ||||f||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:
            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.
            index_name: Name of the index to search.
        Returns:
            List of Documents selected by maximal marginal relevance.
        )r�   r)   )rY   rÂ   )	rA   r‹   rŒ   r¸   r¹   r�   r)   rk   r%   s	            r   Úmax_marginal_relevance_searchz'Aerospike.max_marginal_relevance_searchø  sV   € ð6 ×%Ò% eÑ,Ô,ˆ	Ø;ˆtÔ;ØØØØð	
ð
 (Ø!ð
ð 
ð ð
ð 
ð 	
rD   Útestr   Úembeddings_chunk_sizeÚclient_kwargsúOptional[dict]c
                óF   —  | |||fi |
¤Ž} |j         |f||||dœ|	pi ¤Ž |S )a§  
        This is a user friendly interface that:
            1. Embeds text.
            2. Converts the texts into documents.
            3. Adds the documents to a provided Aerospike index

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

        Example:
            .. code-block:: python

                from langchain_community.vectorstores import Aerospike
                from langchain_openai import OpenAIEmbeddings
                from aerospike_vector_search import Client, HostPort

                client = Client(seeds=HostPort(host="localhost", port=5000))
                aerospike = Aerospike.from_texts(
                    ["foo", "bar", "baz"],
                    embedder,
                    client,
                    "namespace",
                    index_name="index",
                    vector_key="vector",
                    distance_strategy=MODEL_DISTANCE_CALC,
                )
        )rc   re   r)   rg   )r…   )ÚclsrI   r%   rc   r$   r'   r)   re   rÆ   rÇ   rk   rB   s               r   Ú
from_textszAerospike.from_texts  sw   € ðP �CØØØð
ð 
ð ð	
ð 
ˆ	ð 	ˆ	ÔØð	
àØØ!Ø!6ð	
ð 	
ð Ð" ð	
ð 	
ð 	
ð ÐrD   )r$   r   r%   r&   r'   r(   r)   r*   r+   r(   r,   r(   r-   r(   r.   r*   r/   r0   )r   rE   )rI   rJ   r   rK   )rU   r(   r   rV   )r/   rZ   r   r   )NNNrb   NT)rI   rJ   rc   rd   re   rf   r.   r*   rg   rh   r)   r*   ri   rj   rk   r   r   rl   )NN)re   rf   r.   r*   rk   r   r   r†   )rŠ   NN)r‹   r(   rŒ   rh   r�   rf   r)   r*   rk   r   r   rŽ   )r%   rV   rŒ   rh   r�   rf   r)   r*   rk   r   r   rŽ   )r%   rV   rŒ   rh   r�   rf   r)   r*   rk   r   r   r¢   )r‹   r(   rŒ   rh   r�   rf   r)   r*   rk   r   r   r¢   )r   r¬   )r¡   r²   r   r²   )rŠ   r¶   r·   NN)r%   rV   rŒ   rh   r¸   rh   r¹   r²   r�   rf   r)   r*   rk   r   r   r¢   )r‹   r(   rŒ   rh   r¸   rh   r¹   r²   r�   rf   r)   r*   rk   r   r   r¢   )NNrÅ   NNrb   N)rI   rl   r%   r   rc   rd   r$   r   r'   r(   r)   r*   re   rf   rÆ   rh   rÇ   rÈ   rk   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ra   rC   ÚpropertyrH   rT   rY   Ústaticmethodr?   r…   r‰   r’   r‘   r§   r«   r±   r®   rÂ   rÄ   ÚclassmethodrË   rN   rD   r   r   r   1   sl  € € € € € ðð ð %)Ø#ØØØ"&ð Ô/ð4Tð 4Tð 4Tð 4Tð 4Tðl ðð ð ñ „Xðð3ð 3ð 3ð 3ð%ð %ð %ð %ð ð
ð 
ð 
ñ „\ð
ð: +/Ø#'Ø"&Ø$(Ø$(Ø#ðNð Nð Nð Nð Nðd $(Ø"&ðð ð ð ð ðF Ø-1Ø$(ð
ð 
ð 
ð 
ð 
ðD Ø-1Ø$(ð:ð :ð :ð :ð :ð~ Ø-1Ø$(ð 
ð  
ð  
ð  
ð  
ðJ Ø-1Ø$(ð3ð 3ð 3ð 3ð 3ð4ð ð ð ð2 ðð ð ñ „\ðð ØØ Ø-1Ø$(ð3/ð 3/ð 3/ð 3/ð 3/ðp ØØ Ø-1Ø$(ð$
ð $
ð $
ð $
ð $
ðL ð
 +/ØØØ$(Ø#'Ø%)Ø(,ð6ð 6ð 6ð 6ñ „[ð6ð 6ð 6rD   )r   r   )%Ú
__future__r   Úloggingro   r3   Ú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   r   Ú	getLoggerrÌ   rœ   r   r   r   rN   rD   r   ú<module>rÜ      s»  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ðð ð ð ð ð ð ð ð
 ð MØ.Ð.Ð.Ð.Ð.Ð.ØLÐLÐLÐLÐLÐLÐLÐLà	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð ð €wˆv˜[Ð)Ñ)Ô)€ðdð dð dð dð d�ñ dô dð dð dð drD   