Ë
    µŒj;  ã                  óÆ   — d dl mZ d dl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d
d„Z G d„ d	e«      Zy)é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚIterableÚListÚOptionalÚTupleÚType)ÚDocument)Ú
Embeddings)ÚVectorStorec                óF   — t        j                  dt        | «      z  g| ¢­Ž S )zÈSerializes a list of floats into a compact "raw bytes" format

    Source: https://github.com/asg017/sqlite-vec/blob/21c5a14fc71c83f135f5b00c84115139fd12c492/examples/simple-python/demo.py#L8-L10
    z%sf)ÚstructÚpackÚlen)Úvectors    út/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langchain_community/vectorstores/sqlitevec.pyÚserialize_f32r      s!   € ô
 �;‰;�uœs 6›{Ñ*Ð4¨VÒ4Ð4ó    c                  ó  — 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)Ú	SQLiteVecaL  SQLite with Vec extension as a vector database.

    To use, you should have the ``sqlite-vec`` python package installed.
    Example:
        .. code-block:: python
            from langchain_community.vectorstores import SQLiteVec
            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-vec python package. Please install it with `pip install sqlite-vec`.z+embeddings input must be Embeddings object.)Ú
sqlite_vecÚImportErrorÚcreate_connectionÚ
isinstancer   ÚwarningsÚwarnÚ_connectionÚ_tableÚ
_embeddingÚcreate_table_if_not_exists)ÚselfÚtableÚ
connectionÚ	embeddingÚdb_filer   s         r   Ú__init__zSQLiteVec.__init__.   s|   € ð	Ûñ Ø×/Ñ/°Ó8ˆJä˜)¤ZÔ0Ü�M‰MÐGÔHà%ˆÔØˆŒØ#ˆŒà×'Ñ'Õ)øô! ò 	ÜðCóð ð	ús   ‚A$ Á$A9c           	     ó„  — | j                   j                  d| j                  › d�«       | j                   j                  d| j                  › d| j                  «       › d�«       | j                   j                  d| 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
            )
            ;
            z0
            CREATE VIRTUAL TABLE IF NOT EXISTS za_vec USING vec0(
                rowid INTEGER PRIMARY KEY,
                text_embedding float[z*]
            )
            ;
            z.
                CREATE TRIGGER IF NOT EXISTS z-_embed_text 
                AFTER INSERT ON z7
                BEGIN
                    INSERT INTO z�_vec(rowid, text_embedding)
                    VALUES (new.rowid, new.text_embedding) 
                    ;
                END;
            )r   Úexecuter    Úget_dimensionalityÚcommit)r#   s    r   r"   z$SQLiteVec.create_table_if_not_existsJ   sÏ   € Ø×Ñ× Ñ ð(Ø(,¯© }ð 5ð	ô	
ð 	×Ñ× Ñ ð0Ø04·±¨}ð =&à&*×&=Ñ&=Ó&?Ð%@ð Aðô	
ð 	×Ñ× Ñ ð.Ø.2¯k©k¨]ð ;!Ø!%§¡ ð .!à!%§¡ ð .ð	ô
	
ð 	×Ñ×ÑÕ!r   Nc           
     óŽ  — | j                   j                  d| j                  › �«      j                  «       d   }|€d}| j                  j                  t        |«      «      }|s|D �cg c]  }i ‘Œ }}t        |||«      D ���	cg c]'  \  }}}	|t        j                  |«      t        |	«      f‘Œ) }
}}}	| 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Údumpsr   Úexecutemanyr,   )r#   ÚtextsÚ	metadatasÚkwargsÚmax_idÚembedsÚ_ÚtextÚmetadataÚembedÚ
data_inputÚresultsÚrows                r   Ú	add_textszSQLiteVec.add_textsm   sJ  € ð ×!Ñ!×)Ñ)Ø.¨t¯{©{¨mÐ<ó
ç
‰(‹*�Wñˆð ˆ>ØˆFà—‘×0Ñ0´°e³Ó=ˆÙÙ%*Ó+¡U š UˆIÐ+ô *-¨U°I¸vÔ)Fõ
á)FÑ%��h ð ”4—:‘:˜hÓ'¬°uÓ)=Ò>Ø)Fð 	ò 
ð 	×Ñ×$Ñ$Ø˜4Ÿ;™;˜-Ð'VÐWØô	
ð 	×Ñ×ÑÔ!à×"Ñ"×*Ñ*Ø  §¡ ¨_¸V¸HÐEó
ˆñ )0Ó0© ��G“¨Ñ0Ð0ùò ,ùô
ùò 1s   Á(	D6Â,D;Ä'Ec                ód  — d| j                   › d| j                   › d�}| j                  j                  «       }|j                  |t	        |«      |g«       |j                  «       }g }|D ]D  }t        j                  |d   «      xs i }	t        |d   |	¬«      }
|j                  |
|d   f«       ŒF |S )Nzo
            SELECT 
                text,
                metadata,
                distance
            FROM z AS e
            INNER JOIN zœ_vec AS v on v.rowid = e.rowid  
            WHERE
                v.text_embedding MATCH ?
                AND k = ?
            ORDER BY distance
        r=   r<   )Úpage_contentr=   Údistance)
