Ë
    µŒjm#  ã                  ó¦   — d dl mZ d dlZd dlZd dlmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ  ej$                  e«      Z G d„ d	e«      Zy)
é    )ÚannotationsN)ÚAnyÚIterableÚListÚOptionalÚTuple)ÚDocument)Ú
Embeddings)ÚVectorStore)ÚDistanceStrategyc                  óD  — e Zd ZdZej
                  f	 	 	 	 	 dd„Zedd„«       Zdd„Z	dd„Z
	 d	 	 	 	 	 	 	 dd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 dd	„Zd
g f	 	 	 	 	 	 	 	 	 dd„Zd
g dœ	 	 	 	 	 	 	 	 	 dd„Zd
g f	 	 	 	 	 	 	 	 	 dd„Ze	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Zy)ÚKDBAIaT  `KDB.AI` vector store.

    See https://kdb.ai.

    To use, you should have the `kdbai_client` python package installed.

    Args:
        table: kdbai_client.Table object to use as storage,
        embedding: Any embedding function implementing
            `langchain.embeddings.base.Embeddings` interface,
        distance_strategy: One option from DistanceStrategy.EUCLIDEAN_DISTANCE,
            DistanceStrategy.DOT_PRODUCT or DistanceStrategy.COSINE.

    See the example [notebook](https://github.com/KxSystems/langchain/blob/KDB.AI/docs/docs/integrations/vectorstores/kdbai.ipynb).
    c                óh   — 	 dd l }|| _        || _        || _        y # t        $ r t        d«      ‚w xY w)Nr   z`Could not import kdbai_client python package. Please install it with `pip install kdbai_client`.)Úkdbai_clientÚImportErrorÚ_tableÚ
_embeddingÚdistance_strategy)ÚselfÚtableÚ	embeddingr   r   s        úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/kdbai.pyÚ__init__zKDBAI.__init__!   sF   € ð	Ûð ˆŒØ#ˆŒØ!2ˆÕøô ò 	ÜðEóð ð	ús   ‚ œ1c                óP   — t        | j                  t        «      r| j                  S y ©N)Ú
isinstancer   r
   )r   s    r   Ú
embeddingszKDBAI.embeddings4   s   € ä�d—o‘o¤zÔ2Ø—?‘?Ð"Øó    c                óÆ   — t        | j                  t        «      r$| j                  j                  t	        |«      «      S |D �cg c]  }| j                  |«      ‘Œ c}S c c}w r   )r   r   r
   Úembed_documentsÚlist)r   ÚtextsÚts      r   Ú_embed_documentszKDBAI._embed_documents:   sJ   € Ü�d—o‘o¤zÔ2Ø—?‘?×2Ñ2´4¸³;Ó?Ð?Ù,1Ó2©E q�—‘ Õ"¨EÑ2Ð2ùÒ2s   ÁAc                óŽ   — t        | j                  t        «      r| j                  j                  |«      S | j                  |«      S r   )r   r   r
   Úembed_query)r   Útexts     r   Ú_embed_queryzKDBAI._embed_query?   s4   € Ü�d—o‘o¤zÔ2Ø—?‘?×.Ñ.¨tÓ4Ð4Ø�‰˜tÓ$Ð$r   Nc                óà  — 	 dd l }	 dd l}| j                  j	                  |«      }|j                  «       }||d<   |D �cg c]  }|j                  d«      ‘Œ c}|d<   |D �	cg c]  }	|j                  |	d¬«      ‘Œ c}	|d	<   |�|j                  ||gd
¬«      }| j                  j                  |d¬«       y # t        $ r t        d«      ‚w xY w# t        $ r t        d«      ‚w xY wc c}w c c}	w )Nr   zRCould not import numpy python package. Please install it with `pip install numpy`.úTCould not import pandas python package. Please install it with `pip install pandas`.Úidzutf-8r'   Úfloat32)Údtyper   é   )ÚaxisF)Úwarn)Únumpyr   Úpandasr   r    Ú	DataFrameÚencodeÚarrayÚconcatr   Úinsert)
r   r"   ÚidsÚmetadataÚnpÚpdÚembedsÚdfr#   Úes
             r   Ú_insertzKDBAI._insertD   s  € ð	Ûð	Ûð —‘×0Ñ0°Ó7ˆØ�\‰\‹^ˆØˆˆ4‰Ù16Ó7±¨A�a—h‘h˜wÕ'°Ñ7ˆˆ6‰
