import OpenAI from 'openai'; import * as dotenv from 'dotenv'; dotenv.config({ path: ['.env.local', '.env'] }); export const openai = new OpenAI({ apiKey: process.env.BEARER_TOKEN, baseURL: process.env.PROVIDER_URL, timeout: 600000, // 10 minutes maxRetries: 3, }); export const defaultModel = process.env.MODEL_NAME ?? 'gpt-5.4'; export const miniModel = process.env.MODEL_NAME ?? 'gpt-5.4-mini'; export const serviceOptions = { service_tier: 'flex' as const }; export const supportsWebSearch = true; function isJsonParseError(err: unknown): boolean { if (err instanceof SyntaxError) return true; if (!(err instanceof Error)) return false; // Some providers wrap JSON parsing failures in plain Error objects. return /not valid json|unexpected token|json/i.test(err.message); } export async function parseWithRetry(fn: () => Promise, retries = 3): Promise { let lastErr: unknown; for (let attempt = 0; attempt <= retries; attempt++) { try { return await fn(); } catch (err) { if (isJsonParseError(err) && attempt < retries) { lastErr = err; continue; } throw err; } } throw lastErr; }