Ë
    µŒj|a  ã                  óÂ   — 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y)é    )ÚannotationsN)ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚType)ÚDocument)Ú
Embeddings©Úguard_import)ÚVectorStore)Úmaximal_marginal_relevanceé   c                 ó   — t        d«      S )zImport lancedb package.Úlancedbr   © ó    úr/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/lancedb.pyÚimport_lancedbr      s   € ä˜	Ó"Ð"r   c           
     ó~   — dj                  | j                  «       D ��cg c]  \  }}|› d|› d�‘Œ c}}«      S c c}}w )z2Converts a dict filter to a LanceDB filter string.z AND z = 'Ú')ÚjoinÚitems)ÚfilterÚkÚvs      r   Úto_lance_filterr      s9   € à�<‰<°F·L±L´NÔC±N©D¨A¨q˜A˜3˜d 1 # Qš°NÒCÓDÐDùÓCs   Ÿ9
c                  óÜ  — 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ddd„Zedd„«       Z	 	 d 	 	 	 	 	 	 	 	 	 d!d„Z		 d"	 	 	 	 	 d#d„Z
	 	 	 	 	 	 	 d$	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d%d„Zd&d„Z	 	 d 	 	 	 	 	 	 	 	 	 d'd„Z	 	 	 d(	 	 	 	 	 	 	 	 	 	 	 d)d„Zd*d„Z	 	 	 d(	 	 	 	 	 	 	 	 	 	 	 d+d„Z	 	 	 d(	 	 	 	 	 	 	 	 	 	 	 d+d„Z	 	 d 	 	 	 	 	 	 	 	 	 d,d„Z	 	 	 	 d-	 	 	 	 	 	 	 	 	 	 	 	 	 d.d„Z	 	 	 	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 d0d„Z	 	 	 	 d/	 	 	 	 	 	 	 	 	 	 	 	 	 d1d„Ze	 	 	 	 	 	 	 	 	 	 	 	 d2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d3d„«       Z	 	 	 	 	 d4	 	 	 	 	 	 	 	 	 	 	 	 	 d5d„Zy)6Ú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Úl2c                ó`  — t        d«      }t        d«      |j                  _        || _        || _        || _        || _        |dk7  r|xs t        j                  d«      nd| _	        |	| _
        |
