@meldscience/meld
Version:
pipeable one-shot prompt scripting toolkit
46 lines (41 loc) • 1.3 kB
text/typescript
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
);
}
}
}