§
    šŠtjˆt  ã                  ó¢  — d Z 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 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  ed
g¦  «        Zd
ZdZdZ ej         ej         d¦  «        ¦  «        j!        Z" ej#         ej         d¦  «        ¦  «        j!        Z$ej%        j!        Z&dd„Z'dd„Z(dd„Z)dd„Z*dd„Z+ G d„ de¦  «        Z,dS )z&Wrapper around TileDB vector database.é    )ÚannotationsN)ÚAnyÚDictÚIterableÚListÚMappingÚOptionalÚTuple)ÚDocument)Ú
Embeddings©Úguard_import)ÚVectorStore)Úmaximal_marginal_relevanceÚ	euclideanÚ	documentsÚvectorsÚuint64Úfloat32Úreturnr   c                 ó>   — t          d¦  «        t          d¦  «        fS )z@Import tiledb-vector-search if available, otherwise raise error.útiledb.vector_searchÚtiledbr   © ó    úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/tiledb.pyÚdependable_tiledb_importr      s%   € õ 	Ð+Ñ,Ô,Ý�XÑÔðð r   ÚgroupÚstrc                ó&   — | t                    j        S )ú Get the URI of the vector index.)ÚVECTOR_INDEX_NAMEÚuri©r   s    r   Úget_vector_index_uri_from_groupr%   #   s   € àÕ"Ô#Ô'Ð'r   c                ó&   — | t                    j        S )z”Get the URI of the documents array from group.

    Args:
        group: TileDB group object.

    Returns:
        URI of the documents array.
    )ÚDOCUMENTS_ARRAY_NAMEr#   r$   s    r   Ú"get_documents_array_uri_from_groupr(   (   s   € ð Õ%Ô&Ô*Ð*r   r#   c                ó   — | › dt           › �S )r!   ú/)r"   ©r#   s    r   Úget_vector_index_urir,   4   s   € àÐ'Ð'Õ%Ð'Ð'Ð'r   c                ó   — | › dt           › �S )z#Get the URI of the documents array.r*   )r'   r+   s    r   Úget_documents_array_urir.   9   s   € àÐ*Ð*Õ(Ð*Ð*Ð*r   c                  ó¬  — e Zd ZdZddddddœdUd„ZedVd„¦   «         ZddedœdWd%„Zddd&d'œdXd)„Z	ddd&d'œdYd+„Z
	 	 	 dZd[d-„Z	 	 	 dZd\d.„Zdd&d/dd0œd]d2„Z	 	 	 	 d^d_d3„Z	 	 	 	 d^d`d4„Zed5dd6œdad=„¦   «         Zedded>dd?d@œdbdH„¦   «         Z	 dcdddJ„Z	 	 	 dedfdL„ZeddedMd>dd?fdgdN„¦   «         Zedded>dd?d@œdhdQ„¦   «         ZeedddRœdidS„¦   «         ZdjdT„ZdS )kÚTileDBa2  TileDB vector store.

    To use, you should have the ``tiledb-vector-search`` python package installed.

    Example:
        .. code-block:: python

            from langchain_community import TileDB
            embeddings = OpenAIEmbeddings()
            db = TileDB(embeddings, index_uri, metric)

    Ú NF)Úvector_index_uriÚdocs_array_uriÚconfigÚ	timestampÚallow_dangerous_deserializationÚ	embeddingr   Ú	index_urir   Úmetricr2   r3   r4   úOptional[Mapping[str, Any]]r5   r   r6   ÚboolÚkwargsc               ó`  — |st          d¦  «        ‚|| _        |j        | _        || _        || _        || _        t          d¦  «        t          d¦  «        }}
|                     |¬¦  «        5  | 	                    | j        d¦  «        }|dk    r|nt          |¦  «        | _        |dk    r|nt          |¦  «        | _        |                     ¦   «          | 	                    | j        d¦  «        }|j                             d¦  «        | _        |                     ¦   «          || _        | j        dk    r+ |
j        j        d| j        | j        | j        d	œ|	¤Ž| _        n5| j        d
k    r* |
j        j        d| j        | j        | j        d	œ|	¤Ž| _        ddd¦  «         dS # 1 swxY w Y   dS )a†  Initialize with necessary components.

        Args:
            allow_dangerous_deserialization: whether to allow deserialization
                of the data which involves loading data using pickle.
                data can be modified by malicious actors to deliver a
                malicious payload that results in execution of
                arbitrary code on your machine.
        aŒ  TileDB relies on pickle for serialization and deserialization. This can be dangerous if the data is intercepted and/or modified by malicious actors prior to being de-serialized. If you are sure that the data is safe from modification, you can  set allow_dangerous_deserialization=True to proceed. Loading of compromised data using pickle can result in execution of arbitrary code on your machine.r   r   ©Úctx_or_configÚrr1   Ú
