class CustomApiProvider { constructor(options) { // The caller may override Provider ID (e.g. when using multiple instances of the same provider) this.providerId = options.id || 'custom provider'; // The config object contains any options passed to the provider in the config file. this.config = options.config; } id() { return this.providerId; } async callApi(prompt) { if (prompt.includes('!ERROR!')) { throw new Error('Forced error: ' + prompt); } const body = { model: 'gpt-4.1-mini', messages: [ { role: 'user', content: prompt, }, ], max_tokens: Number.parseInt(this.config?.max_tokens, 10) || 1024, temperature: Number.parseFloat(this.config?.temperature) || 0, }; const response = await fetch('https://api.openai.com/v1/chat/completions', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.OPENAI_API_KEY}`, }, body: JSON.stringify(body), }); const data = await response.json(); const ret = { output: data.choices[0].message.content, tokenUsage: { total: data.usage.total_tokens, prompt: data.usage.prompt_tokens, completion: data.usage.completion_tokens, }, }; return ret; } } module.exports = CustomApiProvider;