muthuk1's picture
Convert OpenMAIC from Next.js to React (Vite)
f56a29b verified
import { NextRequest } from 'next/server';
import { generateText } from 'ai';
import { createLogger } from '@/lib/logger';
import { apiError, apiSuccess } from '@/lib/server/api-response';
import { resolveModel } from '@/lib/server/resolve-model';
const log = createLogger('Verify Model');
export async function POST(req: NextRequest) {
let model: string | undefined;
try {
const body = await req.json();
const { apiKey, baseUrl, providerType } = body;
model = body.model;
if (!model) {
return apiError('MISSING_REQUIRED_FIELD', 400, 'Model name is required');
}
// Parse model string and resolve server-side fallback
let languageModel;
try {
const result = await resolveModel({
modelString: model,
apiKey: apiKey || '',
baseUrl: baseUrl || undefined,
providerType,
});
languageModel = result.model;
} catch (error) {
return apiError(
'INVALID_REQUEST',
401,
error instanceof Error ? error.message : String(error),
);
}
// Send a minimal test message
const { text } = await generateText({
model: languageModel,
prompt: 'Say "OK" if you can hear me.',
});
return apiSuccess({
message: 'Connection successful',
response: text,
});
} catch (error) {
log.error(`Model verification failed [model="${model ?? 'unknown'}"]:`, error);
let errorMessage = 'Connection failed';
if (error instanceof Error) {
// Parse common error messages
if (error.message.includes('401') || error.message.includes('Unauthorized')) {
errorMessage = 'API key is invalid or expired';
} else if (error.message.includes('404') || error.message.includes('not found')) {
errorMessage = 'Model not found or API endpoint error';
} else if (error.message.includes('429')) {
errorMessage = 'API rate limit exceeded, please try again later';
} else if (error.message.includes('ENOTFOUND') || error.message.includes('ECONNREFUSED')) {
errorMessage = 'Cannot connect to API server, please check the Base URL';
} else if (error.message.includes('timeout')) {
errorMessage = 'Connection timed out, please check your network';
} else {
errorMessage = error.message;
}
}
return apiError('INTERNAL_ERROR', 500, errorMessage);
}
}