Ë
    µŒjv  ã                  ó¶   — d dl m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mZ d dlmZ d dlmZ erd dlZ ej(                  e«      Z G d„ de«      Zy)	é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚIterableÚListÚOptionalÚTupleÚType)ÚDocument)Ú
Embeddings)ÚVectorStorec                  ó  — e Zd Z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	 	 	 	 	 	 	 dd	„Z
e	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
„«       Zedd„«       Zdd„Zy)Ú	SQLiteVSSaL  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                óø   — 	 ddl }|s| j                  |«      }t        |t        «      st        j                  d«       || _        || _        || _	        | j                  «        y# t        $ r t        d«      ‚w xY w)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         út/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/sqlitevss.pyÚ__init__zSQLiteVSS.__init__%   s|   € ð	Ûñ Ø×/Ñ/°Ó8ˆJä˜)¤ZÔ0Ü�M‰MÐGÔHà%ˆÔØˆŒØ#ˆŒà×'Ñ'Õ)øô! ò 	ÜðCóð ð	ús   ‚A$ Á$A9c                ój  — | j                   j                  d| j                  › d�«       | j                   j                  d| j                  › d| j                  «       › d�«       | j                   j                  d| j                  › d| j                  › d�«       | j                   j	                  «        y )	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   z$SQLiteVSS.create_table_if_not_existsA   sÁ   € Ø×Ñ× Ñ ð(Ø(,¯© }ð 5ð	ô	
ð 	×Ñ× Ñ ð8Ø8<¿¹°}ð E"Ø"&×"9Ñ"9Ó";Ð!<ð =ðô	
ð 	×Ñ× Ñ ð!à!%§¡ ð .%à%)§[¡[ Mð 2ð	ô
	
ð 	×Ñ×ÑÕ!ó    Nc           
     ó¢  — | j                   j                  d| j                  › �«      j                  «       d   }|€d}| j                  j                  t        |«      «      }|s|D �cg c]  }i ‘Œ }}t        |||«      D ���	cg c]1  \  }}}	|t        j                  |«      t        j                  |	«      f‘Œ3 }
}}}	| j                   j                  d| j                  › d�|
«       | j                   j                  «        | j                   j                  d| j                  › d|› �«      }|D �cg c]  }|d   ‘Œ	 c}S c c}w c c}	}}w c c}w )a  Add 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_textszSQLiteVSS.add_textsb   sN  € ð ×!Ñ!×)Ñ)Ø.¨t¯{©{¨mÐ<ó
ç
‰(‹*�Wñˆð ˆ>ØˆFà—‘×0Ñ0´°e³Ó=ˆÙÙ%*Ó+¡U š UˆIÐ+ô *-¨U°I¸vÔ)Fõ
á)FÑ%��h ð ”4—:‘:˜hÓ'¬¯©°EÓ):Ò;Ø)Fð 	ò 
ð 	×Ñ×$Ñ$Ø˜4Ÿ;™;˜-Ð'VÐWØô	
ð 	×Ñ×ÑÔ!à×"Ñ"×*Ñ*Ø  §¡ ¨_¸V¸HÐEó
ˆñ )0Ó0© ��G“¨Ñ0Ð0ùò ,ùô
ùò 1s   Á(	E Â6EÄ1Ec           	     ó~  — d| j                   › d| j                   › dt        j                  |«      › d|› d�	}| j                  j	                  «       }|j                  |«       |j                  «       }g }|D ]D  }t        j                  |d   «      xs i }	t        |d   |	¬«      }
|j                  |
|d	   f«       ŒF |S )
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)
            )
        r7   r6   )Úpage_contentr7   Údistance)
