FEAT: Capacités IA/GPU déclarées par l'agent — heartbeat étendu + entité + UI Admin #73

Closed
opened 2026-08-12 09:46:39 +02:00 by nonobis · 1 comment
Owner

🎯 Contexte

Le central doit savoir qui peut exécuter quoi pour router les jobs d'analyse (cf. broker). Aujourd'hui le heartbeat transporte les métriques live (CPU %, RAM, disque, uptime — migration AddAgentLiveMetrics) mais aucune capacité IA/GPU : impossible de savoir quel agent a un GPU, lequel a chargé le modèle YOLO, et quelle est sa charge.

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

Agent entity : CpuUsagePercent, MemoryUsageBytes, DiskUsagePercent, UptimeSeconds, IsOffline (migration AddAgentLiveMetrics). Heartbeat POST /api/agents/{id}/heartbeat. Pas de champ GPU. Pas de détection matérielle côté agent.

🧩 À faire

  • Détection matérielle GPU côté agent : NVIDIA (nvidia-smi), AMD ROCm (/dev/kfd + /dev/dri), Intel/iGPU VAAPI (/dev/dri, vainfo), fallback CPU
  • Extension du payload heartbeat + mapping entité Agent (migration EF AddAgentGpuCapabilities)
  • Mise à jour du handler heartbeat (validation + persistance des capacités)
  • UI Admin : section « Capacité IA » sur la page détail agent + badge sur la carte agent (AllAgents/Dashboard)
  • Tests unitaires (mapping, détection mockée)

🧪 Critères d'acceptation

  • Un agent sur machine NVIDIA déclare GpuVendor=Nvidia + VRAM + modèle chargé dans l'UI
  • Un agent CPU seul déclare HasGpu=false / InferenceBackend=Cpu
  • La charge GPU (CurrentJobs, GpuUtilizationPercent) est à jour à chaque heartbeat
  • make test vert

📁 Fichiers concernés

src/Heimdall.Agent/Services/SystemMetricsProvider.cs, src/Heimdall.Agent/Services/AgentRegistrationService.cs, src/Heimdall.Domain/Entities/Agent.cs, src/Heimdall.Infrastructure/Data/Migrations/, src/Heimdall.Web/Pages/Agents/AgentDetail.razor, src/Heimdall.Web/Pages/AllAgents.razor, tests/Heimdall.Agent.Tests/, tests/Heimdall.Web.Tests/

⚠️ Impact

Migration EF + évolution du contrat heartbeat — rétrocompatible (champs optionnels).

📝 Notes

Prérequis de l'ordonnanceur et du choix du worker de destination. La détection GPU réutilisera la logique du ticket docker GPU.



Maquette

Maquette

Description

Onglet « Capacités IA / GPU » dans la fiche agent : bloc Accélération GPU (présence GPU, modèle, VRAM, driver, CUDA, température, utilisation), bloc Backends d'inférence (C


Maquette

Maquette

## 🎯 Contexte Le central doit savoir **qui peut exécuter quoi** pour router les jobs d'analyse (cf. broker). Aujourd'hui le heartbeat transporte les métriques live (CPU %, RAM, disque, uptime — migration `AddAgentLiveMetrics`) mais **aucune capacité IA/GPU** : impossible de savoir quel agent a un GPU, lequel a chargé le modèle YOLO, et quelle est sa charge. ## 🔍 État actuel (vérifié dans le code) `Agent` entity : CpuUsagePercent, MemoryUsageBytes, DiskUsagePercent, UptimeSeconds, IsOffline (migration AddAgentLiveMetrics). Heartbeat POST `/api/agents/{id}/heartbeat`. Pas de champ GPU. Pas de détection matérielle côté agent. ## 🧩 À faire - [ ] Détection matérielle GPU côté agent : NVIDIA (`nvidia-smi`), AMD ROCm (`/dev/kfd` + `/dev/dri`), Intel/iGPU VAAPI (`/dev/dri`, vainfo), fallback CPU - [ ] Extension du payload heartbeat + mapping entité `Agent` (migration EF `AddAgentGpuCapabilities`) - [ ] Mise à jour du handler heartbeat (validation + persistance des capacités) - [ ] UI Admin : section « Capacité IA » sur la page détail agent + badge sur la carte agent (AllAgents/Dashboard) - [ ] Tests unitaires (mapping, détection mockée) ## 🧪 Critères d'acceptation - [ ] Un agent sur machine NVIDIA déclare `GpuVendor=Nvidia` + VRAM + modèle chargé dans l'UI - [ ] Un agent CPU seul déclare `HasGpu=false` / `InferenceBackend=Cpu` - [ ] La charge GPU (CurrentJobs, GpuUtilizationPercent) est à jour à chaque heartbeat - [ ] `make test` vert ## 📁 Fichiers concernés src/Heimdall.Agent/Services/SystemMetricsProvider.cs, src/Heimdall.Agent/Services/AgentRegistrationService.cs, src/Heimdall.Domain/Entities/Agent.cs, src/Heimdall.Infrastructure/Data/Migrations/, src/Heimdall.Web/Pages/Agents/AgentDetail.razor, src/Heimdall.Web/Pages/AllAgents.razor, tests/Heimdall.Agent.Tests/, tests/Heimdall.Web.Tests/ ## ⚠️ Impact Migration EF + évolution du contrat heartbeat — rétrocompatible (champs optionnels). ## 📝 Notes Prérequis de l'ordonnanceur et du choix du worker de destination. La détection GPU réutilisera la logique du ticket docker GPU. --- --- ## Maquette - **Lien Penpot** : [nonobis-design-system › page agents](https://penpot.tordais.cc/?page=127dfd1c-12b5-80f7-8008-79c6fdaf09f4) ![Maquette](https://forgejo.tordais.cc/attachments/10494bbe-4141-455b-87b9-b3fc57bc8a91) - [Détails / composants MudBlazor (README)](https://forgejo.tordais.cc/attachments/4c5f3826-3431-4041-b65b-964e9c248558) - Statut : maquette appliquée dans Penpot ✓ ## Description Onglet « Capacités IA / GPU » dans la fiche agent : bloc Accélération GPU (présence GPU, modèle, VRAM, driver, CUDA, température, utilisation), bloc Backends d'inférence (C --- ## Maquette - **Lien Penpot** : [nonobis-design-system › page agents](https://penpot.tordais.cc/?page=127dfd1c-12b5-80f7-8008-79c6fdaf09f4) ![Maquette](https://forgejo.tordais.cc/attachments/10494bbe-4141-455b-87b9-b3fc57bc8a91) - [Détails / composants MudBlazor (README)](https://forgejo.tordais.cc/attachments/4c5f3826-3431-4041-b65b-964e9c248558) - Statut : maquette appliquée dans Penpot ✓
Author
Owner

Maquette the-designer intégrée (14/08/2026) :

Maquette the-designer intégrée (14/08/2026) : - Aperçu (PNG) : https://forgejo.tordais.cc/attachments/10494bbe-4141-455b-87b9-b3fc57bc8a91 - Détails / composants MudBlazor (README) : https://forgejo.tordais.cc/attachments/4c5f3826-3431-4041-b65b-964e9c248558 - Statut : application Penpot différée (plugin MCP non connecté) — maquette locale consultable
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#73
No description provided.