4.3 KiB
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
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
-
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 classeOrchestrator. -
Suppression des duplicatas: Les méthodes dupliquées après le bloc de test ont été supprimées.
-
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
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
✅ 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:
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:
_capture_context_for_suggestion()- Capture le contexte pour les suggestions_on_suggestion_created()- Callback création de suggestion_on_suggestion_accepted()- Callback acceptation de suggestion_on_suggestion_rejected()- Callback rejet de suggestion_on_suggestion_timeout()- Callback timeout de suggestion_execute_suggestion()- Exécution d'une suggestioncheck_for_suggestions()- Vérification périodique des suggestions_check_workflow_match()- Vérification de correspondance workflowfind_matching_workflows_enhanced()- Matching amélioré avec UI Element Detectionaccept_current_suggestion()- Acceptation via GUIreject_current_suggestion()- Rejet via GUI_index_workflow_in_faiss()- Indexation FAISS_add_positive_example_for_finetuning()- Fine-tuning positif_add_negative_example_for_finetuning()- Fine-tuning négatif_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é