53 lines
3.5 KiB
Markdown
53 lines
3.5 KiB
Markdown
### Révision IA (Ollama): scoring, corrections et avis
|
||
|
||
#### Objectif
|
||
Fournir une évaluation automatique de la fiabilité des extractions (score), proposer des corrections potentielles (champ, valeur, confiance) et un avis court, en s’appuyant sur un LLM local accessible via Ollama.
|
||
|
||
#### Composants et endpoints
|
||
- Backend:
|
||
- Appel automatique après chaque extraction: intégration du résultat de révision dans `status.review` et `metadata.quality.ollamaScore`.
|
||
- Endpoint manuel: `POST /api/folders/:folderHash/files/:fileHash/review` (pas de payload requis). Retourne `{ success, review }`.
|
||
- Format attendu du LLM (réponse stricte JSON): `{ "score": number (0..1), "corrections": Array<{ path, value, confidence }>, "avis": string }`.
|
||
- Frontend:
|
||
- Bouton “Révision IA” par document (état completed): déclenche l’endpoint manuel puis rafraîchit la liste.
|
||
- Affichage: Chip `IA: x.xx` (tooltip = `avis` si présent). Chip `Corrections: N` ouvrant un dialogue listant les corrections.
|
||
|
||
#### Calcul des scores et arbitrage
|
||
- Base OCR: confiance Tesseract/pdf-parse normalisée.
|
||
- Boost annuaire de noms (`backend/data/names/firstnames_all.csv`, `lastnames_all.csv`): +0.05 si prénom trouvé, +0.05 si nom trouvé (après normalisation), agrégé au score.
|
||
- Ensembles de règles NER (CNI/MRZ, adresses, entités) influent indirectement via `identities` et `cniNumbers` (poids renforcés).
|
||
- Score global côté backend (avant Ollama): plafonné à 0.99, agrège OCR, présence d’identités, CNI, boost annuaire.
|
||
- Révision Ollama: si `review.score` est supérieur au `globalConfidence`, le backend rehausse `metadata.quality.globalConfidence` à ce score et persiste le résultat.
|
||
|
||
#### Suggestions de qualité
|
||
- `needsReupload`: déclenché si confiance OCR < 0.75, ou si CNI sans NOM/PRÉNOM.
|
||
- `needsAddressConfirmation`: déclenché si une adresse est détectée; confirmation côté UI via dialogue et endpoint `confirm-address`.
|
||
|
||
#### Dépendances et configuration
|
||
- Ollama: service HTTP local sur `http://localhost:11434`. Modèle configurable via `OLLAMA_MODEL` (défaut `llama3.1`). Timeout 8s.
|
||
- Aucune dépendance Node additionnelle (utilisation d’`http` natif).
|
||
|
||
#### Données persistées
|
||
- Cache fichier par document: `cache/<folderHash>/<fileHash>.json`.
|
||
- Champs ajoutés/modifiés:
|
||
- `metadata.quality.ollamaScore: number` (0..1)
|
||
- `status.review: { score, corrections[], avis }`
|
||
- `metadata.quality.globalConfidence: number` (peut être rehaussé par Ollama)
|
||
|
||
#### UI et interactions
|
||
- Liste des documents:
|
||
- Chip “IA: x.xx” si présent (tooltip: `avis`).
|
||
- Chip “Corrections: N” si `status.review.corrections` non vide. Clic: ouvre un dialogue listant `{ path, value, confidence }`.
|
||
- Bouton “Révision IA”: relance la révision et rafraîchit l’item.
|
||
- Indicateurs visuels: spinner sur le bouton pendant l’appel, disabled, snackbar de confirmation d’exécution.
|
||
|
||
#### Tests manuels (checklist)
|
||
- Vérifier qu’un upload image/PDF completed affiche le Chip `IA: x.xx` et/ou `Corrections: N` si présents.
|
||
- Cliquer “Révision IA”: confirmer que la liste se rafraîchit et que `status.review` est renseigné.
|
||
- Ouvrir le dialogue des corrections et vérifier l’affichage des champs.
|
||
- Confirmer/infirmer une adresse détectée et vérifier la mise à jour côté backend et disparition du flag.
|
||
|
||
#### Journal des décisions
|
||
- Choix du JSON strict pour la sortie LLM afin de faciliter l’exploitation et éviter les parsings fragiles.
|
||
- Utilisation d’`http` natif côté Node pour éviter l’ajout de dépendances.
|