sqlite-vec/examples/simple-wasm/index.html

57 lines
1.5 KiB
HTML
Raw Normal View History

2024-05-10 20:51:42 -07:00
<html>
<body>
<h1>sqlite-vec demo/simple-wasm</h1>
<div id="target"></div>
<script type="module">
2024-05-10 22:05:49 -07:00
import {default as init} from "https://cdn.jsdelivr.net/npm/sqlite-vec-wasm-demo@latest/sqlite3.mjs";
2024-05-11 00:21:44 -07:00
2024-05-10 20:51:42 -07:00
function log(msg) {
const pre = document.querySelector('#target').appendChild(document.createElement("pre"));
pre.textContent = msg;
}
2024-05-11 00:21:44 -07:00
2024-05-10 20:51:42 -07:00
const sqlite3 = await init();
const db = new sqlite3.oo1.DB(":memory:");
2024-05-11 00:21:44 -07:00
2024-05-10 20:51:42 -07:00
const [sqlite_version, vec_version] = db.selectArray('select sqlite_version(), vec_version();')
log(`sqlite_version=${sqlite_version}, vec_version=${vec_version}`);
const items = [
2024-05-11 00:21:44 -07:00
[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]],
2024-05-10 20:51:42 -07:00
];
2024-05-11 00:21:44 -07:00
const query = [0.3, 0.3, 0.3, 0.3];
2024-05-10 20:51:42 -07:00
2024-05-11 00:21:44 -07:00
db.exec('CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4]);');
2024-05-10 20:51:42 -07:00
const stmt = db.prepare("INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)");
for(const item of items) {
stmt
.bind(1, item[0])
2024-05-11 00:21:44 -07:00
.bind(2, new Float32Array(item[1]).buffer)
2024-05-10 20:51:42 -07:00
.stepReset();
}
stmt.finalize();
const rows = db
.selectArrays(
`
SELECT
rowid,
distance
FROM vec_items
WHERE embedding MATCH ?
ORDER BY distance
2024-05-11 00:21:44 -07:00
LIMIT 3
`, new Float32Array(query).buffer
2024-05-10 20:51:42 -07:00
);
log(JSON.stringify(rows));
</script>
</body>
</html>
`