UNPKG

ragvault

Version:

Securely manage and query your private data using a local vector database. Your private RAG.

87 lines (86 loc) 3.89 kB
import inquirer from "inquirer"; import { getCollection } from "../../utils/chroma-client.js"; import { nanoid } from "nanoid"; import { createSpinner } from "nanospinner"; import pdfToText from "pdf-to-text"; import fs from "fs/promises"; import { promptAuthenticatedUser } from "../../inquirer-commands/ask-authenticated.js"; import { handleAuthenticatedAction } from "../ask-authenticated-action.js"; import inquirerFileTreeSelection from "inquirer-file-tree-selection-prompt"; export const LocalBrainActions = async (action, username, users, session) => { switch (action) { case "Add Data using Terminal": try { const { data } = await inquirer.prompt([ { type: "input", name: "data", message: "What data would you like to store?", }, ]); const collection = await getCollection(username + "-ragvault"); const spinner = createSpinner("Adding Data...").start(); await collection.add({ documents: [data], ids: [nanoid()], }); spinner.success({ text: "\nData added to local brain\n" }); const newActionSucess = await promptAuthenticatedUser(username); await handleAuthenticatedAction(newActionSucess, username, session, users); break; } catch (error) { console.error("Error adding data:", error); break; } case "Add Data using PDF/DOCX": inquirer.registerPrompt("file-tree-selection", inquirerFileTreeSelection); const { filePath } = await inquirer.prompt([ { type: "file-tree-selection", name: "filePath", message: "Please select a PDF, TXT or MD file:", }, ]); const trimmedFilePath = filePath.trim(); const fileExtension = trimmedFilePath.split(".").pop()?.toLowerCase(); try { let extractedText = ""; if (fileExtension === "pdf") { extractedText = await new Promise((resolve, reject) => { pdfToText(trimmedFilePath, (err, data) => { if (err) { return reject(err); } resolve(data); }); }); } else if (fileExtension === "txt" || fileExtension === "md") { extractedText = await fs.readFile(trimmedFilePath, "utf-8"); } else { console.log("Unsupported file type. Please provide a .pdf, .txt or .md file."); return; } const collection = await getCollection(username + "-ragvault"); const spinner = createSpinner("Adding Data...").start(); await collection.add({ documents: [extractedText], ids: [nanoid()], }); spinner.success({ text: "\nData added to local brain\n" }); const newActionSucess = await promptAuthenticatedUser(username); await handleAuthenticatedAction(newActionSucess, username, session, users); break; } catch (error) { console.error("Error reading the file:", error); return; } case "Back": const newActionBack = await promptAuthenticatedUser(username); await handleAuthenticatedAction(newActionBack, username, session, users); break; } };