import { EmbeddingModel, FlagEmbedding } from 'fastembed'
import Database from "better-sqlite3";
import * as sqlite_vss from "sqlite-vss";
const setupDb = (path) => {
const db = new Database(path);
sqlite_vss.load(db);
db.exec(`
CREATE TABLE IF NOT EXISTS nodes (
id PRIMARY KEY NOT NULL,
label VARCHAR
)
`)
db.exec(`select crsql_as_crr('nodes');`)
console.log('1')
db.exec(`
create virtual table node_vector using vss0(
vectorLabel(768)
);
`)
// db.exec(`select crsql_as_crr('node_vector');`)
return db
}
const main = async () => {
const embeddingModel = await FlagEmbedding.init({
model: EmbeddingModel.BGEBaseENV15
});
const db1 = setupDb('1-empty.sqlite')
// query vectors
const query = 'cat drink coffee'
const queryVector = JSON.stringify(Array.from( await embeddingModel.queryEmbed(query)))
console.log('before query')
const q = db1.prepare(' select * from node_vector').all()
console.log(q)
console.log('after query')
const vectorSearchQuery = db1.prepare(
`with matches as (
select rowid,
distance
from node_vector where vss_search(vectorLabel, @qv)
limit 10
)
select
nodes.id,
nodes.label,
matches.distance
from matches
left join nodes on nodes.rowid = matches.rowid`,
)
const result = vectorSearchQuery.all({qv: queryVector})
console.log('after query 2 ', result)
db1.exec(`select crsql_finalize();`)
db1.close()
}
main().catch().then(() => console.log('done'))
if index is empty i get error on query data
code sample