| _        || _        || _        || _        d| _        t!        ||j"                  j$                  «      r|| _        n|€d| _        nt)        d«      ‚t!        |t*        «      r(| j                  €|j-                  d«      rt)        d«      ‚| j                  €t)        d	«      ‚t!        ||j.                  j0                  «      r|| _        nÎt!        |t*        |j.                  j4                  f«      rt)        d
«      ‚| j                  €|j7                  |«      | _        nzt!        |t*        «      rj|j-                  d«      r.|j7                  || j                  | j                  ¬«      | _        n+|j7                  |«      | _        t9        j:                  d«       |�j	 t!        ||j.                  j4                  |j                  j                  j<                  f«      sJ ‚|| _        tA        |d«      r|jB                  nd| _"        y| jI                  |d¬«      | _        y# tF        $ r t)        d«      ‚w xY w)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.)Úapi_keyÚregionz[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   ÚremoteÚtableÚ
_embeddingÚ_vector_keyÚ_id_keyÚ	_text_keyÚosÚgetenvr+   r,   ÚmodeÚdistanceÚoverride_relevance_score_fnÚlimitÚ
_fts_indexÚ
isinstanceÚ	rerankersÚRerankerÚ	_rerankerÚ
ValueErrorÚstrÚ
startswithÚdbÚLanceDBConnectionÚ_connectionÚ
LanceTableÚconnectÚwarningsÚwarnÚRemoteTableÚ_tableÚhasattrr-   Ú_table_nameÚAssertionErrorÚ	get_table)ÚselfÚ
connectionÚ	embeddingÚuriÚ
vector_keyÚid_keyÚtext_keyÚ
table_namer+   r,   r8   r1   r9   ÚrerankerÚrelevance_score_fnr;   r   s                    r   Ú__init__zLanceDB.__init__:   sf  € ô& ˜yÓ)ˆÜ+Ð,BÓCˆ�‰ÔØ#ˆŒØ%ˆÔØˆŒØ!ˆŒØ@GÈ2Â�wÒ<¤"§)¡)¨OÔ"<ÐSWˆŒØˆŒØˆŒ	Ø ˆŒØ+=ˆÔ(ØˆŒ
ØˆŒä�h × 1Ñ 1× :Ñ :Ô;Ø%ˆD�NØÐØ!ˆD�NäØKóð ô �cœ3Ô D§L¡LÐ$8Ø�~‰~˜gÔ&Ü Ð!IÓJÐJà�?‰?Ð"ÜÐBÓCÐCä�j '§*¡*×">Ñ">Ô?Ø)ˆDÕÜ˜
¤S¨'¯*©*×*?Ñ*?Ð$@ÔAÜð8óð ð
 �|‰|Ð#Ø#*§?¡?°3Ó#7�Õ ä˜c¤3Ô'Ø—~‘~ gÔ.Ø+2¯?©?Ø¨¯©¸d¿k¹kð ,;ó ,˜Õ(ð ,3¯?©?¸3Ó+?˜Ô(Ü Ÿ™ð=ôð ÐðÜ!Ø˜GŸJ™J×1Ñ1°7·>±>×3GÑ3G×3SÑ3SÐTôð ð ð $�”ä")¨%°Ô"8�E—J’J¸nð Õ ð Ÿ.™.¨À˜.ÓFˆD�Køô "ò Ü ð@óð ðús   ÈA(J ÊJ-c                ó6  — |j                   j                  }d|v rd}n	d|v rd}nd }d|v }|�|sct        t        |«      «      D �cg c]E  }t	        || j
                     |   j                  «       |r|d   |   j                  «       ni ¬«      ‘ŒG c}S |r||ryt        t        |«      «      D �cg c][  }t	        || j
                     |   j                  «       |r|d   |   j                  «       ni ¬«      ||   |   j                  «       f‘Œ] c}S y y c c}w c c}w )NÚ	_distanceÚ_relevance_scoreÚmetadata)Úpage_contentr_   )ÚschemaÚnamesÚrangeÚlenr   r5   Úas_py)rQ   ÚresultsÚscoreÚcolumnsÚ	score_colÚhas_metadataÚidxs          r   Úresults_to_docszLanceDB.results_to_docs’   sL  € Ø—.‘.×&Ñ&ˆà˜'Ñ!Ø#‰IØ 7Ñ*Ø*‰IàˆIà! WÐ,ˆàÐ¡Eô !¤ W£Ô.óñ
 /�Cô	 Ø!(¨¯©Ñ!8¸Ñ!=×!CÑ!CÓ!EÙAM˜W ZÑ0°Ñ5×;Ñ;Ô=ÐSUöð /ñð ñ ™5ô !¤ W£Ô.óñ /�Cô Ø%,¨T¯^©^Ñ%<¸SÑ%A×%GÑ%GÓ%Iá'ð ")¨Ñ!4°SÑ!9×!?Ñ!?Ô!Aàô	ð ˜IÑ& sÑ+×1Ñ1Ó3òð /ñð ð !ˆYùòùòs   ÁA
DÂ,A Dc                ó   — | j                   S )N)r2   ©rQ   s    r   Ú
embeddingszLanceDB.embeddings´   s   € à�‰Ðr   c                ó€  — g }|xs+ |D �cg c]  }t        t        j                  «       «      ‘Œ! c}}| j                  j	                  t        |«      «      }t        |«      D ]R  \  }}	||   }
|r||   nd||   i}|j                  | j                  |
| j                  ||   | j                  |	d|i«       ŒT | j                  «       }|€/| j                  j                  | j                  |¬«      }|| _        n;| j                   €|j#                  || j$                  ¬«       n|j#                  |«       d| _        |S c c}w )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.
        r#   r_   N©Údata)r8   )rB   ÚuuidÚuuid4r2   Úembed_documentsÚlistÚ	enumerateÚappendr3   r4   r5   rP   rF   Úcreate_tablerN   rL   r+   Úaddr8   r<   )rQ   ÚtextsÚ	metadatasÚidsÚkwargsÚdocsÚ_ro   rk   r$   rS   r_   Útbls                r   Ú	add_textszLanceDB.add_texts¸   s#  € ð$ ˆØÒ7±Ó7±¨A”cœ$Ÿ*™*›,Õ'°Ñ7ˆØ—_‘_×4Ñ4´T¸%³[ÓAˆ
