
    Ng                    ~    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d	S )
    )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	 d0d1dZ	 	 d2d3dZd4d"Z	d5d$Z
d,d6d'Zed7d)            Ze	 	 d8d9d*            Ze	 d,d:d+            Z xZS );VLitez?VLite is a simple and fast vector database for semantic search.Nembedding_functionr   
collectionOptional[str]kwargsr   c                   t                                                       || _        |pdt                      j         | _        	 ddlm} n# t          $ r t          d          w xY w |dd| j        i|| _        d S )Nvlite_r   )r   RCould not import vlite python package. Please install it with `pip install vlite`.r    )	super__init__r   r
   hexr   vliter   ImportError)selfr   r   r   r   	__class__s        b/var/www/html/ai-engine/env/lib/python3.11/site-packages/langchain_community/vectorstores/vlite.pyr   zVLite.__init__   s     	"4$>(>(>(>	####### 	 	 	>  	
 U@@do@@@


s   A A(textsIterable[str]	metadatasOptional[List[dict]]return	List[str]c                4   t          |          }|                    dd |D                       }| j                            |          }|sd |D             }d t	          ||||          D             }| j                            |          }d |D             S )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.
        idsc                D    g | ]}t          t                                S r   strr
   .0_s     r    
<listcomp>z#VLite.add_texts.<locals>.<listcomp>4   s"     = = =!UWW = = =    c                    g | ]}i S r   r   r,   s     r    r/   z#VLite.add_texts.<locals>.<listcomp>7   s    ++++++r0   c                &    g | ]\  }}}}||||d S ))textmetadataid	embeddingr   )r-   r3   r4   r5   r6   s        r    r/   z#VLite.add_texts.<locals>.<listcomp>8   s<     
 
 
-hI xr	RR
 
 
r0   c                    g | ]
}|d          S )r   r   )r-   results     r    r/   z#VLite.add_texts.<locals>.<listcomp>=   s    000fq	000r0   )listpopr   embed_documentszipr   add)r   r!   r#   r   r(   
embeddingsdata_pointsresultss           r    	add_textszVLite.add_texts#   s      Ujj = =u = = =>>,<<UCC
 	,++U+++I
 
14UIsJ1W1W
 
 
 *..--000000r0   	documentsList[Document]c           	     |  	 |                     dd |D                       }g }g }t          ||          D ]\  }	d|v r	 ddlm} n# t          $ r t	          d          w xY w ||d                   }|                    |           |                    |j        gt          |          z             |                    	fdt          t          |                    D                        |	                    |j
                   |	                    |j                   |                     |||          S )	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(   c                D    g | ]}t          t                                S r   r*   r,   s     r    r/   z'VLite.add_documents.<locals>.<listcomp>N   s"     A A A!UWW A A Ar0   	file_pathr   )process_filer   c                    g | ]	} d | 
S )r.   r   )r-   ir5   s     r    r/   z'VLite.add_documents.<locals>.<listcomp>^   s#    LLLArKKAKKLLLr0   )r(   )r:   r<   vlite.utilsrG   r   extendr4   lenrangeappendpage_contentrA   )
r   rB   r   r(   r!   r#   docrG   processed_datar5   s
            @r    add_documentszVLite.add_documents?   ss    jj A Ay A A ABB	9c** 	/ 	/GCf$$8888888"   %F  
 ".f[.A!B!B^,,,  #,#n2E2E!EFFF

LLLLs>7J7J1K1KLLLMMMMS-...  ....~~eYC~888s    AA!   queryr+   kintc                H    |                      ||          }d |D             S )zReturn 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.
        )rU   c                    g | ]\  }}|S r   r   )r-   rP   r.   s      r    r/   z+VLite.similarity_search.<locals>.<listcomp>t   s    222Q222r0   )similarity_search_with_score)r   rT   rU   r   docs_and_scoress        r    similarity_searchzVLite.similarity_searchd   s0     ;;EQ;GG22/2222r0   filterOptional[Dict[str, str]]List[Tuple[Document, float]]c                    |pi }| j                             |          }| j                            |||d|          }d |D             }|S )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)r3   top_kr4   return_scoresr6   c                <    g | ]\  }}}t          ||           |fS )rO   r4   r   )r-   r3   scorer4   s       r    r/   z6VLite.similarity_search_with_score.<locals>.<listcomp>   s@     !
 !
 !
%eX 4(;;;UC!
 !
 !
r0   )r   embed_queryr   retrieve)	r   rT   rU   r\   r   r4   r6   r@   documents_with_scoress	            r    rY   z"VLite.similarity_search_with_scorev   su    " <R+77>>	*%% & 
 
!
 !
)0!
 !
 !
 %$r0   document_iddocumentr   Nonec                T    | j                             ||j        |j                   dS )z/Update an existing document in the vectorstore.)r3   r4   N)r   updaterO   r4   )r   rh   ri   s      r    update_documentzVLite.update_document   s8    
h3h>O 	 	
 	
 	
 	
 	
r0   r(   c                R    | j                             |          }d |D             }|S )zGet documents by their IDs.c                6    g | ]\  }}t          ||           S rc   r   )r-   r3   r4   s      r    r/   zVLite.get.<locals>.<listcomp>   s6     
 
 
?MtXH$:::
 
 
r0   )r   get)r   r(   r@   rB   s       r    rp   z	VLite.get   s;    *..%%
 
QX
 
 
	 r0   Optional[List[str]]Optional[bool]c                4    | | j         j        |fi | dS dS )zDelete by ids.NT)r   delete)r   r(   r   s      r    rt   zVLite.delete   s.    ?DJc,,V,,,4tr0   r6   c                     | d||d|}|S )zLoad an existing VLite index.

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

        Returns:
            VLite vector store.
        r   r   r   r   )clsr6   r   r   r   s        r    from_existing_indexzVLite.from_existing_index   s%      RyZRR6RRr0   c                :     | 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)
        rv   r   )rA   )rw   r!   r6   r#   r   r   r   s          r    
from_textszVLite.from_texts   sA    4 RyZRR6RRy33F333r0   c                8     | 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)
        rv   r   )rR   )rw   rB   r6   r   r   r   s         r    from_documentszVLite.from_documents   s@    2 RyZRR6RRI00000r0   )N)r   r   r   r   r   r   )r!   r"   r#   r$   r   r   r%   r&   )rB   rC   r   r   r%   r&   )rS   )rT   r+   rU   rV   r   r   r%   rC   )rS   N)
rT   r+   rU   rV   r\   r]   r   r   r%   r^   )rh   r+   ri   r   r%   rj   )r(   r&   r%   rC   )r(   rq   r   r   r%   rr   )r6   r   r   r+   r   r   r%   r   )NN)r!   r&   r6   r   r#   r$   r   r   r   r   r%   r   )
rB   rC   r6   r   r   r   r   r   r%   r   )__name__
__module____qualname____doc__r   rA   rR   r[   rY   rm   rp   rt   classmethodrx   rz   r|   __classcell__)r   s   @r    r   r      s       II
 %)A A A A A A A, +/1 1 1 1 18#9 #9 #9 #9P 3 3 3 3 3* +/	% % % % %@
 
 
 
           [$ 
 +/$(    [: 
 %)	    [    r0   r   N)
__future__r   typingr   r   r   r   r   r	   uuidr
   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   r   r   r0   r    <module>r      s    " " " " " " > = = = = = = = = = = = = = = =       . - - - - - 0 0 0 0 0 0 3 3 3 3 3 3j j j j jK j j j j jr0   