feat: embedding dimension validation + migration system
- Add /api/admin/embeddings/dimension (GET column dim, POST test model dim) - Add /api/admin/embeddings/migrate (alter column, clear, re-index) - Admin form warns on dimension mismatch after save, offers migrate button - Remove hardcoded 1536 from validate endpoint and embedding service - Add validateDimension() utility to EmbeddingService - Fix health route: import prisma correctly, use router instead of missing registry - i18n keys for dimension warning (EN/FR)
This commit is contained in:
@@ -32,10 +32,14 @@ export async function GET() {
|
||||
)
|
||||
const validCount = Number(withEmbedding[0]?.count ?? 0)
|
||||
|
||||
const dimResult: Array<{ dim: number | null }> = await prisma.$queryRawUnsafe(
|
||||
`SELECT a.atttypmod AS dim FROM pg_attribute a JOIN pg_class c ON a.attrelid = c.oid WHERE c.relname = 'NoteEmbedding' AND a.attname = 'embedding'`
|
||||
)
|
||||
const dbDim = dimResult[0]?.dim ?? 1536
|
||||
|
||||
const invalidResult: Array<{ count: bigint }> = await prisma.$queryRawUnsafe(
|
||||
`SELECT COUNT(*)::bigint as count FROM "NoteEmbedding" e
|
||||
WHERE e."embedding" IS NULL
|
||||
OR array_length(string_to_array(replace(replace(e."embedding"::text, '[', ''), ']', ''), ','), 1) != 1536`
|
||||
WHERE e."embedding" IS NULL`
|
||||
)
|
||||
const invalidCount = Number(invalidResult[0]?.count ?? 0)
|
||||
|
||||
@@ -43,6 +47,7 @@ export async function GET() {
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
dbDimension: dbDim,
|
||||
summary: {
|
||||
total,
|
||||
valid: validCount - invalidCount,
|
||||
|
||||
Reference in New Issue
Block a user