locatai-ts
Version:
Enterprise-grade AI-powered element locator for Selenium WebDriver - TypeScript implementation
79 lines • 3.21 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.AIProviderFactory = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const OpenAIProvider_1 = require("./OpenAIProvider");
const OllamaProvider_1 = require("./OllamaProvider");
const AnthropicProvider_1 = require("./AnthropicProvider");
const GeminiProvider_1 = require("./GeminiProvider");
/**
* Factory class for creating AI provider instances
*/
class AIProviderFactory {
/**
* Creates an AI provider based on configuration in appsettings.json
*/
static create() {
// Load configuration from appsettings.json
const settings = AIProviderFactory.loadAppSettings();
// Use settings or defaults
const provider = settings.AI?.Provider?.toLowerCase() || 'openai';
const apiKey = settings.AI?.ApiKey;
const modelName = settings.AI?.Model;
if (!apiKey) {
console.warn('API key not found in appsettings.json. This might cause authentication errors.');
}
const config = {
apiKey,
model: modelName
};
// Create the appropriate provider instance
switch (provider) {
case 'openai':
return new OpenAIProvider_1.OpenAIProvider(config);
case 'ollama':
return new OllamaProvider_1.OllamaProvider(config);
case 'anthropic':
return new AnthropicProvider_1.AnthropicProvider(config);
case 'gemini':
return new GeminiProvider_1.GeminiProvider(config);
default:
console.warn(`Unknown provider '${provider}' specified in appsettings.json, defaulting to OpenAI`);
return new OpenAIProvider_1.OpenAIProvider(config);
}
}
/**
* Loads the app settings from appsettings.json
* Tries multiple locations to find the file
*/
static loadAppSettings() {
// Possible locations for appsettings.json
const possiblePaths = [
'appsettings.json',
path_1.default.join('test', 'appsettings.json'),
path_1.default.join(__dirname, '..', '..', 'appsettings.json'),
path_1.default.join(__dirname, '..', '..', 'test', 'appsettings.json')
];
for (const filePath of possiblePaths) {
try {
if (fs_1.default.existsSync(filePath)) {
const content = fs_1.default.readFileSync(filePath, 'utf-8');
const settings = JSON.parse(content);
console.log(`Loaded configuration from ${filePath}`);
return settings;
}
}
catch (error) {
console.warn(`Error reading ${filePath}:`, error);
}
}
console.warn('No appsettings.json found, using default settings');
return {};
}
}
exports.AIProviderFactory = AIProviderFactory;
//# sourceMappingURL=AIProviderFactory.js.map