r   r-   r.   r   Úcursorr#   ÚfetchallÚloadsr   Úappend)r   r   Úkr2   Ú	sql_queryr@   r:   Ú	documentsr;   r7   Údocs              r    Ú&similarity_search_with_score_by_vectorz0SQLiteVSS.similarity_search_with_score_by_vector†   sË   € ðð
 —+‘+�ð Ø ŸK™K˜=ð )"ô #'§*¡*¨YÓ"7Ð!8¸¸A¸3ð ?	ðˆ	ð ×!Ñ!×(Ñ(Ó*ˆØ�‰�yÔ!Ø—/‘/Ó#ˆàˆ	ÛˆCÜ—z‘z # j¡/Ó2Ò8°bˆHÜ¨¨F©¸hÔGˆCØ×Ñ˜c 3 z¡?Ð3Õ4ð ð
 Ðr&   c                ó”   — | j                   j                  |«      }| j                  ||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w ©z"Return docs most similar to query.©r   rD   ©r   Úembed_queryrH   )r   ÚqueryrD   r2   r   rF   rG   r5   s           r    Úsimilarity_searchzSQLiteVSS.similarity_search¡   sQ   € ð —O‘O×/Ñ/°Ó6ˆ	Ø×?Ñ?Ø 1ð @ó 
ˆ	ñ #,Ô,¡)™˜˜Q’ )Ò,Ð,ùÓ,s   ´Ac                ób   — | j                   j                  |«      }| j                  ||¬«      }|S rJ   rL   )r   rN   rD   r2   r   rF   s         r    Úsimilarity_search_with_scorez&SQLiteVSS.similarity_search_with_score«   s;   € ð —O‘O×/Ñ/°Ó6ˆ	Ø×?Ñ?Ø 1ð @ó 
ˆ	ð Ðr&   c                ó^   — | j                  ||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )NrK   )rH   )r   r   rD   r2   rF   rG   r5   s          r    Úsimilarity_search_by_vectorz%SQLiteVSS.similarity_search_by_vectorµ   s=   € ð ×?Ñ?Ø 1ð @ó 
ˆ	ñ #,Ô,¡)™˜˜Q’ )Ò,Ð,ùÓ,s   ™)c                óf   — | j                  |«      } | ||||¬«      }|j                  ||¬«       |S )z9Return VectorStore initialized from texts and embeddings.)r   r   r   r   )r0   r1   )r   r<   )	Úclsr0   r   r1   r   r   r2   r   Úvsss	            r    Ú
from_textszSQLiteVSS.from_texts½   s>   € ð ×*Ñ*¨7Ó3ˆ
ÙØ J¸È9ô
ˆð 	�‰˜E¨YˆÔ7Øˆ
r&   c                óÂ   — dd l }dd l} |j                  | «      }|j                  |_        |j                  d«       |j                  |«       |j                  d«       |S )Nr   TF)Úsqlite3r   ÚconnectÚRowÚrow_factoryÚenable_load_extensionÚload)r   rY   r   r   s       r    r   zSQLiteVSS.create_connectionÏ   sR   € ããà$�W—_‘_ WÓ-ˆ
Ø!(§¡ˆ
ÔØ×(Ñ(¨Ô.Ø�‰˜
Ô#Ø×(Ñ(¨Ô/ØÐr&   c                óR   — d}| j                   j                  |«      }t        |«      S )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   rM   Úlen)r   Ú
dummy_textÚdummy_embeddings      r    r$   zSQLiteVSS.get_dimensionalityÜ   s(   € ð
 ,ˆ
ØŸ/™/×5Ñ5°jÓAˆÜ�?Ó#Ð#r&   )úvss.db)r   Ústrr   zOptional[sqlite3.Connection]r   r   r   rd   )ÚreturnÚNone)N)r0   zIterable[str]r1   úOptional[List[dict]]r2   r   re   ú	List[str])é   )r   úList[float]rD   Úintr2   r   re   úList[Tuple[Document, float]])rN   rd   rD   rk   r2   r   re   úList[Document])rN   rd   rD   rk   r2   r   re   rl   )r   rj   rD   rk   r2   r   re   rm   )NÚ	langchainrc   )rU   zType[SQLiteVSS]r0   rh   r   r   r1   rg   r   rd   r   rd   r2   r   re   r   )r   rd   re   zsqlite3.Connection)re   rk   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r!   r   r<   rH   rO   rQ   rS   ÚclassmethodrW   Ústaticmethodr   r$   © r&   r    r   r      sš  „ ñð  ð*àð*ð 1ð*ð ð	*ð
 ó*ó8"ðH +/ð"1àð"1ð (ð"1ð ð	"1ð
 
ó"1ðJ 01ðØ$ðØ),ðØ<?ðà	%óð8 $%ð-Øð-Ø ð-Ø03ð-à	ó-ð $%ðØðØ ðØ03ðà	%óð 01ð-Ø$ð-Ø),ð-Ø<?ð-à	ó-ð ð
 +/Ø ØðØðàðð ðð (ð	ð
 ðð ðð ðð 
òó ðð" ò
ó ð
ô$r&   r   )Ú
__future__r   r-   Úloggingr   Útypingr   r   r   r   r   r	   r
   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   rY   Ú	getLoggerro   Úloggerr   ru   r&   r    Ú<module>r~      sQ   ðÝ "ã Û Û ÷÷ ñ õ .Ý 0Ý 3áÛà	ˆ×	Ñ	˜8Ó	$€ôI$�õ I$r&   