Spaces:
Running
Running
| import { NextResponse } from 'next/server' | |
| import { generateEmbedding } from '@/lib/huggingface' | |
| import { createServerSupabaseClient } from '@/lib/supabase-server' | |
| import type { VectorSearchRequest, VectorSearchResult } from '@/types' | |
| export async function POST(request: Request) { | |
| try { | |
| const body: VectorSearchRequest = await request.json() | |
| const { | |
| query, | |
| match_threshold = 0.5, | |
| match_count = 5 | |
| } = body | |
| if (!query) { | |
| return NextResponse.json( | |
| { error: 'Query is required' }, | |
| { status: 400 } | |
| ) | |
| } | |
| console.log('Generating embedding for query:', query) | |
| const queryEmbedding = await generateEmbedding(query) | |
| console.log('Embedding generated, length:', queryEmbedding.length) | |
| const supabase = await createServerSupabaseClient() | |
| console.log('Calling match_documents RPC...') | |
| const { data, error } = await supabase.rpc('match_documents', { | |
| query_embedding: queryEmbedding, | |
| match_threshold, | |
| match_count, | |
| }) | |
| if (error) { | |
| console.error('Search error:', error) | |
| throw error | |
| } | |
| console.log('Search results:', data) | |
| return NextResponse.json({ | |
| results: data as VectorSearchResult[] | |
| }, { status: 200 }) | |
| } catch (error: unknown) { | |
| console.error("Search API Error:", error); | |
| const message = | |
| error instanceof Error ? error.message : "Internal server error"; | |
| return NextResponse.json( | |
| { error: message }, | |
| { status: 500 } | |
| ); | |
| } | |
| } | |