@sconedev/ai_toolkit
Version:
Simplify AI integration in web apps with local and offline model support
184 lines (164 loc) • 6.73 kB
JavaScript
const inquirer = require('inquirer');
const { execSync } = require('child_process');
const fs = require('fs');
const path = require('path');
// Detect package manager
const useYarn = fs.existsSync(path.join(process.cwd(), 'yarn.lock'));
const packageManager = useYarn ? 'yarn' : 'npm';
// Feature dependencies
const featureDependencies = {
'PDF Processing': {
dependencies: ['pdf-parse@1.1.1'],
peerDependencies: ['pdfjs-dist'],
nodeOnly: false,
info: 'Allows summarizing PDF documents using AI'
},
'Image Generation': {
dependencies: [],
peerDependencies: [],
nodeOnly: false,
info: 'Generate images using AI (requires OpenAI API access)'
},
'Chat/Text Generation': {
dependencies: [],
peerDependencies: [],
nodeOnly: false,
info: 'Generate text responses and have conversations with AI'
}
};
async function main() {
console.log('\n🤖 Welcome to AI Toolkit Setup! 🤖\n');
console.log('This script will help you install the dependencies you need based on which features you want to use.\n');
const { features } = await inquirer.prompt([
{
type: 'checkbox',
name: 'features',
message: 'Select the features you want to use:',
choices: Object.keys(featureDependencies).map(feature => ({
name: `${feature} - ${featureDependencies[feature].info}`,
value: feature,
checked: feature === 'Chat/Text Generation' // Default checked
}))
}
]);
if (features.length === 0) {
console.log('\n⚠️ No features selected. Setup cancelled.\n');
return;
}
console.log('\n📦 Installing required dependencies...\n');
// Collect all dependencies to install
const dependencies = [];
const peerDependencies = [];
features.forEach(feature => {
dependencies.push(...featureDependencies[feature].dependencies);
peerDependencies.push(...featureDependencies[feature].peerDependencies);
});
// Install dependencies
if (dependencies.length > 0) {
try {
console.log(`Installing dependencies: ${dependencies.join(', ')}`);
execSync(`${packageManager} ${useYarn ? 'add' : 'install'} ${dependencies.join(' ')}`, {
stdio: 'inherit'
});
} catch (error) {
console.error('Failed to install dependencies:', error.message);
}
}
// Suggest peer dependencies
if (peerDependencies.length > 0) {
console.log('\n⚠️ The following peer dependencies are recommended for your selected features:');
console.log(` ${peerDependencies.join('\n ')}`);
const { installPeers } = await inquirer.prompt([
{
type: 'confirm',
name: 'installPeers',
message: 'Would you like to install these peer dependencies?',
default: true
}
]);
if (installPeers) {
try {
execSync(`${packageManager} ${useYarn ? 'add' : 'install'} ${peerDependencies.join(' ')}`, {
stdio: 'inherit'
});
} catch (error) {
console.error('Failed to install peer dependencies:', error.message);
}
}
}
// Show usage information based on selected features
console.log('\n✅ Setup complete! Here\'s how to use your selected features:\n');
if (features.includes('Chat/Text Generation')) {
console.log('🗣️ Chat/Text Generation:');
console.log('```javascript');
console.log("import { aiToolkit } from '@sconedev/ai_toolkit';");
console.log("");
console.log("// Configure the toolkit with your API key");
console.log("aiToolkit.configure({");
console.log(" provider: 'openai', // or 'mistral', 'gemini', 'huggingface'");
console.log(" apiKey: 'your-api-key',");
console.log(" model: 'gpt-3.5-turbo' // Choose the model you want to use");
console.log("});");
console.log("");
console.log("// Use the chat function");
console.log("const response = await aiToolkit.chat([");
console.log(" { role: 'system', content: 'You are a helpful assistant.' },");
console.log(" { role: 'user', content: 'Hello, how are you?' }");
console.log("]);");
console.log("```\n");
}
if (features.includes('PDF Processing')) {
console.log('📄 PDF Processing:');
console.log('```javascript');
console.log("// Browser environment");
console.log("import { aiToolkit } from '@sconedev/ai_toolkit';");
console.log("import * as pdfjs from 'pdfjs-dist';");
console.log("");
console.log("// Set up PDF.js worker");
console.log("pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.min.js`;");
console.log("");
console.log("// Configure the toolkit");
console.log("aiToolkit.configure({ /* your config */ });");
console.log("");
console.log("// Process a PDF file (e.g., from a file input)");
console.log("const file = event.target.files[0];");
console.log("const summary = await aiToolkit.summarizePDFBrowser(file, pdfjs, {");
console.log(" additionalInstructions: 'Focus on key points'");
console.log("});");
console.log("```\n");
console.log("// Node.js environment");
console.log("```javascript");
console.log("const { aiToolkit } = require('@sconedev/ai_toolkit');");
console.log("");
console.log("// Configure the toolkit");
console.log("aiToolkit.configure({ /* your config */ });");
console.log("");
console.log("// Process a PDF file");
console.log("const pdfPath = 'path/to/document.pdf';");
console.log("const summary = await aiToolkit.summarizePDF(pdfPath);");
console.log("```\n");
}
if (features.includes('Image Generation')) {
console.log('🖼️ Image Generation:');
console.log('```javascript');
console.log("import { aiToolkit } from '@sconedev/ai_toolkit';");
console.log("");
console.log("// Configure the toolkit (with a provider that supports images)");
console.log("aiToolkit.configure({");
console.log(" provider: 'openai',");
console.log(" apiKey: 'your-api-key'");
console.log("});");
console.log("");
console.log("// Generate an image");
console.log("const imageUrl = await aiToolkit.generateImage(");
console.log(" 'A serene landscape with mountains and a lake at sunset'");
console.log(");");
console.log("```\n");
}
console.log('Thank you for using AI Toolkit! If you have any questions, please check our documentation.');
}
main().catch(error => {
console.error('Setup failed:', error);
process.exit(1);
});