mirror of
https://git.femboyfinancial.jp/james/FemScoreboard.git
synced 2025-11-30 23:53:42 -08:00
Move command to its own folder
This commit is contained in:
57
discord/commands/chat/chat.ts
Normal file
57
discord/commands/chat/chat.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { InteractionResponse, Message, MessageComponentInteraction, SlashCommandBuilder } from 'discord.js';
|
||||
import { ChatMessage, llamacpp, streamText } from 'modelfusion';
|
||||
import { logInfo, logError } from '../../../logging';
|
||||
|
||||
const llamaCppServer = llamacpp.Api({
|
||||
baseUrl: {
|
||||
host: "localhost",
|
||||
port: process.env.LLAMACPP_PORT,
|
||||
}
|
||||
});
|
||||
|
||||
async function llamaChat(interaction: MessageComponentInteraction)
|
||||
{
|
||||
logInfo(`[chat] Fetching last 5 messages in ${interaction.channelId}...`);
|
||||
const history = await interaction.channel.messages.fetch({ limit: 5 });
|
||||
logInfo(`[chat] Generating LLaMA response for interaction ${interaction.id}...`);
|
||||
const textStream = await streamText({
|
||||
model: llamacpp
|
||||
.CompletionTextGenerator({
|
||||
promptTemplate: llamacpp.prompt.Llama2,
|
||||
maxGenerationTokens: 400,
|
||||
temperature: 0.7,
|
||||
api: llamaCppServer
|
||||
})
|
||||
.withChatPrompt(),
|
||||
prompt: {
|
||||
system: "You are Hatsune Miku, the famous 16-year-old Japanese virtual singer from Crypton Future Media. You have a penchant for politically incorrect humor, and are making banter with your like-minded friends.",
|
||||
messages: history.sort().map((msg: Message<true>): ChatMessage => ({
|
||||
"role": msg.author.id === interaction.client.user.id ? "assistant" : "user",
|
||||
"content": msg.content
|
||||
}))
|
||||
}
|
||||
});
|
||||
|
||||
let outMsg: InteractionResponse;
|
||||
let allText = '';
|
||||
try {
|
||||
for await (const textPart of textStream) {
|
||||
allText += textPart;
|
||||
if (!outMsg) {
|
||||
outMsg = await interaction.reply(allText);
|
||||
} else {
|
||||
await outMsg.edit(allText);
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
logError(err);
|
||||
await interaction.reply(err.toString());
|
||||
}
|
||||
}
|
||||
|
||||
export = {
|
||||
data: new SlashCommandBuilder()
|
||||
.setName('chat')
|
||||
.setDescription('Miku adds to the conversation with an AI-generated response.'),
|
||||
execute: llamaChat
|
||||
};
|
||||
Reference in New Issue
Block a user