Files
recommender/packages/backend/src/agent.ts
2026-07-12 12:01:45 -03:00

40 lines
1.1 KiB
TypeScript

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<T>(fn: () => Promise<T>, retries = 3): Promise<T> {
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;
}