- Ajout R33, R33.0, R33.8, R33.9, F17.1, F17.2 au dictionnaire supplémentaire
- Rejet des codes CIM-10 avec raisonnement ET justification vides (corrélation hallucinations)
- Validation du code contre le dictionnaire CIM-10 avant copie suggestion → final
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Ajout threading.Lock sur _get_embed_model() pour empêcher les
chargements concurrents depuis ThreadPool(2) — élimine les erreurs
"meta tensor" et les doubles CUDA OOM
- Sentinelle _embed_failed évite les retries infinis après échec
- NotImplementedError ajouté aux exceptions capturées (meta tensor)
- Fallback CPU protégé par try/except avec _embed_failed
- QC: alertes_globales string wrappée en liste (évite itération par
caractère quand le LLM retourne une string au lieu d'une liste)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
low_cpu_mem_usage=False évite les meta tensors lors du chargement
de l'embedding (sentence-transformers 5.x + accelerate 1.12).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Prompt : consigne de toujours citer les codes CIM-10 avec libellé (jamais
"codage initial" sans préciser le code), appliquée dans conclusion et partout
- RAG résilient : _search_rag_for_control attrape toute exception (meta tensor,
CUDA OOM, index absent) et génère la contre-argumentation sans sources plutôt
que de perdre silencieusement tout le contrôle CPAM
- Embedding fallback : condition élargie pour couvrir "meta tensor" en plus de
"memory" dans le message d'erreur RuntimeError
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1. Champ source sur Diagnostic : trackare/edsnlp/regex/llm_das
- Renseigné dans les 8 constructeurs de cim10_extractor.py
- Permet l'audit de provenance des DAS dans le JSON de sortie
2. Fallback code parent pour les codes LLM halluccinés :
- fallback_parent_code() dans cim10_dict.py (D71.9→D71, R69.8→R69)
- Intégré dans _apply_llm_result_diagnostic() de rag_search.py
- Récupère les codes rejetés dont le parent 3-char est valide
3. Règle 12 filtre DAS : en-têtes anatomiques + catégories vagues
- Rejette "Musculaire", "Digestif", "Hépatique" (mots isolés)
- Rejette "Musculaire - masse musculaire" (catégorie + description)
- 13 nouveaux tests unitaires au total
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Nouveau singleton _get_reranker() : CrossEncoder ms-marco-MiniLM-L-6-v2
forcé sur CPU pour ne pas interférer avec Ollama sur GPU
- Fonction _rerank() : re-classe les résultats FAISS via cross-encoder,
conserve le score FAISS original dans score_faiss
- Intégré dans search_similar_cpam() après déduplication, avant priorisation
- Config RERANKER_MODEL externalisée via T2A_RERANKER_MODEL (.env)
- Fix fallback CUDA OOM : rattrapage de torch.AcceleratorError en plus
de torch.OutOfMemoryError
Latence : ~7-12s (incluant chargement one-time du modèle ~80Mo).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Externalise 13 variables de config via python-dotenv (chemins PDF,
modèles Ollama/embedding/NER, FINESS, seuils) avec défauts identiques
- Centralise EMBEDDING_MODEL dans config.py (était hardcodé en 3 endroits)
- Ajoute .env.example documenté et .env au .gitignore
- Ajoute openpyxl et pandas manquants au requirements.txt
- Ajoute data/referentiels au mkdir de run.sh
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- SentenceTransformer : fallback CPU si CUDA OOM (Ollama peut occuper la VRAM)
- Bloc CPAM dans main.py : try/except pour éviter crash fatal du pipeline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Piste 1 : ajout de cim10_supplements.json (40 sous-codes E10/E11/E13/F10)
fusionné au chargement par load_dict() — E11.9 et autres ne sont plus rejetés.
Piste 2 : export BIO_NORMALS depuis cim10_extractor, inclusion des plages
de référence [N: min-max] dans le contexte LLM et règle explicite dans le
prompt DAS pour éviter les hallucinations sur valeurs biologiques normales.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Détection automatique GPU/CPU avec fallback. Index FAISS reconstruit
en 1min (GPU) au lieu de 16min (CPU).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajout des règles d'exclusion symptôme (R00-R99) vs diagnostic précis (Chapitres I-XIV),
détection heuristique de sévérité CMA sur 25 racines CIM-10, et affichage des alertes
de codage dans le viewer Flask. 153 tests, 0 régression.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Ajoute une interface web Flask pour visualiser les dossiers médicaux CIM-10,
avec temps de traitement par PDF, sélecteur de modèle Ollama, et centralisation
de la config Ollama dans src/config.py.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>