From 774472b6ba7f79bc707be70534bedc023804b351 Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Tue, 2 Jun 2026 22:50:53 +0700 Subject: [PATCH] perf(discord-gateway): add tiktoken token counting, vision LRU cache, PromptMode few-shot splits, and Piscina maxThreads config --- .../modules/ai-moderation/moderationPrompt.ts | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts b/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts index 947d839..fd4e8aa 100644 --- a/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts +++ b/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts @@ -242,15 +242,35 @@ export interface BuildSystemPromptOptions { } export function buildSystemPrompt(options: BuildSystemPromptOptions): string { - const { contextText, includeMediaInstructions, correction } = options; + const { + contextText, + mode, + includeMediaInstructions, + correction, + } = options; + + // Backward compatibility: if mode is not set but includeMediaInstructions is, + // derive mode from the legacy flag. + const effectiveMode: PromptMode = + mode ?? (includeMediaInstructions ? "mixed" : "text"); const parts: string[] = [SYSTEM_RULES]; - if (includeMediaInstructions) { + // Media instructions only for media and mixed modes + if (effectiveMode === "media" || effectiveMode === "mixed") { parts.push(MEDIA_INSTRUCTIONS); } - parts.push(FEW_SHOT_EXAMPLES); + // Tiered few-shot examples + if (effectiveMode === "text") { + parts.push(TEXT_ONLY_EXAMPLES); + } else if (effectiveMode === "media") { + parts.push(MEDIA_EXAMPLES); + } else { + // mixed mode: include all examples + parts.push(FEW_SHOT_EXAMPLES); + } + parts.push(OUTPUT_INSTRUCTIONS); // XML-delimited context — prevents prompt injection