22 lines
1.2 KiB
JavaScript
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 };
|