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:
Ajax Davis 2026-01-25 05:15:40 +10:00
parent bfd45341bb
commit 88c4848ab6
2 changed files with 24 additions and 10 deletions

View file

@ -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');
}

View file

@ -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