Project Files
promptPreprocessor.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.promptPreprocessor = promptPreprocessor;
const config_1 = require("./config");
const embedder_1 = require("./embedder");
const vectorStore_1 = require("./vectorStore");
const path_1 = require("path");
async function promptPreprocessor(ctl, userMessage) {
const history = await ctl.pullHistory();
if (history.length !== 0)
return userMessage;
const cfg = ctl.getPluginConfig(config_1.pluginConfigSchematics);
if (!cfg.get("autoInject"))
return userMessage;
const query = userMessage.getText().trim();
if (!query)
return userMessage;
try {
const dp = cfg.get("dataPath").trim() || (0, path_1.join)(process.env.HOME ?? "~", "rag-data");
const embId = cfg.get("embeddingModelIdentifier").trim();
const topK = cfg.get("topK");
const embed = await (0, embedder_1.getEmbedFn)(ctl.client, embId);
const [queryVec] = await embed([query]);
const idx = (0, vectorStore_1.getIndex)(dp, "default");
const results = await (0, vectorStore_1.queryChunks)(idx, queryVec, topK);
if (results.length === 0)
return userMessage;
const contextBlock = results
.map((r, i) => `[${i + 1}] (${r.metadata.fileName})\n${r.metadata.text}`)
.join("\n\n---\n\n");
const injection = `[Retrieved context from your document index:\n\n${contextBlock}\n]`;
return `${injection}\n\n${query}`;
}
catch {
// No embedding model loaded or index empty — pass through silently
return userMessage;
}
}