Ë
    µŒjÑ  ã                  óv   — d dl mZ d dlmZ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  G d„ de«      Zy	)
é    )Úannotations)ÚAnyÚDictÚIterableÚListÚOptionalÚTuple)Úuuid4)ÚDocument)Ú
Embeddings)ÚVectorStorec                  ó,  ‡ — e Zd ZdZ	 d	 	 	 	 	 dˆ fd„Z	 d	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 d	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 	 	 	 	 dd„Zdd„Z	dd„Z
ddd	„Ze	 	 	 	 	 	 	 	 dd
„«       Ze	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„«       Ze	 d	 	 	 	 	 	 	 	 	 dd„«       Zˆ xZS )ÚVLitez?VLite is a simple and fast vector database for semantic search.c                óà   •— t         ‰| �  «        || _        |xs dt        «       j                  › �| _        	 ddlm}  |dd| j
                  i|¤Ž| _        y # t        $ r t        d«      ‚w xY w)NÚvlite_r   )r   úRCould not import vlite python package. Please install it with `pip install vlite`.Ú
collection© )	ÚsuperÚ__init__Úembedding_functionr
   Úhexr   Úvliter   ÚImportError)Úselfr   r   Úkwargsr   Ú	__class__s        €úp/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/vlite.pyr   zVLite.__init__   sv   ø€ ô 	‰ÑÔØ"4ˆÔØ$Ò>¨&´³·±°Ð(>ˆŒð	Ý#ñ Ñ@ d§o¡oÐ@¸Ñ@ˆ�
øô ò 	Üð>óð ð	ús   ¸A ÁA-c                ó²  — t        |«      }|j                  d|D �cg c]  }t        t        «       «      ‘Œ c}«      }| j                  j                  |«      }|s|D �cg c]  }i ‘Œ }}t        ||||«      D ���	�
cg c]  \  }}}	}
|||	|
dœ‘Œ }}	}}}
| j                  j                  |«      }|D �cg c]  }|d   ‘Œ	 c}S c c}w c c}w c c}
}	}}w c c}w )ar  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.
            kwargs: vectorstore specific parameters

        Returns:
            List of ids from adding the texts into the vectorstore.
        Úids)ÚtextÚmetadataÚidÚ	embeddingr   )	ÚlistÚpopÚstrr
   r   Úembed_documentsÚzipr   Úadd)r   ÚtextsÚ	metadatasr   Ú_r    Ú
embeddingsr!   r"   r#   r$   Údata_pointsÚresultsÚresults                 r   Ú	add_textszVLite.add_texts#   sß   € ô  �U“ˆØ�j‰j˜±uÓ =±u°!¤¤U£W¥°uÑ =Ó>ˆØ×,Ñ,×<Ñ<¸UÓCˆ
ÙÙ%*Ó+¡U š UˆIÐ+ô 25°U¸IÀsÈJÔ1Wö
á1WÑ-��h  Ið  x°rÈ	ÓRØ1Wð 	ó 
ð —*‘*—.‘. Ó-ˆÙ(/Ó0©˜f��q“	¨Ñ0Ð0ùò !>ùò ,ùõ
ùò
 1s   œC
Á	CÁ<C
Â3Cc           
     óx  — |j                  d|D �cg c]  }t        t        «       «      ‘Œ c}«      }g }g }t        ||«      D ]Á  \  }}d|v r‚	 ddlm}	  |	|d   «      }