index_typeÚFLAT)r#   r4   r5   ÚIVF_FLATNr   )Ú
ValueErrorr7   Úembed_queryÚembedding_functionr8   r9   r4   r   Ú	scope_ctxÚGroupr%   r2   r(   r3   ÚcloseÚmetaÚgetrA   r5   Ú
flat_indexÚ	FlatIndexÚvector_indexÚivf_flat_indexÚIVFFlatIndex)Úselfr7   r8   r9   r2   r3   r4   r5   r6   r<   Ú	tiledb_vsr   Úindex_groupr   s                 r   Ú__init__zTileDB.__init__L   s;  € ð, /ð 		Ýð2ñô ð ð #ˆŒØ"+Ô"7ˆÔØ"ˆŒØˆŒØˆŒõ Ð/Ñ0Ô0Ý˜Ñ"Ô"ð ˆ	ð ×Ò¨FÐÑ3Ô3ð 	ð 	Ø Ÿ,š, t¤~°sÑ;Ô;ˆKð $ rÒ)Ð)ð !Ð å4°[ÑAÔAð Ô!ð " RÒ'Ð'ð �å7¸ÑDÔDð Ôð
 ×ÒÑÔÐØ—L’L Ô!6¸Ñ<Ô<ˆEØ#œjŸnšn¨\Ñ:Ô:ˆDŒOØ�KŠK‰MŒMˆMØ&ˆDŒNØŒ &Ò(Ð(Ø$B IÔ$8Ô$Bð %ØÔ-Øœ;Ø"œnð%ð %ð ð	%ð %�Ô!Ð!ð ” JÒ.Ð.Ø$I IÔ$<Ô$Ið %ØÔ-Øœ;Ø"œnð%ð %ð ð	%ð %�Ô!ð3	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á.D(F#Æ#F'Æ*F'r   úOptional[Embeddings]c                ó   — | j         S ©N)r7   )rQ   s    r   Ú
embeddingszTileDB.embeddings–   s
   € àŒ~Ðr   é   )ÚkÚfilterÚscore_thresholdÚidsú	List[int]ÚscoresúList[float]rZ   Úintr[   úOptional[Dict[str, Any]]r\   ÚfloatúList[Tuple[Document, float]]c               ó  ‡‡— t          d¦  «        }g }|                     | j        d| j        | j        ¬¦  «        }t          ||¦  «        D �]�\  }	}
|	dk    r|
dk    rŒ|	t          k    r|
t          k    rŒ*||	         }|�t          |d         ¦  «        dk    rt          d|	› d|› �¦  «        ‚| 
                    d	¦  «        }t          t          |d         d         ¦  «        ¬
¦  «        Š|�nt          j        t          j        |                     ¦   «         ¦  «                             t          j        ¦  «                             ¦   «         ¦  «        }|‰_        |�dd„ |                     ¦   «         D ¦   «         }t/          ˆfd„|                     ¦   «         D ¦   «         ¦  «        r|                     ‰|
f¦  «         �Œv|                     ‰|
f¦  «         �Œ�|                     ¦   «          ˆfd„|D ¦   «         }|d|…         S )a  Turns TileDB results into a list of documents and scores.

        Args:
            ids: List of indices of the documents in the index.
            scores: List of distances of the documents in the index.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, Any]]): Filter by metadata. Defaults to None.
            score_threshold: Optional, a floating point value to filter the
                resulting set of retrieved docs
        Returns:
            List of Documents and scores.
        r   r@   ©r5   r4   r   NÚtextzCould not find document for id z, got Úmetadata)Úpage_contentc                óJ   — i | ] \  }}|t          |t          ¦  «        s|gn|“Œ!S r   )Ú
