@juspay/neurolink
Version:
Universal AI Development Platform with external MCP server integration, multi-provider support, and professional CLI. Connect to 65+ MCP servers for filesystem, GitHub, database operations, and more. Build, test, and deploy AI applications with 9 major pr
89 lines (88 loc) • 3.36 kB
JavaScript
/**
* Utility functions for AI provider management
*/
import { logger } from './logger.js';
/**
* Get the best available provider based on preferences and availability
* @param requestedProvider - Optional preferred provider name
* @returns The best provider name to use
*/
export function getBestProvider(requestedProvider) {
// If a specific provider is requested, return it
if (requestedProvider) {
return requestedProvider;
}
// Default fallback order based on environment variables - OpenAI first since it's most reliable
// Ollama last since it requires local setup
const providers = ['openai', 'anthropic', 'google-ai', 'mistral', 'vertex', 'azure', 'huggingface', 'bedrock', 'ollama'];
// Check which providers have their required environment variables
for (const provider of providers) {
if (isProviderConfigured(provider)) {
logger.debug(`[getBestProvider] Selected provider: ${provider}`);
return provider;
}
}
// Default to bedrock if nothing is configured
logger.warn('[getBestProvider] No providers configured, defaulting to bedrock');
return 'bedrock';
}
/**
* Check if a provider has the minimum required configuration
* @param provider - Provider name to check
* @returns True if the provider appears to be configured
*/
function isProviderConfigured(provider) {
switch (provider.toLowerCase()) {
case 'bedrock':
case 'amazon':
case 'aws':
return !!(process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY);
case 'vertex':
case 'google':
case 'gemini':
return !!(process.env.GOOGLE_VERTEX_PROJECT || process.env.GOOGLE_APPLICATION_CREDENTIALS);
case 'openai':
case 'gpt':
return !!process.env.OPENAI_API_KEY;
case 'anthropic':
case 'claude':
return !!process.env.ANTHROPIC_API_KEY;
case 'azure':
case 'azure-openai':
return !!process.env.AZURE_OPENAI_API_KEY;
case 'google-ai':
case 'google-studio':
return !!(process.env.GOOGLE_AI_API_KEY || process.env.GOOGLE_GENERATIVE_AI_API_KEY);
case 'huggingface':
case 'hugging-face':
case 'hf':
return !!(process.env.HUGGINGFACE_API_KEY || process.env.HF_TOKEN);
case 'ollama':
case 'local':
case 'local-ollama':
// For Ollama, we check if the service is potentially available
// This is a basic check - actual connectivity will be verified during usage
return true; // Ollama doesn't require environment variables, just local service
case 'mistral':
case 'mistral-ai':
case 'mistralai':
return !!process.env.MISTRAL_API_KEY;
default:
return false;
}
}
/**
* Get available provider names
* @returns Array of available provider names
*/
export function getAvailableProviders() {
return ['bedrock', 'vertex', 'openai', 'anthropic', 'azure', 'google-ai', 'huggingface', 'ollama', 'mistral'];
}
/**
* Validate provider name
* @param provider - Provider name to validate
* @returns True if provider name is valid
*/
export function isValidProvider(provider) {
return getAvailableProviders().includes(provider.toLowerCase());
}