UNPKG

@nomyx/assistant

Version:

A powerful assistant library and cli for your AI projects. works with Vertex AI (Claude and Gemini)

46 lines (39 loc) 1.86 kB
import { AIProviderConfig, AnthropicProviderConfig, AzureProviderConfig, VertexProviderConfig, IAIProvider, IAIProviderFactory, OpenAIProviderConfig, OpenRouterProviderConfig } from '../types/provider'; import { ILogger } from '../types/common'; export class AIProviderFactory implements IAIProviderFactory { private providerCache: Map<string, IAIProvider> = new Map(); constructor(private logger: ILogger) {} createProvider(config: AIProviderConfig): IAIProvider { const cacheKey = `${config.type}-${config.apiKey}`; if (this.providerCache.has(cacheKey)) { return this.providerCache.get(cacheKey)!; } let provider: IAIProvider; switch (config.type) { case 'openai': const { OpenAIProvider } = require('./providers/OpenAIProvider'); provider = new OpenAIProvider(config as OpenAIProviderConfig, this.logger); break; case 'anthropic': const { AnthropicProvider } = require('./providers/AnthropicProvider'); provider = new AnthropicProvider(config as AnthropicProviderConfig, this.logger); break; case 'azure': const { AzureProvider } = require('./providers/AzureProvider'); provider = new AzureProvider(config as AzureProviderConfig, this.logger); break; case 'vertex': const { VertexProvider } = require('./providers/VertexProvider'); provider = new VertexProvider(config as VertexProviderConfig, this.logger); break; case 'openrouter': const { OpenRouterProvider } = require('./providers/OpenRouterProvider'); provider = new OpenRouterProvider(config as OpenRouterProviderConfig, this.logger); break; default: throw new Error(`Unsupported AI provider type: ${config.type}`); } this.providerCache.set(cacheKey, provider); return provider; } }