isinstanceÚlist)Ú.0ÚkeyÚvalues      r   ú
<dictcomp>z0TileDB.process_index_results.<locals>.<dictcomp>Ä   sC   € ð ð ð á"˜˜Uð ­
°5½$Ñ(?Ô(?ÐJ˜%˜˜ÀUðð ð r   c              3  óV   •K  — | ]#\  }}‰j                              |¦  «        |v V — Œ$d S rW   )rh   rK   )rm   rn   ro   Ú
result_docs      €r   ú	<genexpr>z/TileDB.process_index_results.<locals>.<genexpr>È   sQ   øè è € ð ð á"˜˜Uð Ô'×+Ò+¨CÑ0Ô0°EÐ9ðð ð ð ð ð r   c                ó*   •— g | ]\  }}|‰k    ¯||f‘ŒS r   r   )rm   ÚdocÚscorer\   s      €r   ú
<listcomp>z0TileDB.process_index_results.<locals>.<listcomp>Ð   s+   ø€ ÐPÐPÐP¡  e°uÀÒ7OÐ7O��e�Ð7OÐ7OÐ7Or   )r   Úopenr3   r5   r4   ÚzipÚ
MAX_UINT64ÚMAX_FLOAT_32ÚlenrD   rK   r   r   ÚpickleÚloadsÚnpÚarrayÚtolistÚastypeÚuint8Útobytesrh   ÚitemsÚallÚappendrI   )rQ   r]   r_   rZ   r[   r\   r   ÚdocsÚ
docs_arrayÚidxrv   ru   Úpickled_metadatarh   rr   s        `        @r   Úprocess_index_resultszTileDB.process_index_resultsš   s1  øø€ õ* ˜hÑ'Ô'ˆØˆØ—[’[ØÔ °´ÀtÄ{ð !ñ 
ô 
ˆ
õ ˜c 6Ñ*Ô*ð 	1ñ 	1‰JˆC�Ø�aŠxˆx˜E QšJ˜JØØ•jÒ Ð  U­lÒ%:Ð%:ØØ˜S”/ˆCØˆ{�c # f¤+Ñ.Ô.°!Ò3Ð3Ý Ð!SÀ3Ð!SÐ!SÈcÐ!SÐ!SÑTÔTÐTØ"Ÿwšw zÑ2Ô2ÐÝ!­s°3°v´;¸q´>Ñ/BÔ/BÐCÑCÔCˆJØÐ+Ý!œ<Ý”HÐ-×4Ò4Ñ6Ô6Ñ7Ô7×>Ò>½r¼xÑHÔH×PÒPÑRÔRñô �ð '/�
Ô#ØÐ!ðð à&,§l¢l¡n¤nðñ ô �õ ð ð ð ð à&,§l¢l¡n¤nðñ ô ñ ô ð 5ð —K’K ¨UÐ 3Ñ4Ô4Ð4ùà—’˜Z¨Ð/Ñ0Ô0Ð0Ñ0Ø×ÒÑÔÐØPÐPÐPÐP¨tÐPÑPÔPˆØ�B�Q�BŒxˆr   é   ©rZ   r[   Úfetch_kr�   c               ó†  — d|v r|                      d¦  «        }nt          } | j        j        t	          j        t	          j        |¦  «                             t          j        ¦  «        g¦  «                             t          j        ¦  «        fd|€|n|i|¤Ž\  }}|                      |d         |d         |||¬¦  «        S )a[  Return docs most similar to query.

        Args:
            embedding: Embedding vector to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.
            filter (Optional[Dict[str, Any]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.
            **kwargs: kwargs to be passed to similarity search. Can include:
                nprobe: Optional, number of partitions to check if using IVF_FLAT index
                score_threshold: Optional, a floating point value to filter the
                    resulting set of retrieved docs

        Returns:
            List of documents most similar to the query text and distance
            in float for each. Lower score represents more similarity.
        r\   rZ   Nr   ©r]   r_   r[   rZ   r\   )	ÚpopÚ	MAX_FLOATrN   Úqueryr   r€   r‚   r   rŒ   )	rQ   r7   rZ   r[   r�   r<   r\   ÚdÚis	            r   Ú&similarity_search_with_score_by_vectorz-TileDB.similarity_search_with_score_by_vectorÓ   sÎ   € ð4  Ð&Ð&Ø$ŸjšjÐ):Ñ;Ô;ˆOˆOå'ˆOØ&ˆtÔ Ô&ÝŒH•b”h˜yÑ)Ô)×0Ò0µ´Ñ<Ô<Ð=Ñ>Ô>×EÒEÅbÄjÑQÔQð
ð 
à�>ˆaˆa wð
ð ð
ð 
‰ˆˆ1ð
 ×)Ò)Ø�!”˜Q˜qœT¨&°AÀð *ñ 
ô 
ð 	
r   r”   c               óT   — |                       |¦  «        } | j        |f|||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.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.

        Returns:
            List of documents most similar to the query text with
            Distance as float. Lower score represents more similarity.
        rŽ   )rF   r—   )rQ   r”   rZ   r[   r�   r<   r7   rˆ   s           r   Úsimilarity_search_with_scorez#TileDB.similarity_search_with_scoreú   sR   € ð, ×+Ò+¨EÑ2Ô2ˆ	Ø:ˆtÔ:Øð
àØØð	
ð 
ð
 ð
ð 
ˆð ˆr   úList[Document]c                ó>   —  | j         |f|||dœ|¤Ž}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.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.

        Returns:
            List of Documents most similar to the embedding.
        rŽ   c                ó   — g | ]\  }}|‘ŒS r   r   ©rm   ru   Ú_s      r   rw   z6TileDB.similarity_search_by_vector.<locals>.<listcomp>5  ó   € Ð2Ð2Ð2™˜˜Q�Ð2Ð2Ð2r   )r—   )rQ   r7   rZ   r[   r�   r<   Údocs_and_scoress          r   Úsimilarity_search_by_vectorz"TileDB.similarity_search_by_vector  sO   € ð( F˜$ÔEØð
àØØð	
ð 
ð
 ð
ð 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r   c                ó>   —  | j         |f|||dœ|¤Ž}d„ |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.
            filter: (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.
            fetch_k: (Optional[int]) Number of Documents to fetch before filtering.
                      Defaults to 20.

        Returns:
            List of Documents most similar to the query.
        rŽ   c                ó   — g | ]\  }}|‘ŒS r   r   r�   s      r   rw   z,TileDB.similarity_search.<locals>.<listcomp>N  rŸ   r   )r™   )rQ   r”   rZ   r[   r�   r<   r    s          r   Úsimilarity_searchzTileDB.similarity_search7  sJ   € ð( <˜$Ô;Øð
Ø˜v¨wð
ð 
Ø:@ð
ð 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r   ç      à?©rZ   r�   Úlambda_multr[   r§   c               ód  ‡ — d|v r|                      d¦  «        }nt          } ‰ j        j        t	          j        t	          j        |¦  «                             t          j        ¦  «        g¦  «                             t          j        ¦  «        fd|€|n|dz  i|¤Ž\  }}	‰                      |	d         |d         ||€|n|dz  |¬¦  «        }
ˆ fd„|
D ¦   «         }t          t	          j        |gt          j        ¬¦  «        |||¬	¦  «        }g }|D ]}| 
                    |
|         ¦  «         Œ|S )
az  Return docs and their similarity scores 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 before filtering 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 and similarity scores selected by maximal marginal
                relevance and score for each.
        r\   rZ   Né   r   r‘   c                ób   •— g | ]+\  }}‰j                              |j        g¦  «        d          ‘Œ,S ©r   )r7   Úembed_documentsri   )rm   ru   rž   rQ   s      €r   rw   zMTileDB.max_marginal_relevance_search_with_score_by_vector.<locals>.<listcomp>}  sE   ø€ ð 
ð 
ð 
ÙFLÀcÈ1ˆDŒN×*Ò*¨CÔ,<Ð+=Ñ>Ô>¸qÔAð
ð 
ð 
r   ©Údtype)rZ   r§   )r’   r“   rN   r”   r   r€   r‚   r   rŒ   r   r‡   )rQ   r7   rZ   r�   r§   r[   r<   r\   r_   ÚindicesÚresultsrX   Úmmr_selectedr    r–   s   `              r   Ú2max_marginal_relevance_search_with_score_by_vectorz9TileDB.max_marginal_relevance_search_with_score_by_vectorP  st  ø€ ð:  Ð&Ð&Ø$ŸjšjÐ):Ñ;Ô;ˆOˆOå'ˆOØ1˜$Ô+Ô1ÝŒH•b”h˜yÑ)Ô)×0Ò0µ´Ñ<Ô<Ð=Ñ>Ô>×EÒEÅbÄjÑQÔQð
ð 
à˜ˆgˆg¨W°q©[ð
ð ð
ð 
‰ˆ�ð
 ×,Ò,Ø˜”
Ø˜!”9ØØ˜ˆgˆg¨W°q©[Ø+ð -ñ 
ô 
ˆð
ð 
ð 
ð 
ØPWð
ñ 
ô 
ˆ
õ 2ÝŒH�i�[­¬
Ð3Ñ3Ô3ØØØ#ð	
ñ 
ô 
ˆð ˆØð 	/ð 	/ˆAØ×"Ò" 7¨1¤:Ñ.Ô.Ð.Ð.ØÐr   c                ó@   —  | j         |f||||dœ|¤Ž}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 before filtering 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.
        r¦   c                ó   — g | ]\  }}|‘ŒS r   r   r�   s      r   rw   zBTileDB.max_marginal_relevance_search_by_vector.<locals>.<listcomp>­  rŸ   r   )r²   )rQ   r7   rZ   r�   r§   r[   r<   r    s           r   Ú'max_marginal_relevance_search_by_vectorz.TileDB.max_marginal_relevance_search_by_vector‹  sR   € ð4 R˜$ÔQØð
àØØ#Øð
ð 
ð ð
ð 
ˆð 3Ð2 /Ð2Ñ2Ô2Ð2r   c                óV   — |                       |¦  «        } | 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 before filtering (if needed) 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.
        r¦   )rF   rµ   )	rQ   r”   rZ   r�   r§   r[   r<   r7   rˆ   s	            r   Úmax_marginal_relevance_searchz$TileDB.max_marginal_relevance_search¯  sU   € ð4 ×+Ò+¨EÑ2Ô2ˆ	Ø;ˆtÔ;Øð
àØØ#Øð
ð 
ð ð
ð 
ˆð ˆr   T)Ú	metadatasr4   rA   Ú
dimensionsÚvector_typeúnp.dtyper¸   ÚNonec               óv  — t          d¦  «        t          d¦  «        }}|                     |¬¦  «        5  	 |                     |¦  «         n# |j        $ r}	|	‚d }	~	ww xY w|                     |d¦  «        }
t          |
j        ¦  «        }t          |
j        ¦  «        }|dk    r|j         	                    ||||¬¦  «         n$|dk    r|j
         	                    ||||¬¦  «         |
                     |t          ¬¦  «         |                     d	d
