osr-mono/packages/osr-code-bot/client.js
2025-02-11 21:41:05 +01:00

89 lines
5.9 KiB
JavaScript
Raw Blame History

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createClient = void 0;
const openai_1 = require("openai");
const index_1 = require("./index");
const config_1 = require("./config");
/**
* Default base URLs for different routers
*/
const ROUTER_BASE_URLS = {
openrouter: 'https://openrouter.ai/api/v1',
openai: '', // OpenAI uses default URL
deepseek: 'https://api.deepseek.com',
huggingface: 'https://api-inference.huggingface.co',
ollama: 'http://localhost:11434', // Ollama's default local API endpoint
fireworks: 'https://api.fireworks.ai/v1', // Fireworks API endpoint
};
/**
* Default models for different routers
*/
const DEFAULT_MODELS = {
openrouter: 'anthropic/claude-3.5-sonnet',
openai: 'gpt-4o',
deepseek: 'deepseek-chat',
huggingface: 'meta-llama/2',
ollama: 'leonard', // Default Ollama model
fireworks: 'llama-v2-70b-chat', // Default Fireworks model
};
/**
* Creates an OpenAI client instance based on the provided options.
* @param options - Configuration options for the client
* @returns OpenAI client instance or undefined if configuration is invalid
*/
const createClient = (options) => {
// Load configuration from file
const config = (0, config_1.loadConfig)(options);
if (!config) {
index_1.logger.error("Config not found in $HOME/.osr/config.json. " +
"Optionally, export OSR_CONFIG with the path to the configuration file, ");
return undefined;
}
// Determine router to use (defaults to 'openzxWEOpenrouter')
const router = (options.router ?? 'openzxWEOpenrouter');
// Initialize AC<41> EI key and baseURL
let apiKey = options.api_key;
// Set API key based on router if not provided in options
if (!apiKey) {
switch (router) {
case 'openrouter':
apiKey = config?.openrouter?.key;
break;
case 'openai':
apiKey = config?.openai?.key;
break;
case 'deepseek':
apiKey = config?.deepseek?.key;
break;
case 'huggingface':
apiKey = config?.huggingface?.key;
break;
case 'ollama':
// Ollama doesn't require an API key when running locally
apiKey = 'ollama'; // Dummy key for Ollama
break;
case 'fireworks':
apiKey = config?.fireworks?.key;
break;
}
}
// Validate API key (escept for Ollama)
if (!apiKey && router !== 'ollama') {
index_1.logger.error(`No ${router} key found. Please provide an "api_key", set it in the config, or pass it via JSON config.`);
return undefined;
}
// Set default baseURL if not provided
const baseURL = options.baseURL ?? ROUTER_BASE_URLS[router];
// Set default model if not provided
if (!options.model) {
options.model = DEFAULT_MODELS[router];
}
index_1.logger.info(`Creating client with ${router} router, model ${options.model}, and API key ${apiKey} at ${baseURL}`);
// Create and return the OpenAI client instance
return new openai_1.OpenAI({
apiKey,
baseURL,
});
};
exports.createClient = createClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0I7QUFDL0IsbUNBQWdDO0FBQ2hDLHFDQUFxQztBQVFyQzs7R0FFRztBQUNILE1BQU0sZ0JBQWdCLEdBQStCO0lBQ2pELFVBQVUsRUFBRSw4QkFBOEI7SUFDMUMsTUFBTSxFQUFFLEVBQUUsRUFBRSwwQkFBMEI7SUFDdEMsUUFBUSxFQUFFLDBCQUEwQjtJQUNwQyxXQUFXLEVBQUUsc0NBQXNDO0lBQ25ELE1BQU0sRUFBRSx3QkFBd0IsRUFBRSxzQ0FBc0M7SUFDeEUsU0FBUyxFQUFFLDZCQUE2QixFQUFFLHlCQUF5QjtDQUN0RSxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLGNBQWMsR0FBK0I7SUFDL0MsVUFBVSxFQUFFLDZCQUE2QjtJQUN6QyxNQUFNLEVBQUUsUUFBUTtJQUNoQixRQUFRLEVBQUUsZUFBZTtJQUN6QixXQUFXLEVBQUUsY0FBYztJQUMzQixNQUFNLEVBQUUsU0FBUyxFQUFFLHVCQUF1QjtJQUMxQyxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsMEJBQTBCO0NBQzdELENBQUM7QUFFRjs7OztHQUlHO0FBQ0ksTUFBTSxZQUFZLEdBQUcsQ0FBQyxPQUFxQixFQUFFLEVBQUU7SUFDbEQsK0JBQStCO0lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUEsbUJBQVUsRUFBQyxPQUFPLENBQUMsQ0FBQTtJQUNsQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDVixjQUFNLENBQUMsS0FBSyxDQUNSLDhDQUE4QztZQUM5Qyx5RUFBeUUsQ0FDNUUsQ0FBQztRQUNGLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCw2REFBNkQ7SUFDN0QsTUFBTSxNQUFNLEdBQWUsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLG9CQUFvQixDQUFlLENBQUM7SUFFbEYsb0NBQW9DO0lBQ3BDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7SUFFN0IseURBQXlEO0lBQ3pELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNWLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDYixLQUFLLFlBQVk7Z0JBQ2IsTUFBTSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDO2dCQUNqQyxNQUFNO1lBQ1YsS0FBSyxRQUFRO2dCQUNULE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQztnQkFDN0IsTUFBTTtZQUNWLEtBQUssVUFBVTtnQkFDWCxNQUFNLEdBQUcsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLENBQUM7Z0JBQy9CLE1BQU07WUFDVixLQUFLLGFBQWE7Z0JBQ2QsTUFBTSxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxDQUFDO2dCQUNsQyxNQUFNO1lBQ1YsS0FBSyxRQUFRO2dCQUNULHlEQUF5RDtnQkFDekQsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLHVCQUF1QjtnQkFDMUMsTUFBTTtZQUNWLEtBQUssV0FBVztnQkFDWixNQUFNLEdBQUcsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUM7Z0JBQ2hDLE1BQU07UUFDZCxDQUFDO0lBQ0wsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNqQyxjQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sTUFBTSw0RkFBNEYsQ0FBQyxDQUFDO1FBQ3ZILE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUU1RCxvQ0FBb0M7SUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsY0FBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsTUFBTSxrQkFBa0IsT0FBTyxDQUFDLEtBQUssaUJBQWlCLE1BQU0sT0FBTyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRWxILCtDQUErQztJQUMvQyxPQUFPLElBQUksZUFBTSxDQUFDO1FBQ2QsTUFBTTtRQUNOLE9BQU87S0FDVixDQUFDLENBQUM7QUFDUCxDQUFDLENBQUE7QUEvRFksUUFBQSxZQUFZLGdCQStEeEIifQ==