advanced-live-server-installer
Version:
Auto-installer for Advanced Live Server VS Code Extension
300 lines • 12.2 kB
JavaScript
"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