t          dz
  ft          j        t          j        ¦  «        ¬¦  «        }|                     |¦  «        }|                     dt          j        d¦  «        d¬¦  «        }|g}|r7|                     dt          j        d¬¦  «        }|                     |¦  «         |                     |dd|¬¦  «        }|j         	                    ||¦  «         |
                     |t0          ¬¦  «         |
                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Nr   r   r>   ÚwrB   )r#   r¹   rº   r4   rC   )ÚnameÚidr   é   )r¿   Údomainr®   rg   ÚU1T)r¿   r®   Úvarrh   F)rÂ   ÚsparseÚallows_duplicatesÚattrs)r   rG   Úgroup_createÚTileDBErrorrH   r,   r#   r.   rL   ÚcreaterO   Úaddr"   ÚDimrz   r   r®   r   ÚDomainÚAttrrƒ   r‡   ÚArraySchemaÚArrayr'   rI   )Úclsr8   rA   r¹   rº   r¸   r4   rR   r   Úerrr   r2   Údocs_uriÚdimÚdomÚ	text_attrrÇ   Úmetadata_attrÚschemas                      r   rÊ   zTileDB.createÔ  s­  € õ Ð/Ñ0Ô0Ý˜Ñ"Ô"ð ˆ	ð ×Ò¨FÐÑ3Ô3ð /	ð /	ðØ×#Ò# IÑ.Ô.Ð.Ð.øØÔ%ð ð ð Ø�	øøøøðøøøà—L’L ¨CÑ0Ô0ˆEÝ3°E´IÑ>Ô>ÐÝ.¨u¬yÑ9Ô9ˆHØ˜VÒ#Ð#ØÔ$×+Ò+Ø(Ø)Ø +Ø!ð	 ,ñ ô ð ð ð ˜zÒ)Ð)ØÔ(×/Ò/Ø(Ø)Ø +Ø!ð	 0ñ ô ð ð �IŠIÐ&Õ->ˆIÑ?Ô?Ð?ð
 —*’*ØØ�:¨™>Ð*Ý”h�rœyÑ)Ô)ð ñ ô ˆCð
 —-’- Ñ$Ô$ˆCàŸš¨µr´xÀ±~´~È4˜ÑPÔPˆIØ�KˆEØð ,Ø &§¢°Å2Ä8ÐQU Ñ VÔ V�Ø—’˜]Ñ+Ô+Ð+Ø×'Ò'ØØØ"'Øð	 (ñ ô ˆFð ŒL×Ò ¨&Ñ1Ô1Ð1Ø�IŠI�hÕ%9ˆIÑ:Ô:Ð:Ø�KŠK‰MŒMˆMð_/	ð /	ð /	ñ /	ô /	ð /	ð /	ð /	ð /	ð /	ð /	ð /	øøøð /	ð /	ð /	ð /	ð /	ð /	s5   µH.·AÁH.Á
