Curatare globala a comentariilor si docstring-urilor (app, tools, teste, scripturi): eliminate referintele la PRD-uri, US-xxx, task-uri istorice si review-uri; pastrata doar informatia functionala, formulata scurt. Regula adaugata in CLAUDE.md (sectiunea Stil). Fara modificari de cod sau comportament. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
"""Seeder corpus operatii etichetate -> mapping_suggestions (SILVER).
|
|
|
|
Artefactul `app/data/operatii-etichetate.json` e produs offline de
|
|
`tools/mapare-llm/genereaza_seed.py` (etichetare LM Studio, o singura data) si comis
|
|
in repo. La `init_db` il incarcam in `mapping_suggestions` cu INSERT OR IGNORE, ca
|
|
SILVER sa nu mai fie gol in productie (sugestii exact-match + corpus k-NN reale).
|
|
|
|
Format seed: [{denumire, denumire_normalizata, cod, is_nul, source, confidence}].
|
|
Reutilizeaza `shared_store.seed_suggestions` (normalizeaza cheia + impune NUL->cod NULL,
|
|
INSERT OR IGNORE). NB (F10): confirmarile UMANE stau in `shared_mappings`, NU aici —
|
|
deci INSERT OR IGNORE pastreaza codul LLM existent la re-seed (v1 = ignore, nu upsert).
|
|
|
|
SUGGESTION-ONLY (invariant #13): nimic din SILVER nu intra in resolve_prestatii/load_mapping.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
import sqlite3
|
|
|
|
from .shared_store import seed_suggestions
|
|
|
|
SEED_PATH = os.path.join(os.path.dirname(__file__), "data", "operatii-etichetate.json")
|
|
|
|
|
|
def load_seed_file(path: str = SEED_PATH) -> list[dict]:
|
|
"""Citeste artefactul seed. Lipsa / invalid -> [] (degradare gratioasa)."""
|
|
if not path or not os.path.exists(path):
|
|
return []
|
|
try:
|
|
with open(path, encoding="utf-8") as fh:
|
|
data = json.load(fh)
|
|
except (ValueError, OSError):
|
|
return []
|
|
return data if isinstance(data, list) else []
|
|
|
|
|
|
def seed_operatii_etichetate(conn: sqlite3.Connection, path: str = SEED_PATH) -> int:
|
|
"""Incarca seedul in mapping_suggestions (INSERT OR IGNORE). Intoarce nr. randuri inserate.
|
|
|
|
Mapeaza cheia seedului `cod` -> `cod_prestatie` (forma asteptata de seed_suggestions);
|
|
`is_nul=True` forteaza cod NULL acolo. Idempotent: re-rularea nu dubleaza randuri.
|
|
"""
|
|
raw = load_seed_file(path)
|
|
if not raw:
|
|
return 0
|
|
items = [
|
|
{
|
|
"denumire": e.get("denumire") or e.get("denumire_normalizata") or "",
|
|
"cod_prestatie": e.get("cod"),
|
|
"is_nul": bool(e.get("is_nul")),
|
|
"source": e.get("source") or "llm_seed",
|
|
"confidence": e.get("confidence") or 0.0,
|
|
}
|
|
for e in raw
|
|
if isinstance(e, dict)
|
|
]
|
|
return seed_suggestions(conn, items)
|