fix(maria): codul de eroare decide acoperirea, nu cosinusul
O captura cu ORA-06550 / PLS-00906 primea raspunsul despre ORA-12541 (TNS no
listener) si nu pleca la suport. Cauza: doua erori Oracle diferite se scriu
aproape la fel ("[Oracle][ODBC][Ora]ORA-..."), asa ca chunk-ul gresit a iesit la
cosinus 0,736 — peste RANK_STRONG_COSINE, care scurtcircuita orice alta dovada.
Chunk-ul corect din dictionar exista, dar statea pe pozitia 4, in afara TOP_K:
OCR-ul unei ferestre intregi aduce zeci de tokeni de zgomot, iar BM25 ineca tocmai
codul.
- `rank.codes()` scoate codurile de oriunde din text, nu doar ca token intreg —
OCR-ul le lipeste de ce e langa ("OraJORA-06550").
- `rank.by_codes()` e un al treilea clasament in fuziune: chunk-ul care poarta
codul cerut urca peste cele care doar seamana. Acum iese primul.
- `rank.assess()`: cand intrebarea are coduri, decid doar ele. Niciun cod gasit =
escaladare la suport, oricat de mare ar fi cosinusul.
- `consumer.search()` judeca acoperirea pe cosinusul chunk-urilor date chiar
modelului, nu pe cel mai bun din tot indexul.
Calibrare 21/21 (cele 19 cazuri + captura reala + ORA-00600, cod care nu e in
documente si trebuie sa plece la suport). Teste: 79 pass.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4uzvgm7AyJch5WH8QHRhY
This commit is contained in:
@@ -100,10 +100,11 @@ def test_assess_un_singur_termen_din_multi_nu_e_dovada():
|
||||
|
||||
|
||||
def test_assess_motivul_numeste_termenii_lipsa_nu_pe_toti():
|
||||
# Fara cod in intrebare: acolo decid termenii rari, nu regula codurilor.
|
||||
bm = rank.Bm25(DOCS)
|
||||
_, motiv = rank.assess("ORA-01722 la imprimanta LaserJet", 0.61, DOCS[:1], bm)
|
||||
# codul chiar apare in context, deci nu are ce cauta in lista lipsurilor
|
||||
assert "ora-01722" not in motiv
|
||||
_, motiv = rank.assess("factura la imprimanta LaserJet", 0.61, DOCS[3:], bm)
|
||||
# „factura" chiar apare in context, deci nu are ce cauta in lista lipsurilor
|
||||
assert "factura," not in motiv
|
||||
assert "imprimanta" in motiv
|
||||
|
||||
|
||||
@@ -120,3 +121,47 @@ def test_pragurile_vin_din_env(monkeypatch):
|
||||
monkeypatch.setitem(config._env, "RANK_STRONG_COSINE", "0.50")
|
||||
covered, _ = rank.assess("orice", 0.55, DOCS[:1], bm)
|
||||
assert covered
|
||||
|
||||
|
||||
# --- coduri de eroare: identificatori exacti, nu cuvinte ---------------------
|
||||
|
||||
def test_codul_lipit_de_ocr_e_tot_gasit():
|
||||
"""OCR-ul da „[Oracle][ODBC][OraJORA-06550"; codul nu are voie sa se piarda."""
|
||||
import rank
|
||||
assert rank.codes("[Oracle][ODBC][OraJORA-06550: line 1, column 7") == ["ora-06550"]
|
||||
assert rank.codes("PLS-00906: object X is invalid") == ["pls-00906"]
|
||||
assert rank.codes("cum trimit D406") == ["d406"]
|
||||
assert rank.codes("nu merge nimic") == []
|
||||
|
||||
|
||||
def test_chunkul_cu_codul_cerut_urca_in_clasament():
|
||||
import rank
|
||||
texts = [
|
||||
"ORA-12541 TNS no listener, serverul nu raspunde",
|
||||
"ORA-03113 end-of-file on communication channel",
|
||||
"ORA-06550 eroare de compilare, procedura lipseste",
|
||||
]
|
||||
assert rank.by_codes("imi da ORA-06550 la salvare", texts) == [2]
|
||||
assert rank.by_codes("intrebare fara coduri", texts) == []
|
||||
|
||||
|
||||
def test_cosinus_mare_nu_acopera_alt_cod(monkeypatch):
|
||||
"""Doua erori Oracle diferite se scriu la fel; cosinusul nu le deosebeste.
|
||||
|
||||
Cazul real din 2026-08-31: captura cu ORA-06550 primea raspunsul despre
|
||||
ORA-12541, cu cosinus 0,736 — peste pragul „sigur".
|
||||
"""
|
||||
import rank
|
||||
bm = rank.Bm25(["ORA-12541 TNS no listener"])
|
||||
ok, motiv = rank.assess("ORA-06550 PLS-00906 la salvare", 0.736,
|
||||
["ORA-12541 TNS no listener"], bm)
|
||||
assert ok is False
|
||||
assert "ora-06550" in motiv
|
||||
|
||||
|
||||
def test_codul_gasit_acopera_si_la_cosinus_mic():
|
||||
import rank
|
||||
bm = rank.Bm25(["ORA-06550 eroare de compilare"])
|
||||
ok, motiv = rank.assess("ORA-06550", 0.42, ["ORA-06550 eroare de compilare"], bm)
|
||||
assert ok is True
|
||||
assert "ora-06550" in motiv
|
||||
|
||||
Reference in New Issue
Block a user