
    dhv                        S SK Jr  S SKrS SKrS SKrS SKJrJrJrJ	r	J
r
JrJr  S SKJr  S SKJr  S SKJr  \(       a  S SKr\R(                  " \5      r " S S\5      rg)	    )annotationsN)TYPE_CHECKINGAnyIterableListOptionalTupleType)Document)
Embeddings)VectorStorec                  0   \ rS rSrSr S       SS jjrSS jr S       SS jjr S       SS jjr S       SS jjr	 S       SS	 jjr
 S       SS
 jjr\   S               SS jj5       r\SS j5       rSS jrSrg)	SQLiteVSS   a0  SQLite with VSS extension as a vector database.

To use, you should have the ``sqlite-vss`` python package installed.
Example:
    .. code-block:: python
        from langchain_community.vectorstores import SQLiteVSS
        from langchain_community.embeddings.openai import OpenAIEmbeddings
        ...
c                
    SSK nU(       d  U R                  U5      n[        U[        5      (       d  [
        R                  " S5        X l        Xl        X0l	        U R                  5         g! [         a    [        S5      ef = f)z1Initialize with sqlite client with vss extension.r   Nz\Could not import sqlite-vss python package. Please install it with `pip install sqlite-vss`.z+embeddings input must be Embeddings object.)
sqlite_vssImportErrorcreate_connection
isinstancer   warningswarn_connection_table
_embeddingcreate_table_if_not_exists)selftable
connection	embeddingdb_filer   s         b/var/www/html/shao/venv/lib/python3.13/site-packages/langchain_community/vectorstores/sqlitevss.py__init__SQLiteVSS.__init__%   sy    	 //8J)Z00MMGH%#'')!  	C 	s   A, ,Bc                j   U R                   R                  SU R                   S35        U R                   R                  SU R                   SU R                  5        S35        U R                   R                  SU R                   SU R                   S35        U R                   R	                  5         g )	Nz(
            CREATE TABLE IF NOT EXISTS z
            (
              rowid INTEGER PRIMARY KEY AUTOINCREMENT,
              text TEXT,
              metadata BLOB,
              text_embedding BLOB
            )
            ;
            z8
                CREATE VIRTUAL TABLE IF NOT EXISTS vss_z. USING vss0(
                  text_embedding(z!)
                );
            zZ
                CREATE TRIGGER IF NOT EXISTS embed_text 
                AFTER INSERT ON z;
                BEGIN
                    INSERT INTO vss_z(rowid, text_embedding)
                    VALUES (new.rowid, new.text_embedding) 
                    ;
                END;
            )r   executer   get_dimensionalitycommit)r   s    r!   r   $SQLiteVSS.create_table_if_not_existsA   s      ((,} 5		
 	  88<} E""&"9"9";!< =	
 	  !!% .%%)[[M 2	
	
 	!    Nc           
        U R                   R                  SU R                   35      R                  5       S   nUc  SnU R                  R                  [        U5      5      nU(       d  U Vs/ sH  n0 PM     nn[        XU5       VVV	s/ sH3  u  pxn	U[        R                  " U5      [        R                  " U	5      4PM5     n
nnn	U R                   R                  SU R                   S3U
5        U R                   R                  5         U R                   R                  SU R                   SU 35      nU Vs/ sH  oS   PM	     sn$ s  snf s  sn	nnf s  snf )zAdd more texts to the vectorstore index.
Args:
    texts: Iterable of strings to add to the vectorstore.
    metadatas: Optional list of metadatas associated with the texts.
    kwargs: vectorstore specific parameters
z SELECT max(rowid) as rowid FROM rowidr   zINSERT INTO z/(text, metadata, text_embedding) VALUES (?,?,?)zSELECT rowid FROM z WHERE rowid > )r   r%   r   fetchoner   embed_documentslistzipjsondumpsexecutemanyr'   )r   texts	metadataskwargsmax_idembeds_textmetadataembed
data_inputresultsrows                r!   	add_textsSQLiteVSS.add_textsb   sH    !!)).t{{m<

(*W >F00e=%*+UUI+ *-Uv)F
)F% 4::h'E):;)F 	 
 	$$4;;-'VW	
 	!""** _VHE
 )00G00 ,
 1s   .E9E;Ec           	        SU R                    SU R                    S[        R                  " U5       SU S3	nU R                  R	                  5       nUR                  U5        UR                  5       n/ nU HG  n[        R                  " US   5      =(       d    0 n	[        US   U	S9n
UR                  XS	   45        MI     U$ )
Nzo
            SELECT 
                text,
                metadata,
                distance
            FROM z e
            INNER JOIN vss_zy v on v.rowid = e.rowid  
            WHERE vss_search(
              v.text_embedding,
              vss_search_params('z', z)
            )
        r:   r9   )page_contentr:   distance)
r   r0   r1   r   cursorr%   fetchallloadsr   append)r   r   kr5   	sql_queryrD   r=   	documentsr>   r:   docs              r!   &similarity_search_with_score_by_vector0SQLiteVSS.similarity_search_with_score_by_vector   s    
 ++  KK= )" #'**Y"7!8A3 ?		 !!((*y!//#	Czz#j/28bHFhGCcz?34 
 r)   c                    U R                   R                  U5      nU R                  XBS9nU VVs/ sH  u  pgUPM	     snn$ s  snnf z"Return docs most similar to query.r   rH   r   embed_queryrL   )r   queryrH   r5   r   rJ   rK   r8   s           r!   similarity_searchSQLiteVSS.similarity_search   sM     OO//6	?? @ 
	 #,,)),,,s   Ac                Z    U R                   R                  U5      nU R                  XBS9nU$ rO   rQ   )r   rS   rH   r5   r   rJ   s         r!   similarity_search_with_score&SQLiteVSS.similarity_search_with_score   s9     OO//6	?? @ 
	 r)   c                X    U R                  XS9nU VVs/ sH  u  pVUPM	     snn$ s  snnf )NrP   )rL   )r   r   rH   r5   rJ   rK   r8   s          r!   similarity_search_by_vector%SQLiteVSS.similarity_search_by_vector   s9     ?? @ 
	 #,,)),,,s   &c                T    U R                  U5      nU " XGXRS9nUR                  XS9  U$ )z9Return VectorStore initialized from texts and embeddings.)r   r   r    r   )r3   r4   )r   r?   )	clsr3   r   r4   r   r    r5   r   vsss	            r!   
