From 85fac4c5efea95ba998050b4bc08a8896d275979 Mon Sep 17 00:00:00 2001 From: Alex Garcia Date: Sat, 11 May 2024 00:21:44 -0700 Subject: [PATCH] example updates --- examples/simple-bun/demo.ts | 20 ++++++++++++-------- examples/simple-c/demo.c | 28 +++++++++++++++------------- examples/simple-deno/demo.ts | 27 ++++++++++++++++----------- examples/simple-go/demo.go | 13 ++++++++----- examples/simple-node/demo.mjs | 25 +++++++++++++++---------- examples/simple-python/demo.py | 13 ++++++++----- examples/simple-ruby/demo.rb | 14 +++++++++----- examples/simple-rust/demo.rs | 13 ++++++++----- examples/simple-sqlite/demo.sql | 13 ++++++++----- examples/simple-wasm/index.html | 22 +++++++++++++--------- 10 files changed, 112 insertions(+), 76 deletions(-) diff --git a/examples/simple-bun/demo.ts b/examples/simple-bun/demo.ts index d33d9db..b7b1761 100644 --- a/examples/simple-bun/demo.ts +++ b/examples/simple-bun/demo.ts @@ -1,5 +1,4 @@ import { Database } from "bun:sqlite"; - Database.setCustomSQLite("/usr/local/opt/sqlite3/lib/libsqlite3.dylib"); const db = new Database(":memory:"); @@ -14,6 +13,15 @@ const { sqlite_version, vec_version } = db console.log(`sqlite_version=${sqlite_version}, vec_version=${vec_version}`); +const 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]], +]; +const query = [0.3, 0.3, 0.3, 0.3]; + db.exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])"); const insertStmt = db.prepare( @@ -22,16 +30,12 @@ const insertStmt = db.prepare( const insertVectors = db.transaction((items) => { for (const [id, vector] of items) { - insertStmt.run(BigInt(id), vector); + insertStmt.run(BigInt(id), new Float32Array(vector)); } }); -insertVectors([ - [1, new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])], - [2, new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])], -]); +insertVectors(items); -const query = new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]); const rows = db .prepare( ` @@ -41,7 +45,7 @@ const rows = db FROM vec_items WHERE embedding MATCH ? ORDER BY distance - LIMIT 5 + LIMIT 3 ` ) .all(query); diff --git a/examples/simple-c/demo.c b/examples/simple-c/demo.c index 5d2c9f7..1c49214 100644 --- a/examples/simple-c/demo.c +++ b/examples/simple-c/demo.c @@ -22,21 +22,25 @@ int main(int argc, char *argv[]) { printf("sqlite_version=%s, vec_version=%s\n", sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 1)); sqlite3_finalize(stmt); - rc = sqlite3_prepare_v2(db, "CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])", -1, &stmt, NULL); + static const struct { + sqlite3_int64 id; + float vector[4]; + } 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}}, + }; + float query[4] = {0.3, 0.3, 0.3, 0.3}; + + + rc = sqlite3_prepare_v2(db, "CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])", -1, &stmt, NULL); assert(rc == SQLITE_OK); rc = sqlite3_step(stmt); assert(rc == SQLITE_DONE); sqlite3_finalize(stmt); - - static const struct { - sqlite3_int64 id; - float vector[8]; - } items[] = { - {1, {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}}, - {2, {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}}, - }; - rc = sqlite3_exec(db, "BEGIN", NULL, NULL, NULL); assert(rc == SQLITE_OK); rc = sqlite3_prepare_v2(db, "INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)", -1, &stmt, NULL); @@ -52,7 +56,6 @@ int main(int argc, char *argv[]) { rc = sqlite3_exec(db, "COMMIT", NULL, NULL, NULL); assert(rc == SQLITE_OK); - rc = sqlite3_prepare_v2(db, "SELECT " " rowid, " @@ -60,11 +63,10 @@ int main(int argc, char *argv[]) { "FROM vec_items " "WHERE embedding MATCH ?1 " "ORDER BY distance " - "LIMIT 5 " + "LIMIT 3 " , -1, &stmt, NULL); assert(rc == SQLITE_OK); - float query[8] = {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}; sqlite3_bind_blob(stmt, 1, query, sizeof(query), SQLITE_STATIC); while(1) { diff --git a/examples/simple-deno/demo.ts b/examples/simple-deno/demo.ts index 18151a3..a50df47 100644 --- a/examples/simple-deno/demo.ts +++ b/examples/simple-deno/demo.ts @@ -1,9 +1,9 @@ import { Database } from "jsr:@db/sqlite@0.11"; -//import { loadablePath } from "npm:sqlite-vec"; +import * as sqliteVec from "npm:sqlite-vec@0.0.1-alpha.3"; const db = new Database(":memory:"); db.enableLoadExtension = true; -db.loadExtension("../../dist/vec0"); +sqliteVec.load(db); db.enableLoadExtension = false; const [sqlite_version, vec_version] = db @@ -11,24 +11,29 @@ const [sqlite_version, vec_version] = db .value<[string]>()!; console.log(`sqlite_version=${sqlite_version}, vec_version=${vec_version}`); -db.exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])"); +const 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]], +]; +const query = [0.3, 0.3, 0.3, 0.3]; + +db.exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])"); const insertStmt = db.prepare( - "INSERT INTO vec_items(rowid, embedding) VALUES (?1, vec_f32(?2))" + "INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)" ); const insertVectors = db.transaction((items) => { for (const [id, vector] of items) { - insertStmt.run(BigInt(id), new Uint8Array(vector.buffer)); + insertStmt.run(BigInt(id), new Uint8Array(new Float32Array(vector).buffer)); } }); -insertVectors([ - [1, new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])], - [2, new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])], -]); +insertVectors(items); -const query = new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]); const rows = db .prepare( ` @@ -41,7 +46,7 @@ const rows = db LIMIT 5 ` ) - .all([new Uint8Array(query.buffer)]); + .all([new Uint8Array(new Float32Array(query).buffer)]); console.log(rows); diff --git a/examples/simple-go/demo.go b/examples/simple-go/demo.go index ad134fd..b68f05f 100644 --- a/examples/simple-go/demo.go +++ b/examples/simple-go/demo.go @@ -38,15 +38,19 @@ func main() { } fmt.Printf("sqlite_version=%s, vec_version=%s\n", sqliteVersion, vecVersion) - _, err = db.Exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])") + _, err = db.Exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])") if err != nil { log.Fatal(err) } items := map[int][]float32{ - 1: {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}, - 2: {0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8}, + 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}, } + q := []float32{0.3, 0.3, 0.3, 0.3} for id, values := range items { v, err := serializeFloat32(values) @@ -59,7 +63,6 @@ func main() { } } - q := []float32{0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8} query, err := serializeFloat32(q) if err != nil { log.Fatal(err) @@ -72,7 +75,7 @@ func main() { FROM vec_items WHERE embedding MATCH ? ORDER BY distance - LIMIT 5 + LIMIT 3 `, query) if err != nil { diff --git a/examples/simple-node/demo.mjs b/examples/simple-node/demo.mjs index ee1c3d3..2d76d20 100644 --- a/examples/simple-node/demo.mjs +++ b/examples/simple-node/demo.mjs @@ -12,24 +12,29 @@ const { sqlite_version, vec_version } = db console.log(`sqlite_version=${sqlite_version}, vec_version=${vec_version}`); -db.exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])"); +const 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]], +]; +const query = [0.3, 0.3, 0.3, 0.3]; + +db.exec("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])"); const insertStmt = db.prepare( - "INSERT INTO vec_items(rowid, embedding) VALUES (?, vec_f32(?))" + "INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)" ); const insertVectors = db.transaction((items) => { for (const [id, vector] of items) { - insertStmt.run(BigInt(id), vector); + insertStmt.run(BigInt(id), new Float32Array(vector)); } }); -insertVectors([ - [1, new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])], - [2, new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])], -]); +insertVectors(items); -const query = new Float32Array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]); const rows = db .prepare( ` @@ -39,9 +44,9 @@ const rows = db FROM vec_items WHERE embedding MATCH ? ORDER BY distance - LIMIT 5 + LIMIT 3 ` ) - .all(query); + .all(new Float32Array(query)); console.log(rows); diff --git a/examples/simple-python/demo.py b/examples/simple-python/demo.py index b7a2501..c2593b5 100644 --- a/examples/simple-python/demo.py +++ b/examples/simple-python/demo.py @@ -27,11 +27,14 @@ sqlite_version, vec_version = db.execute( print(f"sqlite_version={sqlite_version}, vec_version={vec_version}") -db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])") +db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])") items = [ - (1, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]), - (2, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]), + (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]), ] with db: for item in items: @@ -40,7 +43,7 @@ with db: [item[0], serialize_f32(item[1])], ) -query = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8] +query = [0.3, 0.3, 0.3, 0.3] rows = db.execute( """ SELECT @@ -49,7 +52,7 @@ rows = db.execute( FROM vec_items WHERE embedding MATCH ? ORDER BY distance - LIMIT 5 + LIMIT 3 """, [serialize_f32(query)], ).fetchall() diff --git a/examples/simple-ruby/demo.rb b/examples/simple-ruby/demo.rb index 1b90fde..0ff3de3 100644 --- a/examples/simple-ruby/demo.rb +++ b/examples/simple-ruby/demo.rb @@ -10,19 +10,23 @@ db.enable_load_extension(false) sqlite_version, vec_version = db.execute("select sqlite_version(), vec_version()").first puts "sqlite_version=#{sqlite_version}, vec_version=#{vec_version}" -db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])") +db.execute("CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])") items = [ - [1, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]], - [2, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]] + [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]], ] + db.transaction do items.each do |item| db.execute("INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)", [item[0], item[1].pack("f*")]) end end -query = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8] +query = [0.3, 0.3, 0.3, 0.3] rows = db.execute(<<-SQL, [query.pack("f*")]) SELECT rowid, @@ -30,7 +34,7 @@ rows = db.execute(<<-SQL, [query.pack("f*")]) FROM vec_items WHERE embedding MATCH ? ORDER BY distance - LIMIT 5 + LIMIT 3 SQL puts rows diff --git a/examples/simple-rust/demo.rs b/examples/simple-rust/demo.rs index f90a617..2a4c8a6 100644 --- a/examples/simple-rust/demo.rs +++ b/examples/simple-rust/demo.rs @@ -19,13 +19,16 @@ fn main() -> Result<()> { println!("sqlite_version={sqlite_version}, vec_version={vec_version}"); let items: Vec<(usize, Vec)> = vec![ - (1, vec![0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]), - (2, vec![0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]), + (1, vec![0.1, 0.1, 0.1, 0.1]), + (2, vec![0.2, 0.2, 0.2, 0.2]), + (3, vec![0.3, 0.3, 0.3, 0.3]), + (4, vec![0.4, 0.4, 0.4, 0.4]), + (5, vec![0.5, 0.5, 0.5, 0.5]), ]; println!("{x}"); db.execute( - "CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8])", + "CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4])", [], )?; let mut stmt = db.prepare("INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)")?; @@ -33,7 +36,7 @@ fn main() -> Result<()> { stmt.execute(rusqlite::params![item.0, item.1.as_bytes()])?; } - let query: Vec = vec![0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]; + let query: Vec = vec![0.3, 0.3, 0.3, 0.3]; let result: Vec<(i64, f64)> = db .prepare( r" @@ -43,7 +46,7 @@ fn main() -> Result<()> { FROM vec_items WHERE embedding MATCH ?1 ORDER BY distance - LIMIT 5 + LIMIT 3 ", )? .query_map([query.as_bytes()], |r| Ok((r.get(0)?, r.get(1)?)))? diff --git a/examples/simple-sqlite/demo.sql b/examples/simple-sqlite/demo.sql index f64976b..effdb00 100644 --- a/examples/simple-sqlite/demo.sql +++ b/examples/simple-sqlite/demo.sql @@ -4,21 +4,24 @@ select sqlite_version(), vec_version(); -CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[8]); +CREATE VIRTUAL TABLE vec_items USING vec0(embedding float[4]); INSERT INTO vec_items(rowid, embedding) select value ->> 0, value ->> 1 from json_each('[ - [1, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]], - [2, [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]] + [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]] ]'); SELECT rowid, distance FROM vec_items -WHERE embedding MATCH '[0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8]' +WHERE embedding MATCH '[0.3, 0.3, 0.3, 0.3]' ORDER BY distance -LIMIT 5; +LIMIT 3; diff --git a/examples/simple-wasm/index.html b/examples/simple-wasm/index.html index 8332beb..56ab878 100644 --- a/examples/simple-wasm/index.html +++ b/examples/simple-wasm/index.html @@ -5,33 +5,37 @@