feat(maria): fir de discutie — continuarea nu mai e tratata ca eroare noua
Fiecare mesaj pornea de la zero. Masurat pe indexul viu, dupa o escaladare pentru
ORA-06550: "da, ma blocheaza complet" primea raspuns despre ordinul de plata la
Trezorerie (cosinus 0,642, "acoperit"), "eram la salvarea unei facturi" despre
corectia unei eFacturi (0,742), iar "am incercat si tot nu merge" cerea din nou
detaliile tocmai date. Patru cuvinte fara context seamana cu ceva din documente,
iar cautarea nu avea de unde sti ca sunt raspunsul la intrebarea Mariei.
rag/fir.py tine ancora (textul erorii), codurile ei, referinta escaladarii si
ultimele 6 schimburi, in ~/.maria-bridge/conversations/ (expira, ca si capturile).
La o continuare: cautarea e pe ancora + mesajul nou, modelul primeste istoricul,
mesajul se adauga la escaladarea deschisa de cate ori e nevoie, iar "mesaj prea
vag" nu se mai aplica. Escaladarea duce firul intreg la suport, nu un mesaj rupt
din context.
Firul se rupe doar la o captura noua sau un cod de eroare diferit — schimbarea
subiectului in cuvinte e prea usor de confundat cu o continuare.
In plus:
- Maria tace 60 min cand preia un om, dar automat doar in grupuri cu >= 2
participanti: in self-chat totul e `fromMe`. Comenzi explicite oriunde
("Maria, stop" / "Maria, continua").
- ALLOWED_GROUP_JIDS: testarea se muta in grupul "Maria Test"
(120363409761730101@g.us), ca sa nu mai poluam chatul "Eu". Filtru si in punte,
si in consumer. NU echo-test: puntea lui Echo nu filtreaza fromMe in grupuri,
deci cei doi boti ar intra in bucla.
Teste: 94 pass. Calibrare 23/23, cu doua cazuri de continuare.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -405,6 +405,49 @@ alta referinta. Fereastra e de 30 de minute (`consumer.PENDING_TTL_S`), tinuta i
|
||||
`~/.maria-bridge/escalations/pending.json`; un mesaj cu captura sau cu alt cod de
|
||||
eroare e tratat ca intrebare noua, nu ca raspuns la intrebarea de urgenta.
|
||||
|
||||
### Firul de discutie
|
||||
|
||||
Pana la `rag/fir.py`, fiecare mesaj pornea de la zero. Dupa o escaladare pentru
|
||||
ORA-06550, masurat pe indexul viu:
|
||||
|
||||
| Ce scrie omul | Ce raspundea Maria |
|
||||
|---|---|
|
||||
| „da, ma blocheaza complet" | cum se completeaza un ordin de plata la Trezorerie (0,642) |
|
||||
| „eram la salvarea unei facturi" | procedura de corectie a unei eFacturi (0,742) |
|
||||
| „si acum ce fac?" | observatii despre eFacturi primite gresit |
|
||||
|
||||
Toate „acoperite", cu cosinus peste prag: patru cuvinte fara context chiar seamana cu
|
||||
ceva din documente. Firul tine ancora (textul erorii care l-a deschis), codurile ei,
|
||||
referinta escaladarii si ultimele 6 schimburi, in `~/.maria-bridge/conversations/`.
|
||||
|
||||
La o continuare: cautarea se face pe **ancora + mesajul nou**, modelul primeste
|
||||
istoricul, mesajul se adauga la escaladarea deschisa (`completari`, de cate ori e
|
||||
nevoie), iar „mesaj prea vag" nu se mai aplica — detaliile au fost deja cerute.
|
||||
|
||||
**Ce rupe firul, necontestat:** o captura noua sau un cod de eroare diferit. Sunt
|
||||
singurele semne sigure ca omul a trecut la altceva. Schimbarea subiectului in cuvinte
|
||||
NU rupe firul: e prea usor de confundat cu o continuare, iar greseala aia produce
|
||||
exact tabelul de mai sus. In rest, firul expira dupa `FIR_TTL_MIN` (120 min).
|
||||
|
||||
### Cand preia un om
|
||||
|
||||
Daca cineva din echipa scrie in discutie, Maria tace `FIR_TACERE_MIN` minute (60), ca
|
||||
sa nu vorbeasca peste el. Automat **doar in grupuri cu cel putin
|
||||
`FIR_PRELUARE_MIN_PARTICIPANTI` (2) participanti**: in self-chat si in grupul de test
|
||||
tot ce se scrie e `fromMe`, deci regula ar amuti-o la primul mesaj. Oriunde merg si
|
||||
comenzile explicite: „Maria, stop" / „preiau eu" si „Maria, continua".
|
||||
|
||||
### Testarea intr-un grup
|
||||
|
||||
`ALLOWED_GROUP_JIDS` (in `env`) listeaza grupurile in care Maria raspunde chiar si cu
|
||||
`TEST_MODE_SELF_CHAT_ONLY=true`. Filtrul e si in punte, si in consumer. Azi:
|
||||
`120363409761730101@g.us` — grupul „Maria Test".
|
||||
|
||||
> **Nu pune aici `echo-test` (`120363424350922235@g.us`).** E canalul WhatsApp al lui
|
||||
> Echo (LXC 110), iar puntea lui nu filtreaza `fromMe` in grupuri
|
||||
> (`if (msg.key.fromMe && !isGroup) continue`). Cei doi boti si-ar raspunde unul
|
||||
> altuia la nesfarsit, cu Claude pe API la Echo. Vezi `docs/chatboti-si-punti.md`.
|
||||
|
||||
### Recalibrarea, cand se schimba documentele
|
||||
|
||||
Pragurile sunt masurate, nu alese din burta — si se **muta** cand se schimba
|
||||
|
||||
Reference in New Issue
Block a user