UNPKG

@devilsdev/rag-pipeline-utils

Version:

A modular toolkit for building RAG (Retrieval-Augmented Generation) pipelines in Node.js

63 lines (52 loc) 2.07 kB
/** * Version: 1.1.0 * Description: Final CLI entrypoint with dynamic plugin loading and full config validation * Author: Ali Kahwaji */ import { resolve } from 'path'; import { fileURLToPath } from 'url'; import { loadRagConfig } from '../src/config/load-config.js'; import { loadPluginsFromJson } from '../src/config/load-plugin-config.js'; import registry from '../src/core/plugin-registry.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = resolve(__filename, '..'); const CONFIG_PATH = resolve('.ragrc.json'); const args = process.argv.slice(2); const command = args[0]; async function runCLI() { try { const config = loadRagConfig(CONFIG_PATH); await loadPluginsFromJson(CONFIG_PATH); switch (command) { case 'ingest': { const input = args[1]; const loader = registry.get('loader', Object.keys(config.loader)[0]); const embedder = registry.get('embedder', Object.keys(config.embedder)[0]); const retriever = registry.get('retriever', Object.keys(config.retriever)[0]); const docs = await loader.load(input); const vectors = await embedder.embed(docs); await retriever.store(vectors, config.namespace); console.log('Ingestion complete'); break; } case 'query': { const question = args.slice(1).join(' '); const embedder = registry.get('embedder', Object.keys(config.embedder)[0]); const retriever = registry.get('retriever', Object.keys(config.retriever)[0]); const llm = registry.get('llm', Object.keys(config.llm)[0]); const queryVec = await embedder.embedQuery(question); const docs = await retriever.search(queryVec, config.namespace); const answer = await llm.ask(question, docs); console.log('Answer:', answer); break; } default: console.error('Unknown command:', command); process.exit(1); } } catch (err) { console.error('Error during execution:', err.message); process.exit(1); } } await runCLI();