From 6bb4bbb1afa5bc330bef8e59c63814c8ae3cb25e Mon Sep 17 00:00:00 2001 From: perf3ct Date: Wed, 12 Mar 2025 22:43:58 +0000 Subject: [PATCH] specially handle Buffer objects into Base64 and back for Becca --- src/services/sync.ts | 9 +++++++++ src/services/sync_update.ts | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/src/services/sync.ts b/src/services/sync.ts index bfaf828f9..c9ef66eb0 100644 --- a/src/services/sync.ts +++ b/src/services/sync.ts @@ -364,6 +364,15 @@ function getEntityChangeRow(entityChange: EntityChange) { } } + // Special handling for note_embeddings embedding field + if (entityName === "note_embeddings") { + // Cast to any to access the embedding property + const row = entityRow as any; + if (row.embedding && Buffer.isBuffer(row.embedding)) { + row.embedding = row.embedding.toString("base64"); + } + } + return entityRow; } } diff --git a/src/services/sync_update.ts b/src/services/sync_update.ts index 0e7f7bc64..42018bcbc 100644 --- a/src/services/sync_update.ts +++ b/src/services/sync_update.ts @@ -174,6 +174,11 @@ function updateNoteEmbedding(remoteEC: EntityChange, remoteEntityRow: EntityRow // Cast remoteEntityRow to include required embedding properties const typedRemoteEntityRow = remoteEntityRow as unknown as NoteEmbeddingRow; + // Convert embedding from base64 string to Buffer if needed + if (typedRemoteEntityRow.embedding && typeof typedRemoteEntityRow.embedding === "string") { + typedRemoteEntityRow.embedding = Buffer.from(typedRemoteEntityRow.embedding, "base64"); + } + const localEntityRow = sql.getRow(`SELECT * FROM note_embeddings WHERE embedId = ?`, [remoteEC.entityId]); if (localEntityRow) {