UNPKG

ai-switcher

Version:

A package which helps you switch between AI APIs using configurations, so that code changes are not required.

52 lines (44 loc) 1.8 kB
// src/index.ts import { Message, Provider, ModelConfig, AIClientConfig, CompletionOptions } from './types'; import { BaseAIClient } from './clients/base'; import { AnthropicClient } from './clients/anthropic'; import { OpenAIClient } from './clients/openai'; export class AIClient { private clients: Map<Provider, BaseAIClient>; private defaultProvider: Provider; private defaultModel: string; constructor(config: AIClientConfig) { if (!config.anthropicApiKey && !config.openaiApiKey) { throw new Error("At least one provider API key must be provided"); } this.clients = new Map(); this.defaultProvider = config.defaultProvider || 'openai'; this.defaultModel = config.defaultModel || ''; if (config.anthropicApiKey) { this.clients.set('anthropic', new AnthropicClient(config.anthropicApiKey)); } if (config.openaiApiKey) { this.clients.set('openai', new OpenAIClient(config.openaiApiKey)); } } private getClient(provider?: Provider): BaseAIClient { const selectedProvider = provider || this.defaultProvider; const client = this.clients.get(selectedProvider); if (!client) { throw new Error(`No client configured for provider: ${selectedProvider}`); } return client; } async createCompletion(messages: Message[], options: CompletionOptions = {}): Promise<string> { const client = this.getClient(options.provider); return client.createCompletion(messages, { ...options, model: options.model || this.defaultModel, }); } async createEmbedding(text: string, provider?: Provider): Promise<number[]> { const client = this.getClient(provider); return client.createEmbedding(text); } } export { Message, Provider, ModelConfig, AIClientConfig, CompletionOptions };