|j                  |
«       |j                  |j                  gt        |
«      z  «       |j                  t        t        |
«      «      D �cg c]	  }|› d|› �‘Œ c}«       ŒŒ|j                  |j                  «       |j                  |j                  «       ŒÃ | j                  |||¬«      S c c}w # t        $ r t        d«      ‚w xY wc c}w )aa  Add a list of documents to the vectorstore.

        Args:
            documents: List of documents to add to the vectorstore.
            kwargs: vectorstore specific parameters such as "file_path" for processing
                    directly with vlite.

        Returns:
            List of ids from adding the documents into the vectorstore.
        r    Ú	file_pathr   )Úprocess_filer   r-   )r    )r&   r'   r
   r)   Úvlite.utilsr5   r   Úextendr"   ÚlenÚrangeÚappendÚpage_contentr2   )r   Ú	documentsr   r-   r    r+   r,   Údocr#   r5   Úprocessed_dataÚis               r   Úadd_documentszVLite.add_documents?   s.  € ð �j‰j˜±yÓ A±y°!¤¤U£W¥°yÑ AÓBˆØˆØˆ	Ü˜9 cÖ*‰GˆC�Ø˜fÑ$ðÝ8ñ ".¨f°[Ñ.AÓ!B�Ø—‘˜^Ô,Ø× Ñ  #§,¡, ´#°nÓ2EÑ!EÔFØ—
‘
´´s¸>Ó7JÔ1KÓLÑ1K¨A˜r˜d ! A 3šKÐ1KÑLÕMà—‘˜S×-Ñ-Ô.Ø× Ñ  §¡Õ.ð! +ð" �~‰~˜e Y°Cˆ~Ó8Ð8ùò) !Bøô #ò Ü%ðFóð ðüò Ms   ‘D
ÁDÂ8D7
ÄD4c                ó^   — | j                  ||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )zûReturn docs most similar to query.

        Args:
            query: Text to look up documents similar to.
            k: Number of Documents to return. Defaults to 4.

        Returns:
            List of Documents most similar to the query.
        )Úk)Úsimilarity_search_with_score)r   ÚqueryrB   r   Údocs_and_scoresr=   r-   s          r   Úsimilarity_searchzVLite.similarity_searchd   s5   € ð ×;Ñ;¸EÀQÐ;ÓGˆÙ"1Ô2¡/™˜˜Q’ /Ò2Ð2ùÓ2s   ™)c           	     óÞ   — |xs i }| j                   j                  |«      }| j                  j                  |||d|¬«      }|D ��	�cg c]  \  }}	}t	        ||¬«      |	f‘Œ }
}	}}|
S c c}}	}w )aM  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: Filter by metadata. Defaults to None.

        Returns:
            List of Tuples of (doc, score), where score is the similarity score.
        T)r!   Útop_kr"   Úreturn_scoresr$   ©r;   r"   )r   Úembed_queryr   Úretriever   )r   rD   rB   Úfilterr   r"   r$   r0   r!   ÚscoreÚdocuments_with_scoress              r   rC   z"VLite.similarity_search_with_scorev   s�   € ð" ’<˜RˆØ×+Ñ+×7Ñ7¸Ó>ˆ	Ø—*‘*×%Ñ%ØØØØØð &ó 
ˆñ *1õ!
á)0Ñ%��e˜Xô  4°(Ô;¸UÒCØ)0ð 	ò !
ð %Ð$ùô	!
s   ÁA(c                óh   — | j                   j                  ||j                  |j                  ¬«       y)z/Update an existing document in the vectorstore.)r!   r"   N)r   Úupdater;   r"   )r   Údocument_idÚdocuments      r   Úupdate_documentzVLite.update_document–   s,   € à�
‰
×ÑØ˜h×3Ñ3¸h×>OÑ>Oð 	õ 	
ó    c                ó†   — | j                   j                  |«      }|D ��cg c]  \  }}t        ||¬«      ‘Œ }}}|S c c}}w )zGet documents by their IDs.rJ   )r   Úgetr   )r   r    r0   r!   r"   r<   s         r   rW   z	VLite.getœ   sI   € à—*‘*—.‘. Ó%ˆáQXô
ÙQX¹~¸tÀXŒH $°Ö:ÐQXð 	ñ 
ð Ðùó
s   ¡=c                óD   — |� | j                   j                  |fi |¤Ž yy)zDelete by ids.NT)r   Údelete)r   r    r   s      r   rY   zVLite.delete¤   s&   € àˆ?ØˆD�J‰J×Ñ˜cÑ, VÒ,ØØrU   c                ó   —  | d||dœ|¤Ž}|S )zÉLoad an existing VLite index.

        Args:
            embedding: Embedding function
            collection: Name of the collection to load.

        Returns:
            VLite vector store.
        ©r   r   r   r   )Úclsr$   r   r   r   s        r   Úfrom_existing_indexzVLite.from_existing_index«   s   € ñ  ÐR y¸ZÑRÈ6ÑRˆØˆrU   c                óD   —  | d||dœ|¤Ž} |j                   ||fi |¤Ž |S )aí  Construct VLite wrapper from raw documents.

        This is a user-friendly interface that:
        1. Embeds documents.
        2. Adds the documents to the vectorstore.

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

        Example:
        .. code-block:: python

            from langchain import VLite
            from langchain.embeddings import OpenAIEmbeddings

            embeddings = OpenAIEmbeddings()
            vlite = VLite.from_texts(texts, embeddings)
        r[   r   )r2   )r\   r+   r$   r,   r   r   r   s          r   Ú
