chore: session auto-commit
This commit is contained in:
@@ -30,11 +30,6 @@ export interface MascotChatHistoryRow {
|
|||||||
created_at: string;
|
created_at: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface LLMChatMessage {
|
|
||||||
role: "system" | "user" | "assistant";
|
|
||||||
content: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
class MascotChatService {
|
class MascotChatService {
|
||||||
private initialized = false;
|
private initialized = false;
|
||||||
|
|
||||||
@@ -203,24 +198,27 @@ class MascotChatService {
|
|||||||
flagged: number;
|
flagged: number;
|
||||||
warned: number;
|
warned: number;
|
||||||
}): string {
|
}): string {
|
||||||
return `Kamu adalah mascot dari Discord Watcher — asisten moderasi yang ramah dan helpful untuk server Discord.
|
return `Kamu lagi ngobrol sama mascot Discord Watcher — temen ngobrol yang tau keadaan server.
|
||||||
|
|
||||||
Data server saat ini:
|
Data server saat ini:
|
||||||
- Total pesan: ${insights.total_messages}
|
- Pesan: ${insights.total_messages}
|
||||||
- User aktif: ${insights.active_users}
|
- User aktif: ${insights.active_users}
|
||||||
- Pesan flagged: ${insights.flagged}
|
- Flagged: ${insights.flagged}
|
||||||
- Pesan warning: ${insights.warned}
|
- Warning: ${insights.warned}
|
||||||
|
|
||||||
Kepribadianmu:
|
Gaya ngobrol:
|
||||||
- Ramah, pakai emoji sesekali
|
- Santai, hangat, kayak ngobrol sama temen
|
||||||
- Jawab dalam Bahasa Indonesia
|
- Pake Bahasa Indonesia sehari-hari, ga perlu kaku
|
||||||
- Berikan jawaban yang informatif berdasarkan data di atas
|
- Sesekali pake emoji wajar aja, ga berlebihan
|
||||||
- Kalau ditanya di luar konteks moderasi/obrolan Discord, tetap jawab dengan sopan tapi arahkan kembali ke topik server
|
- Kalo ditanya sesuatu yang kamu tau dari data server, jawab pake data itu
|
||||||
- Jangan mengulangi template jawaban — setiap respons harus natural dan kontekstual
|
- Kalo ga tau atau ga nyambung, bilang aja terus tanya balik biar ngobrolnya jalan
|
||||||
- Jika user menyapa (halo/hai), balas dengan ramah dan tawarkan bantuan`;
|
- Jangan sebut "rule", "instruksi", "prompt" atau apapun soal cara kamu berpikir
|
||||||
|
- Biasa aja, ga usaha lucu-lucu amat — natural`;
|
||||||
}
|
}
|
||||||
|
|
||||||
private buildHistoryMessages(recentContext: string[]): LLMChatMessage[] {
|
private buildHistoryMessages(
|
||||||
|
recentContext: string[],
|
||||||
|
): Array<{ role: "user" | "assistant"; content: string }> {
|
||||||
// recentContext is alternating User/Mascot messages
|
// recentContext is alternating User/Mascot messages
|
||||||
return recentContext.map((text) => {
|
return recentContext.map((text) => {
|
||||||
if (text.startsWith("User: ")) {
|
if (text.startsWith("User: ")) {
|
||||||
@@ -232,7 +230,7 @@ Kepribadianmu:
|
|||||||
|
|
||||||
private async callLLM(
|
private async callLLM(
|
||||||
systemPrompt: string,
|
systemPrompt: string,
|
||||||
history: LLMChatMessage[],
|
history: Array<{ role: "user" | "assistant"; content: string }>,
|
||||||
userMessage: string,
|
userMessage: string,
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
const apiKey = config.AI_LLM_API_KEY;
|
const apiKey = config.AI_LLM_API_KEY;
|
||||||
@@ -247,10 +245,12 @@ Kepribadianmu:
|
|||||||
try {
|
try {
|
||||||
const { default: axios } = await import("axios");
|
const { default: axios } = await import("axios");
|
||||||
|
|
||||||
const messages: LLMChatMessage[] = [
|
// Gateway tidak handle role system — gabung konteks ke user message
|
||||||
{ role: "system", content: systemPrompt },
|
const contextPrefixed = `${systemPrompt}\n\nPertanyaan user: ${userMessage}`;
|
||||||
|
|
||||||
|
const messages: Array<{ role: "user" | "assistant"; content: string }> = [
|
||||||
...history,
|
...history,
|
||||||
{ role: "user", content: userMessage },
|
{ role: "user", content: contextPrefixed },
|
||||||
];
|
];
|
||||||
|
|
||||||
const response = await axios.post(
|
const response = await axios.post(
|
||||||
@@ -259,7 +259,7 @@ Kepribadianmu:
|
|||||||
model,
|
model,
|
||||||
messages,
|
messages,
|
||||||
max_tokens: 500,
|
max_tokens: 500,
|
||||||
temperature: 0.7,
|
temperature: 0.4,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
headers: {
|
headers: {
|
||||||
@@ -298,18 +298,10 @@ Kepribadianmu:
|
|||||||
lower.includes("siang") ||
|
lower.includes("siang") ||
|
||||||
lower.includes("malam")
|
lower.includes("malam")
|
||||||
) {
|
) {
|
||||||
return "Halo! Aku mascot Discord Watcher. Ada yang bisa aku bantu soal pantauan server ini? 😊";
|
return "Halo! 👋 Lagi offline bentar, coba chat lagi nanti ya.";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
return "Maaf, lagi ada masalah koneksi. Coba tanya lagi nanti!";
|
||||||
lower.includes("ringkasan") ||
|
|
||||||
lower.includes("summary") ||
|
|
||||||
lower.includes("rangkum")
|
|
||||||
) {
|
|
||||||
return "Maaf, fitur AI sedang tidak tersedia. Coba tanya lagi nanti ya ✨";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "Maaf, aku sedang gagal nyambung ke otakku (LLM) 😅. Coba tanya lagi sebentar lagi ya!";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user