Skip to content

feat: purge cascade observed_results, scripts GradientBoosting hors-Docker, delete_iris#214

Merged
alanconqrepo merged 1 commit into
mainfrom
feat/mlflow-retrain-timeout-fix
May 15, 2026
Merged

feat: purge cascade observed_results, scripts GradientBoosting hors-Docker, delete_iris#214
alanconqrepo merged 1 commit into
mainfrom
feat/mlflow-retrain-timeout-fix

Conversation

@alanconqrepo
Copy link
Copy Markdown
Owner

Summary

  • API : DELETE /predictions/purge accepte désormais older_than_days=0 et supprime en cascade les observed_results (ground truth) liés aux prédictions purgées
  • Scripts : train_iris_GradientBoosting.py et upload_iris_model_GradientBoosting.py alignés sur leurs homologues RandomForest pour fonctionner hors Docker
  • Nouveau : delete_iris.py — script de nettoyage complet avec dry-run

Détail des changements

API — DELETE /predictions/purge

  • older_than_days : contrainte ge=1ge=0 (0 = tout supprimer, sans seuil temporel)
  • Suppression en cascade : les observed_results dont le couple (id_obs, model_name) correspond aux prédictions purgées sont supprimés avant les prédictions
  • PurgeResponse : nouveau champ deleted_observed_results_count (0 en dry_run, compte réel après suppression)
  • linked_observed_results_count conservé pour la rétrocompatibilité (sert d'estimation en dry_run)

Scripts documentation — GradientBoosting hors-Docker

train_iris_GradientBoosting.py reçoit toutes les fonctionnalités de train_iris.py :

  • dotenv + load_dotenv(find_dotenv()) pour charger le .env local
  • Valeurs par défaut sur les 3 vars obligatoires (os.environ.get au lieu de os.environ[...] qui crashait)
  • Bloc DEBUG avec dump des variables d'environnement avant/après surcharge
  • Fonction _ts() pour le timing de chaque étape
  • MLFLOW_HTTP_REQUEST_TIMEOUT=8 pour éviter les blocages de 120 s
  • Résolution des credentials MinIO (AWS_* > MINIO_ROOT_*)
  • Détection _in_docker + substitution mlflow:localhost: et minio:9000localhost:9010
  • log_metrics en un seul appel réseau (au lieu de N appels individuels)
  • infer_signature avec predict_proba (signature float, évite le warning "integer column")
  • Suppression des warnings parasites MLflow via logging.getLogger

upload_iris_model_GradientBoosting.py : ajout dotenv.

Nouveau script — delete_iris.py

Nettoyage complet d'un modèle en une commande :

API_TOKEN=<token> python delete_iris.py          # dry-run
API_TOKEN=<token> python delete_iris.py --yes    # suppression réelle
  • Étape 1 : DELETE /predictions/purge?older_than_days=0&dry_run=false (prédictions + ground truth en cascade)
  • Étape 2 : DELETE /models/{name} (toutes versions + MLflow runs + MinIO objects)

Tests

  • test_purge_older_than_days_zero_returns_422test_purge_older_than_days_zero_is_valid : vérifie le 200 et la présence du champ deleted_observed_results_count

Reviewer notes

  • La suppression des observed_results se fait par DELETE … WHERE (id_obs, model_name) IN (…) avant celle des prédictions — pas de contrainte FK à gérer.
  • deleted_observed_results_count vaut toujours 0 en dry_run (aucune suppression effectuée) ; linked_observed_results_count donne l'estimation dans ce cas.
  • Rétrocompatibilité : linked_observed_results_count reste présent dans PurgeResponse.

🤖 Generated with Claude Code

…Docker + delete_iris

API :
- DELETE /predictions/purge accepte older_than_days=0 (supprime tout, sans seuil)
- Suppression en cascade des observed_results liés aux prédictions purgées
- PurgeResponse : nouveau champ deleted_observed_results_count
- Test test_purge_older_than_days_zero_returns_422 → test_purge_older_than_days_zero_is_valid

Scripts documentation :
- train_iris_GradientBoosting.py : aligné sur train_iris.py — dotenv, valeurs par défaut,
  DEBUG dump env, timing _ts(), MLFLOW_HTTP_REQUEST_TIMEOUT, résolution credentials MinIO,
  substitution hostname hors-Docker, log_metrics batché, infer_signature avec predict_proba
- upload_iris_model_GradientBoosting.py : ajout dotenv
- delete_iris.py : nouveau script de nettoyage complet (modèle + prédictions + ground truth)
  avec dry-run par défaut et flag --yes pour exécution réelle
- send_ground_truth.py → send_ground_truth_iris.py (renommage)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@alanconqrepo alanconqrepo merged commit 512cd30 into main May 15, 2026
0 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant