Skip to content

Commit dbc5098

Browse files
committed
node:sqlite sample
1 parent d1d1ed7 commit dbc5098

File tree

4 files changed

+81
-0
lines changed

4 files changed

+81
-0
lines changed

examples/simple-node2/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
node_modules/
2+
package-lock.json

examples/simple-node2/demo.mjs

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/**
2+
* This demo Node.js script shows how you can use sqlite-vec with
3+
* the new builtin node:sqlite module.
4+
* Note that this requires Node v23.5.0 or above.
5+
*/
6+
import { DatabaseSync } from "node:sqlite";
7+
import * as sqliteVec from "sqlite-vec";
8+
9+
// allExtension is required to enable extension support
10+
const db = new DatabaseSync(":memory:", { allowExtension: true });
11+
sqliteVec.load(db);
12+
13+
const { sqlite_version, vec_version } = db
14+
.prepare(
15+
"select sqlite_version() as sqlite_version, vec_version() as vec_version;",
16+
)
17+
.get();
18+
19+
console.log(`sqlite_version=${sqlite_version}, vec_version=${vec_version}`);
20+
21+
const items = [
22+
[1, [0.1, 0.1, 0.1, 0.1]],
23+
[2, [0.2, 0.2, 0.2, 0.2]],
24+
[3, [0.3, 0.3, 0.3, 0.3]],
25+
[4, [0.4, 0.4, 0.4, 0.4]],
26+
[5, [0.5, 0.5, 0.5, 0.5]],
27+
];
28+
const query = [0.3, 0.3, 0.3, 0.3];
29+
30+
db.exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])");
31+
32+
const insertStmt = db.prepare(
33+
"INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)",
34+
);
35+
36+
// TODO node:sqlite doesn't have `.transaction()` support yet
37+
for (const [id, vector] of items) {
38+
// node:sqlite requires Uint8Array for BLOB values, so a bit awkward
39+
insertStmt.run(BigInt(id), new Uint8Array(new Float32Array(vector).buffer));
40+
}
41+
42+
const rows = db
43+
.prepare(
44+
`
45+
SELECT
46+
rowid,
47+
distance
48+
FROM vec_items
49+
WHERE embedding MATCH ?
50+
ORDER BY distance
51+
LIMIT 3
52+
`,
53+
)
54+
.all(new Uint8Array(new Float32Array(query).buffer));
55+
56+
console.log(rows);

examples/simple-node2/package.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "simple-node2",
3+
"version": "1.0.0",
4+
"main": "demo.mjs",
5+
"engines": {
6+
"node": ">=23.5.0"
7+
},
8+
"dependencies": {
9+
"sqlite-vec": "latest"
10+
}
11+
}

examples/simple-node2/tmp.mjs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { DatabaseSync } from "node:sqlite";
2+
import * as sqliteVec from "sqlite-vec";
3+
4+
const db = new DatabaseSync(":memory:", { allowExtension: true });
5+
sqliteVec.load(db);
6+
7+
const embedding = new Float32Array([0.1, 0.2, 0.3, 0.4]);
8+
const { result } = db
9+
.prepare("select vec_length(?) as result")
10+
.get(new Uint8Array(embedding.buffer));
11+
12+
console.log(result); // 4

0 commit comments

Comments
 (0)