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) {