AÁAÁAÁGH.È.H2È5H2rB   r   )r¸   r]   r9   rA   r4   Úindex_timestampÚtextsú	List[str]rX   úList[List[float]]úOptional[List[dict]]úOptional[List[str]]rÙ   c               ó  — |t           vr't          d|› dt          t           ¦  «        › �¦  «        ‚t          d¦  «        t          d¦  «        }}t	          j        |¦  «                             t          j        ¦  «        }|                      |||j	        d         |j
        |d u|	¬¦  «         |                     |	¬¦  «        5  |st          d¦  «        ‚t          |¦  «        }t          |¦  «        }|€d	„ |D ¦   «         }t	          j        |¦  «                             t          j        ¦  «        } |j        j        d|||||
d
k    r|
nd |	dœ|¤Ž |                     |d¦  «        5 }|€Qt	          j        t'          |¦  «        t          j        ¬¦  «        }t)          t'          |¦  «        ¦  «        D ]}|||<   Œi }t	          j        |¦  «        |d<   |�ot	          j        t'          |¦  «        gt,          ¬¦  «        }d
}|D ]<}t	          j        t1          j        |¦  «        t          j        ¬¦  «        ||<   |dz  }Œ=||d<   |||<   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y    | d||||	dœ|¤ŽS )NzUnsupported distance metric: z. Expected one of r   r   rÁ   )r8   rA   r¹   rº   r¸   r4   r>   z3embeddings must be provided to build a TileDB indexc           	     ób   — g | ],}t          t          j        d t          dz
  ¦  «        ¦  «        ‘Œ-S ©r   rÁ   ©r   ÚrandomÚrandintrz   ©rm   rž   s     r   rw   z!TileDB.__from.<locals>.<listcomp>?  s0   € ÐMÐMÐMÀ!•s�6œ>¨!­Z¸!©^Ñ<Ô<Ñ=Ô=ÐMÐMÐMr   r   )rA   r8   Úinput_vectorsÚexternal_idsrÙ   r4   r¾   r­   rg   rh   )r7   r8   r9   r4   r   )ÚINDEX_METRICSrD   rl   r   r   r€   r‚   r   rÊ   Úshaper®   rG   r,   r.   r   Ú	ingestionÚingestrx   Úzerosr|   ÚrangeÚemptyÚobjectÚ
