https://gitlab.synchro.net/main/sbbs/-/commit/b7a8fe42899f20e6089c104e
Modified Files:
exec/chat_llm.js chat_llm_irc.js
Log Message:
chat_llm: IRC bot acknowledges brief replies to its own lines
When a user makes a clear, brief, *unaddressed* reply to the bot's OWN
last line, the bot now reacts once with a short in-character line (bare,
no nick prefix). Three cases:
- closer -- a social acknowledgement ("ah ok", "thanks", "makes sense")
- correction-- pushback ("no, that's wrong") -> a gracious concession that
never re-asserts or argues
- answer -- the bot's last line was a question and the user answered it
-> a brief reaction that doesn't ask a new question or start
a new topic (so it acknowledges without restarting the volley)
Deterministic gate (chat_llm_irc.js handle_privmsg): the bot's prior line
must be substantive (a reply/intervention, never another ack) + recent + directed at this speaker with nobody in between, the speaker not muted, a per-channel cooldown elapsed, and the text matches a closer/correction
shape (ack_kind) -- or, for 'answer', our prior line ended in '?'. Closers
are probabilistic (irc_ack_closer_chance, default 0.9); corrections and
answers always react. The bot never reacts twice in a row, so the user
always gets the last word. ack_kind + chat_llm_ack live in chat_llm.js (classifier is unit-testable; the line is a constrained model call with a canned fallback on ramble/question/error).
New config (chat_llm.ini, default ON): irc_ack_enabled, irc_ack_window, irc_ack_cooldown, irc_ack_closer_chance -- documented in the module header.
Also carries the irc_intervention_min_tokens gate (default 2): an
unanswered question must have at least N content tokens to qualify for a high-confidence unprompted intervention, so a single content word can't
carry a "confident enough to chime in" score.
Co-Authored-By: Claude Opus 4.8 <
noreply@anthropic.com>
---
þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net