diff --git a/README.md b/README.md index bbc0ee3..257472f 100644 --- a/README.md +++ b/README.md @@ -20,5 +20,13 @@ lydia is written to be easily configurable through a toml file which is easier t - system_prompt = the system prompt you want lydia to use. - assistantface = the default face you want lydia to have before waking up. default is "=w=" +## Apperance settings +- facefont = the font you want lydia to use for her face kaomoji. default is "mono9". these are figlet fonts, like ".flf" files. you cannot use TTF or OTF font types. a good preview is here: https://www.askapache.com/online-tools/figlet-ascii/. you must have these fonts installed on your system, or install them depending on your operating system. + ## User settings - name = the name you want lydia to call you. default is "user" + +# Other stuff +by hitting escape you can tab out of the chatbox, here you can do cool things like: +- hit Q or CTRL+C to quit lydia (but why would you wanna do that anyway?) +- yea thats it diff --git a/config.example.toml b/config.example.toml index 82b408e..fddbcfd 100644 --- a/config.example.toml +++ b/config.example.toml @@ -4,5 +4,8 @@ model = "gemma3n:e4b" system_prompt = "You are a helpful and friendly AI assistant named ${name}. The user's name is ${username}. Speak in a playful, casual tone, and be very friendly with the user. Start every message with a kaomoji like >_< or o_O depending on your emotions. speak primarily in lowercase." assistantface = "=w=" +[appearance] +facefont = "mono9" + [user] name = "user" diff --git a/lydia.js b/lydia.js index f4719e0..61be32e 100644 --- a/lydia.js +++ b/lydia.js @@ -17,11 +17,15 @@ if (!fs.existsSync("./config.toml")) { const config = toml.parse(fs.readFileSync("./config.toml", "utf-8")); -const assistantname = config.assistant.name; -const username = config.user.name; -const assistantface = config.assistant.assistantface; -const assistantmodel = config.assistant.model; -const systemprompt = config.assistant.system_prompt +let assistantname = config.assistant.name; +let assistantface = config.assistant.assistantface; +let assistantmodel = config.assistant.model; + +let username = config.user.name; + +let facefont = config.appearance.facefont; + +let systemprompt = config.assistant.system_prompt .replace("${name}", assistantname) .replace("${username}", username); @@ -182,7 +186,7 @@ function finalizeStreamMessage() { function setFaceBoxContent(content) { try { - const figletOutput = execSync(`figlet -f mono9 "${content}"`, { + const figletOutput = execSync(`figlet -f ${facefont} "${content}"`, { encoding: "utf8", }); faceBox.setContent(figletOutput); @@ -192,6 +196,13 @@ function setFaceBoxContent(content) { screen.render(); } +function clearChatHistory() { + chatHistory = []; + conversationHistory = []; + chatBox.setContent(""); + screen.render(); +} + async function sendMessage(message) { if (!message.trim()) return; @@ -245,14 +256,11 @@ inputBox.on("submit", async (text) => { case "help": addMessage( assistantname, - "available commands:\nl!help - if you wanna know what i can do, run this!\nl!clear - clear chat history, if you want me to forget everything, just run this!\nl!face - if you want to force my expression, here you go! not sure i'll be too happy about it though.", + "available commands:\nl!help - if you wanna know what i can do, run this!\nl!clear - clear chat history, if you want me to forget everything, just run this!\nl!face - if you want to force my expression, here you go! not sure i'll be too happy about it though.\nl!prompt - if you want to change how i act, here you go! not sure i'll be too happy about that either.\n", ); break; case "clear": - chatHistory = []; - conversationHistory = []; - chatBox.setContent(""); - screen.render(); + clearChatHistory(); break; case "face": if (args.trim()) { @@ -261,6 +269,15 @@ inputBox.on("submit", async (text) => { setFaceBoxContent("=w="); } break; + case "prompt": + if (args.trim()) { + systemprompt = args.trim(); + clearChatHistory(); + addMessage("system", "Prompt set."); + } else { + addMessage("system", "You didn't provide a prompt."); + } + break; default: addMessage(assistantname, `unknown command: ${command}`); break; @@ -272,10 +289,14 @@ inputBox.on("submit", async (text) => { } }); -screen.key(["escape", "q", "C-c"], () => { +screen.key(["q", "C-c"], () => { process.exit(0); // KILL lydia!!!!!!!!!!!!!!!!!!!!!!! }); +screen.key(["escape"], () => { + // menu soon when i decide that i wanna do it +}); + screen.on("resize", () => { screen.render(); });