# Correction: AttributeError '_on_suggestion_created' ## Problème Identifié L'erreur suivante se produisait au démarrage: ``` AttributeError: 'Orchestrator' object has no attribute '_on_suggestion_created' ``` ## Cause Racine Les méthodes de callback (`_on_suggestion_created`, `_on_suggestion_accepted`, `_on_suggestion_rejected`, `_on_suggestion_timeout`) étaient définies **APRÈS** le bloc `if __name__ == "__main__":` dans le fichier `orchestrator.py`. Cela signifie qu'elles n'étaient **pas** des méthodes de la classe `Orchestrator`, mais des fonctions définies au niveau du module, en dehors de la classe. ### Structure Problématique ```python class Orchestrator: def __init__(self): # Ligne 196: Tentative d'assigner self._on_suggestion_created self.suggestion_manager.on_suggestion_created = self._on_suggestion_created # ❌ ERREUR: _on_suggestion_created n'existe pas dans la classe def _stay_in_shadow_mode(self): # Dernière méthode de la classe (ligne 1571) pass # Ligne 1574: Fin de la classe if __name__ == "__main__": # Tests... pass # Ligne 1665+: Méthodes définies EN DEHORS de la classe ❌ def _on_suggestion_created(self, suggestion): pass ``` ## Solution Appliquée 1. **Déplacement des méthodes**: Toutes les méthodes de callback ont été déplacées **avant** le bloc `if __name__ == "__main__"`, à l'intérieur de la classe `Orchestrator`. 2. **Suppression des duplicatas**: Les méthodes dupliquées après le bloc de test ont été supprimées. 3. **Vérification**: La structure AST a été vérifiée pour confirmer que toutes les méthodes sont maintenant dans la classe. ### Structure Corrigée ```python class Orchestrator: def __init__(self): # Ligne 196: Assigne correctement les callbacks self.suggestion_manager.on_suggestion_created = self._on_suggestion_created # ✅ OK: _on_suggestion_created existe dans la classe def _stay_in_shadow_mode(self): pass # Nouvelles méthodes ajoutées ici ✅ def _capture_context_for_suggestion(self): pass def _on_suggestion_created(self, suggestion): pass def _on_suggestion_accepted(self, suggestion): pass def _on_suggestion_rejected(self, suggestion): pass def _on_suggestion_timeout(self, suggestion): pass # ... autres méthodes ... # Ligne 2154: Fin de la classe if __name__ == "__main__": # Tests... pass ``` ## Vérification ```bash ✅ Classe Orchestrator: Début: ligne 44 Fin: ligne 2154 Nombre total de méthodes: 47 ✅ Vérification des méthodes de callback: ✓ _on_suggestion_created - PRÉSENTE ✓ _on_suggestion_accepted - PRÉSENTE ✓ _on_suggestion_rejected - PRÉSENTE ✓ _on_suggestion_timeout - PRÉSENTE ✅ Pas d'erreur de syntaxe ``` ## Fichiers Modifiés - `geniusia2/core/orchestrator.py`: Réorganisation des méthodes de classe ## Test Pour tester la correction: ```bash cd geniusia2 ./run.sh ``` L'application devrait maintenant démarrer sans l'erreur `AttributeError`. ## Méthodes Ajoutées/Déplacées Les méthodes suivantes ont été déplacées dans la classe Orchestrator: 1. `_capture_context_for_suggestion()` - Capture le contexte pour les suggestions 2. `_on_suggestion_created()` - Callback création de suggestion 3. `_on_suggestion_accepted()` - Callback acceptation de suggestion 4. `_on_suggestion_rejected()` - Callback rejet de suggestion 5. `_on_suggestion_timeout()` - Callback timeout de suggestion 6. `_execute_suggestion()` - Exécution d'une suggestion 7. `check_for_suggestions()` - Vérification périodique des suggestions 8. `_check_workflow_match()` - Vérification de correspondance workflow 9. `find_matching_workflows_enhanced()` - Matching amélioré avec UI Element Detection 10. `accept_current_suggestion()` - Acceptation via GUI 11. `reject_current_suggestion()` - Rejet via GUI 12. `_index_workflow_in_faiss()` - Indexation FAISS 13. `_add_positive_example_for_finetuning()` - Fine-tuning positif 14. `_add_negative_example_for_finetuning()` - Fine-tuning négatif 15. `_save_embedding_system_on_shutdown()` - Sauvegarde à l'arrêt Total: **15 méthodes** correctement intégrées à la classe. --- **Date**: 2025-11-21 **Statut**: ✅ Corrigé et vérifié