fix(maria): mesajul si captura sunt acelasi lucru, iar cosinusul singur nu mai e dovada
Doua greseli din grupul "Maria Test", 2026-09-01, pe care 27409fb le-a atenuat dar
nu le-a rezolvat.
1. La o reclamatie vaga Maria cauta, in loc sa intrebe. "Buna . Am si eu o factura
pe luna august cu eroare in spv la trimitere AUTO SULE" nu spune CE eroare e —
n-are ce cauta in documente si n-are ce trimite la suport, fiindca programatorul
ar pune exact aceeasi intrebare. Gardul (triaj.prea_vag) exista, dar cerea text
sub 12 cuvinte; mesajul are 14. Gresea si invers: "nu pot incarca factura in SPV,
imi da eroare de certificat" are 9 cuvinte si ARE raspuns in documente, si era
oprita degeaba. Lungimea nu masoara cat de precis e mesajul.
-> gardul nu mai numara cuvinte si se aplica DUPA cautare, doar cand nu exista
acoperire. O singura data pe fir: daca nici intrebat omul nu spune mai mult,
mesajul pleaca la suport.
2. Textul si captura, trimise una dupa alta, erau tratate ca doua probleme fara
legatura. `este_continuare` rupea firul la ORICE imagine — dar cazul frecvent e
tocmai omul care scrie problema si trimite captura imediat dupa, sau care
raspunde la "trimite-mi o captura". Textul se pierdea, captura se cauta doar pe
OCR-ul ei, se deschideau doua fire si se puteau deschide doua escaladari pentru
aceeasi problema.
-> o captura in primele FIR_IMAGINE_MIN (5) minute continua firul: textul citit
din ea intra in ancora (cu tot cu coduri), cautarea se face pe mesaj +
captura, iar pe o escaladare deschisa pleaca la aceeasi referinta — cu
imaginea, nu doar cu textul citit din ea (_notifica_suport ia si media).
Si, ca urmare a lui (2): RANK_STRONG_COSINE dispare. Interogarea pe un fir e ancora
plus mesajul nou, deci cosinusul urca la fiecare replica fara sa apara vreo dovada
noua — aceeasi captura da 0,778 singura si 0,836 cu mesajul de dinainte, adica peste
0,80 pus ieri. Orice prag fix de sus e trecut de o discutie destul de lunga. Acoperirea
ramane pe dovada lexicala (termenii distinctivi ai intrebarii chiar in chunk-uri),
care e stabila la lungime. Niciun caz cu raspuns in documente nu avea nevoie de
scurtatura.
ops/calibrate-rank.py: 26/26, cu interogarea combinata adaugata la set. Teste: 102 pass.
Verificat end-to-end pe scenariul real (mesaj, apoi captura la 10 secunde): intrebare
de detalii, apoi o singura escaladare care poarta si textul si captura.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -27,14 +27,35 @@ def test_un_raspuns_scurt_e_continuare_nu_eroare_noua():
|
||||
assert "ORA-06550" in q and "ma blocheaza" in q
|
||||
|
||||
|
||||
def test_captura_noua_sau_alt_cod_rup_firul():
|
||||
def test_alt_cod_rupe_firul():
|
||||
f = fir.deschide(JID, EROARE)
|
||||
assert not fir.este_continuare(f, "imi da acum ORA-12154", False)
|
||||
assert not fir.este_continuare(f, "si asta ce e?", True) # captura noua
|
||||
# acelasi cod nu rupe firul
|
||||
assert fir.este_continuare(f, "tot ORA-06550 imi da", False)
|
||||
|
||||
|
||||
def test_captura_imediat_dupa_mesaj_continua_firul():
|
||||
"""Cazul real: omul scrie problema si trimite captura la cateva secunde."""
|
||||
f = fir.deschide(JID, "am o factura pe august cu eroare la trimitere")
|
||||
assert fir.este_continuare(f, "", True)
|
||||
|
||||
|
||||
def test_captura_mult_mai_tarziu_deschide_alt_fir():
|
||||
f = fir.deschide(JID, EROARE)
|
||||
f["at"] = time.time() - fir.imagine_fereastra_s() - 1
|
||||
assert not fir.este_continuare(f, "", True)
|
||||
|
||||
|
||||
def test_captura_pe_fir_aduce_textul_erorii_in_ancora():
|
||||
"""Ancora era reclamatia vaga; captura e cea care spune ce eroare e."""
|
||||
f = fir.deschide(JID, "am o factura cu eroare la trimitere")
|
||||
fir.extinde_ancora(f, "ORA-06550: line 1, column 7")
|
||||
assert "ora-06550" in f["coduri"]
|
||||
assert "eroare la trimitere" in f["ancora"] and "ORA-06550" in f["ancora"]
|
||||
# continuarile de dupa captura se cauta cu tot cu eroare, nu doar cu reclamatia
|
||||
assert "ORA-06550" in fir.interogare(f, "da, ma blocheaza")
|
||||
|
||||
|
||||
def test_fara_fir_nu_exista_continuare():
|
||||
assert not fir.este_continuare(None, "da", False)
|
||||
|
||||
|
||||
@@ -118,9 +118,21 @@ def test_assess_intrebare_vaga_in_zona_de_mijloc_escaladeaza():
|
||||
def test_pragurile_vin_din_env(monkeypatch):
|
||||
import config
|
||||
bm = rank.Bm25(DOCS)
|
||||
monkeypatch.setitem(config._env, "RANK_STRONG_COSINE", "0.50")
|
||||
covered, _ = rank.assess("orice", 0.55, DOCS[:1], bm)
|
||||
assert covered
|
||||
monkeypatch.setitem(config._env, "RANK_WEAK_COSINE", "0.90")
|
||||
covered, motiv = rank.assess("factura", 0.85, DOCS[:1], bm)
|
||||
assert not covered and "0.9" in motiv
|
||||
|
||||
|
||||
def test_cosinusul_mare_singur_nu_mai_e_acoperire():
|
||||
"""Interogarea creste pe fir si cosinusul cu ea; dovada ramane cea lexicala.
|
||||
|
||||
Cazul real: aceeasi captura a dat 0,778 singura si 0,836 cu mesajul de
|
||||
dinainte, fara sa apara vreo dovada noua in documente.
|
||||
"""
|
||||
bm = rank.Bm25(DOCS)
|
||||
covered, motiv = rank.assess("cumparator incorect la incarcare", 0.84, DOCS[:1], bm)
|
||||
assert not covered
|
||||
assert "cumparator" in motiv
|
||||
|
||||
|
||||
# --- coduri de eroare: identificatori exacti, nu cuvinte ---------------------
|
||||
|
||||
@@ -49,6 +49,11 @@ def test_cand_notificarea_nu_a_plecat_nu_promitem_ca_a_plecat():
|
||||
def test_prea_vag_doar_pentru_acuzatii_fara_continut():
|
||||
assert triaj.prea_vag("am o eroare", False)
|
||||
assert triaj.prea_vag("nu merge nimic", False)
|
||||
# cazul real din 2026-09-01: lung, dar tot nu spune CE eroare e. Plafonul de
|
||||
# 12 cuvinte il lasa sa treaca, si a primit un raspuns inventat.
|
||||
assert triaj.prea_vag(
|
||||
"Buna . Am si eu o factura pe luna august cu eroare in spv la trimitere AUTO SULE",
|
||||
False)
|
||||
# o intrebare adevarata nu se opreste ca sa i se ceara detalii
|
||||
assert not triaj.prea_vag("cum trimit declaratia D406 SAF-T", False)
|
||||
# un cod inseamna ca avem deja dupa ce cauta
|
||||
|
||||
Reference in New Issue
Block a user