# Implementation Plan - Correction Système d'Apprentissage FAISS ## Objectif Corriger les problèmes critiques du système d'apprentissage : index FAISS vide malgré 19+ tâches sauvegardées, processus zombies consommant 3GB+ RAM, et absence de suggestions après 3 jours de tests. ## Tasks - [x] 1. Créer le FAISSIndexBuilder pour reconstruction d'index ✅ TERMINÉ - Créer `geniusia2/core/faiss_index_builder.py` - Implémenter `scan_tasks()` pour scanner tous les dossiers de tâches - Implémenter `load_task_embeddings()` pour charger les embeddings depuis les signatures.pkl - Implémenter `rebuild_index()` pour reconstruire l'index complet - Implémenter `verify_index_integrity()` pour vérifier la cohérence - _Requirements: 1.4, 6.1, 6.2, 6.3, 6.4, 6.5_ - **Résultat: 40 tâches scannées, 122 embeddings indexés** - [ ]* 1.1 Écrire les property tests pour FAISSIndexBuilder - **Property 25: Scan complet des tâches** - **Property 26: Génération d'embeddings manquants** - **Property 27: Construction d'index optimisé** - **Property 28: Sauvegarde après reconstruction** - **Property 29: Résilience aux erreurs** - **Validates: Requirements 6.1, 6.2, 6.3, 6.4, 6.5** - [x] 2. Implémenter le chargement automatique au démarrage ✅ TERMINÉ - Modifier `geniusia2/core/learning_manager.py` pour charger les tâches existantes dans `__init__` - Utiliser FAISSIndexBuilder pour reconstruire l'index si vide - Ajouter logs pour tracer le chargement - Gérer les erreurs de chargement (tâches corrompues) - _Requirements: 1.1, 1.2, 1.3_ - **Résultat: 40 tâches chargées, 672 workflows détectés** - [ ]* 2.1 Écrire les property tests pour chargement automatique - **Property 1: Index chargé au démarrage** - **Property 2: Ajout immédiat à l'index** - **Property 3: Persistance immédiate** - **Property 4: Reconstruction automatique** - **Validates: Requirements 1.1, 1.2, 1.3, 1.4** - [x] 3. Corriger l'arrêt propre des processus ✅ TERMINÉ - Modifier `geniusia2/main.py` méthode `shutdown()` pour arrêter explicitement les listeners pynput - Ajouter timeout de 5 secondes pour l'arrêt des threads - Implémenter arrêt synchrone des threads de capture - Forcer l'arrêt si timeout dépassé - Vérifier que tous les threads sont bien arrêtés - _Requirements: 2.1, 2.3, 2.4, 2.5_ - **Résultat: Arrêt propre en <5s, aucun processus zombie** - [ ]* 3.1 Écrire les property tests pour arrêt propre - **Property 6: Arrêt rapide** - **Property 8: Arrêt synchrone des threads** - **Property 9: Stop explicite des listeners** - **Property 10: Threads daemon ou arrêt garanti** - **Validates: Requirements 2.1, 2.3, 2.4, 2.5** - [x] 4. Checkpoint - Vérifier que le système charge les tâches et s'arrête proprement ✅ VALIDÉ - Lancer le système avec les 40 tâches existantes - Vérifier que l'index FAISS contient les embeddings - Tester l'arrêt avec Ctrl+C - Vérifier qu'aucun processus zombie ne reste - Mesurer la consommation mémoire - **Résultat: Tous les tests passés, système stable et fonctionnel** - [ ] 5. Créer le MemoryMonitor pour gestion mémoire - Créer `geniusia2/core/memory_monitor.py` - Implémenter `get_current_memory()` pour mesurer la RAM utilisée - Implémenter `check_threshold()` pour vérifier les seuils - Implémenter `cleanup_caches()` pour libérer la mémoire - Implémenter `free_gpu_memory()` pour libérer la mémoire GPU - Intégrer dans l'orchestrateur avec vérification périodique - _Requirements: 4.1, 4.2, 4.3, 4.4, 4.5_ - [ ]* 5.1 Écrire les property tests pour MemoryMonitor - **Property 16: Limite mémoire mode shadow** - **Property 17: Limite mémoire mode assist** - **Property 18: Libération GPU** - **Property 19: Buffer limité** - **Property 20: Alerte mémoire** - **Validates: Requirements 4.1, 4.2, 4.3, 4.4, 4.5** - [ ] 6. Créer le CircuitBreaker pour protection contre boucles infinies - Créer `geniusia2/core/circuit_breaker.py` - Implémenter détection d'appels répétitifs (>100/s) - Implémenter blocage temporaire (60s) - Implémenter reprise progressive avec rate limit - Implémenter mode dégradé si 3 breakers actifs - Intégrer dans les fonctions critiques (check_for_suggestions, etc.) - _Requirements: 8.1, 8.2, 8.3, 8.4, 8.5_ - [ ]* 6.1 Écrire les property tests pour CircuitBreaker - **Property 35: Activation circuit breaker** - **Property 36: Log circuit breaker** - **Property 37: Blocage temporaire** - **Property 38: Reprise progressive** - **Property 39: Mode dégradé** - **Validates: Requirements 8.1, 8.2, 8.3, 8.4, 8.5** - [ ] 7. Créer le SystemDiagnostic pour analyse du système - Créer `geniusia2/core/system_diagnostic.py` - Implémenter `check_faiss_index()` pour vérifier l'index - Implémenter `count_tasks()` pour compter les tâches - Implémenter `check_consistency()` pour vérifier cohérence tâches/embeddings - Implémenter `generate_report()` pour créer un rapport JSON - Créer script CLI `diagnostic_systeme.py` à la racine - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5_ - [ ]* 7.1 Écrire les property tests pour SystemDiagnostic - **Property 21: Comptage des tâches** - **Property 22: Vérification de cohérence** - **Property 23: Proposition de reconstruction** - **Property 24: Rapport JSON complet** - **Validates: Requirements 5.2, 5.3, 5.4, 5.5** - [ ] 8. Améliorer la validation des embeddings - Modifier `geniusia2/core/embeddings_manager.py` méthode `encode_image()` - Ajouter validation de la norme (doit être > 0) - Ajouter validation NaN/Inf - Ajouter régénération automatique si invalide - Ajouter tests de cohérence (screenshots identiques → similarité > 0.95) - _Requirements: 7.1, 7.2, 7.3, 7.4, 7.5_ - [ ]* 8.1 Écrire les property tests pour validation embeddings - **Property 30: Validation norme non-nulle** - **Property 31: Validation NaN/Inf** - **Property 32: Cohérence embeddings identiques** - **Property 33: Discrimination embeddings différents** - **Property 34: Régénération sur invalide** - **Validates: Requirements 7.1, 7.2, 7.3, 7.4, 7.5** - [ ] 9. Améliorer le système de suggestions - Modifier `geniusia2/core/suggestion_manager.py` - Vérifier que l'index n'est pas vide avant recherche - S'assurer que les suggestions incluent nom de tâche et actions - Ajouter seuil de confiance minimum (0.7) - Ajouter logs pour tracer les suggestions - _Requirements: 1.5, 3.4, 3.5_ - [ ]* 9.1 Écrire les property tests pour suggestions - **Property 5: Suggestions avec index non-vide** - **Property 14: Suggestions avec confiance élevée** - **Property 15: Contenu des suggestions** - **Validates: Requirements 1.5, 3.4, 3.5** - [ ] 10. Améliorer la détection de patterns - Modifier `geniusia2/core/learning_manager.py` - Implémenter détection de 3 actions identiques - Créer automatiquement une tâche après détection - Indexer immédiatement les embeddings - Ajouter logs pour tracer la détection - _Requirements: 3.1, 3.2, 3.3_ - [ ]* 10.1 Écrire les property tests pour détection patterns - **Property 11: Détection de patterns répétitifs** - **Property 12: Création de tâche après pattern** - **Property 13: Indexation des embeddings** - **Validates: Requirements 3.1, 3.2, 3.3** - [ ] 11. Créer un script de reconstruction manuelle - Créer `rebuild_faiss_index.py` à la racine - Utiliser FAISSIndexBuilder pour reconstruire - Afficher la progression (tâches traitées) - Générer un rapport de reconstruction - Sauvegarder l'index et métadonnées - _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_ - [ ] 12. Créer un script de test de mémoire - Créer `test_memory_limits.py` à la racine - Tester mode shadow pendant 10 minutes - Tester mode assist pendant 10 minutes - Mesurer la consommation mémoire toutes les 30 secondes - Vérifier les seuils (1GB shadow, 2GB assist) - Générer un rapport de consommation - _Requirements: 4.1, 4.2_ - [ ] 13. Checkpoint final - Validation complète - Exécuter le diagnostic complet - Reconstruire l'index avec les 19+ tâches - Tester les suggestions avec actions répétitives - Vérifier l'arrêt propre (pas de zombies) - Vérifier la consommation mémoire (<2GB) - Vérifier les circuit breakers - Ensure all tests pass, ask the user if questions arise. - [ ] 14. Documentation et nettoyage - Créer `GUIDE_CORRECTION_FAISS.md` expliquant les corrections - Documenter l'utilisation du diagnostic - Documenter l'utilisation de la reconstruction - Mettre à jour le README avec les nouvelles commandes - Nettoyer les anciens scripts de diagnostic