from_textsSQLiteVSS.from_texts   s8     **73

 	E7
r)   c                    SS K nSS KnUR                  " U 5      nUR                  Ul        UR                  S5        UR                  U5        UR                  S5        U$ )Nr   TF)sqlite3r   connectRowrow_factoryenable_load_extensionload)r    rb   r   r   s       r!   r   SQLiteVSS.create_connection   sP    __W-
!(
((.
#((/r)   c                R    SnU R                   R                  U5      n[        U5      $ )z
Function that does a dummy embedding to figure out how many dimensions
this embedding function returns. Needed for the virtual table DDL.
zThis is a dummy text)r   rR   len)r   
dummy_textdummy_embeddings      r!   r&   SQLiteVSS.get_dimensionality   s(    
 ,
//55jA?##r)   )r   r   r   )vss.db)r   strr   zOptional[sqlite3.Connection]r   r   r    ro   )returnNone)N)r3   zIterable[str]r4   Optional[List[dict]]r5   r   rp   	List[str])   )r   List[float]rH   intr5   r   rp   List[Tuple[Document, float]])rS   ro   rH   rv   r5   r   rp   List[Document])rS   ro   rH   rv   r5   r   rp   rw   )r   ru   rH   rv   r5   r   rp   rx   )N	langchainrn   )r]   zType[SQLiteVSS]r3   rs   r   r   r4   rr   r   ro   r    ro   r5   r   rp   r   )r    ro   rp   zsqlite3.Connection)rp   rv   )__name__
__module____qualname____firstlineno____doc__r"   r   r?   rL   rT   rW   rZ   classmethodr_   staticmethodr   r&   __static_attributes__ r)   r!   r   r      s     ** 1* 	*
 *8"H +/"1"1 ("1 	"1
 
"1J 01$),<?	%8 $%-- -03-	- $% 03	% 01-$-),-<?-	- 
 +/   (	
    
 " 
 
$r)   r   )
__future__r   r0   loggingr   typingr   r   r   r   r   r	   r
   langchain_core.documentsr   langchain_core.embeddingsr   langchain_core.vectorstoresr   rb   	getLoggerrz   loggerr   r   r)   r!   <module>r      sO    "      . 0 3			8	$I$ I$r)   