Ü" 5Ö)‰IˆC�Ø" 3™ˆIÙ)2�y ’~¸¸sÀ3¹xÐ8HˆHØ�K‰Kà×$Ñ$ iØ—L‘L # c¡(Ø—N‘N DØ ð	õð *ð �n‰nÓˆàˆ;Ø×"Ñ"×/Ñ/°×0@Ñ0@ÀtÐ/ÓLˆCØˆD�Kà�|‰|Ð#Ø—‘˜ 4§9¡9�Õ-à—‘˜”àˆŒàˆ
ùò7 8s   ‹$D;c                ó¦   — |�|r|| _         | j                   }n|}n| j                   }	 | j                  j                  |«      S # t        $ r Y y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)rN   rF   Ú
open_tableÚ	Exception)rQ   r-   r/   Ú_names       r   rP   zLanceDB.get_tableè   s^   € ð& ÐÙØ#'�Ô Ø×(Ñ(‘à‘à×$Ñ$ˆEð	Ø×#Ñ#×.Ñ.¨uÓ5Ð5øÜò 	Ùð	ús   ©A Á	AÁAc                ó”   — | j                  |«      }|r|j                  |||||¬«       y|r|j                  |«       y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
        )ÚmetricÚvector_column_nameÚnum_partitionsÚnum_sub_vectorsÚindex_cache_sizez%Provide either vector_col or col_nameN)rP   Úcreate_indexÚcreate_scalar_indexrA   )	rQ   Úcol_nameÚ
vector_colrŠ   r‹   rŒ   rˆ   r-   r�   s	            r   r�   zLanceDB.create_index	  sV   € ð6 �n‰n˜TÓ"ˆáØ×ÑØØ#-Ø-Ø /Ø!1ð õ ñ Ø×#Ñ# HÕ-äÐDÓEÐEr   c                óª   — t        |d«      5 }t        j                  |j                  «       «      j	                  d«      cddd«       S # 1 sw Y   yxY w)z!Get base64 string from image URI.Úrbzutf-8N)ÚopenÚbase64Ú	b64encodeÚreadÚdecode)rQ   rT   Ú
image_files      r   Úencode_imagezLanceDB.encode_image3  s7   € ä�#�tŒ_ 
Ü×#Ñ# J§O¡OÓ$5Ó6×=Ñ=¸gÓF÷ �_Š_ús   �2A	Á	Ac                ó®  — | j                  «       }|D �cg c]  }| j                  |¬«      ‘Œ }}|€*|D �cg c]  }t        t        j                  «       «      ‘Œ! }}d}	| j
                  �3t        | j
                  d«      r| j
                  j                  |¬«      }	nt        d«      ‚g }