frombufferr}   Údumpsrƒ   )rÑ   rÚ   rX   r7   r8   r¸   r]   r9   rA   r4   rÙ   r<   rR   r   ræ   r2   rÓ   rç   ÚAr–   Údatar×   rh   s                          r   Ú__fromzTileDB.__from  sk  € ð  �Ð&Ð&Ýð=°Fð =ð =Ý'+­MÑ':Ô':ð=ð =ñô ð õ Ð/Ñ0Ô0Ý˜Ñ"Ô"ð ˆ	õ œ Ñ,Ô,×3Ò3µB´JÑ?Ô?ˆØ�
Š
ØØ!Ø$Ô*¨1Ô-Ø%Ô+Ø tÐ+Øð 	ñ 	
ô 	
ð 	
ð ×Ò¨FÐÑ3Ô3ð $	'ð $	'Øð XÝ Ð!VÑWÔWÐWå3°IÑ>Ô>ÐÝ.¨yÑ9Ô9ˆHØˆ{ØMÐMÀuÐMÑMÔM�Ýœ8 C™=œ=×/Ò/µ´	Ñ:Ô:ˆLà&ˆIÔÔ&ð Ø%Ø*Ø+Ø)Ø3BÀaÒ3GÐ3G  ÈTØðð ð ðð ð ð —’˜X sÑ+Ô+ð '¨qØÐ'Ý#%¤8­C°©J¬J½b¼iÐ#HÑ#HÔ#H�LÝ"¥3 u¡:¤:Ñ.Ô.ð ,ð ,˜Ø*+˜ Q™˜Ø�Ý!œx¨™œ��V‘ØÐ(Ý$&¤H­c°)©n¬nÐ-=ÅVÐ$LÑ$LÔ$L�MØ�AØ$-ð ð ˜Ý+-¬=Ý"œL¨Ñ2Ô2½"¼(ð,ñ ,ô ,˜ aÑ(ð ˜Q™˜˜Ø'4�D˜Ñ$à"&��,‘ð#'ð 'ð 'ñ 'ô 'ð 'ð 'ð 'ð 'ð 'ð 'øøøð 'ð 'ð 'ð 'ð'$	'ð $	'ð $	'ñ $	'ô $	'ð $	'ð $	'ð $	'ð $	'ð $	'ð $	'øøøð $	'ð $	'ð $	'ð $	'ðJ ˆsð 
ØØØØð	
ð 
ð
 ð
ð 
ð 	
s8   ÃB&I/Å)C#IÉI/ÉI	ÉI/ÉI	É I/É/I3É6I3úOptional[bool]c                ó°   — t          j        |¦  «                             t           j        ¦  «        }| j                             ||dk    r|nd¬¦  «         dS )am  Delete by vector ID or other criteria.

        Args:
            ids: List of ids to delete.
            timestamp: Optional timestamp to delete with.
            **kwargs: Other keyword arguments that subclasses might use.

        Returns:
            Optional[bool]: True if deletion is successful,
            False otherwise, None if not implemented.
        r   N)rç   r5   T)r   r€   r‚   r   rN   Údelete_batch)rQ   r]   r5   r<   rç   s        r   ÚdeletezTileDB.deletee  sZ   € õ ”x ‘}”}×+Ò+­B¬IÑ6Ô6ˆØÔ×&Ò&Ø%¸iÈ1ºn¸n°°ÐRVð 	'ñ 	
ô 	
ð 	
ð ˆtr   úIterable[str]c                ó¬  — t          d¦  «        }| j                             t          |¦  «        ¦  «        }|€d„ |D ¦   «         }t	          j        |¦  «                             t          j        ¦  «        }t	          j        t          |¦  «        d¬¦  «        }	t          t          |¦  «        ¦  «        D ]+}
t	          j        ||
         t          j        ¬¦  «        |	|
