28 lines
892 B
TypeScript
28 lines
892 B
TypeScript
|
|
import { NextResponse } from 'next/server';
|
||
|
|
import { z } from 'zod';
|
||
|
|
|
||
|
|
import { withAuth } from '@/lib/api/helpers';
|
||
|
|
import { parseBody } from '@/lib/api/route-helpers';
|
||
|
|
import { errorResponse } from '@/lib/errors';
|
||
|
|
import { OCR_MODELS } from '@/lib/services/ocr-config.service';
|
||
|
|
import { testProvider } from '@/lib/services/ocr-providers';
|
||
|
|
|
||
|
|
const schema = z.object({
|
||
|
|
provider: z.enum(['openai', 'claude']),
|
||
|
|
model: z.string().min(1),
|
||
|
|
apiKey: z.string().min(1),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const POST = withAuth(async (req) => {
|
||
|
|
try {
|
||
|
|
const body = await parseBody(req, schema);
|
||
|
|
if (!OCR_MODELS[body.provider].includes(body.model)) {
|
||
|
|
return NextResponse.json({ error: 'Invalid model' }, { status: 400 });
|
||
|
|
}
|
||
|
|
const result = await testProvider(body.provider, body.apiKey, body.model);
|
||
|
|
return NextResponse.json(result);
|
||
|
|
} catch (error) {
|
||
|
|
return errorResponse(error);
|
||
|
|
}
|
||
|
|
});
|