FEAT: Pipeline degradation / circuit breaker IA — dégradation générique (exécutant ONNX / broker) #4

Closed
opened 2026-08-10 21:02:17 +02:00 by nonobis · 0 comments
Owner

🎯 Contexte

La spec prévoit une IA avec circuit breaker et niveaux de dégradation. Aucun mécanisme de dégradation n'existe : le pipeline ne sait pas réagir quand l'analyse IA ralentit, tombe, ou quand la file de jobs est saturée. L'architecture IA retenue (tickets #72-77) : inférence ONNX Runtime sur les agents (GPU ou CPU), mutualisée inter-sites via un broker de jobs (RabbitMQ + MassTransit). Le circuit breaker doit donc être générique : il surveille l'exécutant (local ou distant) et le broker, pas un service central.

📚 Référence spec / décision d'architecture

3.5 Pipeline Degradation (Circuit Breaker IA) — niveaux conservés, re-câblés sur l'architecture broker :

Niveau État Action
0 Normal Pipeline complet : agent capteur → analyse IA (locale ou via broker)
1 Exécutant IA lent (>1s) Agent only (YOLOv8 nano, confidence baissée à 0.3)
2 Exécutant IA down / broker injoignable Agent only + détection de mouvement seulement
3 Agent CPU >80% Snapshots réduits de moitié, alert admin
4 Queue overflow Drop oldest snapshots, alert admin

3.6 Gestion des erreurs IA : timeout 5s → retry 1× 100ms puis degrade 1 + health check 30s ; broker/exécutant down → degrade 2 + health check 10s ; prédiction vide → log, pas d'événement ; worker désactivé → skip + log.

🔍 État actuel (vérifié dans le code)

CameraEventService.CreateAsync crée les événements tels quels — aucun degradation tracker, aucun circuit breaker, aucune gestion de dégradation broker/exécutant. Le pipeline agent (SnapshotPipelineService) continue de pousser sans backpressure réseau.

🧩 À faire

  • AIPipelineDegradationTracker (niveaux 0-4) : état partagé central + local agent
  • Détection des états : exécutant IA lent (latence observée >1s), broker injoignable (AMQP down), file saturée (queue depth), CPU agent >80%
  • Actions de dégradation : bascule agent-only (confidence 0.3), motion-only, réduction snapshots /2, drop oldest + alert admin
  • Health check exécutant/broker : 30s en degrade 1, 10s en degrade 2 ; retour niveau 0 dès rétablissement
  • Timeout + retry (5s → 1× 100ms) sur les appels d'analyse (locale et broker)
  • Exposer degradationLevel dans /health/live (503 si level ≥ 2)
  • Tests : scénarios de dégradation (broker down, exécutant lent, file pleine), retour à la normale

🧪 Critères d'acceptation

  • Niveau 0 → 2 atteint automatiquement quand le broker/l'exécutant tombe
  • Le pipeline continue en motion-only sans crash
  • Retour niveau 0 dès rétablissement (health check)
  • degradationLevel exposé dans /health/live
  • make test vert

📁 Fichiers concernés

src/Heimdall.Infrastructure/Services/AIPipelineDegradationTracker.cs (nouveau), src/Heimdall.Agent/Services/SnapshotPipelineService.cs,
src/Heimdall.Web/Controllers/HealthController.cs, src/Heimdall.Application/Services/,

📝 Notes

Lié aux tickets #72-77 (broker + mutualisation GPU), #2 (inférence réelle), #13 (health checks). Le circuit breaker est indépendant du backend : il fonctionne que l'analyse soit locale (ONNX) ou distante (broker).

## 🎯 Contexte La spec prévoit une IA avec circuit breaker et niveaux de dégradation. Aucun mécanisme de dégradation n'existe : le pipeline ne sait pas réagir quand l'analyse IA ralentit, tombe, ou quand la file de jobs est saturée. L'architecture IA retenue (tickets #72-77) : inférence ONNX Runtime **sur les agents** (GPU ou CPU), mutualisée inter-sites via un **broker de jobs** (RabbitMQ + MassTransit). Le circuit breaker doit donc être **générique** : il surveille l'exécutant (local ou distant) et le broker, pas un service central. ## 📚 Référence spec / décision d'architecture **3.5 Pipeline Degradation (Circuit Breaker IA)** — niveaux conservés, re-câblés sur l'architecture broker : | Niveau | État | Action | |---|---|---| | 0 | Normal | Pipeline complet : agent capteur → analyse IA (locale ou via broker) | | 1 | Exécutant IA lent (>1s) | Agent only (YOLOv8 nano, confidence baissée à 0.3) | | 2 | Exécutant IA down / broker injoignable | Agent only + détection de mouvement seulement | | 3 | Agent CPU >80% | Snapshots réduits de moitié, alert admin | | 4 | Queue overflow | Drop oldest snapshots, alert admin | **3.6 Gestion des erreurs IA** : timeout 5s → retry 1× 100ms puis degrade 1 + health check 30s ; broker/exécutant down → degrade 2 + health check 10s ; prédiction vide → log, pas d'événement ; worker désactivé → skip + log. ## 🔍 État actuel (vérifié dans le code) `CameraEventService.CreateAsync` crée les événements tels quels — aucun degradation tracker, aucun circuit breaker, aucune gestion de dégradation broker/exécutant. Le pipeline agent (SnapshotPipelineService) continue de pousser sans backpressure réseau. ## 🧩 À faire - [ ] `AIPipelineDegradationTracker` (niveaux 0-4) : état partagé central + local agent - [ ] Détection des états : exécutant IA lent (latence observée >1s), broker injoignable (AMQP down), file saturée (queue depth), CPU agent >80% - [ ] Actions de dégradation : bascule agent-only (confidence 0.3), motion-only, réduction snapshots /2, drop oldest + alert admin - [ ] Health check exécutant/broker : 30s en degrade 1, 10s en degrade 2 ; retour niveau 0 dès rétablissement - [ ] Timeout + retry (5s → 1× 100ms) sur les appels d'analyse (locale et broker) - [ ] Exposer `degradationLevel` dans `/health/live` (503 si level ≥ 2) - [ ] Tests : scénarios de dégradation (broker down, exécutant lent, file pleine), retour à la normale ## 🧪 Critères d'acceptation - [ ] Niveau 0 → 2 atteint automatiquement quand le broker/l'exécutant tombe - [ ] Le pipeline continue en motion-only sans crash - [ ] Retour niveau 0 dès rétablissement (health check) - [ ] `degradationLevel` exposé dans /health/live - [ ] `make test` vert ## 📁 Fichiers concernés src/Heimdall.Infrastructure/Services/AIPipelineDegradationTracker.cs (nouveau), src/Heimdall.Agent/Services/SnapshotPipelineService.cs, src/Heimdall.Web/Controllers/HealthController.cs, src/Heimdall.Application/Services/, ## 📝 Notes Lié aux tickets #72-77 (broker + mutualisation GPU), #2 (inférence réelle), #13 (health checks). Le circuit breaker est indépendant du backend : il fonctionne que l'analyse soit locale (ONNX) ou distante (broker).
nonobis changed title from FEAT: Intégration CodeProject.AI au Central + pipeline degradation to FEAT: Pipeline degradation / circuit breaker IA — dégradation générique (exécutant ONNX / broker) 2026-08-12 09:56:25 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
nonobis/Heimdall#4
No description provided.