t        |	«      D ]P  \  }}|r||   nd||   i}|
j                  | j                  || j                  ||   | j                  ||   d|i«       ŒR |€0| j                  j                  | j                   |
¬«      }|| _        |S |j%                  |
«       |S c c}w c c}w )	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.
        )rT   NÚembed_image)ÚuriszEembedding object should be provided and must have embed_image method.r#   r_   rq   )rP   r™   rB   rs   rt   r2   rM   r›   rA   rw   rx   r3   r4   r5   rF   ry   rN   rL   rz   )rQ   rœ   r|   r}   r~   r�   rT   Ú	b64_textsr€   ro   rr   rk   Úembr_   s                 r   Ú
add_imageszLanceDB.add_images8  sZ  € ð" �n‰nÓˆñ <@Ó@¹4°C�T×&Ñ&¨3Ð&Õ/¸4ˆ	Ð@àˆ;Ù.2Ó3©d¨”3”t—z‘z“|Õ$¨dˆCÐ3Øˆ
à�?‰?Ð&¬7°4·?±?ÀMÔ+RØŸ™×4Ñ4¸$Ð4Ó?‰JäØWóð ð ˆÜ! *Ö-‰HˆC�Ù)2�y ’~¸¸sÀ3¹xÐ8HˆHØ�K‰Kà×$Ñ$ cØ—L‘L # c¡(Ø—N‘N I¨c¡NØ ð	õð .ð ˆ;Ø×"Ñ"×/Ñ/°×0@Ñ0@ÀtÐ/ÓLˆCØˆDŒKð ˆ
ð �G‰G�DŒMàˆ
ùò= Aùò 4s
   •E¶$Ec                ó¼  — |€| j                   }| j                  |«      }t        |t        «      rt	        |«      }|j                  dd«      }|j                  dd«      }|j                  d«      x}	rM|j                  || j                  ¬«      j                  |«      j                  |	«      j                  ||¬«      }
n=|j                  || j                  ¬«      j                  |«      j                  ||¬«      }
|dk(  r(| j                  �|
j                  | j                  ¬	«       |
j                  «       }t        |«      d
k(  rt        j                  d«       |S )NÚ	prefilterFÚ
query_typer"   Úmetrics)Úqueryr‰   )r¡   Úhybrid)rY   r   zNo results found for the query.)r;   rP   r=   Údictr   ÚgetÚsearchr3   rˆ   Úwherer@   ÚrerankÚto_arrowrd   rI   rJ   )rQ   r¤   r   r   r-   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ˆ	Ø—Z‘Z ¨hÓ7ˆ
à—j‘j Ó+Ð+ˆ7Ð+à—
‘
 ¸4×;KÑ;K�
ÓLß‘�q“ß‘˜“ß‘�v¨�Ó3ñ	 ð —
‘
 ¸4×;KÑ;K�
ÓLß‘�q“ß‘�v¨�Ó3ð ð
 ˜Ò! d§n¡nÐ&@Ø×Ñ¨¯©ÐÔ7à×#Ñ#Ó%ˆÜˆt‹9˜Š>Ü�M‰MÐ;Ô<Øˆr   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.)r:   r9   Ú_cosine_relevance_score_fnÚ_euclidean_relevance_score_fnÚ%_max_inner_product_relevance_score_fnrA   rn   s    r   Ú_select_relevance_score_fnz"LanceDB._select_relevance_score_fn’  s‰   € ð ×+Ò+Ø×3Ñ3Ð3à�=‰=˜HÒ$Ø×2Ñ2Ð2Ø�]‰]˜dÒ"Ø×5Ñ5Ð5Ø�]‰]˜dÒ"Ø×=Ñ=Ð=äð1Ø15·±°ð @OðOóð r   c                ó’   — |€| j                   } | j                  ||f||dœ|¤Ž}| j                  ||j                  dd«      ¬«      S )zD
        Return documents most similar to the query vector.
        ©r   r-   rg   F©rg   )r;   r­   rl   Úpop)rQ   rS   r   r   r-   r~   Úress          r   Úsimilarity_search_by_vectorz#LanceDB.similarity_search_by_vector«  sQ   € ð ˆ9Ø—
