§
    šŠtjb  ã                  óÊ   — d dl mZ d dl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 d	Zdd„Zdd„Z G d„ de¦  «        ZdS )é    )ÚannotationsN)ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚType)ÚDocument)Ú
Embeddings©Úguard_import)ÚVectorStore)Úmaximal_marginal_relevanceé   Úreturnr   c                 ó    — t          d¦  «        S )zImport lancedb package.Úlancedbr   © ó    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/langchain_community/vectorstores/lancedb.pyÚimport_lancedbr      s   € å˜	Ñ"Ô"Ð"r   ÚfilterúDict[str, str]Ústrc                ód   — d                      d„ |                      ¦   «         D ¦   «         ¦  «        S )z2Converts a dict filter to a LanceDB filter string.z AND c                ó$   — g | ]\  }}|› d |› d�‘ŒS )z = 'ú'r   )Ú.0ÚkÚvs      r   ú
<listcomp>z#to_lance_filter.<locals>.<listcomp>   s(   € ÐCÐCÐC©D¨A¨q˜A˜˜ 1˜˜˜ÐCÐCÐCr   )ÚjoinÚitems)r   s    r   Úto_lance_filterr%      s+   € à�<Š<ÐCÐC°F·L²L±N´NÐCÑCÔCÑDÔDÐDr   c                  óf  — e Zd ZdZdddddddddddd	ddefd`d„Zdadbd%„Zedcd&„¦   «         Z	 	 ddded/„Z		 dfdgd3„Z
	 	 	 	 	 	 	 dhdid?„ZdjdA„Z	 	 dddkdC„Z	 	 	 dldmdG„ZdndI„Z	 	 	 dldodL„Z	 	 	 dldodM„Z	 	 dddpdN„Z	 	 	 	 dqdrdQ„Z	 	 	 	 dsdtdW„Z	 	 	 	 dsdudX„Ze	 	 	 	 	 	 	 	 	 	 	 	 dvdwd\„¦   «         Z	 	 	 	 	 dxdyd_„ZdS )zÚLanceDBay  `LanceDB` vector store.

    To use, you should have ``lancedb`` python package installed.
    You can install it with ``pip install lancedb``.

    Args:
        connection: LanceDB connection to use. If not provided, a new connection
                    will be created.
        embedding: Embedding to use for the vectorstore.
        vector_key: Key to use for the vector in the database. Defaults to ``vector``.
        id_key: Key to use for the id in the database. Defaults to ``id``.
        text_key: Key to use for the text in the database. Defaults to ``text``.
        table_name: Name of the table to use. Defaults to ``vectorstore``.
        api_key: API key to use for LanceDB cloud database.
        region: Region to use for LanceDB cloud database.
        mode: Mode to use for adding data to the table. Valid values are
              ``append`` and ``overwrite``. Defaults to ``overwrite``.



    Example:
        .. code-block:: python
            vectorstore = LanceDB(uri='/lancedb', embedding_function)
            vectorstore.add_texts(['text1', 'text2'])
            result = vectorstore.similarity_search('text1')
    Nz/tmp/lancedbÚvectorÚidÚtextÚvectorstoreÚ	overwriteÚl2Ú
connectionúOptional[Any]Ú	embeddingúOptional[Embeddings]ÚuriúOptional[str]Ú
vector_keyÚid_keyÚtext_keyÚ
table_nameÚapi_keyÚregionÚmodeÚtableÚdistanceÚrerankerÚrelevance_score_fnú"Optional[Callable[[float], float]]ÚlimitÚintc                óR  — t          d¦  «        }t          d¦  «        |j        _        || _        || _        || _        || _        |dk    r|pt          j        d¦  «        nd| _	        |	| _
        |
| _        || _        || _        || _        d| _        t!          ||j        j        ¦  «        r|| _        n|€d| _        nt)          d¦  «        ‚t!          |t*          ¦  «        r+| j	        €$|                     d¦  «        rt)          d¦  «        ‚| j        €t)          d	¦  «        ‚t!          ||j        j        ¦  «        r|| _        nÒt!          |t*          |j        j        f¦  «        rt)          d
¦  «        ‚| j	        €|                     |¦  «        | _        n€t!          |t*          ¦  «        rk|                     d¦  «        r(|                     || j	        | j
        ¬¦  «        | _        n.|                     |¦  «        | _        t9          j        d¦  «         |�r	 t!          ||j        j        |j        j        j        f¦  «        sJ ‚|| _        tA          |d¦  «        r|j!        nd| _"        dS # tF          $ r t)          d¦  «        ‚w xY w|  $                    |d¬¦  «        | _        dS )z$Initialize with Lance DB vectorstorer   zlancedb.remote.tableÚ ÚLANCE_API_KEYNz9`reranker` has to be a lancedb.rerankers.Reranker object.zdb://z&API key is required for LanceDB cloud.z#embedding object should be providedzs`connection` has to be a lancedb.db.LanceDBConnection object.                `lancedb.db.LanceTable` is deprecated.)r8   r9   z[api key provided with local uri.                            The data will be stored locallyÚnameÚremote_tablezj`table` has to be a lancedb.db.LanceTable or 
                    lancedb.remote.table.RemoteTable object.T)Úset_default)%r   Úremoter;   Ú
