prompt-version-manager
Version:
Centralized prompt management system for Human Behavior AI agents
154 lines • 5.89 kB
JavaScript
;
/**
* 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