import { NextResponse } from 'next/server' import { prisma } from '@/lib/prisma' import { auth } from '@/auth' import { embeddingService } from '@/lib/ai/services/embedding.service' export async function GET() { try { const session = await auth() if (!session?.user?.id || (session.user as { role?: string }).role !== 'ADMIN') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const colDimResult: 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 dbDimension = colDimResult[0]?.dim ?? null const countResult: Array<{ total: bigint }> = await prisma.$queryRawUnsafe( `SELECT COUNT(*)::bigint AS total FROM "NoteEmbedding"` ) const embeddingCount = Number(countResult[0]?.total ?? 0) return NextResponse.json({ success: true, dbDimension, embeddingCount, }) } catch (error) { console.error('[EMBEDDING_DIMENSION] Error:', error) return NextResponse.json({ success: false, error: String(error) }, { status: 500 }) } } export async function POST() { try { const session = await auth() if (!session?.user?.id || (session.user as { role?: string }).role !== 'ADMIN') { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } const result = await embeddingService.generateEmbedding('dimension test') const modelDimension = result.dimension const colDimResult: 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 dbDimension = colDimResult[0]?.dim ?? null return NextResponse.json({ success: true, modelDimension, dbDimension, match: modelDimension === dbDimension, }) } catch (error) { console.error('[EMBEDDING_DIMENSION] Test error:', error) return NextResponse.json({ success: false, error: String(error) }, { status: 500 }) } }