diff --git a/services/discord-gateway/src/modules/ai-moderation/aiAnalyzer.ts b/services/discord-gateway/src/modules/ai-moderation/aiAnalyzer.ts index 75b69cc..4192ede 100644 --- a/services/discord-gateway/src/modules/ai-moderation/aiAnalyzer.ts +++ b/services/discord-gateway/src/modules/ai-moderation/aiAnalyzer.ts @@ -27,7 +27,10 @@ import type { ModerationBroadcaster, } from "../message-capture/types.js"; import { attemptAutoDeleteFlaggedMessage } from "./autoDeleteManager.js"; -import { buildConversationContext, estimateTokens } from "./conversationContext.js"; +import { + buildConversationContext, + estimateTokens, +} from "./conversationContext.js"; import { runModerationAnalysis } from "./llmModerationClient.js"; import { logModerationError } from "./responseLogger.js"; @@ -449,7 +452,7 @@ async function processIndividualFallback( // Reset individual CB on success. individualConsecutiveErrors = 0; - logger.info( + logger.debug( { messageId, status: analysisResult.results[0]?.status }, "Individual fallback analysis complete", ); @@ -584,7 +587,7 @@ function enqueueIndividualFallbacks(messages: MessageRecord[]): void { .slice(0, availableSlots); if (newMessages.length === 0) return; - logger.info( + logger.debug( { count: newMessages.length, messageIds: newMessages.map((m) => m.id), @@ -878,7 +881,7 @@ export async function queueMessageAnalysis(messageId: string): Promise { if (updated) { broadcastAnalysisCompleted(updated); } - logger.info( + logger.debug( { messageId }, "Skipped AI analysis for age-restricted message", ); diff --git a/services/discord-gateway/src/modules/ai-moderation/autoDeleteManager.ts b/services/discord-gateway/src/modules/ai-moderation/autoDeleteManager.ts index da23443..e8bc54b 100644 --- a/services/discord-gateway/src/modules/ai-moderation/autoDeleteManager.ts +++ b/services/discord-gateway/src/modules/ai-moderation/autoDeleteManager.ts @@ -51,7 +51,7 @@ function isAutoDeleteEligible(message: MessageRecord): boolean { const confidence = message.ai_confidence ?? message.ai_moderation_score ?? 0; if (confidence < config.AUTO_DELETE_MIN_CONFIDENCE) { - logger.info( + logger.debug( { messageId: message.id, confidence, @@ -68,7 +68,7 @@ function isAutoDeleteEligible(message: MessageRecord): boolean { .map((s) => s.trim()) .filter(Boolean); if (allowedSeverities.length > 0 && !allowedSeverities.includes(severity)) { - logger.info( + logger.debug( { messageId: message.id, severity, allowed: allowedSeverities }, "Auto-delete skipped: severity not in allowed list", ); @@ -77,7 +77,7 @@ function isAutoDeleteEligible(message: MessageRecord): boolean { const recommendedAction = deriveRecommendedAction(message); if (recommendedAction !== "delete" && recommendedAction !== "escalate") { - logger.info( + logger.debug( { messageId: message.id, recommendedAction }, "Auto-delete skipped: recommended action is not delete/escalate", ); @@ -95,7 +95,7 @@ function isAutoDeleteEligible(message: MessageRecord): boolean { allowedCategories.includes(cat), ); if (!hasAllowedCategory) { - logger.info( + logger.debug( { messageId: message.id, categories: messageCategories, @@ -113,7 +113,7 @@ function isAutoDeleteEligible(message: MessageRecord): boolean { if (excludedChannels.length > 0) { const channelId = message.thread_id ?? message.channel_id; if (excludedChannels.includes(channelId)) { - logger.info( + logger.debug( { messageId: message.id, channelId }, "Auto-delete skipped: channel excluded", ); @@ -123,7 +123,7 @@ function isAutoDeleteEligible(message: MessageRecord): boolean { const excludedUsers = parseStringList(config.AUTO_DELETE_EXCLUDED_USER_IDS); if (excludedUsers.length > 0 && excludedUsers.includes(message.user_id)) { - logger.info( + logger.debug( { messageId: message.id, userId: message.user_id }, "Auto-delete skipped: user excluded", ); @@ -221,6 +221,10 @@ export async function attemptAutoDeleteFlaggedMessage( } if (message.ai_status !== "flagged" && message.ai_status !== "warn") { + logger.debug( + { messageId: message.id, status: message.ai_status }, + "Auto-delete skipped: message not flagged or warned", + ); const result = { deleted: false, skipped: true, @@ -231,6 +235,10 @@ export async function attemptAutoDeleteFlaggedMessage( } if (!isAutoDeleteEligible(message)) { + logger.debug( + { messageId: message.id }, + "Auto-delete skipped: not eligible (confidence/severity/action/category filter)", + ); const result = { deleted: false, skipped: true, diff --git a/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts b/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts index a52bbd0..2e60843 100644 --- a/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts +++ b/services/discord-gateway/src/modules/ai-moderation/llmModerationClient.ts @@ -987,7 +987,7 @@ async function runTextOnlyBatch( } if (groupMapping.size > 0) { - log.info( + log.debug( { originalCount: targets.length, deduplicatedCount: deduplicatedTargets.length, @@ -1004,7 +1004,7 @@ async function runTextOnlyBatch( } if (subBatches.length > 1) { - log.info( + log.debug( { totalTargets: targets.length, subBatchCount: subBatches.length, @@ -1111,7 +1111,7 @@ async function runTextOnlyBatch( ); } - log.info( + log.debug( { targetCount: targets.length, resultCount: allResults.length, @@ -1615,7 +1615,7 @@ export async function runModerationAnalysis( } } - log.info( + log.debug( { total: targets.length, textOnly: textOnlyTargets.length, @@ -1647,7 +1647,7 @@ export async function runModerationAnalysis( textBatchResult.raw ?? (mediaResults.length > 0 ? mediaResults[0].raw : null); - log.info( + log.debug( { targetCount: targets.length, resultCount: allResults.length,