fix(omega): resolve module import crash and improve error handling
- Move @ai-sdk/devtools import to lazy dynamic import to prevent module load failures in production environment - Add try-catch around response.json() in client to handle non-JSON error responses gracefully - Display proper error message when server returns non-JSON response
This commit is contained in:
parent
bfd45341bb
commit
88c4848ab6
2 changed files with 24 additions and 10 deletions
|
|
@ -13,7 +13,6 @@ import { Prisma, prisma } from '@tpmjs/db';
|
|||
import { registryExecuteTool } from '@tpmjs/registry-execute';
|
||||
import { registrySearchTool } from '@tpmjs/registry-search';
|
||||
import { jsonSchema, wrapLanguageModel, type ModelMessage } from 'ai';
|
||||
import { devToolsMiddleware } from '@ai-sdk/devtools';
|
||||
import { type NextRequest, NextResponse } from 'next/server';
|
||||
import { z } from 'zod';
|
||||
import { authenticateRequest } from '~/lib/api-keys/middleware';
|
||||
|
|
@ -21,10 +20,16 @@ import { decryptApiKey } from '~/lib/crypto/api-keys';
|
|||
import { buildSystemPrompt } from '~/lib/omega/system-prompt';
|
||||
import { checkRateLimit, type RateLimitConfig } from '~/lib/rate-limit';
|
||||
|
||||
// Initialize devtools middleware once at module level (only used in development)
|
||||
const devtools = process.env.NODE_ENV === 'development' ? devToolsMiddleware() : null;
|
||||
if (devtools) {
|
||||
console.log('[Omega] AI SDK DevTools middleware initialized');
|
||||
// Devtools middleware - lazy loaded only in development
|
||||
let devtools: ReturnType<typeof import('@ai-sdk/devtools').devToolsMiddleware> | null = null;
|
||||
async function getDevtools() {
|
||||
if (process.env.NODE_ENV !== 'development') return null;
|
||||
if (!devtools) {
|
||||
const { devToolsMiddleware } = await import('@ai-sdk/devtools');
|
||||
devtools = devToolsMiddleware();
|
||||
console.log('[Omega] AI SDK DevTools middleware initialized');
|
||||
}
|
||||
return devtools;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -566,11 +571,12 @@ Remember: Your value is in EXECUTING tools to get real results, not just describ
|
|||
const baseModel = openai('gpt-4.1-mini');
|
||||
|
||||
// Wrap with devtools middleware in development
|
||||
const model = devtools
|
||||
? wrapLanguageModel({ model: baseModel, middleware: devtools })
|
||||
const devtoolsMiddleware = await getDevtools();
|
||||
const model = devtoolsMiddleware
|
||||
? wrapLanguageModel({ model: baseModel, middleware: devtoolsMiddleware })
|
||||
: baseModel;
|
||||
|
||||
if (devtools) {
|
||||
if (devtoolsMiddleware) {
|
||||
console.log('[Omega] Model wrapped with DevTools middleware');
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -215,8 +215,16 @@ export default function OmegaChatPage(): React.ReactElement {
|
|||
});
|
||||
|
||||
if (!response.ok) {
|
||||
const errorData = await response.json();
|
||||
throw new Error(errorData.error || 'Failed to send message');
|
||||
// Handle non-JSON error responses gracefully
|
||||
let errorMessage = 'Failed to send message';
|
||||
try {
|
||||
const errorData = await response.json();
|
||||
errorMessage = errorData.error || errorMessage;
|
||||
} catch {
|
||||
// Response body isn't valid JSON - use status text
|
||||
errorMessage = `Server error: ${response.status} ${response.statusText}`;
|
||||
}
|
||||
throw new Error(errorMessage);
|
||||
}
|
||||
|
||||
// Handle SSE stream
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue