fix: prompt CPAM exige codes CIM-10 explicites, RAG résilient aux erreurs embedding

- 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>
This commit is contained in:
dom
2026-02-17 23:38:46 +01:00
parent bc0ccbef7c
commit 8c1b5a243e
2 changed files with 28 additions and 4 deletions

View File

@@ -45,8 +45,9 @@ def _get_embed_model():
logger.info("Chargement du modèle d'embedding (%s)...", _device)
_embed_model = SentenceTransformer(EMBEDDING_MODEL, device=_device)
except (torch.OutOfMemoryError, torch.cuda.CudaError, torch.AcceleratorError, RuntimeError) as exc:
if _device == "cuda" and "memory" in str(exc).lower():
logger.warning("CUDA OOM pour l'embedding — fallback CPU")
exc_msg = str(exc).lower()
if _device == "cuda" and ("memory" in exc_msg or "meta tensor" in exc_msg):
logger.warning("CUDA erreur pour l'embedding — fallback CPU : %s", exc)
torch.cuda.empty_cache()
_embed_model = SentenceTransformer(EMBEDDING_MODEL, device="cpu")
else: