147 lines
4.6 KiB
Markdown
147 lines
4.6 KiB
Markdown
# ✅ Logs GUI Connectés
|
|
|
|
## 🎯 Problème Résolu
|
|
|
|
Les informations (actions observées, patterns, workflows) ne remontaient pas dans la GUI car l'orchestrateur n'appelait pas les méthodes de logging GUI.
|
|
|
|
## 🔧 Corrections Apportées
|
|
|
|
### 1. Correction de l'erreur `start_button`
|
|
|
|
**Fichier**: `geniusia2/gui/improved_gui.py`
|
|
|
|
Supprimé les références à `start_button` qui n'existe pas (l'application démarre automatiquement).
|
|
|
|
```python
|
|
# AVANT (causait une erreur)
|
|
self.start_button.setEnabled(False)
|
|
|
|
# APRÈS (corrigé)
|
|
# Pas de référence à start_button
|
|
```
|
|
|
|
### 2. Ajout des Logs dans l'Orchestrateur
|
|
|
|
**Fichier**: `geniusia2/core/orchestrator.py`
|
|
|
|
#### a) Log au démarrage
|
|
|
|
```python
|
|
def run(self):
|
|
# ...
|
|
# LOG GUI: Démarrage de l'observation
|
|
if hasattr(self, 'log_to_gui'):
|
|
self.log_to_gui("🚀", "Démarrage de l'observation...", "info")
|
|
self.log_to_gui("👀", "Observation active - En attente d'actions...", "success")
|
|
```
|
|
|
|
#### b) Mise à jour périodique des statistiques
|
|
|
|
```python
|
|
# Mettre à jour les stats GUI périodiquement (toutes les 10 itérations)
|
|
gui_update_counter += 1
|
|
if gui_update_counter >= 10 and hasattr(self, 'update_gui_stats'):
|
|
current_event_count = len(self.event_capture.events)
|
|
if current_event_count != last_event_count:
|
|
# Nouvelles actions détectées
|
|
workflows_count = len(self.learning_manager.get_all_tasks())
|
|
patterns_count = len(self.workflow_detector.detected_workflows) if hasattr(self.workflow_detector, 'detected_workflows') else 0
|
|
|
|
self.update_gui_stats(
|
|
actions_count=current_event_count,
|
|
patterns_count=patterns_count,
|
|
workflows_count=workflows_count
|
|
)
|
|
|
|
# Log seulement si de nouvelles actions
|
|
if current_event_count > last_event_count and hasattr(self, 'log_to_gui'):
|
|
new_actions = current_event_count - last_event_count
|
|
if new_actions > 0:
|
|
window = self.current_window or "Application"
|
|
self.log_to_gui("👀", f"{new_actions} action(s) observée(s) dans {window}", "info")
|
|
```
|
|
|
|
#### c) Log quand un pattern est détecté
|
|
|
|
```python
|
|
def _on_pattern_detected(self, pattern: Dict[str, Any]):
|
|
# ...
|
|
# LOG GUI: Pattern détecté
|
|
if hasattr(self, 'log_to_gui'):
|
|
self.log_to_gui("🎯", f"Pattern détecté ! ({pattern['repetitions']} répétitions)", "success")
|
|
```
|
|
|
|
#### d) Log quand une tâche est créée
|
|
|
|
```python
|
|
# LOG GUI: Tâche créée
|
|
if hasattr(self, 'log_to_gui'):
|
|
self.log_to_gui("📚", f"Tâche apprise : {task.task_name}", "info")
|
|
# Mettre à jour les stats (on compte les tâches comme workflows)
|
|
if hasattr(self, 'update_gui_stats'):
|
|
workflows_count = len(self.learning_manager.get_all_tasks())
|
|
self.update_gui_stats(workflows_count=workflows_count)
|
|
```
|
|
|
|
## 📊 Informations Affichées
|
|
|
|
La GUI affiche maintenant :
|
|
|
|
### Logs en Temps Réel
|
|
- 🚀 Démarrage de l'observation
|
|
- 👀 Actions observées (avec nom de la fenêtre)
|
|
- 🎯 Patterns détectés (avec nombre de répétitions)
|
|
- 📚 Tâches apprises (avec description)
|
|
|
|
### Statistiques
|
|
- **Actions** : Nombre d'actions utilisateur capturées
|
|
- **Patterns** : Nombre de patterns répétitifs détectés
|
|
- **Workflows** : Nombre de tâches apprises
|
|
|
|
## 🧪 Test
|
|
|
|
Pour tester :
|
|
|
|
```bash
|
|
./geniusia2/run.sh
|
|
```
|
|
|
|
Vous devriez voir :
|
|
1. ✅ L'application démarre sans erreur
|
|
2. ✅ La GUI s'affiche
|
|
3. ✅ Les logs apparaissent dans le panneau de logs :
|
|
- "🚀 Démarrage de l'observation..."
|
|
- "👀 Observation active - En attente d'actions..."
|
|
4. ✅ Quand vous effectuez des actions (clics, touches), elles sont comptées
|
|
5. ✅ Les statistiques se mettent à jour toutes les 10 itérations
|
|
6. ✅ Si vous répétez une action 3 fois, un pattern est détecté
|
|
|
|
## 🎯 Prochaines Étapes
|
|
|
|
Pour améliorer encore plus :
|
|
|
|
1. **Ajouter plus de logs** :
|
|
- Changements de mode
|
|
- Suggestions en mode assisté
|
|
- Erreurs détaillées
|
|
- Fine-tuning
|
|
|
|
2. **Optimiser la fréquence** :
|
|
- Actuellement : mise à jour toutes les 10 itérations
|
|
- Peut être ajusté selon les besoins
|
|
|
|
3. **Ajouter des filtres** :
|
|
- Filtrer les logs par niveau (info, success, warning, error)
|
|
- Filtrer par type d'événement
|
|
|
|
## 📝 Notes Techniques
|
|
|
|
- Tous les appels utilisent `hasattr()` pour vérifier que les méthodes existent
|
|
- Cela permet de garder la compatibilité avec le mode headless
|
|
- Les logs sont thread-safe grâce aux signaux Qt
|
|
- Les statistiques sont mises à jour de manière asynchrone
|
|
|
|
---
|
|
|
|
**La GUI est maintenant pleinement fonctionnelle et connectée ! 🎉**
|