Skip to content

OpenAI Provider

The OpenAI provider supports the full range of OpenAI's API capabilities.

Installation

bash
npm install @aeye/openai openai

Configuration

typescript
import { OpenAIProvider } from '@aeye/openai';

const openai = new OpenAIProvider({
  apiKey: process.env.OPENAI_API_KEY!,
  baseURL: 'https://api.openai.com/v1',  // optional, default
  organization: 'org-xxx',                // optional
  project: 'proj-xxx',                    // optional
  store: true,                            // optional, allow storage
  retry: {
    maxRetries: 3,
    initialDelay: 1000,
    maxDelay: 30000,
    backoffMultiplier: 2,
    jitter: true,
    retryableStatuses: [429, 500, 502, 503, 504],
    timeout: 60000,
  },
  defaultModels: {
    chat: 'gpt-4o',
    imageGenerate: 'dall-e-3',
    imageEdit: 'dall-e-2',
    transcription: 'whisper-1',
    speech: 'tts-1',
    embedding: 'text-embedding-3-small',
  },
  hooks: {
    chat: {
      beforeRequest: (request, params, ctx, metadata) => {},
      afterRequest: (request, response, responseComplete, ctx, metadata) => {},
      onError: (request, params, error, ctx, metadata) => {},
    },
  },
});

Capabilities

CapabilityModelsAPI Method
ChatGPT-4o, GPT-4, GPT-3.5ai.chat
VisionGPT-4o, GPT-4Vai.chat with images
Reasoningo1, o1-mini, o3-miniai.chat with reason
ToolsGPT-4o, GPT-4ai.chat with tools
Structured OutputGPT-4oai.chat with schema
Image GenerationDALL-E 2, DALL-E 3ai.image.generate
Image EditingDALL-E 2ai.image.edit
Speech (TTS)tts-1, tts-1-hdai.speech
Transcriptionwhisper-1ai.transcribe
Embeddingstext-embedding-3-*ai.embed

Usage

typescript
const ai = AI.with()
  .providers({ openai })
  .create();

// Chat
const response = await ai.chat.get({
  messages: [{ role: 'user', content: 'Hello' }],
});

// With vision
const response = await ai.chat.get({
  messages: [{
    role: 'user',
    content: [
      { type: 'text', content: 'Describe this image' },
      { type: 'image', content: 'https://example.com/img.png' },
    ],
  }],
});

// Image generation
const img = await ai.image.generate.get({
  prompt: 'A sunset over mountains',
  size: '1024x1024',
});

Error Types

typescript
import {
  ProviderError,
  ProviderAuthError,
  RateLimitError,
  ProviderRateLimitError,
  ProviderQuotaError,
  ContextWindowError,
} from '@aeye/openai';

As Base Class

OpenAIProvider can be extended for OpenAI-compatible APIs:

typescript
class AzureProvider extends OpenAIProvider {
  readonly name = 'azure';
  // customize as needed
}

See Custom Providers for details.

Released under the GPL-3.0 License.