‘
ˆAàˆd�k‰k˜) QÐK¨v¸DÑKÀFÑKˆØ×#Ñ# C¨v¯z©z¸'À5Ó/IÐ#ÓJÐJr   c           
     óÂ   — |€| j                   }| j                  «       } | j                  ||fddi|¤Ž}|D ��	cg c]  \  }}	| |t        |	«      «      f‘Œ c}	}S c c}	}w )zZ
        Return documents most similar to the query vector with relevance scores.
        rg   T)r;   r´   rº   Úfloat)
rQ   rS   r   r   r-   r~   rZ   Údocs_and_scoresÚdocrg   s
             r   Ú1similarity_search_by_vector_with_relevance_scoresz9LanceDB.similarity_search_by_vector_with_relevance_scores¼  s€   € ð ˆ9Ø—
‘
ˆAà!×<Ñ<Ó>ÐØ:˜$×:Ñ:Ø�qñ
Ø $ð
Ø(.ñ
ˆñ GVô
ÙFU¹
¸¸UˆSÑ$¤U¨5£\Ó2Ò3Àoò
ð 	
ùó 
s   ºAc                ó¢  — |€| j                   }|j                  dd«      }|j                  dd«      }|j                  dd«      }| j                  €t        d«      ‚|dk(  s|d	k(  r§| j                  €�| j
                  €„| j                  |«      }|j                  | j                  d¬
«      | _        |d	k(  r | j                  j                  |«      }	|	|f}
n|}
 | j                  |
|f||dœ|¤Ž}| j                  ||¬«      S t        d«      ‚| j                  j                  |«      }	 | j                  |	|fd|i|¤Ž}| j                  ||¬«      S )zAReturn documents most similar to the query with relevance scores.Nrg   Tr-   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§   r2   rA   r+   r<   rP   Úcreate_fts_indexr5   Úembed_queryr­   rl   ÚNotImplementedError)rQ   r¤   r   r   r~   rg   r-   r¢   r�   rS   r­   r¹   s               r   Úsimilarity_search_with_scorez$LanceDB.similarity_search_with_scoreÒ  sZ  € ð ˆ9Ø—
‘
ˆAà—
‘
˜7 DÓ)ˆØ�z‰z˜& $Ó'ˆØ—Z‘Z ¨hÓ7ˆ
à�?‰?Ð"ÜÐSÓTÐTà˜Ò *°Ò"8Ø�|‰|Ð#¨¯©Ð(?Ø—n‘n TÓ*�Ø"%×"6Ñ"6°t·~±~ÈtÐ"6Ó"T�”à Ò)Ø $§¡× ;Ñ ;¸EÓ B�IØ'¨Ð/‘Fà"�Fà!�d—k‘k &¨!ÐP°FÀÑPÈÑP�Ø×+Ñ+¨C°uÐ+Ó=Ð=ä)ØUóð ð Ÿ™×3Ñ3°EÓ:ˆIØ�$—+‘+˜i¨ÑD°6ÐD¸VÑDˆCØ×'Ñ'¨°5Ð'Ó9Ð9r   c           
     ó8   —  | 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   r-   r   rÁ   rg   r   )rÆ   )rQ   r¤   r   r-   r   rÁ   r~   r¹   s           r   Úsimilarity_searchzLanceDB.similarity_searchú  s7   € ð0 0ˆd×/Ñ/ð 
Ø˜1 4°¸CÀuñ
ØPVñ
ˆð ˆ
r   c                ó²   — |€| j                   }| j                  €t        d«      ‚| j                  j                  |«      }| 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.
        zBFor MMR search, you must specify an embedding function oncreation.)Úlambda_multr   )r;   r2   rA   rÄ   Ú'max_marginal_relevance_search_by_vector)	rQ   r¤   r   Úfetch_krÊ   r   r~   rS   r   s	            r   Úmax_marginal_relevance_searchz%LanceDB.max_marginal_relevance_search  sm   € ð4 ˆ9Ø—
