Skip to content

Commit e9ffa2d

Browse files
Tyler FitzgeraldTyler Fitzgerald
authored andcommitted
fix: normalize migrated embeddings before postgres upsert
1 parent d547a64 commit e9ffa2d

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

src/commands/migrate-engine.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,25 @@ interface MigrateOpts {
2222
force: boolean;
2323
}
2424

25+
function normalizeEmbedding(value: unknown): Float32Array | undefined {
26+
if (!value) return undefined;
27+
if (value instanceof Float32Array) return value;
28+
if (Array.isArray(value)) return new Float32Array(value.map(Number));
29+
if (typeof value === 'string') {
30+
try {
31+
const parsed = JSON.parse(value);
32+
if (Array.isArray(parsed)) return new Float32Array(parsed.map(Number));
33+
} catch {
34+
const trimmed = value.trim();
35+
if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
36+
const nums = trimmed.slice(1, -1).split(',').map(s => Number(s.trim())).filter(n => Number.isFinite(n));
37+
if (nums.length > 0) return new Float32Array(nums);
38+
}
39+
}
40+
}
41+
return undefined;
42+
}
43+
2544
function parseArgs(args: string[]): MigrateOpts {
2645
const toIdx = args.indexOf('--to');
2746
if (toIdx === -1 || !args[toIdx + 1]) {
@@ -165,7 +184,7 @@ export async function runMigrateEngine(sourceEngine: BrainEngine, args: string[]
165184
chunk_index: c.chunk_index,
166185
chunk_text: c.chunk_text,
167186
chunk_source: c.chunk_source,
168-
embedding: c.embedding || undefined,
187+
embedding: normalizeEmbedding(c.embedding),
169188
model: c.model,
170189
token_count: c.token_count || undefined,
171190
})));

0 commit comments

Comments
 (0)