<   Œ,| j                             |	||dk    r|nd¬¦  «         i }t	          j        |¦  «        |d<   |�ot	          j        t          |¦  «        gt          ¬¦  «        }d}
|D ]<}t	          j        t!          j        |¦  «        t          j        ¬¦  «        ||
<   |
d	z  }
Œ=||d
<   |                     | j        d|dk    r|nd| 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 metadatas associated with the texts.
            ids: Optional ids of each text object.
            timestamp: Optional timestamp to write new texts with.
            kwargs: vectorstore specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        r   Nc           	     ób   — g | ],}t          t          j        d t          dz
  ¦  «        ¦  «        ‘Œ-S rá   râ   rå   s     r   rw   z$TileDB.add_texts.<locals>.<listcomp>‘  s0   € ÐIÐIÐI¸a•3•v”~ a­°a©Ñ8Ô8Ñ9Ô9ÐIÐIÐIr   ÚOr­   r   )r   rç   r5   rg   rÁ   rh   r¾   rf   )r   r7   r¬   rl   r   r€   r‚   r   rî   r|   rí   r   rN   Úupdate_batchrï   rð   r}   rñ   rƒ   rx   r3   r4   rI   )rQ   rÚ   r¸   r]   r5   r<   r   rX   rç   r   r–   rˆ   r×   rh   r‰   s                  r   Ú	add_textszTileDB.add_textsz  sÐ  € õ( ˜hÑ'Ô'ˆØ”^×3Ò3µD¸±K´KÑ@Ô@ˆ
Øˆ;ØIÐIÀ5ÐIÑIÔIˆCå”x ‘}”}×+Ò+­B¬IÑ6Ô6ˆÝ”(�C 
™OœO°CÐ8Ñ8Ô8ˆÝ•s˜:‘”Ñ'Ô'ð 	Cð 	CˆAÝœ *¨Q¤-µr´zÐBÑBÔBˆG�A‰JˆJØÔ×&Ò&ØØ%Ø#,°¢> >�i�i°tð 	'ñ 	
ô 	
ð 	
ð ˆÝ”x ‘”ˆˆV‰ØÐ ÝœH¥c¨)¡n¤nÐ%5½VÐDÑDÔDˆMØˆAØ%ð ð �Ý#%¤=µ´¸hÑ1GÔ1GÍrÌxÐ#XÑ#XÔ#X�˜aÑ Ø�Q‘��Ø,ˆD�Ñà—[’[ØÔØØ#,°¢> >�i�i°tØ”;ð	 !ñ 
ô 
ˆ
ð $(ˆ
�<Ñ Ø×ÒÑÔÐØˆ
r   z/tmp/tiledb_arrayc
                ó`   — g }|                      |¦  «        } | j        d||||||||||	dœ
|
¤ŽS )a’  Construct a TileDB index from raw documents.

        Args:
            texts: List of documents to index.
            embedding: Embedding function to use.
            metadatas: List of metadata dictionaries to associate with documents.
            ids: Optional ids of each text object.
            metric: Metric to use for indexing. Defaults to "euclidean".
            index_uri: The URI to write the TileDB arrays
            index_type: Optional,  Vector index type ("FLAT", IVF_FLAT")
            config: Optional, TileDB config
            index_timestamp: Optional, timestamp to write new texts with.

        Example:
            .. code-block:: python

                from langchain_community import TileDB
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                index = TileDB.from_texts(texts, embeddings)
        ©
rÚ   rX   r7   r¸   r]   r9   r8   rA   r4   rÙ   r   )r¬   Ú_TileDB__from)rÑ   rÚ   r7   r¸   r]   r9   r8   rA   r4   rÙ   r<   rX   s               r   Ú
from_textszTileDB.from_texts±  se   € ðF ˆ
Ø×.Ò.¨uÑ5Ô5ˆ
ØˆsŒzð 
ØØ!ØØØØØØ!ØØ+ð
ð 
ð ð
ð 
ð 	
r   Útext_embeddingsúList[Tuple[str, List[float]]]c               ób   — d„ |D ¦   «         }d„ |D ¦   «         } | j         d||||||||||	dœ
|
¤ŽS )a  Construct TileDB index from embeddings.

        Args:
            text_embeddings: List of tuples of (text, embedding)
            embedding: Embedding function to use.
            index_uri: The URI to write the TileDB arrays
            metadatas: List of metadata dictionaries to associate with documents.
            metric: Optional, Metric to use for indexing. Defaults to "euclidean".
            index_type: Optional, Vector index type ("FLAT", IVF_FLAT")
            config: Optional, TileDB config
            index_timestamp: Optional, timestamp to write new texts with.

        Example:
            .. code-block:: python

                from langchain_community import TileDB
                from langchain_community.embeddings import OpenAIEmbeddings
                embeddings = OpenAIEmbeddings()
                text_embeddings = embeddings.embed_documents(texts)
                text_embedding_pairs = list(zip(texts, text_embeddings))
                db = TileDB.from_embeddings(text_embedding_pairs, embeddings)
        c                ó   — g | ]
}|d          ‘ŒS r«   r   ©rm   Úts     r   rw   z*TileDB.from_embeddings.<locals>.<listcomp>	  s   € Ð/Ð/Ð/˜!��1”Ð/Ð/Ð/r   c                ó   — g | ]
}|d          ‘ŒS )rÁ   r   r  s     r   rw   z*TileDB.from_embeddings.<locals>.<listcomp>
  s   € Ð4Ð4Ð4˜q�a˜”dÐ4Ð4Ð4r   r   r   )r  )rÑ   r  r7   r8   r¸   r]   r9   rA   r4   rÙ   r<   rÚ   rX   s                r   Úfrom_embeddingszTileDB.from_embeddingsä  ss   € ðJ 0Ð/˜Ð/Ñ/Ô/ˆØ4Ð4 OÐ4Ñ4Ô4ˆ
àˆsŒzð 
ØØ!ØØØØØØ!ØØ+ð
ð 
ð ð
ð 
ð 	
r   )r9   r4   r5   c          	     ó   —  | d|||||dœ|¤ŽS )a}  Load a TileDB index from a URI.

        Args:
            index_uri: The URI of the TileDB vector index.
            embedding: Embeddings to use when generating queries.
            metric: Optional, Metric to use for indexing. Defaults to "euclidean".
            config: Optional, TileDB config
            timestamp: Optional, timestamp to use for opening the arrays.
        )r7   r8   r9   r4   r5   r   r   )rÑ   r8   r7   r9   r4   r5   r<   s          r   ÚloadzTileDB.load  s;   € ð( ˆsð 
ØØØØØð
ð 
ð ð
ð 
ð 	
r   c                ó4   —  | j         j        di |¤Ž| _         d S )Nr   )rN   Úconsolidate_updates)rQ   r<   s     r   r  zTileDB.consolidate_updates7  s&   € ØA˜DÔ-ÔAÐKÐKÀFÐKÐKˆÔÐÐr   )r7   r   r8   r   r9   r   r2   r   r3   r   r4   r:   r5   r   r6   r;   r<   r   )r   rU   )r]   r^   r_   r`   rZ   ra   r[   rb   r\   rc   r   rd   )r7   r`   rZ   ra   r[   rb   r�   ra   r<   r   r   rd   )r”   r   rZ   ra   r[   rb   r�   ra   r<   r   r   rd   )rY   Nr�   )r7   r`   rZ   ra   r[   rb   r�   ra   r<   r   r   rš   )r”   r   rZ   ra   r[   rb   r�   ra   r<   r   r   rš   )r7   r`   rZ   ra   r�   ra   r§   rc   r[   rb   r<   r   r   rd   )rY   r�   r¥   N)r7   r`   rZ   ra   r�   ra   r§   rc   r[   rb   r<   r   r   rš   )r”   r   rZ   ra   r�   ra   r§   rc   r[   rb   r<   r   r   rš   )r8   r   rA   r   r¹   ra   rº   r»   r¸   r;   r4   r:   r   r¼   )rÚ   rÛ   rX   rÜ   r7   r   r8   r   r¸   rÝ   r]   rÞ   r9   r   rA   r   r4   r:   rÙ   ra   r<   r   r   r0   )Nr   )r]   rÞ   r5   ra   r<   r   r   rõ   )NNr   )rÚ   rù   r¸   rÝ   r]   rÞ   r5   ra   r<   r   r   rÛ   )rÚ   rÛ   r7   r   r¸   rÝ   r]   rÞ   r9   r   r8   r   rA   r   r4   r:   rÙ   ra   r<   r   r   r0   )r  r  r7   r   r8   r   r¸   rÝ   r]   rÞ   r9   r   rA   r   r4   r:   rÙ   ra   r<   r   r   r0   )r8   r   r7   r   r9   r   r4   r:   r5   r   r<   r   r   r0   )r<   r   r   r¼   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rT   ÚpropertyrX   r“   rŒ   r—   r™   r¡   r¤   r²   rµ   r·   ÚclassmethodrÊ   ÚDEFAULT_METRICr  rø   rþ   r  r
  r  r  r   r   r   r0   r0   >   s@  € € € € € ðð ð& !#Ø Ø.2ØØ05ðHð Hð Hð Hð Hð HðT ðð ð ñ „Xðð Ø+/Ø!*ð7ð 7ð 7ð 7ð 7ð 7ðz Ø+/Øð%
