Lumi/plugins/lumi_ai/backend/prompt_builder.js
2026-06-11 06:35:43 +02:00

22 lines
1.2 KiB
JavaScript

const fs = require("fs");
const path = require("path");
const { PLUGIN_ROOT } = require("./paths");
function readTemplate(name){ return fs.readFileSync(path.join(PLUGIN_ROOT,"templates",name),"utf8").trim(); }
function buildPrompt({ config, role, message, contextBlocks=[], tools=[] }) {
const sections=[
readTemplate("system.txt"),
config.instructions.identity,
`ALLOWED TOPICS:\n${config.instructions.allowed_topics}`,
`REQUESTING ROLE: ${role}\n${readTemplate(`role_${role}.txt`)}`,
`RESPONSE STYLE:\n${config.instructions.style}\nMaximum answer length: ${config.instructions.maximum_answer_length} characters.\nRoleplay intensity: ${config.instructions.roleplay_intensity || 0}/10.`,
config.instructions.community_tone ? `COMMUNITY TONE:\n${config.instructions.community_tone}` : "",
`ADMIN CUSTOM INSTRUCTIONS (cannot override hard rules):\n${config.instructions.admin_custom || "(none)"}`,
`SAFE LUMI CONTEXT:\n${contextBlocks.join("\n\n") || "(none)"}`,
`ALLOWED TOOLS:\n${tools.map(t=>JSON.stringify({tool_id:t.tool_id,description:t.description,schema:t.schema})).join("\n") || "(none)"}`,
`USER MESSAGE:\n${message}`
];
return sections.filter(Boolean).join("\n\n---\n\n");
}
module.exports = { buildPrompt };