feat: validation config au démarrage
- Ajoute validate_config() dans src/config.py : * Vérifie accessibilité Ollama (warning si injoignable) * Warning si ANTHROPIC_API_KEY absente (fallback cloud indispo) * Warning si modèles CPAM et validation identiques * Vérifie qu'au moins un modèle LLM est configuré - Appel automatique au démarrage du viewer Flask - Ne fait jamais crasher l'app (warnings uniquement) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -123,6 +123,57 @@ def check_adversarial_model_config() -> tuple[bool, str]:
|
||||
return False, ""
|
||||
|
||||
|
||||
def validate_config() -> list[str]:
|
||||
"""Valide la configuration au démarrage et retourne la liste des warnings émis.
|
||||
|
||||
Vérifie :
|
||||
- OLLAMA_URL défini et accessible (warning si injoignable, pas de crash)
|
||||
- ANTHROPIC_API_KEY présente (warning si absente — fallback cloud indisponible)
|
||||
- Modèles CPAM et validation distincts (validation adversariale)
|
||||
- Au moins un modèle LLM configuré
|
||||
|
||||
Ne fait jamais crasher l'application.
|
||||
"""
|
||||
warnings_emitted: list[str] = []
|
||||
|
||||
# 1. Vérifier OLLAMA_URL
|
||||
if not OLLAMA_URL:
|
||||
msg = "OLLAMA_URL non défini — aucun LLM local disponible"
|
||||
_cfg_logger.warning(msg)
|
||||
warnings_emitted.append(msg)
|
||||
else:
|
||||
try:
|
||||
import requests as _req
|
||||
resp = _req.get(f"{OLLAMA_URL}/api/tags", timeout=5)
|
||||
resp.raise_for_status()
|
||||
_cfg_logger.info("Ollama accessible sur %s", OLLAMA_URL)
|
||||
except Exception as e:
|
||||
msg = f"Ollama injoignable sur {OLLAMA_URL} — {e}"
|
||||
_cfg_logger.warning(msg)
|
||||
warnings_emitted.append(msg)
|
||||
|
||||
# 2. Vérifier ANTHROPIC_API_KEY
|
||||
if not os.environ.get("ANTHROPIC_API_KEY"):
|
||||
msg = "ANTHROPIC_API_KEY absente — fallback cloud (Haiku) indisponible"
|
||||
_cfg_logger.warning(msg)
|
||||
warnings_emitted.append(msg)
|
||||
|
||||
# 3. Vérifier modèles CPAM vs validation (adversarial)
|
||||
same, adv_msg = check_adversarial_model_config()
|
||||
if same:
|
||||
_cfg_logger.warning(adv_msg)
|
||||
warnings_emitted.append(adv_msg)
|
||||
|
||||
# 4. Vérifier qu'au moins un modèle LLM est configuré
|
||||
has_model = bool(OLLAMA_MODEL) or any(OLLAMA_MODELS.values())
|
||||
if not has_model:
|
||||
msg = "Aucun modèle LLM configuré (OLLAMA_MODEL et OLLAMA_MODELS vides)"
|
||||
_cfg_logger.warning(msg)
|
||||
warnings_emitted.append(msg)
|
||||
|
||||
return warnings_emitted
|
||||
|
||||
|
||||
# --- Configuration RUM / établissement ---
|
||||
|
||||
FINESS = os.environ.get("T2A_FINESS", "000000000")
|
||||
|
||||
@@ -85,6 +85,13 @@ def create_app() -> Flask:
|
||||
except Exception as e:
|
||||
logger.error("Verification FAISS echouee : %s", e)
|
||||
|
||||
# Validation config au démarrage
|
||||
try:
|
||||
from ..config import validate_config
|
||||
validate_config()
|
||||
except Exception as e:
|
||||
logger.error("Validation config échouée : %s", e)
|
||||
|
||||
ref_manager = ReferentielManager()
|
||||
val_manager = ValidationManager()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user