‘
ˆAà�?‰?Ð"ÜØTóð ð —O‘O×/Ñ/°Ó6ˆ	Ø×;Ñ;ØØØØ#Øð <ó 
ˆð ˆr   c                óF  —  | j                   d|||dœ|¤Ž}t        t        j                  |t        j                  ¬«      |d   j                  «       |xs | j                  |¬«      }| j                  |«      }	t        |	«      D �
�cg c]  \  }
}|
|v sŒ|‘Œ }}
}|S c c}}
w )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Ê   r   )	r­   r   ÚnpÚarrayÚfloat32Ú	to_pylistr;   rl   rw   )rQ   rS   r   rÌ   rÊ   r   r~   rf   Úmmr_selectedÚ
candidatesÚiÚrÚselected_resultss                r   rË   z/LanceDB.max_marginal_relevance_search_by_vectorC  s®   € ð6 �$—+‘+ð 
ØØØñ
ð ñ	
ˆô 2Ü�H‰H�Y¤b§j¡jÔ1Ø�HÑ×'Ñ'Ó)ØŠo�4—:‘:Ø#ô	
ˆð ×)Ñ)¨'Ó2ˆ
ä*3°JÔ*?ÔUÑ*?¡$ ! QÀ1ÈÒCTšAÐ*?ÐÑUØÐùó Vs   ÂBÂBc                ó\   — t        d|||||||	|
||||dœ|¤Ž}|j                  ||¬«       |S )N)rR   rS   rU   rV   rW   rX   r+   r,   r8   r9   rY   rZ   )r|   r   )r!   r‚   )Úclsr{   rS   r|   rR   rU   rV   rW   rX   r+   r,   r8   r9   rY   rZ   r~   Úinstances                    r   Ú
from_textszLanceDB.from_textsp  s[   € ô& ð 
Ø!ØØ!ØØØ!ØØØØØØ1ñ
ð ñ
ˆð 	×Ñ˜5¨IÐÔ6àˆr   c                ó^  — | j                  |«      }|r|j                  |«       y|r=|j                  | j                  › d�j                  dj	                  |«      «      «       y|r)| j
                  �t        d«      ‚|j                  |«       y|r|j                  d«       y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.
        z
 in ('{}')Ú,Nz;Column operations currently not supported in LanceDB Cloud.Útruez6Provide either filter, ids, drop_columns or delete_all)	rP   Údeleter4   Úformatr   r+   rÅ   Údrop_columnsrA   )rQ   r}   Ú
