@rajrajhans/ai-renamer
Version:
A Node.js CLI that uses Ollama and LM Studio models (Llava, Gemma, Llama etc.) to intelligently rename files by their contents
94 lines (78 loc) • 2.48 kB
JavaScript
const fs = require('fs').promises;
const processFile = require('./processFile');
const chooseModel = require('./chooseModel');
const processDirectory = require('./processDirectory');
module.exports = async ({
inputPath,
defaultCase,
defaultModel,
defaultChars,
defaultFrames,
defaultApiKey,
defaultBaseURL,
defaultLanguage,
defaultProvider,
defaultCustomPrompt,
defaultIncludeSubdirectories,
defaultConcurrency,
}) => {
try {
const provider = defaultProvider || 'ollama';
console.log(`⚪ Provider: ${provider}`);
const apiKey = defaultApiKey;
if (apiKey) {
console.log('⚪ API key: **********');
}
let baseURL = defaultBaseURL;
if (provider === 'ollama' && !baseURL) {
baseURL = 'http://127.0.0.1:11434';
} else if (provider === 'lm-studio' && !baseURL) {
baseURL = 'http://127.0.0.1:1234';
} else if (provider === 'openai' && !baseURL) {
baseURL = 'https://api.openai.com';
}
console.log(`⚪ Base URL: ${baseURL}`);
const model = defaultModel || (await chooseModel({ baseURL, provider }));
console.log(`⚪ Model: ${model}`);
const frames = defaultFrames || 3;
console.log(`⚪ Frames: ${frames}`);
const _case = defaultCase || 'kebabCase';
console.log(`⚪ Case: ${_case}`);
const chars = defaultChars || 20;
console.log(`⚪ Chars: ${chars}`);
const language = defaultLanguage || 'English';
console.log(`⚪ Language: ${language}`);
const includeSubdirectories =
defaultIncludeSubdirectories === 'true' || false;
console.log(`⚪ Include subdirectories: ${includeSubdirectories}`);
const customPrompt = defaultCustomPrompt || null;
if (customPrompt) {
console.log(`⚪ Custom Prompt: ${customPrompt}`);
}
const concurrency = defaultConcurrency || 10;
console.log(`⚪ Concurrency: ${concurrency}`);
console.log('--------------------------------------------------');
const stats = await fs.stat(inputPath);
const options = {
model,
_case,
chars,
frames,
apiKey,
baseURL,
language,
provider,
inputPath,
concurrency,
includeSubdirectories,
customPrompt,
};
if (stats.isDirectory()) {
await processDirectory({ options, inputPath });
} else if (stats.isFile()) {
await processFile({ ...options, filePath: inputPath });
}
} catch (err) {
console.log(err.message);
}
};