141 lines
4.3 KiB
Markdown
141 lines
4.3 KiB
Markdown
# 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é
|