mirror of
https://github.com/asg017/sqlite-vec.git
synced 2026-04-25 08:46:49 +02:00
54 lines
1.2 KiB
Python
54 lines
1.2 KiB
Python
import sqlite3
|
|
import sqlite_vec
|
|
|
|
from typing import List
|
|
import struct
|
|
|
|
|
|
def serialize_f32(vector: List[float]) -> bytes:
|
|
"""serializes a list of floats into a compact "raw bytes" format"""
|
|
return struct.pack("%sf" % len(vector), *vector)
|
|
|
|
|
|
db = sqlite3.connect(":memory:")
|
|
db.enable_load_extension(True)
|
|
sqlite_vec.load(db)
|
|
db.enable_load_extension(False)
|
|
|
|
sqlite_version, vec_version = db.execute(
|
|
"select sqlite_version(), vec_version()"
|
|
).fetchone()
|
|
print(f"sqlite_version={sqlite_version}, vec_version={vec_version}")
|
|
|
|
items = [
|
|
(1, [0.1, 0.1, 0.1, 0.1]),
|
|
(2, [0.2, 0.2, 0.2, 0.2]),
|
|
(3, [0.3, 0.3, 0.3, 0.3]),
|
|
(4, [0.4, 0.4, 0.4, 0.4]),
|
|
(5, [0.5, 0.5, 0.5, 0.5]),
|
|
]
|
|
query = [0.3, 0.3, 0.3, 0.3]
|
|
|
|
db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])")
|
|
|
|
with db:
|
|
for item in items:
|
|
db.execute(
|
|
"INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)",
|
|
[item[0], serialize_f32(item[1])],
|
|
)
|
|
|
|
rows = db.execute(
|
|
"""
|
|
SELECT
|
|
rowid,
|
|
distance
|
|
FROM vec_items
|
|
WHERE embedding MATCH ?
|
|
ORDER BY distance
|
|
LIMIT 3
|
|
""",
|
|
[serialize_f32(query)],
|
|
).fetchall()
|
|
|
|
print(rows)
|