diff --git a/src/db/cloudflare.ts b/src/db/cloudflare.ts index a0899bc..676b7ce 100644 --- a/src/db/cloudflare.ts +++ b/src/db/cloudflare.ts @@ -129,6 +129,10 @@ export async function cloudflare(config: CloudflareConfig): Promise { return { count: ids.length } }, + async listIds() { + const result = await client.execute('SELECT id FROM vectors') + return (result.rows || []).map((row: any) => row.id as string) + }, + async clear() { await client.execute('DELETE FROM vectors') }, diff --git a/src/db/pgvector.ts b/src/db/pgvector.ts index 4860dac..39328aa 100644 --- a/src/db/pgvector.ts +++ b/src/db/pgvector.ts @@ -162,6 +162,11 @@ export async function pgvector(config: PgvectorConfig): Promise return { count: ids.length } }, + async listIds() { + const result = await pool.query(`SELECT id FROM ${table}`) + return result.rows.map((row: any) => row.id as string) + }, + async clear() { await pool.query(`DELETE FROM ${table}`) }, diff --git a/src/db/sqlite-vec.ts b/src/db/sqlite-vec.ts index e1f36d8..3bf63c4 100644 --- a/src/db/sqlite-vec.ts +++ b/src/db/sqlite-vec.ts @@ -206,6 +206,11 @@ export async function sqliteVec(config: SqliteVecConfig): Promise r.id) + }, + async clear() { db.exec('DELETE FROM vectors') db.exec('DELETE FROM vector_metadata') diff --git a/src/db/upstash.ts b/src/db/upstash.ts index a0ece7d..c84922a 100644 --- a/src/db/upstash.ts +++ b/src/db/upstash.ts @@ -110,6 +110,17 @@ export async function upstash(config: UpstashConfig): Promise { return { count: ids.length } }, + async listIds() { + const ids: string[] = [] + let cursor = '0' + do { + const page = await index.range({ cursor, limit: 1000, includeMetadata: false, includeVectors: false }, { namespace: ns }) + for (const v of page.vectors) ids.push(v.id as string) + cursor = page.nextCursor + } while (cursor !== '0') + return ids + }, + async clear() { await index.reset({ namespace: ns }) }, diff --git a/src/retriv.ts b/src/retriv.ts index 23b4f3a..c8ad50a 100644 --- a/src/retriv.ts +++ b/src/retriv.ts @@ -224,7 +224,7 @@ export async function createRetriv(options: RetrivOptions): Promise d.listIds) if (!lister) - throw new Error('remove() with chunking requires a driver that implements listIds()') + throw new Error('remove() with chunking requires a driver that implements listIds() — cloudflare does not support this') const allIds = await lister.listIds!() const idSet = new Set(ids) removeIds = allIds.filter((id) => {