30828a5534b20b24b0e2caefeb0e2e664c55484b
The chatbot already had an agentic tool loop (get_server_stats, get_top_channels, get_recent_activity, get_top_flagged), but processMessage still baked a serverInsights snapshot into the system prompt and told the model to "answer from that data". That defeats the tools: the model answered from a stale snapshot instead of living numbers, and the guild/channel scope the frontend sends was never forwarded to the tools. Changes (services/backend/src/modules/chatbot): - Remove getServerInsights() + ServerInsights (dead after this change). - buildSystemPrompt(): drop the hardcoded stats block; instruct the model it has NO memorized server numbers and MUST call a tool for any server-data question, answering only from tool results. - processMessage(): stop fetching insights; pass the request guildId/channelId scope through to callLLM. - callLLM(): accept scope; auto-fill empty guildId/channelId on tool calls from the request scope so the model never has to guess IDs and tools always query the right server. Behavior: answers now come from live DB data via tools, scoped to the server the user is chatting in. tsc + biome + 36 backend tests green. Co-Authored-By: Claude Opus 5 (Nous Research)
Description
Bete Discord moderation watcher
27 MiB
Languages
TypeScript
96.8%
Nix
1%
Shell
0.9%
CSS
0.5%
PLpgSQL
0.5%
Other
0.3%