from_textszVLite.from_texts¾   s2   € ñ4 ÐR y¸ZÑRÈ6ÑRˆØˆ�‰˜˜yÑ3¨FÒ3ØˆrU   c                óB   —  | d||dœ|¤Ž} |j                   |fi |¤Ž |S )aû  Construct VLite wrapper from a list of documents.

        This is a user-friendly interface that:
        1. Embeds documents.
        2. Adds the documents to the vectorstore.

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

        Example:
        .. code-block:: python

            from langchain import VLite
            from langchain.embeddings import OpenAIEmbeddings

            embeddings = OpenAIEmbeddings()
            vlite = VLite.from_documents(documents, embeddings)
        r[   r   )r@   )r\   r<   r$   r   r   r   s         r   Úfrom_documentszVLite.from_documentsÜ   s2   € ñ2 ÐR y¸ZÑRÈ6ÑRˆØˆ×Ñ˜IÑ0¨Ò0ØˆrU   )N)r   r   r   úOptional[str]r   r   )r+   zIterable[str]r,   úOptional[List[dict]]r   r   Úreturnú	List[str])r<   úList[Document]r   r   rd   re   )é   )rD   r'   rB   Úintr   r   rd   rf   )rg   N)
rD   r'   rB   rh   rM   zOptional[Dict[str, str]]r   r   rd   zList[Tuple[Document, float]])rR   r'   rS   r   rd   ÚNone)r    re   rd   rf   )r    zOptional[List[str]]r   r   rd   zOptional[bool])r$   r   r   r'   r   r   rd   r   )NN)r+   re   r$   r   r,   rc   r   rb   r   r   rd   r   )
r<   rf   r$   r   r   rb   r   r   rd   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r2   r@   rF   rC   rT   rW   rY   Úclassmethodr]   r_   ra   Ú__classcell__)r   s   @r   r   r      sØ  ø„ ÙIð
 %)ðAà&ðAð "ðAð õ	Að, +/ð1àð1ð (ð1ð ð	1ð
 
ó1ð8#9à!ð#9ð ð#9ð 
ó	#9ðP ð3àð3ð ð3ð ð	3ð
 
ó3ð* Ø+/ð	%àð%ð ð%ð )ð	%ð
 ð%ð 
&ó%ó@
óôð ðàðð ðð ð	ð
 
òó ðð$ ð
 +/Ø$(ðàðð ðð (ð	ð
 "ðð ðð 
òó ðð: ð
 %)ð	à!ðð ðð "ð	ð
 ðð 
òó ôrU   r   N)Ú
__future__r   Útypingr   r   r   r   r   r	   Úuuidr
   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   r   r   rU   r   Ú<module>rv      s,   ðÝ "÷ >× =Ý õ .Ý 0Ý 3ôjˆKõ jrU   