route.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { NextRequest } from 'next/server';
  2. import { generateText } from 'ai';
  3. import { createLogger } from '@/lib/logger';
  4. import { apiError, apiSuccess } from '@/lib/server/api-response';
  5. import { resolveModel } from '@/lib/server/resolve-model';
  6. const log = createLogger('Verify Model');
  7. export async function POST(req: NextRequest) {
  8. let model: string | undefined;
  9. try {
  10. const body = await req.json();
  11. const { apiKey, baseUrl, providerType } = body;
  12. model = body.model;
  13. if (!model) {
  14. return apiError('MISSING_REQUIRED_FIELD', 400, 'Model name is required');
  15. }
  16. // Parse model string and resolve server-side fallback
  17. let languageModel;
  18. try {
  19. const result = await resolveModel({
  20. modelString: model,
  21. apiKey: apiKey || '',
  22. baseUrl: baseUrl || undefined,
  23. providerType,
  24. });
  25. languageModel = result.model;
  26. } catch (error) {
  27. return apiError(
  28. 'INVALID_REQUEST',
  29. 401,
  30. error instanceof Error ? error.message : String(error),
  31. );
  32. }
  33. // Send a minimal test message
  34. const { text } = await generateText({
  35. model: languageModel,
  36. prompt: 'Say "OK" if you can hear me.',
  37. });
  38. return apiSuccess({
  39. message: 'Connection successful',
  40. response: text,
  41. });
  42. } catch (error) {
  43. log.error(`Model verification failed [model="${model ?? 'unknown'}"]:`, error);
  44. let errorMessage = 'Connection failed';
  45. if (error instanceof Error) {
  46. // Parse common error messages
  47. if (error.message.includes('401') || error.message.includes('Unauthorized')) {
  48. errorMessage = 'API key is invalid or expired';
  49. } else if (error.message.includes('404') || error.message.includes('not found')) {
  50. errorMessage = 'Model not found or API endpoint error';
  51. } else if (error.message.includes('429')) {
  52. errorMessage = 'API rate limit exceeded, please try again later';
  53. } else if (error.message.includes('ENOTFOUND') || error.message.includes('ECONNREFUSED')) {
  54. errorMessage = 'Cannot connect to API server, please check the Base URL';
  55. } else if (error.message.includes('timeout')) {
  56. errorMessage = 'Connection timed out, please check your network';
  57. } else {
  58. errorMessage = error.message;
  59. }
  60. }
  61. return apiError('INTERNAL_ERROR', 500, errorMessage);
  62. }
  63. }