r    r   Úcursorr*   r   Úfetchallr3   Úloadsr   Úappend)r#   r&   Úkr8   Ú	sql_queryrF   r@   Ú	documentsrA   r=   Údocs              r   Ú&similarity_search_with_score_by_vectorz0SQLiteVec.similarity_search_with_score_by_vector‘   sÁ   € ðð
 —+‘+�ð ØŸ™�}ð %	ðˆ	ð ×!Ñ!×(Ñ(Ó*ˆØ�‰ØÜ˜9Ó% qÐ)ô	
ð —/‘/Ó#ˆàˆ	Ûˆ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&   rJ   ©r!   Úembed_queryrN   )r#   ÚqueryrJ   r8   r&   rL   rM   r;   s           r   Úsimilarity_searchzSQLiteVec.similarity_search¯   sQ   € ð —O‘O×/Ñ/°Ó6ˆ	Ø×?Ñ?Ø 1ð @ó 
ˆ	ñ #,Ô,¡)™˜˜Q’ )Ò,Ð,ùÓ,s   ´Ac                ób   — | j                   j                  |«      }| j                  ||¬«      }|S rP   rR   )r#   rT   rJ   r8   r&   rL   s         r   Úsimilarity_search_with_scorez&SQLiteVec.similarity_search_with_score¹   s;   € ð —O‘O×/Ñ/°Ó6ˆ	Ø×?Ñ?Ø 1ð @ó 
ˆ	ð Ðr   c                ó^   — | j                  ||¬«      }|D ��cg c]  \  }}|‘Œ	 c}}S c c}}w )NrQ   )rN   )r#   r&   rJ   r8   rL   rM   r;   s          r   Úsimilarity_search_by_vectorz%SQLiteVec.similarity_search_by_vectorÃ   s=   € ð ×?Ñ?Ø 1ð @ó 
ˆ	ñ #,Ô,¡)™˜˜Q’ )Ò,Ð,ùÓ,s   ™)c                óf   — | j                  |«      } | ||||¬«      }|j                  ||¬«       |S )z9Return VectorStore initialized from texts and embeddings.)r$   r%   r'   r&   )r6   r7   )r   rB   )	Úclsr6   r&   r7   r$   r'   r8   r%   Úvecs	            r   Ú
from_textszSQLiteVec.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'   r_   r   r%   s       r   r   zSQLiteVec.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!   rS   r   )r#   Ú
dummy_textÚdummy_embeddings      r   r+   zSQLiteVec.get_dimensionalityê   s(   € ð
 ,ˆ
ØŸ/™/×5Ñ5°jÓAˆÜ�?Ó#Ð#r   )úvec.db)r$   Ústrr%   zOptional[sqlite3.Connection]r&   r   r'   ri   )ÚreturnÚNone)N)r6   zIterable[str]r7   úOptional[List[dict]]r8   r   rj   ú	List[str])é   )r&   úList[float]rJ   Úintr8   r   rj   úList[Tuple[Document, float]])rT   ri   rJ   rp   r8   r   rj   úList[Document])rT   ri   rJ   rp   r8   r   rj   rq   )r&   ro   rJ   rp   r8   r   rj   rr   )NÚ	langchainrh   )r[   zType[SQLiteVec]r6   rm   r&   r   r7   rl   r$   ri   r'   ri   r8   r   rj   r   )r'   ri   rj   zsqlite3.Connection)rj   rp   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r(   r"   rB   rN   rU   rW   rY   Úclassmethodr]   Ústaticmethodr   r+   © r   r   r   r   #   sš  „ ñð  ð*àð*ð 1ð*ð ð	*ð
 ó*ó8!"ðL +/ð"1àð"1ð (ð"1ð ð	"1ð
 
ó"1ðJ 01ðØ$ðØ),ðØ<?ðà	%óð> $%ð-Øð-Ø ð-Ø03ð-à	ó-ð $%ðØðØ ðØ03ðà	%óð 01ð-Ø$ð-Ø),ð-Ø<?ð-à	ó-ð ð
 +/Ø ØðØðàðð ðð (ð	ð
 ðð ðð ðð 
òó ðð" ò
ó ð
ô$r   r   )r   ro   rj   Úbytes)Ú
__future__r   r3   Úloggingr   r   Útypingr   r   r   r   r   r	   r
   Úlangchain_core.documentsr   Úlangchain_core.embeddingsr   Úlangchain_core.vectorstoresr   r_   Ú	getLoggerrt   Úloggerr   r   rz   r   r   Ú<module>r„      sY   ðÝ "ã Û Û Û ÷÷ ñ õ .Ý 0Ý 3áÛà	ˆ×	Ñ	˜8Ó	$€ó5ôN$�õ N$r   