import { NextResponse } from 'next/server' import { getEmbeddingsProvider } from '@/lib/ai/factory' import { getSystemConfig } from '@/lib/config' import { auth } from '@/auth' function getProviderDetails(config: Record, providerType: string) { const provider = providerType.toLowerCase() switch (provider) { case 'ollama': return { provider: 'Ollama', baseUrl: config.OLLAMA_BASE_URL || process.env.OLLAMA_BASE_URL || 'http://localhost:11434', model: config.AI_MODEL_EMBEDDING || 'embeddinggemma:latest', } case 'openai': return { provider: 'OpenAI', baseUrl: 'https://api.openai.com/v1', model: config.AI_MODEL_EMBEDDING || 'text-embedding-3-small', } case 'custom': return { provider: 'Custom OpenAI', baseUrl: config.CUSTOM_OPENAI_BASE_URL || process.env.CUSTOM_OPENAI_BASE_URL || 'Not configured', model: config.AI_MODEL_EMBEDDING || 'text-embedding-3-small', } default: return { provider: providerType, baseUrl: 'unknown', model: config.AI_MODEL_EMBEDDING || 'unknown', } } } export async function POST() { const session = await auth() if (!session?.user?.id) { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } if ((session.user as { role?: string }).role !== 'ADMIN') { return NextResponse.json({ error: 'Forbidden' }, { status: 403 }) } try { const config = await getSystemConfig() const provider = getEmbeddingsProvider(config) const startTime = Date.now() const embeddings = await provider.getEmbeddings('test') const endTime = Date.now() const providerType = config.AI_PROVIDER_EMBEDDING || 'ollama' const details = getProviderDetails(config, providerType) if (!embeddings || embeddings.length === 0) { return NextResponse.json( { success: false, error: 'No embeddings returned', provider: providerType, model: config.AI_MODEL_EMBEDDING || 'embeddinggemma:latest', details, }, { status: 500 }, ) } return NextResponse.json({ success: true, provider: providerType, model: config.AI_MODEL_EMBEDDING || 'embeddinggemma:latest', embeddingLength: embeddings.length, firstValues: embeddings.slice(0, 5), responseTime: endTime - startTime, details, }) } catch (error: unknown) { const config = await getSystemConfig() const providerType = config.AI_PROVIDER_EMBEDDING || 'ollama' const details = getProviderDetails(config, providerType) const message = error instanceof Error ? error.message : 'Unknown error' return NextResponse.json( { success: false, error: message, provider: providerType, model: config.AI_MODEL_EMBEDDING || 'embeddinggemma:latest', details, stack: process.env.NODE_ENV === 'development' && error instanceof Error ? error.stack : undefined, }, { status: 500 }, ) } }