UNPKG

@axarai/axar

Version:

TypeScript-based agent framework for building agentic applications powered by LLMs

202 lines (201 loc) 6.69 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.dynamicProviderCache = exports.supportedProviders = exports.coreProviders = void 0; exports.loadDynamicProvider = loadDynamicProvider; exports.isValidProvider = isValidProvider; const OpenAI = __importStar(require("@ai-sdk/openai")); const Anthropic = __importStar(require("@ai-sdk/anthropic")); /** * Map of core provider implementations that are available by default. * Includes built-in providers like OpenAI and Anthropic. */ exports.coreProviders = { openai: OpenAI.openai, anthropic: Anthropic.anthropic, }; /** * A list of all provider implementations available via the Vercel AI SDK. * Includes built-in providers such as OpenAI, Anthropic, Azure, Cohere, and community provider like Ollama. */ exports.supportedProviders = [ { name: 'openai', packagePath: '@ai-sdk/openai' }, { name: 'azure', packagePath: '@ai-sdk/azure' }, { name: 'anthropic', packagePath: '@ai-sdk/anthropic' }, { name: 'amazon-bedrock', packagePath: '@ai-sdk/amazon-bedrock', exportName: 'bedrock' }, { name: 'google', packagePath: '@ai-sdk/google' }, { name: 'google-vertex', packagePath: '@ai-sdk/google-vertex', exportName: 'vertex' }, { name: 'mistral', packagePath: '@ai-sdk/mistral' }, { name: 'xai', packagePath: '@ai-sdk/xai' }, { name: 'togetherai', packagePath: '@ai-sdk/togetherai' }, { name: 'cohere', packagePath: '@ai-sdk/cohere' }, { name: 'fireworks', packagePath: '@ai-sdk/fireworks' }, { name: 'deepinfra', packagePath: '@ai-sdk/deepinfra' }, { name: 'deepseek', packagePath: '@ai-sdk/deepseek' }, { name: 'cerebras', packagePath: '@ai-sdk/cerebras' }, { name: 'groq', packagePath: '@ai-sdk/groq' }, { name: 'perplexity', packagePath: '@ai-sdk/perplexity' }, { name: 'luma', packagePath: '@ai-sdk/luma' }, { name: 'fal', packagePath: '@ai-sdk/fal' }, { name: 'ollama', packagePath: 'ollama-ai-provider' } ]; /** * Cache for dynamically loaded providers to avoid repeated imports. */ exports.dynamicProviderCache = {}; /** * Dynamically loads a provider implementation by name. * * @param providerName - The name of the provider to load (e.g., "cohere", "azure") * @returns Promise resolving to the provider implementation * @throws {Error} If the provider module is not found or doesn't implement ProviderV1 * * @example * ```typescript * const cohereProvider = await loadDynamicProvider('cohere'); * ``` */ async function loadDynamicProvider(providerName) { if (!providerName) { throw new Error('Provider name is required to load a provider.'); } if (exports.dynamicProviderCache[providerName]) { return exports.dynamicProviderCache[providerName]; } const selectedProvider = exports.supportedProviders.find(provider => provider.name === providerName); try { if (!selectedProvider) { throw new Error(`Unsupported provider '${providerName}'. Refer to the list of supported providers here: https://axar-ai.gitbook.io/axar/basics/model.`); } const modulePath = require.resolve(selectedProvider.packagePath, { paths: [process.cwd()] }); const providerModule = await Promise.resolve(`${modulePath}`).then(s => __importStar(require(s))); const exportName = selectedProvider?.exportName ?? selectedProvider?.name; const provider = providerModule[exportName]; if (!isValidProvider(provider)) { throw new Error(`The export "${exportName}" does not implement the ProviderV1 interface in the module "${selectedProvider.packagePath}".`); } // Cache the provider for future use exports.dynamicProviderCache[providerName] = provider; return provider; } catch (error) { if (isModuleNotFoundError(error)) { throw new Error(`The provider "${providerName}" is not installed. Please install "${selectedProvider?.packagePath}" to use it.`); } throw new Error(`Failed to load provider "${providerName}": ${error.message}`); } } /** * Type guard to validate that an object implements the ProviderV1 interface. * The provider must expose a `languageModel` method for creating models. * @param provider The object to validate. * @returns True if the object implements ProviderV1. */ function isValidProvider(provider) { return ((typeof provider === 'object' || typeof provider === 'function') && provider !== null && 'languageModel' in provider && typeof provider.languageModel === 'function'); } /** * Type guard to check if the error is a module not found error. * @param error The caught error. * @returns True if the error is a module not found error. */ function isModuleNotFoundError(error) { return (typeof error === 'object' && error !== null && 'code' in error && error.code === 'MODULE_NOT_FOUND'); }