@oliverpople/agency-x
Version:
🚀 **Transform feature requests into production-ready code in seconds**
47 lines (39 loc) • 1.21 kB
text/typescript
import OpenAI from 'openai';
let openai: OpenAI | null = null;
const getOpenAI = () => {
if (!openai) {
const apiKey = process.env.OPENAI_API_KEY;
if (!apiKey) {
throw new Error('OPENAI_API_KEY environment variable is not set');
}
openai = new OpenAI({ apiKey });
}
return openai;
};
export const getOpenAIClient = () => {
return {
generate: async (prompt: string) => {
const client = getOpenAI();
// Create a timeout promise
const timeoutPromise = new Promise((_, reject) => {
setTimeout(() => {
reject(new Error('OpenAI API request timed out after 90 seconds'));
}, 90000);
});
try {
const apiPromise = client.chat.completions.create({
model: 'gpt-3.5-turbo',
messages: [{ role: 'user', content: prompt }],
});
const response = await Promise.race([
apiPromise,
timeoutPromise
]) as OpenAI.Chat.Completions.ChatCompletion;
return response.choices[0].message.content || '';
} catch (error) {
console.error('[ERROR] OpenAI API error:', error);
throw error;
}
},
};
};