Files
Geniusia_v2/docs/archive/old-summaries/GUIDE_INTEGRATION_GUI.md
2026-03-05 00:20:25 +01:00

370 lines
9.0 KiB
Markdown

# Guide d'Intégration de la GUI Améliorée
## 🎯 Objectif
Ce guide explique comment intégrer la nouvelle GUI améliorée dans votre application GeniusIA v2.
## ✅ Composants Disponibles
### Composants Principaux
- **ImprovedGUI** : Interface principale avec LogsPanel et statistiques
- **HumanLogger** : Générateur de messages lisibles
- **GUISignals** : Système de signaux Qt pour communication
- **InteractiveDialog** : Dialogues avec timeout
- **OrchestratorGUIBridge** : Pont Orchestrator ↔ GUI
### Modèles de Données
- **GUIState** : État de la GUI
- **LogMessage** : Messages de log
## 🚀 Méthode 1 : Intégration Automatique (Recommandée)
### Utilisation Simple
```python
from PyQt5.QtWidgets import QApplication
from geniusia2.core import Orchestrator
from geniusia2.gui import setup_gui_for_orchestrator
# Créer l'application Qt
app = QApplication(sys.argv)
# Créer l'Orchestrator
orchestrator = Orchestrator()
# Configurer la GUI automatiquement
bridge = setup_gui_for_orchestrator(orchestrator)
bridge.show()
# Maintenant l'orchestrator peut logger vers la GUI
orchestrator.log_to_gui("👀", "Système démarré", "success")
orchestrator.update_gui_stats(actions_count=0, patterns_count=0)
# Lancer l'application
sys.exit(app.exec_())
```
### Avantages
- ✅ Configuration automatique
- ✅ Connexion bidirectionnelle Orchestrator ↔ GUI
- ✅ Méthodes helper ajoutées à l'Orchestrator
- ✅ Gestion des signaux automatique
## 🔧 Méthode 2 : Intégration Manuelle
### Étape 1 : Créer la GUI
```python
from PyQt5.QtWidgets import QApplication
from geniusia2.gui import ImprovedGUI
app = QApplication(sys.argv)
gui = ImprovedGUI(orchestrator)
gui.show()
```
### Étape 2 : Connecter les Signaux
```python
from geniusia2.gui import add_gui_logging_to_orchestrator
# Ajouter le logging GUI à l'orchestrator
add_gui_logging_to_orchestrator(orchestrator, gui.signals)
# Connecter les boutons de contrôle
gui.start_requested.connect(orchestrator.start)
gui.stop_requested.connect(orchestrator.stop)
gui.pause_requested.connect(orchestrator.pause)
```
### Étape 3 : Utiliser dans l'Orchestrator
```python
class Orchestrator:
def on_action_observed(self, action):
# Logger vers la GUI
self.log_to_gui("👀", f"Action dans {action.window}", "info")
# Mettre à jour les stats
self.update_gui_stats(
actions_count=self.actions_count,
patterns_count=self.patterns_count,
workflows_count=self.workflows_count
)
def on_pattern_detected(self, pattern):
self.log_to_gui("🎯", "Pattern détecté !", "success")
def on_mode_change(self, new_mode):
self.change_mode_gui(new_mode)
self.log_to_gui("", f"Mode {new_mode} activé", "success")
```
## 📝 Méthodes Disponibles dans l'Orchestrator
Après l'intégration, ces méthodes sont disponibles :
### log_to_gui(emoji, message, level)
```python
# Envoyer un log à la GUI
orchestrator.log_to_gui("👀", "Message", "info")
orchestrator.log_to_gui("", "Succès", "success")
orchestrator.log_to_gui("⚠️", "Attention", "warning")
orchestrator.log_to_gui("", "Erreur", "error")
```
### update_gui_stats(**stats)
```python
# Mettre à jour les statistiques
orchestrator.update_gui_stats(
actions_count=12,
patterns_count=2,
workflows_count=1,
finetuning_status='collecting',
finetuning_progress=8
)
```
### change_mode_gui(mode)
```python
# Changer le mode affiché
orchestrator.change_mode_gui("shadow") # 👀 Observation
orchestrator.change_mode_gui("assist") # 💡 Suggestions
orchestrator.change_mode_gui("copilot") # 🤝 Copilote
orchestrator.change_mode_gui("auto") # 🤖 Autonome
```
## 💬 Utiliser les Dialogues Interactifs
### Dialogue Simple
```python
from geniusia2.gui import InteractiveDialog
def on_accept():
print("Utilisateur a accepté")
orchestrator.change_mode("assist")
def on_reject():
print("Utilisateur a refusé")
# Afficher un dialogue
dialog = InteractiveDialog.show_dialog(
"J'ai une idée !",
"Voulez-vous que je vous suggère des actions ?",
on_accept,
on_reject,
timeout_seconds=10
)
```
### Dialogue via Signaux
```python
# Utiliser le signal show_dialog
orchestrator.gui_signals.emit_dialog(
"Confirmation",
"Voulez-vous continuer ?",
on_accept,
on_reject
)
```
## 📊 Exemples d'Utilisation
### Exemple 1 : Observer une Action
```python
def on_action_observed(self, action):
# Incrémenter le compteur
self.actions_count += 1
# Logger
message = self.human_logger.log_observation(
action.type,
action.window
)
self.log_to_gui("👀", message, "info")
# Mettre à jour les stats
self.update_gui_stats(actions_count=self.actions_count)
```
### Exemple 2 : Détecter un Pattern
```python
def on_pattern_detected(self, pattern):
# Incrémenter le compteur
self.patterns_count += 1
# Logger
message = self.human_logger.log_pattern_detected(
pattern.repetitions,
pattern.task_name
)
self.log_to_gui("🎯", message, "success")
# Mettre à jour les stats
self.update_gui_stats(
actions_count=self.actions_count,
patterns_count=self.patterns_count
)
# Demander confirmation pour changer de mode
def switch_to_assist():
self.change_mode("assist")
self.change_mode_gui("assist")
self.log_to_gui("", "Mode Suggestions activé", "success")
InteractiveDialog.show_dialog(
"Pattern détecté !",
f"J'ai remarqué que vous faites souvent:\n\"{pattern.task_name}\"\n\n"
"Voulez-vous que je vous suggère cette action ?",
switch_to_assist,
lambda: None,
timeout_seconds=10
)
```
### Exemple 3 : Fine-tuning
```python
def on_finetuning_start(self, num_examples):
message = self.human_logger.log_finetuning_started(num_examples)
self.log_to_gui("🧠", message, "info")
self.update_gui_stats(
finetuning_status='training',
finetuning_progress=None
)
def on_finetuning_complete(self, duration):
message = self.human_logger.log_finetuning_completed(duration)
self.log_to_gui("", message, "success")
self.update_gui_stats(
finetuning_status='completed',
finetuning_progress=None
)
```
### Exemple 4 : Gestion d'Erreurs
```python
def on_error(self, error_type, context=None):
message = self.human_logger.log_error(error_type, context)
self.log_to_gui("", message, "error")
```
## 🔄 Modifier main.py
### Avant (MinimalGUI)
```python
from geniusia2.gui import MinimalGUI
gui = MinimalGUI(orchestrator)
gui.show()
```
### Après (ImprovedGUI)
```python
from geniusia2.gui import setup_gui_for_orchestrator
bridge = setup_gui_for_orchestrator(orchestrator)
bridge.show()
```
## 🧪 Tester l'Intégration
### Test Simple
```python
# test_integration_gui.py
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QTimer
import sys
from geniusia2.core import Orchestrator
from geniusia2.gui import setup_gui_for_orchestrator
app = QApplication(sys.argv)
# Créer et configurer
orchestrator = Orchestrator()
bridge = setup_gui_for_orchestrator(orchestrator)
bridge.show()
# Tester après 1 seconde
def test():
orchestrator.log_to_gui("👀", "Test de log", "info")
orchestrator.update_gui_stats(actions_count=5)
orchestrator.change_mode_gui("assist")
QTimer.singleShot(1000, test)
sys.exit(app.exec_())
```
## 📋 Checklist d'Intégration
- [ ] Importer `setup_gui_for_orchestrator`
- [ ] Créer l'application Qt
- [ ] Configurer le bridge
- [ ] Afficher la GUI
- [ ] Tester `log_to_gui()`
- [ ] Tester `update_gui_stats()`
- [ ] Tester `change_mode_gui()`
- [ ] Tester les boutons de contrôle
- [ ] Tester le system tray
- [ ] Tester les dialogues interactifs
## 🐛 Dépannage
### La GUI ne s'affiche pas
```python
# Vérifier que l'application Qt est créée
app = QApplication(sys.argv)
# ... créer la GUI ...
sys.exit(app.exec_()) # Important !
```
### Les logs n'apparaissent pas
```python
# Vérifier que le bridge est configuré
bridge = setup_gui_for_orchestrator(orchestrator)
# Vérifier que la méthode existe
if hasattr(orchestrator, 'log_to_gui'):
orchestrator.log_to_gui("", "Test", "info")
```
### Les statistiques ne se mettent pas à jour
```python
# Utiliser un dictionnaire complet
orchestrator.update_gui_stats(
actions_count=0,
patterns_count=0,
workflows_count=0
)
```
## 📚 Ressources
- **test_improved_gui.py** : Exemple complet avec simulation
- **GUI_AMELIOREE_PRETE.md** : Guide détaillé de la GUI
- **RESUME_GUI_COMPLETE.md** : Résumé des fonctionnalités
## ✨ Conseils
1. **Utilisez HumanLogger** pour générer des messages lisibles
2. **Mettez à jour les stats régulièrement** pour une GUI réactive
3. **Utilisez les dialogues** pour les confirmations importantes
4. **Testez le system tray** sur Ubuntu
5. **Gérez les erreurs** avec des messages clairs
---
**Bonne intégration ! 🚀**