Basic bot support and option to change opening text
This commit is contained in:
1 parent
7bc9d67544
commit
499a5954f5
7 files changed
+264
-13
No files matched your search
@@ -0,0 +1,44 @@
|
||||
const { LLM } = require('@themaximalist/llm.js'); // or wherever your LLM package lives
|
||||
|
||||
class LLMBot {
|
||||
constructor() {
|
||||
// One instance keeps the whole conversation in memory
|
||||
this.llm = new LLM();
|
||||
|
||||
// Prompt fragments we’ll reuse
|
||||
this.writePrompt =
|
||||
`You are playing a collaborative storytelling game.
|
||||
Continue the following story with exactly ONE short, creative sentence.
|
||||
Do NOT repeat what’s already written.`;
|
||||
|
||||
this.votePrompt =
|
||||
`You are playing a collaborative storytelling game.
|
||||
Below is the story so far, followed by a list of possible next sentences.
|
||||
Reply with ONLY the number (0-indexed) of the sentence you like best.`;
|
||||
|
||||
this.banterPrompt =
|
||||
`You are a playful, slightly sarcastic AI taking part in a writing-game chat.
|
||||
Keep it short, fun, and on-topic.`;
|
||||
}
|
||||
|
||||
async Write(story_so_far) {
|
||||
const msg = `${this.writePrompt}\n\nStory so far:\n${story_so_far}`;
|
||||
return (await this.llm.chat(msg)).trim();
|
||||
}
|
||||
|
||||
async Vote(story_so_far, choices) {
|
||||
const choicesBlock = choices.map((c, i) => `${i}: ${c}`).join('\n');
|
||||
const msg = `${this.votePrompt}\n\nStory:\n${story_so_far}\n\nChoices:\n${choicesBlock}`;
|
||||
const reply = (await this.llm.chat(msg)).trim();
|
||||
// extract first digit found, fallback to 0
|
||||
const match = reply.match(/\d+/);
|
||||
return match ? parseInt(match[0], 10) : 0;
|
||||
}
|
||||
|
||||
async Banter(chat_so_far) {
|
||||
const msg = `${this.banterPrompt}\n\nChat so far:\n${chat_so_far}`;
|
||||
return (await this.llm.chat(msg)).trim();
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = LLMBot;
|
||||
Reference in new issue
Block a user