Vector search SDK for LibSQL
npm install libsql-vectorVector similarity search for libSQL and Turso.
``bash`
npm install libsql-vector # doesn't yet exist
`typescript
import { createClient } from "@libsql/client";
import { Index } from "libsql-vector";
const client = createClient({ url: "file:vector.db" });
const vectorIndex = new Index(client, {
tableName: "my_vectors", // optional, defaults to 'vector_index'
dimensions: 384,
columns: [
{ name: "title", type: "TEXT" },
{ name: "timestamp", type: "INTEGER" },
],
debug: process.env.NODE_ENV !== "production", // optional, defaults to false
});
// Initialize the index (creates table and index if they don't exist)
await vectorIndex.initialize();
`
`typescript
const vectors = [
{
id: "1",
vector: [0.1, 0.2, 0.3 / ... up to 384 dimensions /],
title: "Example Document 1",
timestamp: Date.now(),
},
{
id: "2",
vector: [0.4, 0.5, 0.6 / ... up to 384 dimensions /],
title: "Example Document 2",
timestamp: Date.now(),
},
];
await vectorIndex.upsert(vectors);
`
`typescript
const queryVector = [0.2, 0.3, 0.4 / ... up to 384 dimensions /];
// Basic query
const results = await vectorIndex.query(queryVector, { topK: 5 });
console.log(results);
// [
// { id: '1', score: 0.95, title: 'Example Document 1', timestamp: 1631234567890 },
// { id: '2', score: 0.82, title: 'Example Document 2', timestamp: 1631234567891 },
// ...
// ]
// Query with filter
const filteredResults = await vectorIndex.query(queryVector, {
topK: 5,
filter: "timestamp > 1630000000000",
});
// Query including vector data
const resultsWithVectors = await vectorIndex.query(queryVector, {
topK: 5,
includeVectors: true,
});
console.log(resultsWithVectors);
// [
// {
// id: '1',
// score: 0.95,
// title: 'Example Document 1',
// timestamp: 1631234567890,
// vector: [0.1, 0.2, 0.3, ...]
// },
// ...
// ]
`
`typescript
// List vectors with default options
const result = await vectorIndex.list();
console.log(result);
// {
// items: [
// { id: '1', metadata: { title: 'Example Document 1', timestamp: 1631234567890 } },
// { id: '2', metadata: { title: 'Example Document 2', timestamp: 1631234567891 } },
// ...
// ],
// nextCursor: '10'
// }
// List vectors with custom options
const customResult = await vectorIndex.list({
cursor: "10",
limit: 5,
includeVectors: true,
includeMetadata: false,
});
console.log(customResult);
// {
// items: [
// { id: '11', vector: [0.1, 0.2, 0.3, ...] },
// { id: '12', vector: [0.4, 0.5, 0.6, ...] },
// ...
// ],
// nextCursor: '15'
// }
`
`typescript
// Retrieve a single vector
const vector = await vectorIndex.retrieve("1");
console.log(vector);
// {
// id: '1',
// vector: [0.1, 0.2, 0.3, ...],
// metadata: { title: 'Example Document 1', timestamp: 1631234567890 }
// }
// Retrieve multiple vectors
const vectors = await vectorIndex.retrieve(["1", "2"]);
console.log(vectors);
// [
// {
// id: '1',
// vector: [0.1, 0.2, 0.3, ...],
// metadata: { title: 'Example Document 1', timestamp: 1631234567890 }
// },
// {
// id: '2',
// vector: [0.4, 0.5, 0.6, ...],
// metadata: { title: 'Example Document 2', timestamp: 1631234567891 }
// }
// ]
// Retrieve without vector or metadata
const vectorWithoutDetails = await vectorIndex.retrieve("1", {
includeVector: false,
includeMetadata: false,
});
console.log(vectorWithoutDetails);
// { id: '1' }
`
Creates a new vector index.
- client: A libSQL client instanceoptions
- : Configuration optionstableName
- : Name of the table to store vectors (default: vector_index)dimensions
- : Number of dimensions in your vectorscolumns
- : Additional columns to store with each vectordebug
- : Enable debug logging (default: false)
Initializes the index, creating the necessary table and index if they don't exist.
Inserts or updates vectors in the index.
- vectors: An array of vector objects, each containing:id
- : Unique identifier for the vectorvector
- : Array of numbers representing the vector
- Additional properties corresponding to the columns defined in the index options
Performs a similarity search.
- queryVector: Array of numbers representing the query vectoroptions
- :topK
- : Number of results to returnfilter
- : SQL WHERE clause to filter results (optional)includeVectors
- : Whether to include vector data in the results (default: false)
Returns an array of results, each containing the vector's id, similarity score, and additional columns.
Lists vectors in the index with pagination.
- options:cursor
- : Pagination cursor (optional)limit
- : Number of items to return (default: 10)includeVectors
- : Whether to include vector data in the results (default: false)includeMetadata
- : Whether to include metadata in the results (default: true)
Returns an object with items array and nextCursor for pagination.
Retrieves one or more vectors by their IDs.
- ids: A single ID or an array of IDsoptions
- :includeVector
- : Whether to include vector data in the results (default: true)includeMetadata`: Whether to include metadata in the results (default: true)
-
Returns a single vector object or an array of vector objects.