@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
text/typescript
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;
}
}