UNPKG

local-agent

Version:

A CLI agentic system for orchestrating tools and memory with per-folder scoping

133 lines 5.61 kB
"use strict"; 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.ProviderFactory = void 0; /** * @fileoverview * Factory for creating and managing AI providers. * Uses lazy loading to only import providers when needed. */ const types_1 = require("./types"); /** * Factory for creating and managing AI providers. * Uses lazy loading to only import providers when needed. */ class ProviderFactory { static providers = {}; static providerModules = { 'openai': () => Promise.resolve().then(() => __importStar(require('./openai-provider'))), 'anthropic': () => Promise.resolve().then(() => __importStar(require('./anthropic-provider'))), 'google': () => Promise.resolve().then(() => __importStar(require('./google-provider'))), 'openrouter': () => Promise.resolve().then(() => __importStar(require('./openrouter-provider'))), }; /** * Parses a model string into provider and model name components. * Handles backward compatibility for model strings without a provider prefix. * * @param modelString The model string to parse (e.g., "openai/gpt-4o" or "gpt-4o") * @returns The parsed provider and model name */ static parseModelString(modelString) { if (!modelString.includes('/')) { // Backward compatibility: treat as openai return { provider: 'openai', modelName: modelString }; } const [provider, ...rest] = modelString.split('/'); return { provider: provider.toLowerCase(), modelName: rest.join('/') }; } /** * Gets or lazily initializes a provider instance for the specified provider name. * * @param providerName The name of the provider to get * @returns The provider instance * @throws ProviderError if the provider is not supported or cannot be loaded */ static async getProvider(providerName) { const normalizedName = providerName.toLowerCase(); // Return cached provider if available if (this.providers[normalizedName]) { return this.providers[normalizedName]; } // Check if provider is supported if (!this.providerModules[normalizedName]) { throw new types_1.ProviderError(`Unsupported AI provider: ${providerName}`, providerName, false); } try { // Dynamically import the provider module const module = await this.providerModules[normalizedName](); const provider = new module.default(); // Cache the provider instance this.providers[normalizedName] = provider; return provider; } catch (error) { const message = error instanceof Error ? error.message : String(error); throw new types_1.ProviderError(`Failed to load provider ${providerName}: ${message}`, providerName, true); } } /** * Convenience method to get a model instance for a given model string. * Parses the model string, gets the provider, and returns the model instance. * * @param modelString The model string (e.g., "openai/gpt-4o" or "gpt-4o") * @param keys API keys for provider initialization * @returns A Promise resolving to the model instance */ static async getModelFromString(modelString, keys = {}) { const { provider: providerName, modelName } = this.parseModelString(modelString); try { const provider = await this.getProvider(providerName); // Initialize the provider with API keys if required if (provider.requiresApiKey()) { provider.initialize(keys); } return provider.getModel(modelName); } catch (error) { if (error instanceof types_1.ProviderError) { throw error; } else { const message = error instanceof Error ? error.message : String(error); throw new types_1.ProviderError(`Error getting model for ${modelString}: ${message}`, providerName, true); } } } } exports.ProviderFactory = ProviderFactory; //# sourceMappingURL=provider-factory.js.map