_embeddingÚ_vector_keyÚ_id_keyÚ	_text_keyÚosÚgetenvr8   r9   r:   r<   Úoverride_relevance_score_fnr@   Ú
_fts_indexÚ
isinstanceÚ	rerankersÚRerankerÚ	_rerankerÚ
ValueErrorr   Ú
startswithÚdbÚLanceDBConnectionÚ_connectionÚ
LanceTableÚconnectÚwarningsÚwarnÚRemoteTableÚ_tableÚhasattrrE   Ú_table_nameÚAssertionErrorÚ	get_table)Úselfr.   r0   r2   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r@   r   s                    r   Ú__init__zLanceDB.__init__:   sß  € õ& ˜yÑ)Ô)ˆÝ+Ð,BÑCÔCˆŒÔØ#ˆŒØ%ˆÔØˆŒØ!ˆŒØ@GÈ2ÂÀ�wÐ<¥"¤)¨OÑ"<Ô"<øÐSWˆŒØˆŒØˆŒ	Ø ˆŒØ+=ˆÔ(ØˆŒ
ØˆŒå�h Ô 1Ô :Ñ;Ô;ð 	Ø%ˆDŒNˆNØÐØ!ˆDŒNˆNåØKñô ð õ �c�3ÑÔð 	K D¤LÐ$8Ø�~Š~˜gÑ&Ô&ð KÝ Ð!IÑJÔJÐJàŒ?Ð"ÝÐBÑCÔCÐCå�j '¤*Ô">Ñ?Ô?ð 	Ø)ˆDÔÐÝ˜
¥S¨'¬*Ô*?Ð$@ÑAÔAð 	Ýð8ñô ð ð
 Œ|Ð#Ø#*§?¢?°3Ñ#7Ô#7�Ô Ð å˜c¥3Ñ'Ô'ð 
Ø—~’~ gÑ.Ô.ð 	Ø+2¯?ª?Ø¨¬¸d¼kð ,;ñ ,ô ,˜Ô(Ð(ð ,3¯?ª?¸3Ñ+?Ô+?˜Ô(Ý œð=ñô ð ð ÐðÝ!Ø˜GœJÔ1°7´>Ô3GÔ3SÐTñô ð ð ð ð $�”å")¨%°Ñ"8Ô"8ÐL�E”J�J¸nð Ô Ð Ð øõ "ð ð ð Ý ð@ñô ð ðøøøð Ÿ.š.¨À˜.ÑFÔFˆDŒKˆKˆKs   ÈAI. É.JFÚresultsr   ÚscoreÚboolr   c                ó  ‡ ‡‡‡— ‰j         j        }d|v rdŠn	d|v rdŠnd Šd|v Š‰�|s*ˆˆˆ fd„t          t          ‰¦  «        ¦  «        D ¦   «         S ‰r-|r-ˆˆˆˆ fd„t          t          ‰¦  «        ¦  «        D ¦   «         S d S d S )NÚ	_distanceÚ_relevance_scoreÚmetadatac                ó¼   •— g | ]X}t          ‰‰j                 |                              ¦   «         ‰r ‰d          |                              ¦   «         ni ¬¦  «        ‘ŒYS ©rl   )Úpage_contentrl   ©r   rL   Úas_py)r   ÚidxÚhas_metadatarf   rd   s     €€€r   r"   z+LanceDB.results_to_docs.<locals>.<listcomp>Ÿ   sy   ø€ ð ð ð ð
 õ	 Ø!(¨¬Ô!8¸Ô!=×!CÒ!CÑ!EÔ!EØAMÐU˜W ZÔ0°Ô5×;Ò;Ñ=Ô=Ð=ÐSUðñ ô ðð ð r   c                óü   •— g | ]x}t          ‰‰j                 |                              ¦   «         ‰r ‰d          |                              ¦   «         ni ¬¦  «        ‰‰         |                              ¦   «         f‘ŒyS rn   rp   )r   rr   rs   rf   Ú	score_colrd   s     €€€€r   r"   z+LanceDB.results_to_docs.<locals>.<listcomp>§   s›   ø€ ð ð ð ð õ Ø%,¨T¬^Ô%<¸SÔ%A×%GÒ%GÑ%IÔ%Ià'ð"  ¨Ô!4°SÔ!9×!?Ò!?Ñ!AÔ!AÐ!Aàð	ñ ô ð ˜IÔ& sÔ+×1Ò1Ñ3Ô3ððð ð r   )ÚschemaÚnamesÚrangeÚlen)rd   rf   rg   Úcolumnsrs   ru   s   ``  @@r   Úresults_to_docszLanceDB.results_to_docs’   s  øøøø€ Ø”.Ô&ˆà˜'Ð!Ð!Ø#ˆIˆIØ 7Ð*Ð*Ø*ˆIˆIàˆIà! WÐ,ˆàÐ EÐðð ð ð ð ð õ
 !¥ W¡¤Ñ.Ô.ðñ ô ð ð ð 	˜5ð 	ðð ð ð ð ð ð õ !¥ W¡¤Ñ.Ô.ðñ ô ð ð	ð 	ð 	ð 	r   c                ó   — | j         S )N)rI   ©rd   s    r   Ú
