UNPKG

@meldscience/meld

Version:

pipeable one-shot prompt scripting toolkit

46 lines (41 loc) 1.3 kB
import OpenAI from 'openai'; import { ToolError } from '../errors'; import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions'; import { AIProvider } from './anthropic'; export class OpenAIProvider implements AIProvider { private client: OpenAI; constructor(apiKey: string) { if (!apiKey) { throw new ToolError( 'OpenAI API key is required', 'MISSING_API_KEY' ); } this.client = new OpenAI({ apiKey }); } async sendPrompt({ model, systemPrompt, userPrompt }: { model: string; systemPrompt?: string; userPrompt: string; }): Promise<string> { try { const messages: ChatCompletionMessageParam[] = []; if (systemPrompt) { messages.push({ role: 'system', content: systemPrompt }); } messages.push({ role: 'user', content: userPrompt }); const response = await this.client.chat.completions.create({ model: model, messages: messages, ...(model.startsWith('o1-') ? { max_completion_tokens: 32768 } : { max_tokens: 50000 }), }); return response.choices[0].message.content || ''; } catch (error: any) { throw new ToolError( `OpenAI API error: ${error.message}`, 'API_ERROR', error ); } } }