feat: architecture multi-modèles LLM + quality engine + benchmark
- Multi-modèles : 4 rôles LLM (coding=gemma3:27b-cloud, cpam=gemma3:27b-cloud, validation=deepseek-v3.2:cloud, qc=gemma3:12b) avec get_model(role) - Prompts externalisés : 7 templates dans src/prompts/templates.py - Cache Ollama : modèle stocké par entrée (migration auto ancien format) - call_ollama() : paramètre role= (priorité: model > role > global) - Quality engine : veto_engine + decision_engine + rules_router (YAML) - Benchmark qualité : scripts/benchmark_quality.py (A/B, métriques CIM-10) - Fix biologie : valeurs qualitatives (troponine négative) non filtrées - Fix CPAM : gemma3:27b-cloud au lieu de deepseek (JSON tronqué par thinking) - CPAM max_tokens 4000→6000, viewer admin multi-modèles - Benchmark 10 dossiers : 100% DAS valides, 10/10 CPAM, 243s/dossier Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
62
config/lab_value_sanity.yaml
Normal file
62
config/lab_value_sanity.yaml
Normal file
@@ -0,0 +1,62 @@
|
||||
# Garde-fous de parsing des valeurs biologiques
|
||||
# ------------------------------------------------
|
||||
# Objectif: éviter des faux positifs dus à des artefacts PDF/OCR
|
||||
# (ex: "8" au lieu de "4.8" pour le potassium).
|
||||
#
|
||||
# IMPORTANT:
|
||||
# - Ce fichier ne définit PAS des "normes biologiques" (ça c'est reference_ranges.yaml)
|
||||
# - Ici on définit des bornes *plausibles* très larges + quelques heuristiques "anti-OCR".
|
||||
#
|
||||
# Clés des tests: minuscules, sans accents, ex: potassium, sodium, plaquettes, hemoglobine...
|
||||
version: 1
|
||||
|
||||
policy:
|
||||
drop_out_of_range: true # écarte les valeurs hors bornes plausibles du dossier
|
||||
keep_suspect: true # conserve les valeurs suspectes (audit) mais les règles privilégient les valeurs ok
|
||||
|
||||
tests:
|
||||
potassium:
|
||||
hard_min: 0.5
|
||||
hard_max: 9.0
|
||||
suspect:
|
||||
single_digit_over: 6.0 # "8" seul est souvent une décimale perdue (4,8 -> 8)
|
||||
|
||||
sodium:
|
||||
hard_min: 90
|
||||
hard_max: 200
|
||||
|
||||
plaquettes:
|
||||
hard_min: 5
|
||||
hard_max: 2000
|
||||
|
||||
hemoglobine:
|
||||
hard_min: 3
|
||||
hard_max: 25
|
||||
|
||||
creatinine:
|
||||
hard_min: 1
|
||||
hard_max: 5000
|
||||
|
||||
crp:
|
||||
hard_min: 0
|
||||
hard_max: 1000
|
||||
|
||||
alat:
|
||||
hard_min: 0
|
||||
hard_max: 5000
|
||||
|
||||
asat:
|
||||
hard_min: 0
|
||||
hard_max: 5000
|
||||
|
||||
ggt:
|
||||
hard_min: 0
|
||||
hard_max: 5000
|
||||
|
||||
pal:
|
||||
hard_min: 0
|
||||
hard_max: 5000
|
||||
|
||||
bilirubine totale:
|
||||
hard_min: 0
|
||||
hard_max: 2000
|
||||
Reference in New Issue
Block a user