Skip to content

Commit 193e5e7

Browse files
authoredNov 13, 2024··
Merge pull request #261 from ferric-sol/sqlite-embeddings
Fix embedding calculation for sqlite
2 parents 8980551 + c226308 commit 193e5e7

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed
 

‎packages/adapter-sqlite/src/index.ts

+34-11
Original file line numberDiff line numberDiff line change
@@ -337,28 +337,51 @@ export class SqliteDatabaseAdapter extends DatabaseAdapter {
337337
query_field_sub_name: string;
338338
query_match_count: number;
339339
}): Promise<{ embedding: number[]; levenshtein_score: number }[]> {
340+
// First get content text and calculate Levenshtein distance
340341
const sql = `
342+
WITH content_text AS (
343+
SELECT
344+
embedding,
345+
json_extract(
346+
json(content),
347+
'$.' || ? || '.' || ?
348+
) as content_text
349+
FROM memories
350+
WHERE type = ?
351+
AND json_extract(
352+
json(content),
353+
'$.' || ? || '.' || ?
354+
) IS NOT NULL
355+
)
341356
SELECT
342357
embedding,
343-
0 as levenshtein_score -- Using 0 as placeholder score
344-
FROM memories
345-
WHERE type = ?
346-
AND json_extract(content, '$.' || ? || '.' || ?) IS NOT NULL
358+
length(?) + length(content_text) - (
359+
length(?) + length(content_text) - (
360+
length(replace(lower(?), lower(content_text), '')) +
361+
length(replace(lower(content_text), lower(?), ''))
362+
) / 2
363+
) as levenshtein_score
364+
FROM content_text
365+
ORDER BY levenshtein_score ASC
347366
LIMIT ?
348367
`;
349368

350-
const params = [
369+
const rows = this.db.prepare(sql).all(
370+
opts.query_field_name,
371+
opts.query_field_sub_name,
351372
opts.query_table_name,
352373
opts.query_field_name,
353374
opts.query_field_sub_name,
375+
opts.query_input,
376+
opts.query_input,
377+
opts.query_input,
378+
opts.query_input,
354379
opts.query_match_count
355-
];
356-
357-
const rows = this.db.prepare(sql).all(...params);
380+
) as { embedding: Buffer; levenshtein_score: number }[];
358381

359-
return rows.map((row) => ({
360-
embedding: row.embedding,
361-
levenshtein_score: 0
382+
return rows.map(row => ({
383+
embedding: Array.from(new Float32Array(row.embedding as Buffer)),
384+
levenshtein_score: row.levenshtein_score
362385
}));
363386
}
364387

0 commit comments

Comments
 (0)
Please sign in to comment.