delete_allr   râ   r-   r~   r�   s           r   rà   zLanceDB.delete–  s–   € ð$ �n‰n˜TÓ"ˆÙØ�J‰J�vÕÙØ�J‰J˜$Ÿ,™,˜ |Ð4×;Ñ;¸C¿H¹HÀS»MÓJÕKÙØ�|‰|Ð'Ü)ØQóð ð × Ñ  Õ.ÙØ�J‰J�vÕäÐUÓVÐVr   )rR   úOptional[Any]rS   úOptional[Embeddings]rT   úOptional[str]rU   ræ   rV   ræ   rW   ræ   rX   ræ   r+   ræ   r,   ræ   r8   ræ   r1   rä   r9   ræ   rY   rä   rZ   ú"Optional[Callable[[float], float]]r;   Úint)F)rf   r   rg   ÚboolÚreturnr   )rê   rå   )NN)
r{   zIterable[str]r|   úOptional[List[dict]]r}   úOptional[List[str]]r~   r   rê   ú	List[str])NF)r-   ræ   r/   úOptional[bool]rê   r   )NNé   é`   NÚL2N)r�   ræ   r�   ræ   rŠ   úOptional[int]r‹   rò   rŒ   rò   rˆ   ræ   r-   ræ   rê   ÚNone)rT   rB   rê   rB   )
rœ   rí   r|   rë   r}   rì   r~   r   rê   rí   )NNN)r¤   r   r   rò   r   rä   r-   ræ   r~   r   rê   r   )rê   zCallable[[float], float])rS   úList[float]r   rò   r   úOptional[Dict[str, str]]r-   ræ   r~   r   rê   r   )
r¤   rB   r   rò   r   rõ   r~   r   rê   r   )NNNF)r¤   rB   r   rò   r-   ræ   r   rä   rÁ   rî   r~   r   rê   úList[Document])Né   g      à?N)r¤   rB   r   rò   rÌ   rè   rÊ   r¼   r   rõ   r~   r   rê   rö   )rS   rô   r   rò   rÌ   rè   rÊ   r¼   r   rõ   r~   r   rê   rö   )NNr"   r#   r$   r%   NNr&   r'   NN)"rÚ   zType[LanceDB]r{   rí   rS   r   r|   rë   rR   rä   rU   ræ   rV   ræ   rW   ræ   rX   ræ   r+   ræ   r,   ræ   r8   ræ   r9   ræ   rY   rä   rZ   rç   r~   r   rê   r!   )NNNNN)r}   rì   rã   rî   r   ræ   râ   rì   r-   ræ   r~   r   rê   ró   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	DEFAULT_Kr[   rl   Úpropertyro   r‚   rP   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ð ðVGð  ðVGð "ðVGð ðVGð ðVGð ðVGð ðVGð  ðVGð  ðVGð ?ðVGð  ó!VGôp ðD òó ðð +/Ø#'ð	.àð.ð (ð.ð !ð	.ð
 ð.ð 
ó.ðb INðØ!ðØ7Eðà	óðF #'Ø$(Ø(+Ø)+Ø*.Ø $Ø"ð(Fàð(Fð "ð(Fð &ð	(Fð
 'ð(Fð (ð(Fð ð(Fð ð(Fð 
ó(FóTGð +/Ø#'ð	2àð2ð (ð2ð !ð	2ð
 ð2ð 
ó2ðn  Ø $Ø"ð$àð$ð ð$ð ð	$ð
 ð$ð ð$ð 
ó$óLð8  Ø+/Ø"ðKàðKð ðKð )ð	Kð
 ðKð ðKð 
óKð(  Ø+/Ø"ð
àð
ð ð
ð )ð	
ð
 ð
ð ð
ð 
ó
ð2  Ø+/ð	&:àð&:ð ð&:ð )ð	&:ð
 ð&:ð 
ó&:ðV  Ø"Ø $Ø#ðàðð ðð ð	ð
 ðð ðð ðð 
óð@  ØØ Ø+/ð*àð*ð ð*ð ð	*ð
 ð*ð )ð*ð ð*ð 
ó*ð^  ØØ Ø+/ð+ àð+ ð ð+ ð ð	+ ð
 ð+ ð )ð+ ð ð+ ð 
ó+ ðZ ð
 +/Ø$(Ø$,Ø $Ø"(Ø$1Ø!%Ø $Ø)Ø"&Ø"&ØAEð#Øð#àð#ð ð#ð (ð	#ð
 "ð#ð "ð#ð ð#ð  ð#ð "ð#ð ð#ð ð#ð ð#ð  ð#ð  ð#ð ?ð#ð  ð!#ð" 
ò##ó ð#ðN $(Ø%)Ø $Ø,0Ø"ð!Wà ð!Wð #ð!Wð ð	!Wð
 *ð!Wð ð!Wð ð!Wð 
ô!Wr   r!   )rê   r   )r   zDict[str, str]rê   rB   )Ú
__future__r   r”   r6   rs   rI   Ú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     sO   ðÝ "ã Û 	Û Û ß F× FÑ Fã Ý -Ý 0Ý -Ý 3å Mà€	ó#ó
Eô
Y
Wˆkõ Y
Wr   