ð %
ð %
ð %
ð %
ð %
ðV Ø+/Øðð ð ð ð ð ðF Ø+/Øð3ð 3ð 3ð 3ð 3ð@ Ø+/Øð3ð 3ð 3ð 3ð 3ð: ØØ Ø+/ð9ð 9ð 9ð 9ð 9ð 9ð| ØØ Ø+/ð"3ð "3ð "3ð "3ð "3ðN ØØ Ø+/ð#ð #ð #ð #ð #ðJ ð Ø.2ð=ð =ð =ð =ð =ñ „[ð=ð~ ð +/Ø#'Ø$Ø Ø.2Ø ðN
ð N
ð N
ð N
ð N
ñ „[ðN
ðb ABðð ð ð ð ð0 +/Ø#'Øð5ð 5ð 5ð 5ð 5ðn ð
 +/Ø#'Ø$Ø,Ø Ø.2Ø ð0
ð 0
ð 0
ð 0
ñ „[ð0
ðd ð +/Ø#'Ø$Ø Ø.2Ø ð3
ð 3
ð 3
ð 3
ð 3
ñ „[ð3
ðj ð %Ø.2Øð
ð 
ð 
ð 
ð 
ñ „[ð
ð8Lð Lð Lð Lð Lð Lr   r0   )r   r   )r   r   r   r   )r#   r   r   r   )-r  Ú
__future__r   r}   rã   ÚsysÚtypingr   r   r   r   r   r	   r
   Únumpyr   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   Ú	frozensetrè   r  r'   r"   Úiinfor®   Úmaxrz   Úfinfor{   Ú
float_infor“   r   r%   r(   r,   r.   r0   r   r   r   ú<module>r$     sì  ðØ ,Ð ,à "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø 
€
€
€
Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3à MÐ MÐ MÐ MÐ MÐ Mà�	˜;˜-Ñ(Ô(€Ø€Ø"Ð ØÐ ØˆRŒX�h�b”h˜xÑ(Ô(Ñ)Ô)Ô-€
ØˆrŒx˜˜œ Ñ+Ô+Ñ,Ô,Ô0€ØŒNÔ€	ðð ð ð ð(ð (ð (ð (ð
	+ð 	+ð 	+ð 	+ð(ð (ð (ð (ð
+ð +ð +ð +ð
zLð zLð zLð zLð zLˆ[ñ zLô zLð zLð zLð zLr   