embeddingszLanceDB.embeddings´   s
   € àŒÐr   ÚtextsúIterable[str]Ú	metadatasúOptional[List[dict]]ÚidsúOptional[List[str]]Úkwargsú	List[str]c                ó8  — g }|pd„ |D ¦   «         }| j                              t          |¦  «        ¦  «        }t          |¦  «        D ]S\  }}||         }	|r||         n	d||         i}
|                     | j        |	| j        ||         | j        |d|
i¦  «         ŒT|                      ¦   «         }|€)| j	         
                    | j        |¬¦  «        }|| _        n9| j        €|                     || j        ¬¦  «         n|                     |¦  «         d| _        |S )aŸ  Turn texts into embedding and add it to the database

        Args:
            texts: Iterable of strings to add to the vectorstore.
            metadatas: Optional list of metadatas associated with the texts.
            ids: Optional list of ids to associate with the texts.
            ids: Optional list of ids to associate with the texts.

        Returns:
            List of ids of the added texts.
        c                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S r   ©r   ÚuuidÚuuid4©r   Ú_s     r   r"   z%LanceDB.add_texts.<locals>.<listcomp>Ë   s&   € Ð7Ð7Ð7¨A•c�$œ*™,œ,Ñ'Ô'Ð7Ð7Ð7r   r)   rl   N©Údata)r:   )rI   Úembed_documentsÚlistÚ	enumerateÚappendrJ   rK   rL   rc   rY   Úcreate_tablera   r_   r8   Úaddr:   rP   )rd   r   r�   rƒ   r…   Údocsr~   rr   r*   r0   rl   Útbls               r   Ú	add_textszLanceDB.add_texts¸   s6  € ð$ ˆØÐ7Ð7Ð7°Ð7Ñ7Ô7ˆØ”_×4Ò4µT¸%±[´[ÑAÔAˆ
Ý" 5Ñ)Ô)ð 
	ð 
	‰IˆC�Ø" 3œˆIØ)2ÐH�y ”~�~¸¸sÀ3¼xÐ8HˆHØ�KŠKàÔ$ iØ”L # c¤(Ø”N DØ ð	ñô ð ð ð �nŠnÑÔˆàˆ;ØÔ"×/Ò/°Ô0@ÀtÐ/ÑLÔLˆCØˆDŒKˆKàŒ|Ð#Ø—’˜ 4¤9�Ñ-Ô-Ð-Ð-à—’˜‘”�àˆŒàˆ
r   rE   rG   úOptional[bool]c                ó”   — |�|r|| _         | j         }n
|}n| j         }	 | j                             |¦  «        S # t          $ r Y dS w xY w)a  
        Fetches a table object from the database.

        Args:
            name (str, optional): The name of the table to fetch. Defaults to None
                                    and fetches current table object.
            set_default (bool, optional): Sets fetched table as the default table.
                                        Defaults to False.

        Returns:
            Any: The fetched table object.

        Raises:
            ValueError: If the specified table is not found in the database.

        N)ra   rY   Ú