ÙBHÓIÁ&¸Q˜BŸH™H Q¨i˜HÕ8À&ÑIˆˆ<ÑØÐØ—‘˜B ˜>°�Ó2ˆBØ�‰×Ñ˜2 EÐÕ*øô+ ò 	Üð>óð ð	ûô ò 	Üð?óð ð	üò 8ùÚIs!   ‚B6 ‡C ¿C&Á!C+Â6CÃC#c                ó,  — 	 ddl }t        |«      }d}|�*t        ||j                  «      r|}n|j	                  |«      }g }t        |«      dz
  |z  dz   }	t        |	«      D ]”  }
|
|z  }|
dz   |z  }||| }|r||| }n<t        t        |«      «      D �cg c]  }t        t        j                  «       «      ‘Œ! }}|� |j                  || j                  d¬«      }nd}| j                  |||«       ||z   }Œ– |S # t        $ r t        d«      ‚w xY wc c}w )a  Run more texts through the embeddings and add to the vectorstore.

        Args:
            texts (Iterable[str]): Texts to add to the vectorstore.
            metadatas (Optional[List[dict]]): List of metadata corresponding to each
                chunk of text.
            ids (Optional[List[str]]): List of IDs corresponding to each chunk of text.
            batch_size (Optional[int]): Size of batch of chunks of text to insert at
                once.

        Returns:
            List[str]: List of IDs of the added texts.
        r   Nr*   r.   T)Údrop)r2   r   r!   r   r3   ÚlenÚrangeÚstrÚuuidÚuuid4ÚilocÚreset_indexr?   )r   r"   Ú	metadatasr8   Ú
batch_sizeÚkwargsr;   ÚmetadfÚout_idsÚnbatchesÚiÚistartÚiendÚbatchÚ	batch_idsÚ_Ú
batch_metas                    r   Ú	add_textszKDBAI.add_textsc   s9  € ð,	Ûô �U“ˆØ#ˆØÐ Ü˜) R§\¡\Ô2Ø"‘àŸ™ iÓ0�ØˆÜ˜“J ‘N zÑ1°AÑ5ˆÜ�x–ˆAØ˜‘^ˆFØ˜‘E˜ZÑ'ˆDØ˜& Ð&ˆEÙØ  tÐ,‘	ä8=¼cÀ%»jÔ8IÓJÑ8I°1œS¤§¡£Õ.Ð8I�	ÐJØÐ!Ø#Ÿ[™[¨°Ð5×AÑAÀtÐAÓL‘
à!�
Ø�L‰L˜ 	¨:Ô6Ø 	Ñ)‰Gð !ð ˆøô; ò 	Üð?óð ð	üò, Ks   ‚C9 Â$DÃ9Dc                óü   — 	 ddl }|D �cg c]  }|j                  ‘Œ }}|j                  |D �cg c]  }|j                  ‘Œ c}«      }| j                  |||¬«      S # t        $ r t        d«      ‚w xY wc c}w c c}w )aH  Run more documents through the embeddings and add to the vectorstore.

        Args:
            documents (List[Document]: Documents to add to the vectorstore.
            batch_size (Optional[int]): Size of batch of documents to insert at once.

        Returns:
            List[str]: List of IDs of the added texts.
        r   Nr*   )r9   rJ   )r2   r   Úpage_contentr3   r9   rV   )r   Ú	documentsrJ   rK   r;   Úxr"   r9   s           r   Úadd_documentszKDBAI.add_documentsš   s„   € ð	Ûñ *3Ó3© A�—“¨ˆÐ3Ø—<‘<±YÓ ?±Y° §£°YÑ ?Ó@ˆØ�~‰~˜e¨hÀ:ˆ~ÓNÐNøô ò 	Üð?óð ð	üò 4ùÚ ?s   ‚A ŠA4®A9ÁA1r.   c                óL   —  | j                   | j                  |«      f||dœ|¤ŽS )an  Run similarity search with distance from a query string.

        Args:
            query (str): Query string.
            k (Optional[int]): number of neighbors to retrieve.
            filter (Optional[List]): KDB.AI metadata filter clause: https://code.kx.com/kdbai/use/filter.html

        Returns:
            List[Document]: List of similar documents.
        ©ÚkÚfilter)Ú&similarity_search_by_vector_with_scorer(   )r   Úqueryr^   r_   rK   s        r   Úsimilarity_search_with_scorez"KDBAI.similarity_search_with_score³   s9   € ð" ;ˆt×:Ñ:Ø×Ñ˜eÓ$ð
