UNPKG

advanced-live-server-installer

Version:

Auto-installer for Advanced Live Server VS Code Extension

300 lines 12.2 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 (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.AIConfigManager = void 0; const path = __importStar(require("path")); const fs = __importStar(require("fs")); class AIConfigManager { constructor(context) { this.context = context; this.configPath = path.join(context.globalStorageUri.fsPath, 'ai-config.json'); this.config = this.loadConfig(); } loadConfig() { try { if (fs.existsSync(this.configPath)) { const data = fs.readFileSync(this.configPath, 'utf8'); return JSON.parse(data); } } catch (error) { console.error('Failed to load AI config:', error); } // Default configuration return { enabled: false, mode: 'local', errorExplanation: true, accessibilityAnalysis: true, codeImprovements: true, performanceAnalysis: false, seoOptimization: false, securityScan: false, modelConfig: { provider: 'openai', model: 'gpt-3.5-turbo', temperature: 0.7, maxTokens: 1000, timeout: 30000, }, }; } saveConfig() { try { const dir = path.dirname(this.configPath); if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } // Debug: Log config path and data console.log('[AIConfigManager] Writing config to:', this.configPath); console.log('[AIConfigManager] Config data:', JSON.stringify(this.config, null, 2)); fs.writeFileSync(this.configPath, JSON.stringify(this.config, null, 2)); } catch (error) { console.error('[AIConfigManager] Failed to save AI config:', error); } } getConfig() { return { ...this.config }; } getAIMode() { return this.config.mode; } updateConfig(updates) { this.config = { ...this.config, ...updates }; this.saveConfig(); } updateModelConfig(updates) { this.config.modelConfig = { ...this.config.modelConfig, ...updates }; this.saveConfig(); } isFeatureEnabled(feature) { return this.config.enabled && Boolean(this.config[feature]); } async validateModelConfig() { const { modelConfig } = this.config; // Only validate if AI features are enabled if (!this.config.enabled) { return { valid: true }; } // For local provider, no validation needed if (modelConfig.provider === 'local') { return { valid: true }; } // For Ollama, only validate if baseUrl is provided and invalid if (modelConfig.provider === 'ollama') { if (modelConfig.baseUrl && !this.isValidUrl(modelConfig.baseUrl)) { return { valid: false, error: 'Invalid Ollama base URL', }; } return { valid: true }; } // For custom provider, require baseUrl if (modelConfig.provider === 'custom') { if (!modelConfig.baseUrl) { return { valid: false, error: 'Base URL is required for custom provider', }; } if (!this.isValidUrl(modelConfig.baseUrl)) { return { valid: false, error: 'Invalid custom provider base URL', }; } return { valid: true }; } // For all other cloud providers, API key is optional (user can test without it) // Only validate URL if provided if (modelConfig.baseUrl && !this.isValidUrl(modelConfig.baseUrl)) { return { valid: false, error: 'Invalid base URL', }; } return { valid: true }; } isValidUrl(url) { try { new URL(url); return true; } catch { return false; } } getProviderConfig() { const { modelConfig } = this.config; switch (modelConfig.provider) { case 'openai': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.openai.com/v1', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'anthropic': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.anthropic.com', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'ollama': return { baseURL: modelConfig.baseUrl || 'http://localhost:11434', model: modelConfig.model, temperature: modelConfig.temperature, timeout: modelConfig.timeout, }; case 'gemini': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://generativelanguage.googleapis.com', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'cohere': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.cohere.ai', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'mistral': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.mistral.ai', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'perplexity': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.perplexity.ai', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'together': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.together.xyz', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'huggingface': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api-inference.huggingface.co', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'openrouter': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://openrouter.ai/api/v1', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'groq': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.groq.com/openai/v1', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'deepseek': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.deepseek.com', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'fireworks': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.fireworks.ai/inference/v1', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'nomic': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl || 'https://api.nomic.ai/v1', model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'custom': return { apiKey: modelConfig.apiKey, baseURL: modelConfig.baseUrl, model: modelConfig.model, temperature: modelConfig.temperature, maxTokens: modelConfig.maxTokens, timeout: modelConfig.timeout, }; case 'local': return { baseURL: modelConfig.baseUrl, model: modelConfig.model, temperature: modelConfig.temperature, timeout: modelConfig.timeout, }; default: throw new Error(`Unsupported provider: ${modelConfig.provider}`); } } } exports.AIConfigManager = AIConfigManager; //# sourceMappingURL=ai-config.js.map