open_tableÚ	Exception)rd   rE   rG   Ú_names       r   rc   zLanceDB.get_tableè   sq   € ð& ÐØð Ø#'�Ô ØÔ(��à��àÔ$ˆEð	ØÔ#×.Ò.¨uÑ5Ô5Ð5øÝð 	ð 	ð 	Ø�4�4ð	øøøs   Ÿ9 ¹
AÁAé   é`   ÚL2Úcol_nameÚ
vector_colÚnum_partitionsúOptional[int]Únum_sub_vectorsÚindex_cache_sizeÚmetricÚNonec                ó¸   — |                       |¦  «        }|r|                     |||||¬¦  «         dS |r|                     |¦  «         dS t          d¦  «        ‚)aO  
        Create a scalar(for non-vector cols) or a vector index on a table.
        Make sure your vector column has enough data before creating an index on it.

        Args:
            vector_col: Provide if you want to create index on a vector column.
            col_name: Provide if you want to create index on a non-vector column.
            metric: Provide the metric to use for vector index. Defaults to 'L2'
                    choice of metrics: 'L2', 'dot', 'cosine'
            num_partitions: Number of partitions to use for the index. Defaults to 256.
            num_sub_vectors: Number of sub-vectors to use for the index. Defaults to 96.
            index_cache_size: Size of the index cache. Defaults to None.
            name: Name of the table to create index on. Defaults to None.

        Returns:
            None
        )r§   Úvector_column_namer£   r¥   r¦   z%Provide either vector_col or col_nameN)rc   Úcreate_indexÚcreate_scalar_indexrU   )	rd   r¡   r¢   r£   r¥   r¦   r§   rE   r—   s	            r   r«   zLanceDB.create_index	  sˆ   € ð6 �nŠn˜TÑ"Ô"ˆàð 	FØ×ÒØØ#-Ø-Ø /Ø!1ð ñ ô ð ð ð ð ð 	FØ×#Ò# HÑ-Ô-Ð-Ð-Ð-åÐDÑEÔEÐEr   r   c                óÈ   — t          |d¦  «        5 }t          j        |                     ¦   «         ¦  «                             d¦  «        cddd¦  «         S # 1 swxY w Y   dS )z!Get base64 string from image URI.Úrbzutf-8N)ÚopenÚbase64Ú	b64encodeÚreadÚdecode)rd   r2   Ú
image_files      r   Úencode_imagezLanceDB.encode_image3  sª   € å�#�t‰_Œ_ð 	G 
ÝÔ# J§O¢OÑ$5Ô$5Ñ6Ô6×=Ò=¸gÑFÔFð	Gð 	Gð 	Gð 	Gñ 	Gô 	Gð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gøøøð 	Gð 	Gð 	Gð 	Gð 	Gð 	Gs   ‘9AÁAÁAÚurisc                ó@  ‡ — ‰                       ¦   «         }ˆ fd„|D ¦   «         }|€d„ |D ¦   «         }d}‰ j        �1t          ‰ j        d¦  «        r‰ j                             |¬¦  «        }nt	          d¦  «        ‚g }t          |¦  «        D ]Q\  }	}
|r||	         n	d||	         i}|                     ‰ j        |
‰ j        ||	         ‰ j	        ||	         d|i¦  «         ŒR|€)‰ j
                             ‰ j        |¬	¦  «        }|‰ _        n|                     |¦  «         |S )
as  Run more images through the embeddings and add to the vectorstore.

        Args:
            uris List[str]: File path to the image.
            metadatas (Optional[List[dict]], optional): Optional list of metadatas.
            ids (Optional[List[str]], optional): Optional list of IDs.

        Returns:
            List[str]: List of IDs of the added images.
        c                ó<   •— g | ]}‰                      |¬ ¦  «        ‘ŒS ))r2   )rµ   )r   r2   rd   s     €r   r"   z&LanceDB.add_images.<locals>.<listcomp>L  s*   ø€ Ð@Ð@Ð@°C�T×&Ò&¨3Ð&Ñ/Ô/Ð@Ð@Ð@r   Nc                óN   — g | ]"}t          t          j        ¦   «         ¦  «        ‘Œ#S r   r‰   rŒ   s     r   r"   z&LanceDB.add_images.<locals>.<listcomp>O  s&   € Ð3Ð3Ð3¨•3•t”z‘|”|Ñ$Ô$Ð3Ð3Ð3r   Úembed_image)r¶   zEembedding object should be provided and must have embed_image method.r)   rl   rŽ   )rc   rI   r`   rº   rU   r’   r“   rJ   rK   rL   rY   r”   ra   r_   r•   )rd   r¶   r�   rƒ   r…   r—   Ú	b64_textsr~   r�   rr   Úembrl   s   `           r   Ú
add_imageszLanceDB.add_images8  sW  ø€ ð" �nŠnÑÔˆð AÐ@Ð@Ð@¸4Ð@Ñ@Ô@ˆ	àˆ;Ø3Ð3¨dÐ3Ñ3Ô3ˆCØˆ
àŒ?Ð&­7°4´?ÀMÑ+RÔ+RÐ&Øœ×4Ò4¸$Ð4Ñ?Ô?ˆJˆJåØWñô ð ð ˆÝ! *Ñ-Ô-ð 		ð 		‰HˆC�Ø)2ÐH�y ”~�~¸¸sÀ3¼xÐ8HˆHØ�KŠKàÔ$ cØ”L # c¤(Ø”N I¨c¤NØ ð	ñô ð ð ð ˆ;ØÔ"×/Ò/°Ô0@ÀtÐ/ÑLÔLˆCØˆDŒKˆKà�GŠG�D‰MŒMˆMàˆ
r   Úqueryr    r   c                ó  — |€| j         }|                      |¦  «        }t          |t          ¦  «        rt	          |¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     d¦  «        x}	rX|                     || j        ¬¦  «                              |¦  «                             |	¦  «         	                    ||¬¦  «        }
nD|                     || j        ¬¦  «                              |¦  «         	                    ||¬¦  «        }
|dk    r"| j
        �|
                     | j
        ¬	¦  «         |
                     ¦   «         }t          |¦  «        d
k    rt          j        d¦  «         |S )NÚ	prefilterFÚ
query_typer(   Úmetrics)r¾   rª   )rÀ   Úhybrid)r=   r   zNo results found for the query.)r@   rc   rQ   Údictr%   ÚgetÚsearchrJ   r§   ÚwhererT   ÚrerankÚto_arrowry   r\   r]   )rd   r¾   r    r   rE   r…   r—   rÀ   rÁ   rÂ   Úlance_queryr–   s               r   Ú_queryzLanceDB._queryl  s_  € ð ˆ9Ø”
ˆAØ�nŠn˜TÑ"Ô"ˆÝ�f�dÑ#Ô#ð 	-Ý$ VÑ,Ô,ˆFà—J’J˜{¨EÑ2Ô2ˆ	Ø—Z’Z ¨hÑ7Ô7ˆ
à—j’j Ñ+Ô+Ð+ˆ7ð 	à—
’
 ¸4Ô;K�
ÑLÔLß’�q‘”ß’˜‘”ß’�v¨�Ñ3Ô3ð	 ˆKð —
’
 ¸4Ô;K�
ÑLÔLß’�q‘”ß’�v¨�Ñ3Ô3ð ð
 ˜Ò!Ð! d¤nÐ&@Ø×Ò¨¬ÐÑ7Ô7Ð7à×#Ò#Ñ%Ô%ˆÝˆt‰9Œ9˜Š>ˆ>ÝŒMÐ;Ñ<Ô<Ð<Øˆr   úCallable[[float], float]c                óº   — | j         r| j         S | j        dk    r| j        S | j        dk    r| j        S | j        dk    r| j        S t          d| j        › d�¦  «        ‚)a8  
        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.
        Úcosiner-   ÚipzANo supported normalization function for distance metric of type: z=.Consider providing relevance_score_fn to Chroma constructor.)rO   r<   Ú_cosine_relevance_score_fnÚ_euclidean_relevance_score_fnÚ%_max_inner_product_relevance_score_fnrU   r}   s    r   Ú_select_relevance_score_fnz"LanceDB._select_relevance_score_fn’  s‰   € ð Ô+ð 	4ØÔ3Ð3àŒ=˜HÒ$Ð$ØÔ2Ð2ØŒ]˜dÒ"Ð"ØÔ5Ð5ØŒ]˜dÒ"Ð"ØÔ=Ð=åðOØ15´ðOð Oð Oñô ð r   úList[float]úOptional[Dict[str, str]]c                óŽ   — |€| j         } | j        ||f||dœ|¤Ž}|                      ||                     dd¦  «        ¬¦  «        S )zD
        Return documents most similar to the query vector.
        N©r   rE   rg   F©rg   )r@   rË   r{   Úpop)rd   r0   r    r   rE   r…   Úress          r   Úsimilarity_search_by_vectorz#LanceDB.similarity_search_by_vector«  sY   € ð ˆ9Ø”
ˆAàˆdŒk˜) QÐK¨v¸DÐKÐKÀFÐKÐKˆØ×#Ò# C¨v¯zªz¸'À5Ñ/IÔ/IÐ#ÑJÔJÐJr   c                ó|   ‡— |€| j         }|                      ¦   «         Š | j        ||fddi|¤Ž}ˆfd„|D ¦   «         S )zZ
        Return documents most similar to the query vector with relevance scores.
        Nrg   Tc                óJ   •— g | ]\  }}| ‰t          |¦  «        ¦  «        f‘Œ S r   )Úfloat)r   Údocrg   r>   s      €r   r"   zMLanceDB.similarity_search_by_vector_with_relevance_scores.<locals>.<listcomp>Î  sA   ø€ ð 
ð 
ð 
Ù8B¸¸UˆSÐ$Ð$¥U¨5¡\¤\Ñ2Ô2Ð3ð
ð 
ð 
r   )r@   rÓ   rÛ   )rd   r0   r    r   rE   r…   Údocs_and_scoresr>   s          @r   Ú1similarity_search_by_vector_with_relevance_scoresz9LanceDB.similarity_search_by_vector_with_relevance_scores¼  s|   ø€ ð ˆ9Ø”
ˆAà!×<Ò<Ñ>Ô>ÐØ:˜$Ô:Ø�qð
ð 
Ø $ð
Ø(.ð
ð 
ˆð
ð 
ð 
ð 
ØFUð
ñ 
ô 
ð 	
r   c                ó¦  — |€| j         }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }| j        €t          d¦  «        ‚|dk    s|d	k    r£| j        €�| j        €†|                      |¦  «        }|                     | j        d¬
¦  «        | _        |d	k    r| j         	                    |¦  «        }	|	|f}
n|}
 | j
        |
|f||dœ|¤Ž}|                      ||¬¦  «        S t          d¦  «        ‚| j         	                    |¦  «        }	 | j
        |	|fd|i|¤Ž}|                      ||¬¦  «        S )zAReturn documents most similar to the query with relevance scores.Nrg   TrE   rÁ   r(   z4search needs an emmbedding function to be specified.ÚftsrÃ   ©Úreplacer×   rØ   z?Full text/ Hybrid search is not supported in LanceDB Cloud yet.r   )r@   rÅ   rI   rU   r8   rP   rc   Úcreate_fts_indexrL   Úembed_queryrË   r{   ÚNotImplementedError)rd   r¾   r    r   r…   rg   rE   rÁ   r—   r0   rË   rÚ   s               r   Úsimilarity_search_with_scorez$LanceDB.similarity_search_with_scoreÒ  s‚  € ð ˆ9Ø”
ˆAà—
’
˜7 DÑ)Ô)ˆØ�zŠz˜& $Ñ'Ô'ˆØ—Z’Z ¨hÑ7Ô7ˆ
àŒ?Ð"ÝÐSÑTÔTÐTà˜ÒÐ *°Ò"8Ð"8ØŒ|Ð#¨¬Ð(?Ø—n’n TÑ*Ô*�Ø"%×"6Ò"6°t´~ÈtÐ"6Ñ"TÔ"T�”à Ò)Ð)Ø $¤× ;Ò ;¸EÑ BÔ B�IØ'¨Ð/�F�Fà"�Fà!�d”k &¨!ÐP°FÀÐPÐPÈÐPÐP�Ø×+Ò+¨C°uÐ+Ñ=Ô=Ð=å)ØUñô ð ð œ×3Ò3°EÑ:Ô:ˆIØ�$”+˜i¨ÐDÐD°6ÐD¸VÐDÐDˆCØ×'Ò'¨°5Ð'Ñ9Ô9Ð9r   rã   úList[Document]c           
     ó.   —  | j         d|||||ddœ|¤Ž}|S )ap  Return documents most similar to the query

        Args:
            query: String to query the vectorstore with.
            k: Number of documents to return.
            filter (Optional[Dict]): Optional filter arguments
                sql_filter(Optional[string]): SQL filter to apply to the query.
                prefilter(Optional[bool]): Whether to apply the filter prior
                                             to the vector search.
        Raises:
            ValueError: If the specified table is not found in the database.

        Returns:
            List of documents most similar to the query.
        F)r¾   r    rE   r   rã   rg   r   )ré   )rd   r¾   r    rE   r   rã   r…   rÚ   s           r   Úsimilarity_searchzLanceDB.similarity_searchú  s>   € ð0 0ˆdÔ/ð 
Ø˜1 4°¸CÀuð
ð 
ØPVð
ð 
ˆð ˆ
r   é   ç      à?Úfetch_kÚlambda_multrÞ   c                ó¬   — |€| j         }| j        €t          d¦  «        ‚| 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.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents selected by maximal marginal relevance.
        NzBFor MMR search, you must specify an embedding function oncreation.)rð   r   )r@   rI   rU   rç   Ú'max_marginal_relevance_search_by_vector)	rd   r¾   r    rï   rð   r   r…   r0   r–   s	            r   Úmax_marginal_relevance_searchz%LanceDB.max_marginal_relevance_search  st   € ð4 ˆ9Ø”
ˆAàŒ?Ð"ÝØTñô ð ð ”O×/Ò/°Ñ6Ô6ˆ	Ø×;Ò;ØØØØ#Øð <ñ 
ô 
ˆð ˆr   c                ó*  ‡
—  | j         d|||dœ|¤Ž}t          t          j        |t          j        ¬¦  «        |d                              ¦   «         |p| j        |¬¦  «        Š
|                      |¦  «        }ˆ
fd„t          |¦  «        D ¦   «         }	|	S )aH  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.
            filter (Optional[Dict[str, str]]): Filter by metadata. Defaults to None.

        Returns:
            List of Documents selected by maximal marginal relevance.
        )r¾   r    r   )Údtyper(   )r    rð   c                ó"   •— g | ]\  }}|‰v ¯	|‘ŒS r   r   )r   ÚiÚrÚmmr_selecteds      €r   r"   zCLanceDB.max_marginal_relevance_search_by_vector.<locals>.<listcomp>m  s'   ø€ ÐUÐUÐU¡$ ! QÀ1ÈÐCTÐCT˜AÐCTÐCTÐCTr   r   )	rË   r   ÚnpÚarrayÚfloat32Ú	to_pylistr@   r{   r’   )rd   r0   r    rï   rð   r   r…   rf   Ú
candidatesÚselected_resultsrù   s             @r   rò   z/LanceDB.max_marginal_relevance_search_by_vectorC  s¼   ø€ ð6 �$”+ð 
ØØØð
ð 
ð ð	
ð 
ˆõ 2ÝŒH�Y¥b¤jÐ1Ñ1Ô1Ø�HÔ×'Ò'Ñ)Ô)Øˆo�4”:Ø#ð	
ñ 
ô 
ˆð ×)Ò)¨'Ñ2Ô2ˆ
àUÐUÐUÐU­)°JÑ*?Ô*?ÐUÑUÔUÐØÐr   ÚclsúType[LanceDB]r   c                óf   — t          d|||||||	|
||||dœ|¤Ž}|                     ||¬¦  «         |S )N)r.   r0   r4   r5   r6   r7   r8   r9   r:   r<   r=   r>   )r�   r   )r'   r˜   )r   r   r0   r�   r.   r4   r5   r6   r7   r8   r9   r:   r<   r=   r>   r…   Úinstances                    r   Ú
from_textszLanceDB.from_textsp  sk   € õ& ð 
Ø!ØØ!ØØØ!ØØØØØØ1ð
ð 
ð ð
ð 
ˆð 	×Ò˜5¨IÐÑ6Ô6Ð6àˆr   Ú
delete_allÚdrop_columnsc                óš  — |                       |¦  «        }|r|                     |¦  «         dS |rEd„ |D ¦   «         }d                     |¦  «        }	| j        › d|	› d�}
|                     |
¦  «         dS |r-| j        �t          d¦  «        ‚|                     |¦  «         dS |r|                     d¦  «         dS t          d¦  «        ‚)	aˆ  
        Allows deleting rows by filtering, by ids or drop columns from the table.

        Args:
            filter: Provide a string SQL expression -  "{col} {operation} {value}".
            ids: Provide list of ids to delete from the table.
            drop_columns: Provide list of columns to drop from the table.
            delete_all: If True, delete all rows from the table.
        c                óF   — g | ]}d |                      d d¦  «        z   d z   ‘ŒS )r   z''rä   )r   Úid_vals     r   r"   z"LanceDB.delete.<locals>.<listcomp>¬  s0   € ÐRÐRÐRÀF˜# §¢¨s°DÑ 9Ô 9Ñ9¸CÑ?ÐRÐRÐRr   ú,z IN (ú)Nz;Column operations currently not supported in LanceDB Cloud.Útruez6Provide either filter, ids, drop_columns or delete_all)rc   Údeleter#   rK   r8   rè   r  rU   )rd   rƒ   r  r   r  rE   r…   r—   Ú
quoted_idsÚ
ids_clauseÚdelete_filters              r   r  zLanceDB.delete–  s  € ð$ �nŠn˜TÑ"Ô"ˆØð 	WØ�JŠJ�vÑÔÐÐÐØð 	WØRÐRÈcÐRÑRÔRˆJØŸš *Ñ-Ô-ˆJØ#œ|Ð?Ð?°*Ð?Ð?Ð?ˆMØ�JŠJ�}Ñ%Ô%Ð%Ð%Ð%Øð 
	WØŒ|Ð'Ý)ØQñô ð ð × Ò  Ñ.Ô.Ð.Ð.Ð.Øð 	WØ�JŠJ�vÑÔÐÐÐåÐUÑVÔVÐVr   )r.   r/   r0   r1   r2   r3   r4   r3   r5   r3   r6   r3   r7   r3   r8   r3   r9   r3   r:   r3   r;   r/   r<   r3   r=   r/   r>   r?   r@   rA   )F)rf   r   rg   rh   r   r   )r   r1   )NN)
r   r€   r�   r‚   rƒ   r„   r…   r   r   r†   )NF)rE   r3   rG   r™   r   r   )NNrž   rŸ   Nr    N)r¡   r3   r¢   r3   r£   r¤   r¥   r¤   r¦   r¤   r§   r3   rE   r3   r   r¨   )r2   r   r   r   )
r¶   r†   r�   r‚   rƒ   r„   r…   r   r   r†   )NNN)r¾   r   r    r¤   r   r/   rE   r3   r…   r   r   r   )r   rÌ   )r0   rÔ   r    r¤   r   rÕ   rE   r3   r…   r   r   r   )
r¾   r   r    r¤   r   rÕ   r…   r   r   r   )NNNF)r¾   r   r    r¤   rE   r3   r   r/   rã   r™   r…   r   r   rê   )Nrí   rî   N)r¾   r   r    r¤   rï   rA   rð   rÞ   r   rÕ   r…   r   r   rê   )r0   rÔ   r    r¤   rï   rA   rð   rÞ   r   rÕ   r…   r   r   rê   )NNr(   r)   r*   r+   NNr,   r-   NN)"r   r  r   r†   r0   r   r�   r‚   r.   r/   r4   r3   r5   r3   r6   r3   r7   r3   r8   r3   r9   r3   r:   r3   r<   r3   r=   r/   r>   r?   r…   r   r   r'   )NNNNN)rƒ   r„   r  r™   r   r3   r  r„   rE   r3   r…   r   r   r¨   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	DEFAULT_Kre   r{   Úpropertyr~   r˜   rc   r«   rµ   r½   rË   rÓ   rÛ   rá   ré   rì   ró   rò   Úclassmethodr  r  r   r   r   r'   r'      sû  € € € € € ðð ð: %)Ø*.Ø+Ø$,Ø $Ø"(Ø$1Ø!%Ø $Ø)Ø#Ø"&Ø"&ØAEØð!VGð VGð VGð VGð VGðp ð  ð  ð  ð  ðD ðð ð ñ „Xðð +/Ø#'ð	.ð .ð .ð .ð .ðb INðð ð ð ð ðF #'Ø$(Ø(+Ø)+Ø*.Ø $Ø"ð(Fð (Fð (Fð (Fð (FðTGð Gð Gð Gð +/Ø#'ð	2ð 2ð 2ð 2ð 2ðn  Ø $Ø"ð$ð $ð $ð $ð $ðLð ð ð ð8  Ø+/Ø"ðKð Kð Kð Kð Kð(  Ø+/Ø"ð
ð 
ð 
ð 
ð 
ð2  Ø+/ð	&:ð &:ð &:ð &:ð &:ðV  Ø"Ø $Ø#ðð ð ð ð ð@  ØØ Ø+/ð*ð *ð *ð *ð *ð^  ØØ Ø+/ð+ ð + ð + ð + ð + ðZ ð
 +/Ø$(Ø$,Ø $Ø"(Ø$1Ø!%Ø $Ø)Ø"&Ø"&ØAEð#ð #ð #ð #ñ „[ð#ðN $(Ø%)Ø $Ø,0Ø"ð$Wð $Wð $Wð $Wð $Wð $Wð $Wr   r'   )r   r   )r   r   r   r   )Ú
__future__r   r°   rM   rŠ   r\   Útypingr   r   r   r   r   r	   r
   Únumpyrú   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.utilsr   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   r  r   r%   r'   r   r   r   ú<module>r      sP  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø 	€	€	€	Ø €€€Ø €€€Ø 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à€	ð#ð #ð #ð #ð
Eð Eð Eð Eð
\
Wð \
Wð \
Wð \
Wð \
Wˆkñ \
Wô \
Wð \
Wð \
Wð \
Wr   