Ø()°&ñ
Ø<Bñ
ð 	
r   r]   c               ó°  — d|v r|j                  d«      } | j                  j                  d	|g||dœ|¤Ž}g }t        |t        «      r|d   }n|S |j                  d¬«      D ]j  }|j                  d«      }|j                  d«      }	|j                  t        ||j                  «       D ��
ci c]  \  }}
|dk7  sŒ||
“Œ c}
}¬«      |	f«       Œl |S c c}
}w )
a€  Return documents most similar to embedding, along with scores.

        Args:
            embedding (List[float]): query vector.
            k (Optional[int]): number of neighbors to retrieve.
            filter (Optional[List]): KDB.AI metadata filter clause: https://code.kx.com/kdbai/use/filter.html

        Returns:
            List[Document]: List of similar documents.
        Ún)Úvectorsrd   r_   r   Úrecords)Úorientr'   Ú__nn_distance)rX   r9   © )	Úpopr   Úsearchr   r!   Úto_dictÚappendr	   Úitems)r   r   r^   r_   rK   ÚmatchesÚdocsÚrowr'   ÚscoreÚvs              r   r`   z,KDBAI.similarity_search_by_vector_with_scoreÈ   sÞ   € ð$ �&‰=Ø—
‘
˜3“ˆAØ$�$—+‘+×$Ñ$ÐW¨i¨[¸AÀfÑWÐPVÑWˆØˆÜ�gœtÔ$Ø˜a‘j‰GàˆKØ—?‘?¨)�?Ö4ˆCØ—7‘7˜6“?ˆDØ—G‘G˜OÓ,ˆEØ�K‰KäØ%)Ø36·9±9´;Ô!N±;©4¨1¨aÀ!ÀvÃ+ ! Q¡$°;Ò!Nôð ðõð 5ð ˆùó "Os   Â,CÂ:Cc                ód   —  | j                   |f||dœ|¤Ž}|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )a`  Run similarity search from a query string.

        Args:
            query (str): Query string.
            k (Optional[int]): number of neighbors to retrieve.
            filter (Optional[List]): KDB.AI metadata filter clause: https://code.kx.com/kdbai/use/filter.html

        Returns:
            List[Document]: List of similar documents.
        r]   )rb   )r   ra   r^   r_   rK   Údocs_and_scoresÚdocrT   s           r   Úsimilarity_searchzKDBAI.similarity_searchð   sI   € ð" <˜$×;Ñ;Øð
Ø˜vñ
Ø)/ñ
ˆñ #2Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   œ,c                ó   — t        d «      ‚)zNot implemented.)Ú	Exception)Úclsr"   r   rI   rK   s        r   Ú
from_textszKDBAI.from_texts  s   € ô Ð*Ó+Ð+r   )r   r   r   r
   r   zOptional[DistanceStrategy])ÚreturnzOptional[Embeddings])r"   úIterable[str]r|   zList[List[float]])r'   rD   r|   úList[float]r   )r"   ú	List[str]r8   úOptional[List[str]]r9   zOptional[Any]r|   ÚNone)NNé    )r"   r}   rI   úOptional[List[dict]]r8   r€   rJ   ÚintrK   r   r|   r   )r‚   )rY   úList[Document]rJ   r„   rK   r   r|   r   )
ra   rD   r^   r„   r_   úOptional[List]rK   r   r|   úList[Tuple[Document, float]])
r   r~   r^   r„   r_   r†   rK   r   r|   r‡   )
ra   rD   r^   r„   r_   r†   rK   r   r|   r…   )rz   r   r"   r   r   r
   rI   rƒ   rK   r   r|   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚEUCLIDEAN_DISTANCEr   Úpropertyr   r$   r(   r?   rV   r[   rb   r`   rw   Úclassmethodr{   ri   r   r   r   r      s  „ ñð, ×/Ñ/ð3àð3ð ð3ð
ó	3ð& òó ðó
3ó
%ð #'ð	+àð+ð !ð+ð  ð	+ð
 
ó+ðD +/Ø#'Øð5àð5ð (ð5ð !ð	5ð
 ð5ð ð5ð 
ó5ðp <>ðOØ'ðOØ58ðOØILðOà	óOð8 Ø!#ð	
àð
ð ð
ð ð	
ð
 ð
ð 
&ó
ð2 Ø!#ñ&àð&ð ð	&ð
 ð&ð ð&ð 
&ó&ðV Ø!#ð	3àð3ð ð3ð ð	3ð
 ð3ð 
ó3ð, ð
 +/ð	,Øð,àð,ð ð,ð (ð	,ð
 ð,ð 
ò,ó ñ,r   r   )Ú
__future__r   ÚloggingrE   Útypingr   r   r   r   r   Úlangchain_core.documentsr	   Úlangchain_core.embeddingsr
   Úlangchain_core.vectorstoresr   Ú&langchain_community.vectorstores.utilsr   Ú	getLoggerrˆ   Úloggerr   ri   r   r   Ú<module>r˜      s@   ðÝ "ã Û ß 7Õ 7å -Ý 0Ý 3å Cà	ˆ×	Ñ	˜8Ó	$€ô,ˆKõ ,r   