UNPKG

prompt-version-manager

Version:

Centralized prompt management system for Human Behavior AI agents

154 lines 5.89 kB
"use strict"; /** * Provider registry for managing LLM providers in TypeScript. */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.registry = exports.ProviderRegistry = void 0; const dotenv = __importStar(require("dotenv")); const exceptions_1 = require("../core/exceptions"); const openai_1 = require("./openai"); const anthropic_1 = require("./anthropic"); const google_1 = require("./google"); // Load environment variables dotenv.config(); class ProviderRegistry { providers = new Map(); modelToProvider = new Map(); constructor() { this.initializeProviders(); } initializeProviders() { const providerConfigs = [ { ProviderClass: openai_1.OpenAIProvider, envVars: ['OPENAI_API_KEY'] }, { ProviderClass: anthropic_1.AnthropicProvider, envVars: ['ANTHROPIC_API_KEY'] }, { ProviderClass: google_1.GoogleProvider, envVars: ['GOOGLE_API_KEY', 'GEMINI_API_KEY'] // Support both env var names } ]; for (const config of providerConfigs) { // Try to get API key from environment variables let apiKey; for (const envVar of config.envVars) { apiKey = process.env[envVar]; if (apiKey) break; } if (apiKey) { try { const provider = new config.ProviderClass(apiKey); this.registerProvider(provider); } catch (error) { // Skip providers with invalid keys if (!(error instanceof exceptions_1.APIKeyError)) { console.warn(`Failed to initialize provider: ${error}`); } } } } } registerProvider(provider) { if (!provider.validateConfig()) { throw new exceptions_1.ProviderError(`Invalid configuration for provider ${provider.name}`); } this.providers.set(provider.name, provider); // Map models to this provider for (const model of provider.supportedModels) { this.modelToProvider.set(model, provider.name); } } getProvider(providerName) { const provider = this.providers.get(providerName); if (!provider) { const available = Array.from(this.providers.keys()).join(', '); throw new exceptions_1.ProviderError(`Provider ${providerName} not found. Available: ${available}`); } return provider; } getProviderForModel(model) { const providerName = this.modelToProvider.get(model); if (!providerName) { const availableModels = Array.from(this.modelToProvider.keys()).join(', '); throw new exceptions_1.UnsupportedModelError(`Model ${model} not supported. Available: ${availableModels}`); } return this.getProvider(providerName); } listProviders() { return Array.from(this.providers.keys()); } listModels(providerName) { if (providerName) { const provider = this.providers.get(providerName); return provider ? provider.supportedModels : []; } return Array.from(this.modelToProvider.keys()); } getModelInfo() { const info = {}; for (const [model, providerName] of this.modelToProvider.entries()) { const provider = this.providers.get(providerName); if (provider) { info[model] = { provider: providerName, // Add provider-specific info if available pricing: provider.PRICING?.[model], supportsStreaming: false, // Can be extended later supportsFunctions: false // Can be extended later }; } } return info; } async chatCompletion(model, messages, options) { const provider = this.getProviderForModel(model); return provider.chatCompletion(model, messages, options); } calculateCost(model, tokens) { const provider = this.getProviderForModel(model); return provider.calculateCost(model, tokens); } } exports.ProviderRegistry = ProviderRegistry; // Global registry instance exports.registry = new ProviderRegistry(); //# sourceMappingURL=registry.js.map